]> source.dussan.org Git - sonarqube.git/commitdiff
Slightly better API for the filter extension point
authorDavid Gageot <david@gageot.net>
Thu, 24 May 2012 11:50:44 +0000 (13:50 +0200)
committerDavid Gageot <david@gageot.net>
Thu, 24 May 2012 11:55:53 +0000 (13:55 +0200)
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/MyFavouritesFilter.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/ProjectFilter.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/TreeMapFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/web/Criterion.java
sonar-plugin-api/src/test/java/org/sonar/api/web/CriterionTest.java
sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java

index ceb8b8ec1db2e60809e762dbd116610c4af5b192..df2fc4d9768ec7590d24691715ba5f04d072c4b2 100644 (file)
@@ -41,7 +41,7 @@ public class MyFavouritesFilter extends FilterTemplate {
     Filter filter = Filter.create();
     filter.setDisplayAs(Filter.LIST);
     filter.setFavouritesOnly(true);
-    filter.add(Criterion.create("qualifier", null, Criterion.EQ, "VW,SVW,TRK,BRC,DIR,PAC,FIL,CLA,UTS,LIB", false));
+    filter.add(Criterion.createForQualifier("VW", "SVW", "TRK", "BRC", "DIR", "PAC", "FIL", "CLA", "UTS", "LIB"));
     filter.add(FilterColumn.create("metric", "alert_status", FilterColumn.DESC, false));
     filter.add(FilterColumn.create("name", null, FilterColumn.ASC, false));
     filter.add(FilterColumn.create("metric", "ncloc", FilterColumn.DESC, false));
index 368805b21bba90455661c53342dcf4c82d1dc684..189d85d0ec20dc905ee049b87b69939100cf062a 100644 (file)
@@ -39,7 +39,7 @@ public class ProjectFilter extends FilterTemplate {
   public Filter createFilter() {
     Filter filter = Filter.create();
     filter.setDisplayAs(Filter.LIST);
-    filter.add(Criterion.create("qualifier", null, Criterion.EQ, "TRK", false));
+    filter.add(Criterion.createForQualifier("TRK"));
     filter.add(FilterColumn.create("metric", "alert_status", FilterColumn.DESC, false));
     filter.add(FilterColumn.create("name", null, FilterColumn.ASC, false));
     filter.add(FilterColumn.create("version", null, FilterColumn.DESC, false));
index 0227fb7146841cc5de9e718b28ef3e34fd1360c3..0d5cb7a863f6088a7b3dcf36d47baab6ed4474ce 100644 (file)
@@ -40,7 +40,7 @@ public class TreeMapFilter extends FilterTemplate {
   public Filter createFilter() {
     Filter filter = Filter.create();
     filter.setDisplayAs(Filter.TREEMAP);
-    filter.add(Criterion.create("qualifier", null, Criterion.EQ, "TRK", false));
+    filter.add(Criterion.createForQualifier("TRK"));
     filter.add(FilterColumn.create("name", null, FilterColumn.ASC, false));
     filter.add(FilterColumn.create("metric", "ncloc", FilterColumn.DESC, false));
     filter.add(FilterColumn.create("metric", "violations_density", FilterColumn.DESC, false));
index f43bc68c659381a540a0aaab33a59249b0fb5894..abd70585aab6d62ef5743c03079d21a55e4c5d86 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.api.web;
 
+import com.google.common.base.Joiner;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSortedSet;
 
@@ -60,9 +62,6 @@ public final class Criterion {
    *
    * <p>Valid values for the {@code operator} are {@value #EQ}, {@value #GT}, {@value #GTE}, {@value #LT} and {@value #LTE}</p>
    *
-   * <p>When the {@link Filter} is persisted, a validation is made on the {@code family} and the {@code key}.
-   * They should point to a valid criterion.</p>
-   *
    * @throws IllegalArgumentException if {@code operator} is not valid
    */
   public static Criterion create(String family, String key, String operator, Float value, boolean variation) {
@@ -74,15 +73,41 @@ public final class Criterion {
    *
    * <p>Valid values for the {@code operator} are {@value #EQ}, {@value #GT}, {@value #GTE}, {@value #LT} and {@value #LTE}</p>
    *
-   * <p>When the {@link Filter} is persisted, a validation is made on the {@code family} and the {@code key}.
-   * They should point to a valid criterion.</p>
-   *
    * @throws IllegalArgumentException if {@code operator} is not valid
    */
   public static Criterion create(String family, String key, String operator, String textValue, boolean variation) {
     return new Criterion(family, key, operator, null, textValue, variation);
   }
 
+  /**
+   * Creates a new {@link Criterion} on a metric, with a numerical value.
+   *
+   * <p>Valid values for the {@code operator} are {@value #EQ}, {@value #GT}, {@value #GTE}, {@value #LT} and {@value #LTE}</p>
+   *
+   * @throws IllegalArgumentException if {@code operator} is not valid
+   */
+  public static Criterion createForMetric(String key, String operator, Float value, boolean variation) {
+    return new Criterion("metric", key, operator, value, null, variation);
+  }
+
+  /**
+   * Creates a new {@link Criterion} on a metric, with a text value.
+   *
+   * <p>Valid values for the {@code operator} are {@value #EQ}, {@value #GT}, {@value #GTE}, {@value #LT} and {@value #LTE}</p>
+   *
+   * @throws IllegalArgumentException if {@code operator} is not valid
+   */
+  public static Criterion createForMetric(String key, String operator, String textValue, boolean variation) {
+    return new Criterion("metric", key, operator, null, textValue, variation);
+  }
+
+  /**
+   * Creates a new {@link Criterion} on a qualifier.
+   */
+  public static Criterion createForQualifier(Object... values) {
+    return new Criterion("qualifier", null, EQ, null, Joiner.on(',').join(values), false);
+  }
+
   /**
    * Get the the criterion's family.
    * 
index 0d08b992606f6c1cc9057fac083a1c60c71928a6..05097bca1ecdd9c5c6182f6c194fc8cfa58ea717 100644 (file)
@@ -29,11 +29,11 @@ public class CriterionTest {
 
   @Test
   public void should_accept_valid_operators() {
-    Criterion.create("", "", "<=", "", false);
-    Criterion.create("", "", "<", "", false);
-    Criterion.create("", "", "=", "", false);
-    Criterion.create("", "", ">", "", false);
-    Criterion.create("", "", ">=", "", false);
+    Criterion.createForMetric("", "<=", "", false);
+    Criterion.createForMetric("", "<", "", false);
+    Criterion.createForMetric("", "=", "", false);
+    Criterion.createForMetric("", ">", "", false);
+    Criterion.createForMetric("", ">=", "", false);
   }
 
   @Test
@@ -41,6 +41,6 @@ public class CriterionTest {
     exception.expect(IllegalArgumentException.class);
     exception.expectMessage("Valid operators are [<, <=, =, >, >=], not '<>'");
 
-    Criterion.create("", "", "<>", "", false);
+    Criterion.createForMetric("", "<>", "", false);
   }
 }
index e0ac7e02a9aa1b70d484120c81f68f51cf4850fa..e4debe6d2cbd2cc9f33c95aabadb78f11a806dd6 100644 (file)
@@ -114,8 +114,8 @@ public class RegisterNewFiltersTest {
     when(filterTemplate.createFilter()).thenReturn(Filter.create()
         .setFavouritesOnly(false)
         .setDisplayAs("list")
-        .add(Criterion.create("metric", "complexity", Criterion.LT, 12f, false))
-        .add(Criterion.create("metric", "LCOM4", Criterion.GTE, "5", true))
+        .add(Criterion.createForMetric("complexity", Criterion.LT, 12f, false))
+        .add(Criterion.createForMetric("LCOM4", Criterion.GTE, "5", true))
         .add(FilterColumn.create("metric", "distance", "ASC", false))
         .add(FilterColumn.create("metric", "instability", "DESC", true))
         );