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.api.workflow.internal;
021    
022    import com.google.common.annotations.Beta;
023    import com.google.common.base.Preconditions;
024    import com.google.common.base.Strings;
025    import com.google.common.collect.Lists;
026    import com.google.common.collect.Maps;
027    import org.apache.commons.lang.builder.ReflectionToStringBuilder;
028    import org.apache.commons.lang.builder.ToStringStyle;
029    import org.sonar.api.workflow.Comment;
030    import org.sonar.api.workflow.MutableReview;
031    import org.sonar.api.utils.KeyValueFormat;
032    
033    import javax.annotation.Nullable;
034    import java.util.Collections;
035    import java.util.List;
036    import java.util.Map;
037    
038    /**
039     * @since 3.1
040     */
041    @Beta
042    public final class DefaultReview implements MutableReview {
043    
044      private Long violationId;
045      private Long reviewId;
046      private String ruleRepositoryKey;
047      private String ruleKey;
048      private String ruleName;
049      private Long line;
050      private boolean switchedOff = false;
051      private boolean manual = false;
052      private String message;
053      private String status;
054      private String resolution;
055      private String severity;
056      private Map<String, String> properties;
057      private List<Comment> newComments;
058    
059      public Long getViolationId() {
060        return violationId;
061      }
062    
063      public DefaultReview setViolationId(Long violationId) {
064        this.violationId = violationId;
065        return this;
066      }
067    
068      public Long getReviewId() {
069        return reviewId;
070      }
071    
072      public DefaultReview setReviewId(Long reviewId) {
073        this.reviewId = reviewId;
074        return this;
075      }
076    
077      public String getRuleRepositoryKey() {
078        return ruleRepositoryKey;
079      }
080    
081      public DefaultReview setRuleRepositoryKey(String s) {
082        this.ruleRepositoryKey = s;
083        return this;
084      }
085    
086      public String getRuleKey() {
087        return ruleKey;
088      }
089    
090      public DefaultReview setRuleKey(String s) {
091        this.ruleKey = s;
092        return this;
093      }
094    
095      public String getRuleName() {
096        return ruleName;
097      }
098    
099      public DefaultReview setRuleName(String s) {
100        this.ruleName = s;
101        return this;
102      }
103    
104      public Long getLine() {
105        return line;
106      }
107    
108      public DefaultReview setLine(Long line) {
109        this.line = line;
110        return this;
111      }
112    
113      public boolean isSwitchedOff() {
114        return switchedOff;
115      }
116    
117      public DefaultReview setSwitchedOff(boolean b) {
118        this.switchedOff = b;
119        return this;
120      }
121    
122      public boolean isManual() {
123        return manual;
124      }
125    
126      public DefaultReview setManual(boolean manual) {
127        this.manual = manual;
128        return this;
129      }
130    
131      public String getMessage() {
132        return message;
133      }
134    
135      public DefaultReview setMessage(String message) {
136        this.message = message;
137        return this;
138      }
139    
140      public String getStatus() {
141        return status;
142      }
143    
144      public DefaultReview setStatus(String s) {
145        Preconditions.checkArgument(!Strings.isNullOrEmpty(s));
146        this.status = s;
147        return this;
148      }
149    
150      public String getResolution() {
151        return resolution;
152      }
153    
154      public DefaultReview setResolution(@Nullable String s) {
155        this.resolution = s;
156        return this;
157      }
158    
159      public String getSeverity() {
160        return severity;
161      }
162    
163      public DefaultReview setSeverity(String s) {
164        Preconditions.checkArgument(!Strings.isNullOrEmpty(s));
165        this.severity = s;
166        return this;
167      }
168    
169      public Map<String, String> getProperties() {
170        if (properties == null) {
171          return Collections.emptyMap();
172        }
173        return properties;
174      }
175    
176      public DefaultReview setProperties(Map<String, String> properties) {
177        this.properties = properties;
178        return this;
179      }
180    
181      public DefaultReview setPropertiesAsString(@Nullable String s) {
182        this.properties = (s == null ? null : KeyValueFormat.parse(s));
183        return this;
184      }
185    
186      public Comment createComment() {
187        if (newComments == null) {
188          newComments = Lists.newArrayList();
189        }
190        Comment comment = new DefaultComment();
191        newComments.add(comment);
192        return comment;
193      }
194    
195      public List<Comment> getNewComments() {
196        if (newComments == null) {
197          return Collections.emptyList();
198        }
199        return newComments;
200      }
201    
202      public DefaultReview setProperty(String key, @Nullable String value) {
203        if (properties == null) {
204          // keeping entries ordered by key allows to have consistent behavior in unit tests
205          properties = Maps.newLinkedHashMap();
206        }
207        properties.put(key, value);
208        return this;
209      }
210    
211      @Override
212      public String toString() {
213        return new ReflectionToStringBuilder(this, ToStringStyle.SIMPLE_STYLE).toString();
214      }
215    }