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 /**
023 * @since 2.9
024 */
025 public final class ReviewUpdateQuery extends UpdateQuery<Review> {
026
027 private long reviewId;
028 private String action;
029 private String comment;
030 private String assignee;
031 private String resolution;
032
033 /**
034 * Creates query to add comment to review.
035 */
036 public static ReviewUpdateQuery addComment(long id, String comment) {
037 return new ReviewUpdateQuery(id, "add_comment").setComment(comment);
038 }
039
040 /**
041 * Creates query to reassign review.
042 */
043 public static ReviewUpdateQuery reassign(long id, String assignee) {
044 return new ReviewUpdateQuery(id, "reassign").setAssignee(assignee);
045 }
046
047 /**
048 * Creates query to resolve review.
049 * If resolution "FALSE-POSITIVE", then you must provide comment using {@link #setComment(String)}.
050 * Otherwise comment is optional.
051 *
052 * @param resolution
053 * can be "FIXED" or "FALSE-POSITIVE"
054 */
055 public static ReviewUpdateQuery resolve(long id, String resolution) {
056 return new ReviewUpdateQuery(id, "resolve").setResolution(resolution);
057 }
058
059 /**
060 * Creates query to reopen review.
061 * If review was resolved as "FALSE-POSITIVE", then you must provide comment using {@link #setComment(String)}.
062 * Otherwise comment is optional.
063 */
064 public static ReviewUpdateQuery reopen(long id) {
065 return new ReviewUpdateQuery(id, "reopen");
066 }
067
068 private ReviewUpdateQuery(long id, String action) {
069 this.reviewId = id;
070 this.action = action;
071 }
072
073 public long getReviewId() {
074 return reviewId;
075 }
076
077 public ReviewUpdateQuery setComment(String comment) {
078 this.comment = comment;
079 return this;
080 }
081
082 public String getComment() {
083 return comment;
084 }
085
086 public String getAssignee() {
087 return assignee;
088 }
089
090 public ReviewUpdateQuery setAssignee(String userLogin) {
091 this.assignee = userLogin;
092 return this;
093 }
094
095 public String getResolution() {
096 return resolution;
097 }
098
099 /**
100 * @param resolution
101 * can be "FIXED" or "FALSE-POSITIVE"
102 */
103 public ReviewUpdateQuery setResolution(String resolution) {
104 this.resolution = resolution;
105 return this;
106 }
107
108 @Override
109 public String getUrl() {
110 StringBuilder url = new StringBuilder();
111 url.append(ReviewQuery.BASE_URL)
112 .append('/').append(action)
113 .append('/').append(reviewId)
114 .append('?');
115 appendUrlParameter(url, "assignee", getAssignee());
116 appendUrlParameter(url, "resolution", getResolution());
117 return url.toString();
118 }
119
120 /**
121 * Property {@link #comment} transmitted through request body as content may exceed URL size allowed by the server.
122 */
123 @Override
124 public String getBody() {
125 return comment;
126 }
127
128 @Override
129 public Class<Review> getModelClass() {
130 return Review.class;
131 }
132 }