From 96eb42978084b5e161a80f1236870d3f538678e2 Mon Sep 17 00:00:00 2001 From: Evgeny Mandrikov Date: Wed, 18 Jan 2012 16:23:16 +0400 Subject: [PATCH] SONAR-3179 Allow to declare resources which can be used for filters --- .../api/resources/ResourceDefinition.java | 16 ++++++++++++-- .../java/org/sonar/server/ui/JRubyFacade.java | 2 +- .../ui/ResourceDefinitionRepository.java | 21 ++++++++++++++++--- .../WEB-INF/app/views/filters/new.html.erb | 7 +++++++ .../ui/ResourceDefinitionRepositoryTest.java | 3 ++- 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 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 descriptionsByQualifier = Maps.newHashMap(); + private final Map descriptionsByQualifier; public ResourceDefinitionRepository(ResourceDefinition[] descriptions) { + ImmutableMap.Builder 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 getForFilter() { + return ImmutableList.copyOf(Collections2.filter(descriptionsByQualifier.values(), IS_AVAILABLE_FOR_FILTER)); + } + + private static final Predicate IS_AVAILABLE_FOR_FILTER = new Predicate() { + 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 { id="q-UTS"> + + <% for desc in controller.java_facade.getResourceDefinitionsForFilter() + qualifier = desc.getQualifier() %> + id="q-<%= qualifier -%>"> + + + <% end %> 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()); } -- 2.39.5