/**
* @return if empty, then any languages are supported.
*/
- public final String[] getSupportedLanguages() {
+ public String[] getSupportedLanguages() {
return supportedLanguages;
}
/**
* @return if empty, then any languages are supported.
*/
- public final String[] getSupportedLanguages() {
+ public String[] getSupportedLanguages() {
return supportedLanguages;
}
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;
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;
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;
+ }
+
}
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;
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) {
<%
- 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>
<%= 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>
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);
+ }
+
}
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");