]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3754 Trying to remove duplication
authorDavid Gageot <david@gageot.net>
Fri, 21 Sep 2012 16:20:46 +0000 (18:20 +0200)
committerDavid Gageot <david@gageot.net>
Mon, 24 Sep 2012 06:58:01 +0000 (08:58 +0200)
sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinitions.java

index 6d7144a65e04c07dd2eb535994c4e43412ebe650..dfd1dfe5b5553a566ea5696bdad6f173bd10cff4 100644 (file)
@@ -40,8 +40,8 @@ import java.util.Map;
  */
 public final class PropertyDefinitions implements BatchComponent, ServerComponent {
 
-  private Map<String, PropertyDefinition> definitions = Maps.newHashMap();
-  private Map<String, String> categories = Maps.newHashMap();
+  private final Map<String, PropertyDefinition> definitions = Maps.newHashMap();
+  private final Map<String, String> categories = Maps.newHashMap();
 
   public PropertyDefinitions(Object... components) {
     if (components != null) {
@@ -99,14 +99,34 @@ public final class PropertyDefinitions implements BatchComponent, ServerComponen
     return definitions.values();
   }
 
-  /**
-   * since 3.3
-   */
-  public Map<String, Collection<PropertyDefinition>> getGlobalPropertiesByCategory() {
+  static enum PropertyDefinitionFilter {
+    GLOBAL {
+      @Override
+      boolean accept(PropertyDefinition propertyDefinition) {
+        return propertyDefinition.isGlobal();
+      }
+    },
+    PROJECT {
+      @Override
+      boolean accept(PropertyDefinition propertyDefinition) {
+        return propertyDefinition.isOnProject();
+      }
+    },
+    MODULE {
+      @Override
+      boolean accept(PropertyDefinition propertyDefinition) {
+        return propertyDefinition.isOnModule();
+      }
+    };
+
+    abstract boolean accept(PropertyDefinition propertyDefinition);
+  }
+
+  private Map<String, Collection<PropertyDefinition>> getPropertiesByCategory(PropertyDefinitionFilter filter) {
     Multimap<String, PropertyDefinition> byCategory = ArrayListMultimap.create();
 
     for (PropertyDefinition definition : getAll()) {
-      if (definition.isGlobal()) {
+      if (filter.accept(definition)) {
         byCategory.put(getCategory(definition.getKey()), definition);
       }
     }
@@ -117,31 +137,22 @@ public final class PropertyDefinitions implements BatchComponent, ServerComponen
   /**
    * since 3.3
    */
-  public Map<String, Collection<PropertyDefinition>> getProjectPropertiesByCategory() {
-    Multimap<String, PropertyDefinition> byCategory = ArrayListMultimap.create();
-
-    for (PropertyDefinition definition : getAll()) {
-      if (definition.isOnProject()) {
-        byCategory.put(getCategory(definition.getKey()), definition);
-      }
-    }
+  public Map<String, Collection<PropertyDefinition>> getGlobalPropertiesByCategory() {
+    return getPropertiesByCategory(PropertyDefinitionFilter.GLOBAL);
+  }
 
-    return byCategory.asMap();
+  /**
+   * since 3.3
+   */
+  public Map<String, Collection<PropertyDefinition>> getProjectPropertiesByCategory() {
+    return getPropertiesByCategory(PropertyDefinitionFilter.PROJECT);
   }
 
   /**
    * since 3.3
    */
   public Map<String, Collection<PropertyDefinition>> getModulePropertiesByCategory() {
-    Multimap<String, PropertyDefinition> byCategory = ArrayListMultimap.create();
-
-    for (PropertyDefinition definition : getAll()) {
-      if (definition.isOnModule()) {
-        byCategory.put(getCategory(definition.getKey()), definition);
-      }
-    }
-
-    return byCategory.asMap();
+    return getPropertiesByCategory(PropertyDefinitionFilter.MODULE);
   }
 
   public String getDefaultValue(String key) {