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 */
020package org.sonar.wsclient.services;
021
022import javax.annotation.CheckForNull;
023import javax.annotation.Nullable;
024
025import java.util.Collections;
026import java.util.Date;
027import java.util.List;
028
029public 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}