aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Mandrikov <mandrikov@gmail.com>2012-01-18 16:23:16 +0400
committerEvgeny Mandrikov <mandrikov@gmail.com>2012-01-18 20:17:02 +0400
commit96eb42978084b5e161a80f1236870d3f538678e2 (patch)
tree8103f76fd102cdc75edf8d6da34bcb96b89bfbd6
parentedbcc8e2d226a96ace7a3a4d4dbc7deb795ee7b0 (diff)
downloadsonarqube-96eb42978084b5e161a80f1236870d3f538678e2.tar.gz
sonarqube-96eb42978084b5e161a80f1236870d3f538678e2.zip
SONAR-3179 Allow to declare resources which can be used for filters
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceDefinition.java16
-rw-r--r--sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java2
-rw-r--r--sonar-server/src/main/java/org/sonar/server/ui/ResourceDefinitionRepository.java21
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/filters/new.html.erb7
-rw-r--r--sonar-server/src/test/java/org/sonar/server/ui/ResourceDefinitionRepositoryTest.java3
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());
}