From fe2d98c382b7a58f101e6d55e718563ff299c70e Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 17 Jan 2014 15:20:31 +0100 Subject: [PATCH] SONAR-4923 Move getProfileExportersForLanguage and getProfileImportersForLanguage to Java facade --- .../sonar/api/profiles/ProfileExporter.java | 2 +- .../sonar/api/profiles/ProfileImporter.java | 2 +- .../QProfilePluginExporter.java | 22 ++++++++++ .../server/qualityprofile/QProfiles.java | 11 +++++ .../app/views/profiles/_create_form.html.erb | 4 +- .../app/views/profiles/permalinks.html.erb | 2 +- .../QProfilePluginExporterTest.java | 42 +++++++++++++++++++ .../server/qualityprofile/QProfilesTest.java | 12 ++++++ 8 files changed, 92 insertions(+), 5 deletions(-) diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java index 2470d6787d4..eeeb9b589d6 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java @@ -81,7 +81,7 @@ public abstract class ProfileExporter implements BatchExtension, ServerExtension /** * @return if empty, then any languages are supported. */ - public final String[] getSupportedLanguages() { + public String[] getSupportedLanguages() { return supportedLanguages; } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileImporter.java b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileImporter.java index de5c0a37ccd..ad8dcf769ee 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileImporter.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileImporter.java @@ -68,7 +68,7 @@ public abstract class ProfileImporter implements ServerExtension { /** * @return if empty, then any languages are supported. */ - public final String[] getSupportedLanguages() { + public String[] getSupportedLanguages() { return supportedLanguages; } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfilePluginExporter.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfilePluginExporter.java index c46849725e2..bcc632ca8b5 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfilePluginExporter.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfilePluginExporter.java @@ -23,6 +23,7 @@ package org.sonar.server.qualityprofile; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.ibatis.session.SqlSession; import org.sonar.api.ServerComponent; @@ -45,6 +46,7 @@ import org.sonar.server.rule.RuleRegistry; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; +import java.util.ArrayList; import java.util.List; import static com.google.common.collect.Lists.newArrayList; @@ -164,4 +166,24 @@ public class QProfilePluginExporter implements ServerComponent { throw BadRequestException.of("No such exporter : " + exporterKey); } + public List getProfileExportersForLanguage(String language) { + List result = new ArrayList(); + for (ProfileExporter exporter : exporters) { + if (exporter.getSupportedLanguages() == null || exporter.getSupportedLanguages().length == 0 || ArrayUtils.contains(exporter.getSupportedLanguages(), language)) { + result.add(exporter); + } + } + return result; + } + + public List getProfileImportersForLanguage(String language) { + List result = new ArrayList(); + for (ProfileImporter importer : importers) { + if (importer.getSupportedLanguages() == null || importer.getSupportedLanguages().length == 0 || ArrayUtils.contains(importer.getSupportedLanguages(), language)) { + result.add(importer); + } + } + return result; + } + } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java index 11b1ae31fcd..def76196c9a 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java @@ -23,6 +23,8 @@ package org.sonar.server.qualityprofile; import com.google.common.base.Strings; import org.sonar.api.ServerComponent; import org.sonar.api.component.Component; +import org.sonar.api.profiles.ProfileExporter; +import org.sonar.api.profiles.ProfileImporter; import org.sonar.core.component.ComponentDto; import org.sonar.core.qualityprofile.db.ActiveRuleDao; import org.sonar.core.qualityprofile.db.ActiveRuleDto; @@ -167,6 +169,15 @@ public class QProfiles implements ServerComponent { return exporter.getProfileExporterMimeType(exporterKey); } + public List getProfileExportersForLanguage(String language) { + return exporter.getProfileExportersForLanguage(language); + } + + public List getProfileImportersForLanguage(String language) { + return exporter.getProfileImportersForLanguage(language); + } + + // PROJECTS public QProfileProjectLookup.QProfileProjects projects(int profileId) { diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/profiles/_create_form.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/profiles/_create_form.html.erb index 64e74c385a8..7fec6919473 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/profiles/_create_form.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/profiles/_create_form.html.erb @@ -1,6 +1,6 @@ <% - language=controller.java_facade.getLanguages().find { |l| l.getKey()==language_key } - importers=controller.java_facade.getProfileImportersForLanguage(language_key) + language = controller.java_facade.getLanguages().find { |l| l.getKey()==language_key } + importers = Internal.quality_profiles.getProfileImportersForLanguage(language_key) %>
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/profiles/permalinks.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/profiles/permalinks.html.erb index dc677c51885..8f012953f59 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/profiles/permalinks.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/profiles/permalinks.html.erb @@ -2,7 +2,7 @@ <%= render :partial => 'profiles/tabs', :locals => {:selected_tab=>'Permalinks'} %>
- <% exporters = controller.java_facade.getProfileExportersForLanguage(@profile.language()) %> + <% exporters = Internal.quality_profiles.getProfileExportersForLanguage(@profile.language()) %>
diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilePluginExporterTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilePluginExporterTest.java index e77a07632a9..c2207ddf8f0 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilePluginExporterTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilePluginExporterTest.java @@ -256,4 +256,46 @@ public class QProfilePluginExporterTest { assertThat(operations.getProfileExporterMimeType("pmd")).isEqualTo("mime"); } + @Test + public void get_profile_exporters_for_language() throws Exception { + // 2 exporters not declaring supported languages -> match all languages -> to be include in result + ProfileExporter exporterWithEmptySupportedLanguagesList = mock(ProfileExporter.class); + when(exporterWithEmptySupportedLanguagesList.getSupportedLanguages()).thenReturn(new String[]{}); + exporters.add(exporterWithEmptySupportedLanguagesList); + exporters.add(mock(ProfileExporter.class)); + + // 1 exporter supporting the java language -> to be include in result + ProfileExporter exporterSupportingJava = mock(ProfileExporter.class); + when(exporterSupportingJava.getSupportedLanguages()).thenReturn(new String[]{"java"}); + exporters.add(exporterSupportingJava); + + // 1 exporter supporting another language -> not to be include in result + ProfileExporter exporterSupportingAnotherLanguage = mock(ProfileExporter.class); + when(exporterSupportingAnotherLanguage.getSupportedLanguages()).thenReturn(new String[]{"js"}); + exporters.add(exporterSupportingAnotherLanguage); + + assertThat(operations.getProfileExportersForLanguage("java")).hasSize(3); + } + + @Test + public void get_profile_importers_for_language() throws Exception { + // 2 importers not declaring supported languages -> match all languages -> to be include in result + ProfileImporter importersWithEmptySupportedLanguagesList = mock(ProfileImporter.class); + when(importersWithEmptySupportedLanguagesList.getSupportedLanguages()).thenReturn(new String[]{}); + importers.add(importersWithEmptySupportedLanguagesList); + importers.add(mock(ProfileImporter.class)); + + // 1 importers supporting the java language -> to be include in result + ProfileImporter importerSupportingJava = mock(ProfileImporter.class); + when(importerSupportingJava.getSupportedLanguages()).thenReturn(new String[]{"java"}); + importers.add(importerSupportingJava); + + // 1 importers supporting another language -> not to be include in result + ProfileImporter importerSupportingAnotherLanguage = mock(ProfileImporter.class); + when(importerSupportingAnotherLanguage.getSupportedLanguages()).thenReturn(new String[]{"js"}); + importers.add(importerSupportingAnotherLanguage); + + assertThat(operations.getProfileImportersForLanguage("java")).hasSize(3); + } + } diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java index bfd340c8e71..6b9f53551d6 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java @@ -240,6 +240,18 @@ public class QProfilesTest { verify(exporter).getProfileExporterMimeType("pmd"); } + @Test + public void get_profile_exporters_for_language() throws Exception { + qProfiles.getProfileExportersForLanguage("java"); + verify(exporter).getProfileExportersForLanguage("java"); + } + + @Test + public void get_profile_importers_for_language() throws Exception { + qProfiles.getProfileImportersForLanguage("java"); + verify(exporter).getProfileImportersForLanguage("java"); + } + @Test public void projects() throws Exception { QualityProfileDto qualityProfile = new QualityProfileDto().setId(1).setName("My profile").setLanguage("java"); -- 2.39.5