diff options
author | Evgeny Mandrikov <mandrikov@gmail.com> | 2012-01-18 16:23:16 +0400 |
---|---|---|
committer | Evgeny Mandrikov <mandrikov@gmail.com> | 2012-01-18 20:17:02 +0400 |
commit | 96eb42978084b5e161a80f1236870d3f538678e2 (patch) | |
tree | 8103f76fd102cdc75edf8d6da34bcb96b89bfbd6 | |
parent | edbcc8e2d226a96ace7a3a4d4dbc7deb795ee7b0 (diff) | |
download | sonarqube-96eb42978084b5e161a80f1236870d3f538678e2.tar.gz sonarqube-96eb42978084b5e161a80f1236870d3f538678e2.zip |
SONAR-3179 Allow to declare resources which can be used for filters
5 files changed, 42 insertions, 7 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceDefinition.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceDefinition.java index 97d4e2a8316..899ba0b6c84 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceDefinition.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceDefinition.java @@ -34,6 +34,7 @@ public final class ResourceDefinition implements ServerExtension { private String qualifier; private String name; private String iconPath; + private boolean availableForFilters = false; public Builder(String qualifier) { this.qualifier = qualifier; @@ -55,6 +56,11 @@ public final class ResourceDefinition implements ServerExtension { return this; } + public Builder availableForFilters() { + this.availableForFilters = true; + return this; + } + public ResourceDefinition build() { if (Strings.isNullOrEmpty(name)) { name = qualifier; @@ -62,7 +68,7 @@ public final class ResourceDefinition implements ServerExtension { if (Strings.isNullOrEmpty(iconPath)) { iconPath = "/images/q/" + qualifier + ".png"; } - return new ResourceDefinition(qualifier, name, iconPath); + return new ResourceDefinition(qualifier, name, iconPath, availableForFilters); } } @@ -75,11 +81,13 @@ public final class ResourceDefinition implements ServerExtension { private final String qualifier; private final String name; private final String iconPath; + private final boolean availableForFilters; - private ResourceDefinition(String qualifier, String name, String iconPath) { + private ResourceDefinition(String qualifier, String name, String iconPath, boolean availableForFilters) { this.qualifier = qualifier; this.name = name; this.iconPath = iconPath; + this.availableForFilters = availableForFilters; } public String getQualifier() { @@ -94,4 +102,8 @@ public final class ResourceDefinition implements ServerExtension { return iconPath; } + public boolean isAvailableForFilters() { + return availableForFilters; + } + } diff --git a/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java b/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java index 74b26ae27b1..29029b02d6b 100644 --- a/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java +++ b/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java @@ -73,7 +73,7 @@ public final class JRubyFacade { } public Collection<ResourceDefinition> getResourceDefinitionsForFilter() { - return getContainer().getComponentByType(ResourceDefinitionRepository.class).getAll(); + return getContainer().getComponentByType(ResourceDefinitionRepository.class).getForFilter(); } public ResourceDefinition getResourceDefinition(String qualifier) { diff --git a/sonar-server/src/main/java/org/sonar/server/ui/ResourceDefinitionRepository.java b/sonar-server/src/main/java/org/sonar/server/ui/ResourceDefinitionRepository.java index 46abf68ccbb..4ef8b9d62d0 100644 --- a/sonar-server/src/main/java/org/sonar/server/ui/ResourceDefinitionRepository.java +++ b/sonar-server/src/main/java/org/sonar/server/ui/ResourceDefinitionRepository.java @@ -19,7 +19,10 @@ */ package org.sonar.server.ui; -import com.google.common.collect.Maps; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import org.sonar.api.ServerComponent; import org.sonar.api.resources.ResourceDefinition; @@ -28,12 +31,14 @@ import java.util.Map; public class ResourceDefinitionRepository implements ServerComponent { - private final Map<String, ResourceDefinition> descriptionsByQualifier = Maps.newHashMap(); + private final Map<String, ResourceDefinition> descriptionsByQualifier; public ResourceDefinitionRepository(ResourceDefinition[] descriptions) { + ImmutableMap.Builder<String, ResourceDefinition> map = ImmutableMap.builder(); for (ResourceDefinition description : descriptions) { - descriptionsByQualifier.put(description.getQualifier(), description); + map.put(description.getQualifier(), description); } + descriptionsByQualifier = map.build(); } public ResourceDefinition get(String qualifier) { @@ -49,4 +54,14 @@ public class ResourceDefinitionRepository implements ServerComponent { return descriptionsByQualifier.values(); } + public Collection<ResourceDefinition> getForFilter() { + return ImmutableList.copyOf(Collections2.filter(descriptionsByQualifier.values(), IS_AVAILABLE_FOR_FILTER)); + } + + private static final Predicate<ResourceDefinition> IS_AVAILABLE_FOR_FILTER = new Predicate<ResourceDefinition>() { + public boolean apply(ResourceDefinition input) { + return input.isAvailableForFilters(); + } + }; + } diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/filters/new.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/filters/new.html.erb index 67139fca652..d4c9a75eab5 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/filters/new.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/filters/new.html.erb @@ -71,6 +71,13 @@ table#columns td { <input type="checkbox" name="qualifiers[]" value="UTS" <%= 'checked' if qualifiers.include?('UTS') -%> id="q-UTS"></input> <label for="q-UTS"><%= message('unit_tests') -%></label> <span class="spacer"> </span> + + <% for desc in controller.java_facade.getResourceDefinitionsForFilter() + qualifier = desc.getQualifier() %> + <input type="checkbox" name="qualifiers[]" value="<%= qualifier -%>" <%= 'checked' if qualifiers.include?(qualifier) -%> id="q-<%= qualifier -%>"></input> + <label for="q-<%= qualifier -%>"><%= message(desc.getName()) -%></label> + <span class="spacer"> </span> + <% end %> </td> </tr> <tr> diff --git a/sonar-server/src/test/java/org/sonar/server/ui/ResourceDefinitionRepositoryTest.java b/sonar-server/src/test/java/org/sonar/server/ui/ResourceDefinitionRepositoryTest.java index a182f96b2ae..d514fb15ede 100644 --- a/sonar-server/src/test/java/org/sonar/server/ui/ResourceDefinitionRepositoryTest.java +++ b/sonar-server/src/test/java/org/sonar/server/ui/ResourceDefinitionRepositoryTest.java @@ -30,9 +30,10 @@ public class ResourceDefinitionRepositoryTest { @Test public void test() { ResourceDefinition def1 = ResourceDefinition.builder("1").build(); - ResourceDefinition def2 = ResourceDefinition.builder("2").build(); + ResourceDefinition def2 = ResourceDefinition.builder("2").availableForFilters().build(); ResourceDefinitionRepository repository = new ResourceDefinitionRepository(new ResourceDefinition[] {def1, def2}); assertThat(repository.getAll(), hasItems(def1, def2)); + assertThat(repository.getForFilter(), hasItem(def2)); assertThat(repository.get("1"), is(def1)); assertThat(repository.get("unknown"), notNullValue()); } |