aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-04-12 14:12:23 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2013-04-12 14:12:23 +0200
commitdc5ecf80639df3951adf3925df4b1f95e502db5b (patch)
treee647ca1ed9badc03d4955ce96c4ef334f2793678 /sonar-plugin-api
parent779eb8f0c2ea746d1310e7c8ae4b9db66ff6ac07 (diff)
downloadsonarqube-dc5ecf80639df3951adf3925df4b1f95e502db5b.tar.gz
sonarqube-dc5ecf80639df3951adf3925df4b1f95e502db5b.zip
SONAR-3755 refactor IssueFinder
Diffstat (limited to 'sonar-plugin-api')
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java9
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueQuery.java133
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/issue/IssueQueryTest.java56
3 files changed, 134 insertions, 64 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java b/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java
index f3f8c741e94..a71f62a8c84 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFinder.java
@@ -21,7 +21,10 @@
package org.sonar.api.issue;
import org.sonar.api.ServerComponent;
+import org.sonar.api.component.Component;
+import org.sonar.api.rules.Rule;
+import java.util.Collection;
import java.util.List;
/**
@@ -29,7 +32,11 @@ import java.util.List;
*/
public interface IssueFinder extends ServerComponent {
- List<Issue> find(IssueQuery issueQuery);
+ interface Results {
+ List<Issue> issues();
+ }
+
+ Results find(IssueQuery issueQuery);
Issue findByKey(String key);
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueQuery.java b/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueQuery.java
index 1cf127d28d1..7848c60980d 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueQuery.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueQuery.java
@@ -20,39 +20,36 @@
package org.sonar.api.issue;
+import com.google.common.base.Preconditions;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import java.util.List;
-
-import static com.google.common.collect.Lists.newArrayList;
+import java.util.Map;
/**
* @since 3.6
*/
public class IssueQuery {
- private List<String> keys;
- private List<String> severities;
- private String minSeverity;
- private List<String> status;
- private List<String> resolutions;
- private List<String> componentKeys;
- private List<String> rules;
- private List<String> userLogins;
- private List<String> assigneeLogins;
- private Integer limit;
+ private final List<String> keys;
+ private final List<String> severities;
+ private final List<String> statuses;
+ private final List<String> resolutions;
+ private final List<String> components;
+ private final List<String> userLogins;
+ private final List<String> assigneeLogins;
+ private final int limit, offset;
private IssueQuery(Builder builder) {
this.keys = builder.keys;
this.severities = builder.severities;
- this.minSeverity = builder.minSeverity;
- this.status = builder.status;
+ this.statuses = builder.statuses;
this.resolutions = builder.resolutions;
- this.componentKeys = builder.componentKeys;
- this.rules = builder.rules;
+ this.components = builder.components;
this.userLogins = builder.userLogins;
this.assigneeLogins = builder.assigneeLogins;
this.limit = builder.limit;
+ this.offset = builder.offset;
}
public List<String> keys() {
@@ -63,24 +60,16 @@ public class IssueQuery {
return severities;
}
- public String minSeverity() {
- return minSeverity;
- }
-
- public List<String> status() {
- return status;
+ public List<String> statuses() {
+ return statuses;
}
public List<String> resolutions() {
return resolutions;
}
- public List<String> componentKeys() {
- return componentKeys;
- }
-
- public List<String> rules() {
- return rules;
+ public List<String> components() {
+ return components;
}
public List<String> userLogins() {
@@ -91,91 +80,109 @@ public class IssueQuery {
return assigneeLogins;
}
- public Integer limit() {
+ public int limit() {
return limit;
}
+ public int offset() {
+ return offset;
+ }
+
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
+ public static Builder builder() {
+ return new Builder();
+ }
+
+
/**
* @since 3.6
*/
public static class Builder {
+ private static final int DEFAULT_LIMIT = 100;
+ private static final int MAX_LIMIT = 5000;
+ private static final int DEFAULT_OFFSET = 0;
+
private List<String> keys;
private List<String> severities;
- private String minSeverity;
- private List<String> status;
+ private List<String> statuses;
private List<String> resolutions;
- private List<String> componentKeys;
- private List<String> rules;
+ private List<String> components;
private List<String> userLogins;
private List<String> assigneeLogins;
- private Integer limit;
-
- public Builder() {
- componentKeys = newArrayList();
- }
+ private int limit = DEFAULT_LIMIT;
+ private int offset = DEFAULT_OFFSET;
- public Builder keys(List<String> keys) {
- this.keys = keys;
- return this;
+ private Builder() {
}
- public Builder severities(List<String> severities) {
- this.severities = severities;
+ public Builder keys(List<String> l) {
+ this.keys = l;
return this;
}
- public Builder minSeverity(String minSeverity) {
- this.minSeverity = minSeverity;
+ public Builder severities(List<String> l) {
+ this.severities = l;
return this;
}
- public Builder status(List<String> status) {
- this.status = status;
+ public Builder statuses(List<String> l) {
+ this.statuses = l;
return this;
}
- public Builder resolutions(List<String> resolutions) {
- this.resolutions = resolutions;
+ public Builder resolutions(List<String> l) {
+ this.resolutions = l;
return this;
}
- public Builder componentKeys(List<String> componentKeys) {
- this.componentKeys = componentKeys;
+ public Builder components(List<String> l) {
+ this.components = l;
return this;
}
- public Builder rules(List<String> rules) {
- this.rules = rules;
+ public Builder userLogins(List<String> l) {
+ this.userLogins = l;
return this;
}
- public Builder userLogins(List<String> userLogins) {
- this.userLogins = userLogins;
+ public Builder assigneeLogins(List<String> l) {
+ this.assigneeLogins = l;
return this;
}
- public Builder assigneeLogins(List<String> assigneeLogins) {
- this.assigneeLogins = assigneeLogins;
+ public Builder limit(Integer i) {
+ Preconditions.checkArgument(i == null || i.intValue() > 0, "Limit must be greater than 0 (got " + i + ")");
+ Preconditions.checkArgument(i == null || i.intValue() < MAX_LIMIT, "Limit must be less than " + MAX_LIMIT + " (got " + i + ")");
+ this.limit = (i == null ? DEFAULT_LIMIT : i.intValue());
return this;
}
- public Builder limit(Integer limit) {
- this.limit = limit;
+ public Builder offset(Integer i) {
+ Preconditions.checkArgument(i == null || i.intValue() >= 0, "Offset must be greater than or equal to 0 (got " + i + ")");
+ this.offset = (i == null ? DEFAULT_OFFSET : i.intValue());
return this;
}
public IssueQuery build() {
return new IssueQuery(this);
}
+ }
- @Override
- public String toString() {
- return ReflectionToStringBuilder.toString(this);
- }
+ public static IssueQuery from(Map<String, Object> props) {
+ IssueQuery.Builder builder = new IssueQuery.Builder();
+ builder.keys((List<String>) props.get("keys"));
+ builder.severities((List<String>) props.get("severities"));
+ builder.statuses((List<String>) props.get("statuses"));
+ builder.resolutions((List<String>) props.get("resolutions"));
+ builder.components((List<String>) props.get("components"));
+ builder.userLogins((List<String>) props.get("userLogins"));
+ builder.assigneeLogins((List<String>) props.get("assigneeLogins"));
+ builder.limit((Integer) props.get("limit"));
+ builder.offset((Integer) props.get("offset"));
+ return builder.build();
}
}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/issue/IssueQueryTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/issue/IssueQueryTest.java
new file mode 100644
index 00000000000..470ccbad6b3
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/issue/IssueQueryTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.api.issue;
+
+import org.junit.Test;
+
+import java.util.Map;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Maps.newHashMap;
+import static org.fest.assertions.Assertions.assertThat;
+
+public class IssueQueryTest {
+ @Test
+ public void should_create_query_from_properties() {
+ Map<String, Object> map = newHashMap();
+ map.put("keys", newArrayList("ABCDE1234"));
+ map.put("severities", newArrayList("MAJOR", "MINOR"));
+ map.put("statuses", newArrayList("CLOSED"));
+ map.put("resolutions", newArrayList("FALSE-POSITIVE"));
+ map.put("components", newArrayList("org.apache"));
+ map.put("userLogins", newArrayList("marilyn"));
+ map.put("assigneeLogins", newArrayList("joanna"));
+ map.put("limit", 10);
+ map.put("offset", 50);
+
+ IssueQuery query = IssueQuery.from(map);
+ assertThat(query.keys()).containsOnly("ABCDE1234");
+ assertThat(query.severities()).containsExactly("MAJOR", "MINOR");
+ assertThat(query.statuses()).containsOnly("CLOSED");
+ assertThat(query.resolutions()).containsOnly("FALSE-POSITIVE");
+ assertThat(query.userLogins()).containsOnly("marilyn");
+ assertThat(query.assigneeLogins()).containsOnly("joanna");
+ assertThat(query.limit()).isEqualTo(10);
+ assertThat(query.offset()).isEqualTo(50);
+ }
+
+
+}