diff options
author | Simon Brandhof <simon.brandhof@gmail.com> | 2013-04-12 14:12:23 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@gmail.com> | 2013-04-12 14:12:23 +0200 |
commit | dc5ecf80639df3951adf3925df4b1f95e502db5b (patch) | |
tree | e647ca1ed9badc03d4955ce96c4ef334f2793678 /sonar-plugin-api | |
parent | 779eb8f0c2ea746d1310e7c8ae4b9db66ff6ac07 (diff) | |
download | sonarqube-dc5ecf80639df3951adf3925df4b1f95e502db5b.tar.gz sonarqube-dc5ecf80639df3951adf3925df4b1f95e502db5b.zip |
SONAR-3755 refactor IssueFinder
Diffstat (limited to 'sonar-plugin-api')
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); + } + + +} |