001    /*
002     * SonarQube, open source software quality management tool.
003     * Copyright (C) 2008-2013 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    import javax.annotation.CheckForNull;
023    import javax.annotation.Nullable;
024    
025    import java.util.Collections;
026    import java.util.Date;
027    import java.util.List;
028    
029    public class Resource extends Model {
030    
031      /* SCOPES */
032      public static final String SCOPE_SET = "PRJ";
033      public static final String SCOPE_SPACE = "DIR";
034      public static final String SCOPE_ENTITY = "FIL";
035    
036      /* QUALIFIERS */
037      public static final String QUALIFIER_VIEW = "VW";
038      public static final String QUALIFIER_SUBVIEW = "SVW";
039      public static final String QUALIFIER_LIB = "LIB";
040      public static final String QUALIFIER_PROJECT = "TRK";
041      public static final String QUALIFIER_MODULE = "BRC";
042      public static final String QUALIFIER_PACKAGE = "PAC";
043      public static final String QUALIFIER_DIRECTORY = "DIR";
044      public static final String QUALIFIER_FILE = "FIL";
045      public static final String QUALIFIER_CLASS = "CLA";
046      public static final String QUALIFIER_UNIT_TEST_CLASS = "UTS";
047    
048      /* LANGUAGES */
049      public static final String LANGUAGE_JAVA = "java";
050    
051      private Integer id;
052      private String key;
053      private String name;
054      private String longName;
055      private String scope;
056      private String qualifier;
057      private String language;
058      private String version;
059      private Integer copy;
060      private String description;
061      private Date date;
062      private List<Measure> measures;
063      private Date creationDate;
064    
065      // periods used for variations and tracking of violations
066      private String period1Mode, period2Mode, period3Mode, period4Mode, period5Mode;
067      private String period1Param, period2Param, period3Param, period4Param, period5Param;
068      private Date period1Date, period2Date, period3Date, period4Date, period5Date;
069    
070      @CheckForNull
071      public Integer getId() {
072        return id;
073      }
074    
075      public Resource setId(@Nullable Integer id) {
076        this.id = id;
077        return this;
078      }
079    
080      @CheckForNull
081      public String getKey() {
082        return key;
083      }
084    
085      public Resource setKey(@Nullable String key) {
086        this.key = key;
087        return this;
088      }
089    
090      @CheckForNull
091      public String getDescription() {
092        return description;
093      }
094    
095      public Resource setDescription(@Nullable String description) {
096        this.description = description;
097        return this;
098      }
099    
100      @CheckForNull
101      public String getName() {
102        return name;
103      }
104    
105      @CheckForNull
106      public String getName(boolean longFormatIfDefined) {
107        if (longFormatIfDefined && longName != null && !"".equals(longName)) {
108          return longName;
109        }
110        return name;
111      }
112    
113      @CheckForNull
114      public String getLongName() {
115        return longName;
116      }
117    
118      public Resource setLongName(@Nullable String longName) {
119        this.longName = longName;
120        return this;
121      }
122    
123      public Resource setName(@Nullable String s) {
124        this.name = s;
125        return this;
126      }
127    
128      @CheckForNull
129      public String getScope() {
130        return scope;
131      }
132    
133      public Resource setScope(@Nullable String scope) {
134        this.scope = scope;
135        return this;
136      }
137    
138      @CheckForNull
139      public String getQualifier() {
140        return qualifier;
141      }
142    
143      public Resource setQualifier(@Nullable String qualifier) {
144        this.qualifier = qualifier;
145        return this;
146      }
147    
148      @CheckForNull
149      public String getLanguage() {
150        return language;
151      }
152    
153      public Resource setLanguage(@Nullable String language) {
154        this.language = language;
155        return this;
156      }
157    
158      @CheckForNull
159      public String getVersion() {
160        return version;
161      }
162    
163      public Resource setVersion(@Nullable String version) {
164        this.version = version;
165        return this;
166      }
167    
168      @CheckForNull
169      public Integer getCopy() {
170        return copy;
171      }
172    
173      public Resource setCopy(@Nullable Integer copy) {
174        this.copy = copy;
175        return this;
176      }
177    
178      @CheckForNull
179      public Date getDate() {
180        return date;
181      }
182    
183      public Resource setDate(@Nullable Date d) {
184        this.date = d;
185        return this;
186      }
187    
188      @CheckForNull
189      public Date getCreationDate() {
190        return creationDate;
191      }
192    
193      public Resource setCreationDate(@Nullable Date d) {
194        this.creationDate = d;
195        return this;
196      }
197    
198      public List<Measure> getMeasures() {
199        if (measures == null) {
200          return Collections.emptyList();
201        }
202        return measures;
203      }
204    
205      public Measure getMeasure(String metricKey) {
206        for (Measure measure : getMeasures()) {
207          if (metricKey.equals(measure.getMetricKey())) {
208            return measure;
209          }
210        }
211        return null;
212      }
213    
214      public Double getMeasureValue(String metricKey) {
215        Measure measure = getMeasure(metricKey);
216        if (measure != null) {
217          return measure.getValue();
218        }
219        return null;
220      }
221    
222      public Integer getMeasureIntValue(String metricKey) {
223        Double d = getMeasureValue(metricKey);
224        if (d != null) {
225          return d.intValue();
226        }
227        return null;
228      }
229    
230      public String getMeasureFormattedValue(String metricKey, String defaultValue) {
231        Measure measure = getMeasure(metricKey);
232        if (measure != null) {
233          return measure.getFormattedValue(defaultValue);
234        }
235        return defaultValue;
236      }
237    
238      public void setMeasures(List<Measure> measures) {
239        this.measures = measures;
240      }
241    
242      /**
243       * @since 2.5 only on projects, else null
244       */
245      @CheckForNull
246      public String getPeriod1Mode() {
247        return period1Mode;
248      }
249    
250      /**
251       * @since 2.5
252       */
253      public Resource setPeriod1Mode(@Nullable String period1Mode) {
254        this.period1Mode = period1Mode;
255        return this;
256      }
257    
258      /**
259       * @since 2.5 only on projects, else null
260       */
261      @CheckForNull
262      public String getPeriod2Mode() {
263        return period2Mode;
264      }
265    
266      /**
267       * @since 2.5
268       */
269      public Resource setPeriod2Mode(@Nullable String period2Mode) {
270        this.period2Mode = period2Mode;
271        return this;
272      }
273    
274      /**
275       * @since 2.5 only on projects, else null
276       */
277      @CheckForNull
278      public String getPeriod3Mode() {
279        return period3Mode;
280      }
281    
282      /**
283       * @since 2.5
284       */
285      public Resource setPeriod3Mode(@Nullable String period3Mode) {
286        this.period3Mode = period3Mode;
287        return this;
288      }
289    
290      /**
291       * @since 2.5 only on projects, else null
292       */
293      @CheckForNull
294      public String getPeriod4Mode() {
295        return period4Mode;
296      }
297    
298      /**
299       * @since 2.5
300       */
301      public Resource setPeriod4Mode(@Nullable String period4Mode) {
302        this.period4Mode = period4Mode;
303        return this;
304      }
305    
306      /**
307       * @since 2.5 only on projects, else null
308       */
309      @CheckForNull
310      public String getPeriod5Mode() {
311        return period5Mode;
312      }
313    
314      /**
315       * @since 2.5
316       */
317      public Resource setPeriod5Mode(@Nullable String period5Mode) {
318        this.period5Mode = period5Mode;
319        return this;
320      }
321    
322      /**
323       * @since 2.5 only on projects, else null
324       */
325      @CheckForNull
326      public String getPeriod1Param() {
327        return period1Param;
328      }
329    
330      /**
331       * @since 2.5
332       */
333      public Resource setPeriod1Param(@Nullable String period1Param) {
334        this.period1Param = period1Param;
335        return this;
336      }
337    
338      /**
339       * @since 2.5 only on projects, else null
340       */
341      @CheckForNull
342      public String getPeriod2Param() {
343        return period2Param;
344      }
345    
346      /**
347       * @since 2.5
348       */
349      public Resource setPeriod2Param(@Nullable String period2Param) {
350        this.period2Param = period2Param;
351        return this;
352      }
353    
354      /**
355       * @since 2.5 only on projects, else null
356       */
357      @CheckForNull
358      public String getPeriod3Param() {
359        return period3Param;
360      }
361    
362      /**
363       * @since 2.5
364       */
365      public Resource setPeriod3Param(@Nullable String period3Param) {
366        this.period3Param = period3Param;
367        return this;
368      }
369    
370      /**
371       * @since 2.5 only on projects, else null
372       */
373      @CheckForNull
374      public String getPeriod4Param() {
375        return period4Param;
376      }
377    
378      /**
379       * @since 2.5
380       */
381      public Resource setPeriod4Param(@Nullable String period4Param) {
382        this.period4Param = period4Param;
383        return this;
384      }
385    
386      /**
387       * @since 2.5 only on projects, else null
388       */
389      @CheckForNull
390      public String getPeriod5Param() {
391        return period5Param;
392      }
393    
394      /**
395       * @since 2.5
396       */
397      public Resource setPeriod5Param(@Nullable String period5Param) {
398        this.period5Param = period5Param;
399        return this;
400      }
401    
402      /**
403       * @since 2.5 only on projects, else null
404       */
405      @CheckForNull
406      public Date getPeriod1Date() {
407        return period1Date;
408      }
409    
410      /**
411       * @since 2.5
412       */
413      public Resource setPeriod1Date(@Nullable Date period1Date) {
414        this.period1Date = period1Date;
415        return this;
416      }
417    
418      /**
419       * @since 2.5 only on projects, else null
420       */
421      @CheckForNull
422      public Date getPeriod2Date() {
423        return period2Date;
424      }
425    
426      /**
427       * @since 2.5
428       */
429      public Resource setPeriod2Date(@Nullable Date period2Date) {
430        this.period2Date = period2Date;
431        return this;
432      }
433    
434      /**
435       * @since 2.5 only on projects, else null
436       */
437      @CheckForNull
438      public Date getPeriod3Date() {
439        return period3Date;
440      }
441    
442      /**
443       * @since 2.5
444       */
445      public Resource setPeriod3Date(@Nullable Date period3Date) {
446        this.period3Date = period3Date;
447        return this;
448      }
449    
450      /**
451       * @since 2.5 only on projects, else null
452       */
453      @CheckForNull
454      public Date getPeriod4Date() {
455        return period4Date;
456      }
457    
458      /**
459       * @since 2.5
460       */
461      public Resource setPeriod4Date(@Nullable Date period4Date) {
462        this.period4Date = period4Date;
463        return this;
464      }
465    
466      /**
467       * @since 2.5 only on projects, else null
468       */
469      @CheckForNull
470      public Date getPeriod5Date() {
471        return period5Date;
472      }
473    
474      /**
475       * @since 2.5
476       */
477      public Resource setPeriod5Date(@Nullable Date period5Date) {
478        this.period5Date = period5Date;
479        return this;
480      }
481    
482      @Override
483      public String toString() {
484        return new StringBuilder()
485            .append("[id=")
486            .append(id)
487            .append(",key=")
488            .append(key)
489            .append("]")
490            .toString();
491      }
492    }