]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4923 Move getProfileExportersForLanguage and getProfileImportersForLanguage...
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 17 Jan 2014 14:20:31 +0000 (15:20 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 17 Jan 2014 14:20:31 +0000 (15:20 +0100)
sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java
sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileImporter.java
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfilePluginExporter.java
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java
sonar-server/src/main/webapp/WEB-INF/app/views/profiles/_create_form.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/profiles/permalinks.html.erb
sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilePluginExporterTest.java
sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java

index 2470d6787d498e26baa0e1709057859230ad62c0..eeeb9b589d642db2315ce862c4a22ef922a4eec5 100644 (file)
@@ -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;
   }
 
index de5c0a37ccdf2faa342d995c6c15a535782fb38a..ad8dcf769ee900362c1e228bc1d935bd3a382a9c 100644 (file)
@@ -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;
   }
 
index c46849725e22ca5facd259cf4699f94d8fc0524c..bcc632ca8b518f7bd31c13a2171bd7bc3352cd51 100644 (file)
@@ -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<ProfileExporter> getProfileExportersForLanguage(String language) {
+    List<ProfileExporter> result = new ArrayList<ProfileExporter>();
+    for (ProfileExporter exporter : exporters) {
+      if (exporter.getSupportedLanguages() == null || exporter.getSupportedLanguages().length == 0 || ArrayUtils.contains(exporter.getSupportedLanguages(), language)) {
+        result.add(exporter);
+      }
+    }
+    return result;
+  }
+
+  public List<ProfileImporter> getProfileImportersForLanguage(String language) {
+    List<ProfileImporter> result = new ArrayList<ProfileImporter>();
+    for (ProfileImporter importer : importers) {
+      if (importer.getSupportedLanguages() == null || importer.getSupportedLanguages().length == 0 || ArrayUtils.contains(importer.getSupportedLanguages(), language)) {
+        result.add(importer);
+      }
+    }
+    return result;
+  }
+
 }
index 11b1ae31fcdf40b3fdbeb2ba8002788bfaa62393..def76196c9ac98a37d27f5262fd58390dfe0eb16 100644 (file)
@@ -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<ProfileExporter> getProfileExportersForLanguage(String language) {
+    return exporter.getProfileExportersForLanguage(language);
+  }
+
+  public List<ProfileImporter> getProfileImportersForLanguage(String language) {
+    return exporter.getProfileImportersForLanguage(language);
+  }
+
+
   // PROJECTS
 
   public QProfileProjectLookup.QProfileProjects projects(int profileId) {
index 64e74c385a8f53b95ae50142377d3bd878dcfb4a..7fec6919473b15a09a3faff319ef0d4c684a3a99 100644 (file)
@@ -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)
 %>
 <form id="create-profile-form" action="profiles/create" enctype="multipart/form-data" method="POST">
   <fieldset>
index dc677c5188500d73f86d65ef3a2527dd39e8938a..8f012953f59845c63e90245874cf244effcf6e93 100644 (file)
@@ -2,7 +2,7 @@
 <%= render :partial => 'profiles/tabs', :locals => {:selected_tab=>'Permalinks'} %>
 
 <div class="tabs-panel marginbottom10 ">
-       <% exporters = controller.java_facade.getProfileExportersForLanguage(@profile.language()) %>
+       <% exporters = Internal.quality_profiles.getProfileExportersForLanguage(@profile.language()) %>
        <br/>
        <table class="data without-header marginbottom10" id="permalinks-table">
          <tbody>
index e77a07632a966402291a846fff31c872188ac145..c2207ddf8f04ebdbd8954854235e4335617a4d57 100644 (file)
@@ -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);
+  }
+
 }
index bfd340c8e71f053a74e0fb5edd8515d961570531..6b9f53551d6d8047742993c84f1c0102389514e1 100644 (file)
@@ -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");