aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java11
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/MyFavouritesFilter.java53
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/ProjectFilter.java53
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/TreeMapFilter.java50
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/MyFavouritesFilterTest.java40
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/ProjectFilterTest.java39
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/TreeMapFilterTest.java39
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/web/Criterion.java13
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/web/Filter.java122
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/web/FilterColumn.java23
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/web/FilterColumnTest.java6
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/web/FilterTest.java6
-rw-r--r--sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java13
-rw-r--r--sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java35
14 files changed, 388 insertions, 115 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java
index b99b1558fe5..c95ebe4777b 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java
@@ -19,6 +19,12 @@
*/
package org.sonar.plugins.core;
+import org.sonar.plugins.core.filters.MyFavouritesFilter;
+
+import org.sonar.plugins.core.filters.TreeMapFilter;
+
+import org.sonar.plugins.core.filters.ProjectFilter;
+
import com.google.common.collect.Lists;
import org.sonar.api.CoreProperties;
import org.sonar.api.Extension;
@@ -298,6 +304,11 @@ public final class CorePlugin extends SonarPlugin {
extensions.add(TestsViewerDefinition.class);
extensions.add(Lcom4Viewer.class);
+ // filters
+ extensions.add(ProjectFilter.class);
+ extensions.add(TreeMapFilter.class);
+ extensions.add(MyFavouritesFilter.class);
+
// widgets
extensions.add(AlertsWidget.class);
extensions.add(CoverageWidget.class);
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/MyFavouritesFilter.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/MyFavouritesFilter.java
new file mode 100644
index 00000000000..43e47fa0a36
--- /dev/null
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/MyFavouritesFilter.java
@@ -0,0 +1,53 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+package org.sonar.plugins.core.filters;
+
+import org.sonar.api.web.Criterion;
+
+import org.sonar.api.web.Filter;
+import org.sonar.api.web.FilterColumn;
+import org.sonar.api.web.FilterTemplate;
+
+/**
+ * Default myfavourites filter.
+ *
+ * @since 3.1
+ */
+public class MyFavouritesFilter extends FilterTemplate {
+ @Override
+ public String getName() {
+ return "My favouritesBis";
+ }
+
+ @Override
+ public Filter createFilter() {
+ 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(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));
+ filter.add(FilterColumn.create("metric", "violations_density", FilterColumn.DESC, false));
+ filter.add(FilterColumn.create("date", null, FilterColumn.DESC, false));
+
+ return filter;
+ }
+}
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/ProjectFilter.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/ProjectFilter.java
new file mode 100644
index 00000000000..c5d3086cff4
--- /dev/null
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/ProjectFilter.java
@@ -0,0 +1,53 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+package org.sonar.plugins.core.filters;
+
+import org.sonar.api.web.Criterion;
+import org.sonar.api.web.Filter;
+import org.sonar.api.web.FilterColumn;
+import org.sonar.api.web.FilterTemplate;
+
+/**
+ * Default projects filter.
+ *
+ * @since 3.1
+ */
+public class ProjectFilter extends FilterTemplate {
+ @Override
+ public String getName() {
+ return "ProjectsBis";
+ }
+
+ @Override
+ public Filter createFilter() {
+ Filter filter = Filter.create();
+ filter.setDisplayAs(Filter.LIST);
+ filter.add(Criterion.create("qualifier", null, Criterion.EQ, "TRK", false));
+ 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));
+ filter.add(FilterColumn.create("metric", "ncloc", FilterColumn.DESC, false));
+ filter.add(FilterColumn.create("metric", "violations_density", FilterColumn.DESC, false));
+ filter.add(FilterColumn.create("date", null, FilterColumn.DESC, false));
+ filter.add(FilterColumn.create("links", null, FilterColumn.DESC, false));
+
+ return filter;
+ }
+}
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/TreeMapFilter.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/TreeMapFilter.java
new file mode 100644
index 00000000000..f921a3c8267
--- /dev/null
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/filters/TreeMapFilter.java
@@ -0,0 +1,50 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+package org.sonar.plugins.core.filters;
+
+import org.sonar.api.web.Criterion;
+
+import org.sonar.api.web.Filter;
+import org.sonar.api.web.FilterColumn;
+import org.sonar.api.web.FilterTemplate;
+
+/**
+ * Default treemap filter.
+ *
+ * @since 3.1
+ */
+public class TreeMapFilter extends FilterTemplate {
+ @Override
+ public String getName() {
+ return "TreemapBis";
+ }
+
+ @Override
+ public Filter createFilter() {
+ Filter filter = Filter.create();
+ filter.setDisplayAs(Filter.TREEMAP);
+ filter.add(Criterion.create("qualifier", null, Criterion.EQ, "TRK", false));
+ 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));
+
+ return filter;
+ }
+}
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/MyFavouritesFilterTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/MyFavouritesFilterTest.java
new file mode 100644
index 00000000000..8b3cd981e96
--- /dev/null
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/MyFavouritesFilterTest.java
@@ -0,0 +1,40 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+package org.sonar.plugins.core.filters;
+
+import org.junit.Test;
+import org.sonar.api.web.Filter;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class MyFavouritesFilterTest {
+ @Test
+ public void should_create_filter() {
+ MyFavouritesFilter template = new MyFavouritesFilter();
+
+ Filter filter = template.createFilter();
+
+ assertThat(template.getName()).isEqualTo("My favouritesBis");
+ assertThat(filter).isNotNull();
+ assertThat(filter.isFavouritesOnly()).isTrue();
+ assertThat(filter.getCriteria()).hasSize(1);
+ assertThat(filter.getColumns()).hasSize(5);
+ }
+}
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/ProjectFilterTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/ProjectFilterTest.java
new file mode 100644
index 00000000000..39196d82a5c
--- /dev/null
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/ProjectFilterTest.java
@@ -0,0 +1,39 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+package org.sonar.plugins.core.filters;
+
+import org.junit.Test;
+import org.sonar.api.web.Filter;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class ProjectFilterTest {
+ @Test
+ public void should_create_filter() {
+ ProjectFilter template = new ProjectFilter();
+
+ Filter filter = template.createFilter();
+
+ assertThat(template.getName()).isEqualTo("ProjectsBis");
+ assertThat(filter).isNotNull();
+ assertThat(filter.getCriteria()).hasSize(1);
+ assertThat(filter.getColumns()).hasSize(7);
+ }
+}
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/TreeMapFilterTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/TreeMapFilterTest.java
new file mode 100644
index 00000000000..c6c13695830
--- /dev/null
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/filters/TreeMapFilterTest.java
@@ -0,0 +1,39 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2012 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+package org.sonar.plugins.core.filters;
+
+import org.junit.Test;
+import org.sonar.api.web.Filter;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class TreeMapFilterTest {
+ @Test
+ public void should_create_filter() {
+ TreeMapFilter template = new TreeMapFilter();
+
+ Filter filter = template.createFilter();
+
+ assertThat(template.getName()).isEqualTo("TreemapBis");
+ assertThat(filter).isNotNull();
+ assertThat(filter.getCriteria()).hasSize(1);
+ assertThat(filter.getColumns()).hasSize(3);
+ }
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/web/Criterion.java b/sonar-plugin-api/src/main/java/org/sonar/api/web/Criterion.java
index ccdeed0d292..5c5582107a9 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/web/Criterion.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/web/Criterion.java
@@ -30,7 +30,12 @@ import java.util.Set;
* @since 3.1
*/
public class Criterion {
- public static final Set<String> OPERATORS = ImmutableSortedSet.of("=", ">", "<", ">=", "<=");
+ public static final String EQ = "=";
+ public static final String GT = ">";
+ public static final String GTE = ">=";
+ public static final String LT = "<";
+ public static final String LTE = "<=";
+ public static final Set<String> OPERATORS = ImmutableSortedSet.of(EQ, GT, GTE, LT, LTE);
private final String family;
private final String key;
@@ -53,7 +58,7 @@ public class Criterion {
/**
* Creates a new {@link Criterion} with a numerical value.
*
- * <p>Valid values for the {@code operator} are <code>=</code>, <code>&gt;</code>, <code>&gt;=</code>, <code>&lt;</code> and <code>&lt;=</code></p>
+ * <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>
@@ -67,7 +72,7 @@ public class Criterion {
/**
* Creates a new {@link Criterion} with a text value.
*
- * <p>Valid values for the {@code operator} are <code>=</code>, <code>&gt;</code>, <code>&gt;=</code>, <code>&lt;</code> and <code>&lt;=</code></p>
+ * <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>
@@ -99,6 +104,8 @@ public class Criterion {
/**
* Get the the criterion's operator.
*
+ * <p>Valid values for the {@code operator} are {@value #EQ}, {@value #GT}, {@value #GTE}, {@value #LT} and {@value #LTE}</p>
+ *
* @return the operator
*/
public String getOperator() {
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/web/Filter.java b/sonar-plugin-api/src/main/java/org/sonar/api/web/Filter.java
index e1638ed985d..46a38519a5b 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/web/Filter.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/web/Filter.java
@@ -36,18 +36,14 @@ public class Filter {
public static final String LIST = "list";
public static final String TREEMAP = "treemap";
- private boolean shared;
private boolean favouritesOnly;
- private String defaultPeriod;
- private String resourceKeyLike;
- private String resourceNameLike;
- private String language;
- private String searchFor;
+ private String displayAs;
private int pageSize;
private List<Criterion> criteria;
private List<FilterColumn> columns;
private Filter() {
+ displayAs = LIST;
criteria = Lists.newArrayList();
columns = Lists.newArrayList();
}
@@ -59,93 +55,107 @@ public class Filter {
return new Filter();
}
+ /**
+ * Get the list of {@link Criterion} used to narrow down the results of this {@link Filter}.
+ *
+ * @return the criteria
+ */
public List<Criterion> getCriteria() {
return criteria;
}
+ /**
+ * Add a {@link Criterion} to the list used to narrow down the results of this {@link Filter}.
+ *
+ * @return this filter
+ */
public Filter add(Criterion criterion) {
this.criteria.add(criterion);
return this;
}
+ /**
+ * Get the list of {@link FilterColumn} displayed by this {@link Filter}.
+ *
+ * @return this columns
+ */
public List<FilterColumn> getColumns() {
return columns;
}
+ /**
+ * Add a {@link FilterColumn} to the list of columns displayed by this {@link Filter}.
+ *
+ * @return this filter
+ */
public Filter add(FilterColumn column) {
this.columns.add(column);
return this;
}
- public boolean isShared() {
- return shared;
- }
-
- public Filter setShared(boolean shared) {
- this.shared = shared;
- return this;
- }
-
+ /**
+ * The {@link Filter} can be configured to return only favourites.
+ *
+ * @return <code>true</code> if favourites only are returned
+ */
public boolean isFavouritesOnly() {
return favouritesOnly;
}
+ /**
+ * The {@link Filter} can be configured to return only favourites.
+ */
public Filter setFavouritesOnly(boolean favouritesOnly) {
this.favouritesOnly = favouritesOnly;
return this;
}
- public String getDefaultPeriod() {
- return defaultPeriod;
- }
-
- public Filter setDefaultPeriod(String defaultPeriod) {
- Preconditions.checkArgument(LIST.equals(defaultPeriod) || TREEMAP.equals(defaultPeriod), "Default period should be either %s or %s, not %s", LIST, TREEMAP, defaultPeriod);
- this.defaultPeriod = defaultPeriod;
- return this;
- }
-
- public String getResourceKeyLike() {
- return resourceKeyLike;
- }
-
- public Filter setResourceKeyLike(String resourceKeyLike) {
- this.resourceKeyLike = resourceKeyLike;
- return this;
- }
-
- public String getResourceNameLike() {
- return resourceNameLike;
- }
-
- public Filter setResourceNameLike(String resourceNameLike) {
- this.resourceNameLike = resourceNameLike;
- return this;
- }
-
- public String getLanguage() {
- return language;
- }
-
- public Filter setLanguage(String language) {
- this.language = language;
- return this;
- }
-
- public String getSearchFor() {
- return searchFor;
+ /**
+ * Get the type of display used by this {@link Filter}.
+ *
+ * <p>Can be either {@value #LIST} or {@value #TREEMAP}</p>
+ *
+ * @return the display type
+ */
+ public String getDisplayAs() {
+ return displayAs;
}
- public Filter setSearchFor(String searchFor) {
- this.searchFor = searchFor;
+ /**
+ * Set the type of display used by this {@link Filter}.
+ *
+ * <p>Can be either {@value #LIST} or {@value #TREEMAP}</p>
+ *
+ * @return this filter
+ * @throws IllegalArgumentException if {@code displayAs) is not {@value #LIST} or {@value #TREEMAP}
+ */
+ public Filter setDisplayAs(String displayAs) {
+ Preconditions.checkArgument(LIST.equals(displayAs) || TREEMAP.equals(displayAs), "Default period should be either %s or %s, not %s", LIST, TREEMAP, displayAs);
+ this.displayAs = displayAs;
return this;
}
+ /**
+ * Get the size of a page displayed this {@link Filter}.
+ *
+ * <p>The page size is between <code>20</code> and <code>200</code> (included)</p>
+ *
+ * @return the display type
+ */
public int getPageSize() {
return pageSize;
}
+ /**
+ * Set the size of a page displayed this {@link Filter}.
+ *
+ * <p>The page size should be between <code>20</code> and <code>200</code> (included)</p>
+ *
+ * @return the display type
+ * @throws IllegalArgumentException if {@code pageSize) is not lower than {@code 20} or greater than {@code 200}
+ */
public Filter setPageSize(int pageSize) {
+ Preconditions.checkArgument((pageSize >= 20) && (pageSize <= 200), "page size should be between 20 and 200");
this.pageSize = pageSize;
return this;
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/web/FilterColumn.java b/sonar-plugin-api/src/main/java/org/sonar/api/web/FilterColumn.java
index 65a2e6717e7..1326ffd4d8d 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/web/FilterColumn.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/web/FilterColumn.java
@@ -31,36 +31,36 @@ import com.google.common.base.Preconditions;
* @since 3.1
*/
public class FilterColumn {
- public static final Set<String> DIRECTIONS = ImmutableSortedSet.of("ASC", "DESC");
+ public static final String ASC = "ASC";
+ public static final String DESC = "DESC";
+ public static final Set<String> DIRECTIONS = ImmutableSortedSet.of(ASC, DESC);
private final String family;
private final String key;
private final String sortDirection;
- private final int orderIndex;
private final boolean variation;
- private FilterColumn(String family, String key, String sortDirection, int orderIndex, boolean variation) {
+ private FilterColumn(String family, String key, String sortDirection, boolean variation) {
Preconditions.checkArgument(DIRECTIONS.contains(sortDirection), "Valid directions are %s, not '%s'", DIRECTIONS, sortDirection);
this.family = family;
this.key = key;
this.sortDirection = sortDirection;
- this.orderIndex = orderIndex;
this.variation = variation;
}
/**
* Creates a new {@link FilterColumn}.
*
- * <p>Valid values for the {@code sortDirection} are <code>ASC</code> and <code>DESC</code></p>
+ * <p>Valid values for the {@code sortDirection} are {@value #ASC}, {@value #DESC}</p>
*
* <p>When the @{see Filter} is persisted, a validation is made on the {@code family} and the {@code key}.
* They should point to a valid column description.</p>
*
* @throws IllegalArgumentException if {@code sortDirection} is not valid
*/
- public static FilterColumn create(String family, String key, String sortDirection, int orderIndex, boolean variation) {
- return new FilterColumn(family, key, sortDirection, orderIndex, variation);
+ public static FilterColumn create(String family, String key, String sortDirection, boolean variation) {
+ return new FilterColumn(family, key, sortDirection, variation);
}
/**
@@ -91,15 +91,6 @@ public class FilterColumn {
}
/**
- * Get the the column's index.
- *
- * @return the index
- */
- public int getOrderIndex() {
- return orderIndex;
- }
-
- /**
* A column can be based on the varation of a value rather than on the value itself.
*
* @return <code>true</code> when the variation is used rather than the value
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/web/FilterColumnTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/web/FilterColumnTest.java
index 8a9fa10a5f6..8dd72e7b97c 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/web/FilterColumnTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/web/FilterColumnTest.java
@@ -29,8 +29,8 @@ public class FilterColumnTest {
@Test
public void should_accept_valid_direction() {
- FilterColumn.create("", "", "ASC", 0, false);
- FilterColumn.create("", "", "DESC", 0, false);
+ FilterColumn.create("", "", "ASC", false);
+ FilterColumn.create("", "", "DESC", false);
}
@Test
@@ -38,7 +38,7 @@ public class FilterColumnTest {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Valid directions are [ASC, DESC], not 'UNKNOWN'");
- FilterColumn.create("", "", "UNKNOWN", 0, false);
+ FilterColumn.create("", "", "UNKNOWN", false);
}
}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/web/FilterTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/web/FilterTest.java
index 9466e8d0c04..e29f4d23393 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/web/FilterTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/web/FilterTest.java
@@ -31,8 +31,8 @@ public class FilterTest {
@Test
public void should_accept_valid_periods() {
- Filter.create().setDefaultPeriod("list");
- Filter.create().setDefaultPeriod("treemap");
+ Filter.create().setDisplayAs("list");
+ Filter.create().setDisplayAs("treemap");
}
@Test
@@ -40,6 +40,6 @@ public class FilterTest {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Default period should be either list or treemap, not <invalid>");
- Filter.create().setDefaultPeriod("<invalid>");
+ Filter.create().setDisplayAs("<invalid>");
}
}
diff --git a/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java b/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java
index 3eb1c8dfefe..774ca9f6176 100644
--- a/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java
+++ b/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java
@@ -81,6 +81,7 @@ public final class RegisterNewFilters {
if (filterDao.findFilter(name) == null) {
dto = createDtoFromExtension(name, filter);
filterDao.insert(dto);
+ LOG.info("New filter '" + dto.getName() + "' registered");
}
// and save the fact that is has now already been loaded
loadedTemplateDao.insert(new LoadedTemplateDto(name, LoadedTemplateDto.FILTER_TYPE));
@@ -97,15 +98,10 @@ public final class RegisterNewFilters {
FilterDto filterDto = new FilterDto()
.setName(name)
.setPageSize((long) filter.getPageSize())
- .setShared(filter.isShared())
+ .setShared(true)
.setFavourites(filter.isFavouritesOnly())
- .setDefaultView(filter.getDefaultPeriod());
+ .setDefaultView(filter.getDisplayAs());
- addCriteria(filterDto, "key", "=", filter.getResourceKeyLike());
- addCriteria(filterDto, "name", "=", filter.getResourceNameLike());
- addCriteria(filterDto, "language", "=", filter.getLanguage());
- addCriteria(filterDto, "qualifier", "=", filter.getSearchFor());
-
for (Criterion criterion : filter.getCriteria()) {
filterDto.add(new CriterionDto()
.setFamily(criterion.getFamily())
@@ -116,11 +112,12 @@ public final class RegisterNewFilters {
.setVariation(criterion.isVariation()));
}
+ long orderIndex = 1L;
for (FilterColumn column : filter.getColumns()) {
filterDto.add(new FilterColumnDto()
.setFamily(column.getFamily())
.setKey(column.getKey())
- .setOrderIndex((long) column.getOrderIndex())
+ .setOrderIndex(orderIndex++)
.setSortDirection(column.getSortDirection())
.setVariation(column.isVariation()));
}
diff --git a/sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java b/sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java
index 523594dd9f0..0a3876fcda9 100644
--- a/sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java
+++ b/sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java
@@ -19,18 +19,14 @@
*/
package org.sonar.server.startup;
-import org.sonar.core.filter.FilterColumnDto;
-
-import org.sonar.api.web.FilterColumn;
-
-import org.sonar.api.web.Criterion;
-
-import com.google.common.collect.Iterables;
import org.junit.Before;
import org.junit.Test;
+import org.sonar.api.web.Criterion;
import org.sonar.api.web.Filter;
+import org.sonar.api.web.FilterColumn;
import org.sonar.api.web.FilterTemplate;
import org.sonar.core.filter.CriterionDto;
+import org.sonar.core.filter.FilterColumnDto;
import org.sonar.core.filter.FilterDao;
import org.sonar.core.filter.FilterDto;
import org.sonar.core.template.LoadedTemplateDao;
@@ -116,25 +112,16 @@ public class RegisterNewFiltersTest {
@Test
public void should_create_dto_from_extension() {
when(filterTemplate.createFilter()).thenReturn(Filter.create()
- .setShared(true)
.setFavouritesOnly(false)
- .setDefaultPeriod("list")
- .setResourceKeyLike("*KEY*")
- .setResourceNameLike("*NAME*")
- .setLanguage("java")
- .setSearchFor("TRK,BRC")
+ .setDisplayAs("list")
.setPageSize(200)
- .add(Criterion.create("metric", "complexity", "<", 12f, false))
- .add(Criterion.create("metric", "LCOM4", ">=", "5", true))
- .add(FilterColumn.create("metric", "distance", "ASC", 1, false))
- .add(FilterColumn.create("metric", "instability", "DESC", 2, true))
+ .add(Criterion.create("metric", "complexity", Criterion.LT, 12f, false))
+ .add(Criterion.create("metric", "LCOM4", Criterion.GTE, "5", true))
+ .add(FilterColumn.create("metric", "distance", "ASC", false))
+ .add(FilterColumn.create("metric", "instability", "DESC", true))
);
FilterDto dto = register.createDtoFromExtension("Fake", filterTemplate.createFilter());
- CriterionDto criteriaResourceKeyDto = Iterables.get(dto.getCriteria(), 0);
- CriterionDto criteriaResourceNameDto = Iterables.get(dto.getCriteria(), 1);
- CriterionDto criteriaLangageDto = Iterables.get(dto.getCriteria(), 2);
- CriterionDto criteriaSearchForDto = Iterables.get(dto.getCriteria(), 3);
assertThat(dto.getUserId()).isNull();
assertThat(dto.getName()).isEqualTo("Fake");
@@ -143,11 +130,7 @@ public class RegisterNewFiltersTest {
assertThat(dto.getDefaultView()).isEqualTo("list");
assertThat(dto.getPageSize()).isEqualTo(200L);
- assertThat(dto.getCriteria()).hasSize(6);
- assertThat(dto.getCriteria()).satisfies(contains(new CriterionDto().setFamily("key").setOperator("=").setTextValue("*KEY*")));
- assertThat(dto.getCriteria()).satisfies(contains(new CriterionDto().setFamily("name").setOperator("=").setTextValue("*NAME*")));
- assertThat(dto.getCriteria()).satisfies(contains(new CriterionDto().setFamily("language").setOperator("=").setTextValue("java")));
- assertThat(dto.getCriteria()).satisfies(contains(new CriterionDto().setFamily("qualifier").setOperator("=").setTextValue("TRK,BRC")));
+ assertThat(dto.getCriteria()).hasSize(2);
assertThat(dto.getCriteria()).satisfies(contains(new CriterionDto().setFamily("metric").setKey("complexity").setOperator("<").setValue(12f).setVariation(false)));
assertThat(dto.getCriteria()).satisfies(contains(new CriterionDto().setFamily("metric").setKey("LCOM4").setOperator(">=").setTextValue("5").setVariation(true)));