001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2012 SonarSource
004     * mailto:contact AT sonarsource DOT com
005     *
006     * Sonar 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     * Sonar 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
017     * License along with Sonar; if not, write to the Free Software
018     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019     */
020    package org.sonar.wsclient.services;
021    
022    public class ViolationQuery extends Query<Violation> {
023    
024      public static final String BASE_URL = "/api/violations";
025    
026      private String resourceKeyOrId;
027      private int depth = 0;
028      private String[] scopes;
029      private String[] qualifiers;
030      private String[] ruleKeys;
031      private String[] categories;
032      private String[] severities;
033      private Integer limit;
034      private Boolean includeReview;
035      private String output;
036    
037      public ViolationQuery(String resourceKeyOrId) {
038        this.resourceKeyOrId = resourceKeyOrId;
039      }
040    
041      public String[] getScopes() {
042        return scopes;
043      }
044    
045      public ViolationQuery setScopes(String... scopes) {
046        this.scopes = scopes;
047        return this;
048      }
049    
050      public String[] getQualifiers() {
051        return qualifiers;
052      }
053    
054      public ViolationQuery setQualifiers(String... qualifiers) {
055        this.qualifiers = qualifiers;
056        return this;
057      }
058    
059      public String[] getRuleKeys() {
060        return ruleKeys;
061      }
062    
063      public ViolationQuery setRuleKeys(String... ruleKeys) {
064        this.ruleKeys = ruleKeys;
065        return this;
066      }
067    
068      public String[] getCategories() {
069        return categories;
070      }
071    
072      public ViolationQuery setCategories(String... categories) {
073        this.categories = categories;
074        return this;
075      }
076    
077      /**
078       * @since 2.5
079       */
080      public String[] getSeverities() {
081        return severities;
082      }
083    
084      /**
085       * @since 2.5
086       */
087      public ViolationQuery setSeverities(String... severities) {
088        this.severities = severities;
089        return this;
090      }
091    
092      /**
093       * @deprecated since 2.5 use {@link #getSeverities()} instead. See http://jira.codehaus.org/browse/SONAR-1829
094       */
095      @Deprecated
096      public String[] getPriorities() {
097        return severities;
098      }
099    
100      /**
101       * @deprecated since 2.5 use {@link #setSeverities(String...)} instead. See http://jira.codehaus.org/browse/SONAR-1829
102       */
103      @Deprecated
104      public ViolationQuery setPriorities(String... priorities) {
105        this.severities = priorities;
106        return this;
107      }
108    
109      public int getDepth() {
110        return depth;
111      }
112    
113      public ViolationQuery setDepth(int depth) {
114        this.depth = depth;
115        return this;
116      }
117    
118      /**
119       * @since 2.5
120       */
121      public Integer getLimit() {
122        return limit;
123      }
124    
125      /**
126       * @since 2.5
127       */
128      public ViolationQuery setLimit(Integer limit) {
129        this.limit = limit;
130        return this;
131      }
132    
133      /**
134       * @since 2.8
135       */
136      public Boolean getIncludeReview() {
137        return includeReview;
138      }
139    
140      /**
141       * @since 2.8
142       */
143      public ViolationQuery setIncludeReview(Boolean includeReview) {
144        this.includeReview = includeReview;
145        return this;
146      }
147    
148      /**
149       * @since 2.8
150       */
151      public String getOutput() {
152        return output;
153      }
154    
155      /**
156       * @since 2.8
157       */
158      public ViolationQuery setOutput(String output) {
159        this.output = output;
160        return this;
161      }
162    
163      @Override
164      public String getUrl() {
165        StringBuilder url = new StringBuilder(BASE_URL);
166        url.append('?');
167        appendUrlParameter(url, "resource", resourceKeyOrId);
168        if (depth != 0) {
169          url.append("depth=").append(depth).append("&");
170        }
171        appendUrlParameter(url, "limit", limit);
172        appendUrlParameter(url, "scopes", scopes);
173        appendUrlParameter(url, "qualifiers", qualifiers);
174        appendUrlParameter(url, "rules", ruleKeys);
175        appendUrlParameter(url, "categories", categories);
176        appendUrlParameter(url, "priorities", severities);
177        appendUrlParameter(url, "include_review", includeReview);
178        appendUrlParameter(url, "output", output);
179    
180        return url.toString();
181      }
182    
183      @Override
184      public Class<Violation> getModelClass() {
185        return Violation.class;
186      }
187    
188      public static ViolationQuery createForResource(Resource resource) {
189        return new ViolationQuery(resource.getId().toString());
190      }
191    
192      public static ViolationQuery createForResource(String resourceIdOrKey) {
193        return new ViolationQuery(resourceIdOrKey);
194      }
195    }