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