001 /*
002 * SonarQube, open source software quality management tool.
003 * Copyright (C) 2008-2014 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * SonarQube is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * SonarQube is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
019 */
020 package org.sonar.wsclient.services;
021
022 public class ResourceQuery extends Query<Resource> {
023
024 public static final String BASE_URL = "/api/resources";
025
026 public static final int DEPTH_UNLIMITED = -1;
027
028 private Integer depth;
029 private String resourceKeyOrId;
030 private Integer limit;
031 private String[] scopes;
032 private String[] qualifiers;
033 private String[] metrics;
034 private String[] rules;
035 private String[] ruleSeverities;
036 private String[] characteristicKeys;
037 private boolean excludeRules = true;
038 private boolean excludeRuleSeverities = true;
039 private Boolean includeTrends = null;
040 private Boolean includeAlerts = null;
041 private Boolean verbose = Boolean.FALSE;
042
043 public ResourceQuery() {
044 }
045
046 public ResourceQuery(String resourceKeyOrId) {
047 this.resourceKeyOrId = resourceKeyOrId;
048 }
049
050 public ResourceQuery(long resourceId) {
051 this.resourceKeyOrId = String.valueOf(resourceId);
052 }
053
054 public Integer getDepth() {
055 return depth;
056 }
057
058 public ResourceQuery setDepth(Integer depth) {
059 this.depth = depth;
060 return this;
061 }
062
063 public ResourceQuery setAllDepths() {
064 return setDepth(DEPTH_UNLIMITED);
065 }
066
067 public String getResourceKeyOrId() {
068 return resourceKeyOrId;
069 }
070
071 public ResourceQuery setResourceKeyOrId(String resourceKeyOrId) {
072 this.resourceKeyOrId = resourceKeyOrId;
073 return this;
074 }
075
076 public ResourceQuery setResourceId(int resourceId) {
077 this.resourceKeyOrId = Integer.toString(resourceId);
078 return this;
079 }
080
081 public ResourceQuery setCharacteristics(String... keys) {
082 this.characteristicKeys = keys;
083 return this;
084 }
085
086 public Integer getLimit() {
087 return limit;
088 }
089
090 public ResourceQuery setLimit(Integer limit) {
091 this.limit = limit;
092 return this;
093 }
094
095 public String[] getScopes() {
096 return scopes;
097 }
098
099 public ResourceQuery setScopes(String... scopes) {
100 this.scopes = scopes;
101 return this;
102 }
103
104 public String[] getQualifiers() {
105 return qualifiers;
106 }
107
108 public ResourceQuery setQualifiers(String... qualifiers) {
109 this.qualifiers = qualifiers;
110 return this;
111 }
112
113 public String[] getMetrics() {
114 return metrics;
115 }
116
117 public ResourceQuery setMetrics(String... metrics) {
118 this.metrics = metrics;
119 return this;
120 }
121
122 public String[] getRules() {
123 return rules;
124 }
125
126 public ResourceQuery setRules(String... rules) {
127 this.rules = rules;
128 this.excludeRules = false;
129 return this;
130 }
131
132 /**
133 * @deprecated since 2.5 See http://jira.codehaus.org/browse/SONAR-2007
134 */
135 @Deprecated
136 public String[] getRuleCategories() {
137 return null;
138 }
139
140 /**
141 * @param ruleCategories values: Maintainability, Usability, Reliability, Efficiency, Portability
142 * @deprecated since 2.5 See http://jira.codehaus.org/browse/SONAR-2007
143 */
144 @Deprecated
145 public ResourceQuery setRuleCategories(String... ruleCategories) {
146 return this;
147 }
148
149 /**
150 * @since 2.5
151 */
152 public String[] getRuleSeverities() {
153 return ruleSeverities;
154 }
155
156 /**
157 * @since 2.5
158 * @param ruleSeverities values: BLOCKER, CRITICAL, MAJOR, MINOR, INFO
159 */
160 public ResourceQuery setRuleSeverities(String... ruleSeverities) {
161 this.ruleSeverities = ruleSeverities;
162 this.excludeRuleSeverities = false;
163 return this;
164 }
165
166 /**
167 * @deprecated since 2.5 use {@link #getRuleSeverities()} instead. See http://jira.codehaus.org/browse/SONAR-1829
168 */
169 @Deprecated
170 public String[] getRulePriorities() {
171 return ruleSeverities;
172 }
173
174 /**
175 * @deprecated since 2.5 use {@link #setRuleSeverities(String...)} instead. See http://jira.codehaus.org/browse/SONAR-1829
176 */
177 @Deprecated
178 public ResourceQuery setRulePriorities(String... rulePriorities) {
179 return setRuleSeverities(rulePriorities);
180 }
181
182 public boolean isExcludeRules() {
183 return excludeRules;
184 }
185
186 public ResourceQuery setExcludeRules(boolean excludeRules) {
187 this.excludeRules = excludeRules;
188 return this;
189 }
190
191 /**
192 * @deprecated since 2.5 not used anymore
193 */
194 @Deprecated
195 public boolean isExcludeRuleCategories() {
196 return false;
197 }
198
199 /**
200 * @deprecated since 2.5 not used anymore
201 */
202 @Deprecated
203 public ResourceQuery setExcludeRuleCategories(boolean b) {
204 return this;
205 }
206
207 /**
208 * @since 2.5
209 */
210 public boolean isExcludeRuleSeverities() {
211 return excludeRuleSeverities;
212 }
213
214 public ResourceQuery setExcludeRuleSeverities(boolean excludeRuleSeverities) {
215 this.excludeRuleSeverities = excludeRuleSeverities;
216 return this;
217 }
218
219 /**
220 * @deprecated since 2.5 use {@link #isExcludeRuleSeverities()} instead. See http://jira.codehaus.org/browse/SONAR-1829
221 */
222 @Deprecated
223 public boolean isExcludeRulePriorities() {
224 return excludeRuleSeverities;
225 }
226
227 /**
228 * @deprecated since 2.5 use {@link #setExcludeRuleSeverities(boolean)} instead. See http://jira.codehaus.org/browse/SONAR-1829
229 */
230 @Deprecated
231 public ResourceQuery setExcludeRulePriorities(boolean b) {
232 this.excludeRuleSeverities = b;
233 return this;
234 }
235
236 public Boolean isVerbose() {
237 return verbose;
238 }
239
240 public ResourceQuery setVerbose(Boolean verbose) {
241 this.verbose = verbose;
242 return this;
243 }
244
245 public Boolean isIncludeTrends() {
246 return includeTrends;
247 }
248
249 public ResourceQuery setIncludeTrends(Boolean includeTrends) {
250 this.includeTrends = includeTrends;
251 return this;
252 }
253
254 public Boolean isIncludeAlerts() {
255 return includeAlerts;
256 }
257
258 public ResourceQuery setIncludeAlerts(Boolean includeAlerts) {
259 this.includeAlerts = includeAlerts;
260 return this;
261 }
262
263 @Override
264 public String getUrl() {
265 StringBuilder url = new StringBuilder(BASE_URL);
266 url.append('?');
267 appendUrlParameter(url, "resource", resourceKeyOrId);
268 appendUrlParameter(url, "metrics", metrics);
269 appendUrlParameter(url, "scopes", scopes);
270 appendUrlParameter(url, "qualifiers", qualifiers);
271 appendUrlParameter(url, "depth", depth);
272 appendUrlParameter(url, "limit", limit);
273 appendRuleField(url, "rules", excludeRules, rules);
274 appendRuleField(url, "rule_priorities", excludeRuleSeverities, ruleSeverities);
275 appendUrlParameter(url, "includetrends", includeTrends);
276 appendUrlParameter(url, "characteristics", characteristicKeys);
277 appendUrlParameter(url, "includealerts", includeAlerts);
278 appendUrlParameter(url, "verbose", verbose);
279 return url.toString();
280 }
281
282 private void appendRuleField(StringBuilder url, String field, boolean excludeField, String[] list) {
283 if (!excludeField) {
284 if (list == null || list.length == 0) {
285 appendUrlParameter(url, field, true);
286 } else {
287 appendUrlParameter(url, field, list);
288 }
289 }
290 }
291
292 @Override
293 public final Class<Resource> getModelClass() {
294 return Resource.class;
295 }
296
297 public static ResourceQuery createForMetrics(String resourceKeyOrId, String... metricKeys) {
298 return new ResourceQuery(resourceKeyOrId)
299 .setMetrics(metricKeys);
300 }
301
302 public static ResourceQuery createForResource(Resource resource, String... metricKeys) {
303 Integer id = resource.getId();
304 if (id == null) {
305 throw new IllegalArgumentException("id must be set");
306 }
307 return new ResourceQuery(id.toString())
308 .setMetrics(metricKeys);
309 }
310
311 /**
312 * @since 2.10
313 */
314 public static ResourceQuery create(String resourceKey) {
315 return new ResourceQuery(resourceKey);
316 }
317 }