aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabrice Bellingard <bellingard@gmail.com>2011-05-04 16:53:02 +0200
committerFabrice Bellingard <bellingard@gmail.com>2011-05-04 16:53:02 +0200
commit1ae9da926fecb5e2eac4bb9f2f21c60db30320b4 (patch)
tree6eaa5ee7c401c52a75db7fa06cbdf590b2cac186
parent1d3bedbab5cc4c5051db2b1781d43d1a7b68395f (diff)
downloadsonarqube-1ae9da926fecb5e2eac4bb9f2f21c60db30320b4.tar.gz
sonarqube-1ae9da926fecb5e2eac4bb9f2f21c60db30320b4.zip
SONAR-2381, SONAR-2382 Web services return comment in HTML by default
Available for the Violation and Review WS: - parameter 'output' on the request - if set to 'html', comments are returned in HTML - otherwise comments are returned as raw text - Java WS client updated consequently
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/api/reviews_controller.rb5
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/api/violations_controller.rb6
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/review.rb20
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/rule_failure.rb8
-rw-r--r--sonar-ws-client/src/main/java/org/sonar/wsclient/services/ReviewQuery.java17
-rw-r--r--sonar-ws-client/src/main/java/org/sonar/wsclient/services/ViolationQuery.java17
-rw-r--r--sonar-ws-client/src/test/java/org/sonar/wsclient/services/ReviewQueryTest.java13
-rw-r--r--sonar-ws-client/src/test/java/org/sonar/wsclient/services/ViolationQueryTest.java5
8 files changed, 64 insertions, 27 deletions
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/reviews_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/reviews_controller.rb
index ad85564b11b..b178a345f5c 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/reviews_controller.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/reviews_controller.rb
@@ -23,11 +23,12 @@ require 'json'
class Api::ReviewsController < Api::ApiController
def index
+ convert_markdown=(params[:output]=='html')
reviews=select_authorized(:user, Review.search(params), :project)
respond_to do |format|
- format.json { render :json => jsonp(Review.reviews_to_json(reviews)) }
- format.xml {render :xml => Review.reviews_to_xml(reviews)}
+ format.json { render :json => jsonp(Review.reviews_to_json(reviews, convert_markdown)) }
+ format.xml {render :xml => Review.reviews_to_xml(reviews, convert_markdown)}
format.text { render :text => text_not_supported }
end
end
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/violations_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/violations_controller.rb
index 55a8198579a..a22223d549d 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/violations_controller.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/violations_controller.rb
@@ -93,16 +93,18 @@ class Api::ViolationsController < Api::ResourceRestController
def rest_to_json(rule_failures)
include_review=(params['include_review']=='true')
- JSON(rule_failures.collect{|rule_failure| rule_failure.to_json(include_review)})
+ convert_markdown=(params[:output]=='html')
+ JSON(rule_failures.collect{|rule_failure| rule_failure.to_json(include_review, convert_markdown)})
end
def rest_to_xml(rule_failures)
include_review=(params['include_review']=='true')
+ convert_markdown=(params[:output]=='html')
xml = Builder::XmlMarkup.new(:indent => 0)
xml.instruct!
xml.violations do
rule_failures.each do |rule_failure|
- rule_failure.to_xml(xml, include_review)
+ rule_failure.to_xml(xml, include_review, convert_markdown)
end
end
end
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/review.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/review.rb
index 3a45ff5b0ed..6d5af841492 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/models/review.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/models/review.rb
@@ -128,17 +128,17 @@ class Review < ActiveRecord::Base
Review.find(:all, :include => [ 'review_comments' ], :order => 'created_at DESC', :conditions => [conditions.join(' AND '), values], :limit => 200)
end
- def self.reviews_to_xml(reviews)
+ def self.reviews_to_xml(reviews, convert_markdown=false)
xml = Builder::XmlMarkup.new(:indent => 0)
xml.instruct!
xml.reviews do
reviews.each do |review|
- review.to_xml(xml)
+ review.to_xml(xml, convert_markdown)
end
end
end
- def to_xml(xml)
+ def to_xml(xml, convert_markdown=false)
xml.review do
xml.id(id.to_i)
xml.createdAt(Api::Utils.format_datetime(created_at))
@@ -156,18 +156,22 @@ class Review < ActiveRecord::Base
xml.comment do
xml.author(comment.user.login)
xml.updatedAt(Api::Utils.format_datetime(comment.updated_at))
- xml.text(comment.html_text)
+ if convert_markdown
+ xml.text(comment.html_text)
+ else
+ xml.text(comment.review_text)
+ end
end
end
end
end
end
- def self.reviews_to_json(reviews)
- JSON(reviews.collect{|review| review.to_json()})
+ def self.reviews_to_json(reviews, convert_markdown=false)
+ JSON(reviews.collect{|review| review.to_json(convert_markdown)})
end
- def to_json
+ def to_json(convert_markdown=false)
json = {}
json['id'] = id.to_i
json['createdAt'] = Api::Utils.format_datetime(created_at)
@@ -185,7 +189,7 @@ class Review < ActiveRecord::Base
comments << {
'author' => comment.user.login,
'updatedAt' => Api::Utils.format_datetime(comment.updated_at),
- 'text' => comment.html_text
+ 'text' => convert_markdown ? comment.html_text : comment.review_text
}
end
json['comments'] = comments
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/rule_failure.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/rule_failure.rb
index 30615035a46..9842e8dfbb7 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/models/rule_failure.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/models/rule_failure.rb
@@ -44,7 +44,7 @@ class RuleFailure < ActiveRecord::Base
end
end
- def to_json(include_review=false)
+ def to_json(include_review=false, convert_markdown=false)
json = {}
json['message'] = message
json['line'] = line if line && line>=1
@@ -64,11 +64,11 @@ class RuleFailure < ActiveRecord::Base
:qualifier => snapshot.project.qualifier,
:language => snapshot.project.language
}
- json['review'] = review.to_json if include_review && review
+ json['review'] = review.to_json(convert_markdown) if include_review && review
json
end
- def to_xml(xml=Builder::XmlMarkup.new(:indent => 0), include_review=false)
+ def to_xml(xml=Builder::XmlMarkup.new(:indent => 0), include_review=false, convert_markdown=false)
xml.violation do
xml.message(message)
xml.line(line) if line && line>=1
@@ -88,7 +88,7 @@ class RuleFailure < ActiveRecord::Base
xml.qualifier(snapshot.project.qualifier)
xml.language(snapshot.project.language)
end
- review.to_xml(xml) if include_review && review
+ review.to_xml(xml, convert_markdown) if include_review && review
end
end
diff --git a/sonar-ws-client/src/main/java/org/sonar/wsclient/services/ReviewQuery.java b/sonar-ws-client/src/main/java/org/sonar/wsclient/services/ReviewQuery.java
index 21dc8d0d0d5..38c3780ce2d 100644
--- a/sonar-ws-client/src/main/java/org/sonar/wsclient/services/ReviewQuery.java
+++ b/sonar-ws-client/src/main/java/org/sonar/wsclient/services/ReviewQuery.java
@@ -35,6 +35,7 @@ public class ReviewQuery extends Query<Review> {
private String[] resourceKeysOrIds;
private String[] authorLoginsOrIds;
private String[] assigneeLoginsOrIds;
+ private String output;
public ReviewQuery() {
}
@@ -187,6 +188,21 @@ public class ReviewQuery extends Query<Review> {
return this;
}
+ /**
+ * @return the output
+ */
+ public String getOutput() {
+ return output;
+ }
+
+ /**
+ * @param output the output to set
+ */
+ public ReviewQuery setOutput(String output) {
+ this.output = output;
+ return this;
+ }
+
@Override
public String getUrl() {
StringBuilder url = new StringBuilder(BASE_URL);
@@ -203,6 +219,7 @@ public class ReviewQuery extends Query<Review> {
appendUrlParameter(url, "resources", resourceKeysOrIds);
appendUrlParameter(url, "authors", authorLoginsOrIds);
appendUrlParameter(url, "assignees", assigneeLoginsOrIds);
+ appendUrlParameter(url, "output", output);
return url.toString();
}
diff --git a/sonar-ws-client/src/main/java/org/sonar/wsclient/services/ViolationQuery.java b/sonar-ws-client/src/main/java/org/sonar/wsclient/services/ViolationQuery.java
index e3eb5dd60de..42408d98c03 100644
--- a/sonar-ws-client/src/main/java/org/sonar/wsclient/services/ViolationQuery.java
+++ b/sonar-ws-client/src/main/java/org/sonar/wsclient/services/ViolationQuery.java
@@ -32,6 +32,7 @@ public class ViolationQuery extends Query<Violation> {
private String[] severities;
private Integer limit;
private Boolean includeReview;
+ private String output;
public ViolationQuery(String resourceKeyOrId) {
this.resourceKeyOrId = resourceKeyOrId;
@@ -144,6 +145,21 @@ public class ViolationQuery extends Query<Violation> {
return this;
}
+ /**
+ * @since 2.8
+ */
+ public String getOutput() {
+ return output;
+ }
+
+ /**
+ * @since 2.8
+ */
+ public ViolationQuery setOutput(String output) {
+ this.output = output;
+ return this;
+ }
+
@Override
public String getUrl() {
StringBuilder url = new StringBuilder(BASE_URL);
@@ -159,6 +175,7 @@ public class ViolationQuery extends Query<Violation> {
appendUrlParameter(url, "categories", categories);
appendUrlParameter(url, "priorities", severities);
appendUrlParameter(url, "include_review", includeReview);
+ appendUrlParameter(url, "output", output);
return url.toString();
}
diff --git a/sonar-ws-client/src/test/java/org/sonar/wsclient/services/ReviewQueryTest.java b/sonar-ws-client/src/test/java/org/sonar/wsclient/services/ReviewQueryTest.java
index 0dc688784c1..bf692cbbcb5 100644
--- a/sonar-ws-client/src/test/java/org/sonar/wsclient/services/ReviewQueryTest.java
+++ b/sonar-ws-client/src/test/java/org/sonar/wsclient/services/ReviewQueryTest.java
@@ -40,16 +40,11 @@ public class ReviewQueryTest extends QueryTestCase {
@Test
public void resourceTreeViolations() {
ReviewQuery query = new ReviewQuery();
- query.setIds(10L, 11L);
- query.setReviewType("FALSE_POSITIVE");
- query.setStatuses("OPEN");
- query.setSeverities("MINOR", "INFO");
- query.setProjectKeysOrIds("com.sonar.foo:bar");
- query.setResourceKeysOrIds("2", "3");
- query.setAuthorLoginsOrIds("20");
- query.setAssigneeLoginsOrIds("admin");
+ query.setIds(10L, 11L).setReviewType("FALSE_POSITIVE").setStatuses("OPEN").setSeverities("MINOR", "INFO")
+ .setProjectKeysOrIds("com.sonar.foo:bar").setResourceKeysOrIds("2", "3").setAuthorLoginsOrIds("20").setAssigneeLoginsOrIds("admin")
+ .setOutput("html");
assertThat(
query.getUrl(),
- is("/api/reviews?ids=10,11&review_type=FALSE_POSITIVE&statuses=OPEN&severities=MINOR,INFO&projects=com.sonar.foo%3Abar&resources=2,3&authors=20&assignees=admin&"));
+ is("/api/reviews?ids=10,11&review_type=FALSE_POSITIVE&statuses=OPEN&severities=MINOR,INFO&projects=com.sonar.foo%3Abar&resources=2,3&authors=20&assignees=admin&output=html&"));
}
}
diff --git a/sonar-ws-client/src/test/java/org/sonar/wsclient/services/ViolationQueryTest.java b/sonar-ws-client/src/test/java/org/sonar/wsclient/services/ViolationQueryTest.java
index f7f9279906d..9a7140db3ee 100644
--- a/sonar-ws-client/src/test/java/org/sonar/wsclient/services/ViolationQueryTest.java
+++ b/sonar-ws-client/src/test/java/org/sonar/wsclient/services/ViolationQueryTest.java
@@ -40,9 +40,10 @@ public class ViolationQueryTest extends QueryTestCase {
.setLimit(20)
.setSeverities("MAJOR", "BLOCKER")
.setQualifiers("FIL")
- .setRuleKeys("checkstyle:foo", "pmd:bar");
+ .setRuleKeys("checkstyle:foo", "pmd:bar")
+ .setOutput("html");
assertThat(
query.getUrl(),
- is("/api/violations?resource=myproject&depth=-1&limit=20&qualifiers=FIL&rules=checkstyle%3Afoo,pmd%3Abar&priorities=MAJOR,BLOCKER&"));
+ is("/api/violations?resource=myproject&depth=-1&limit=20&qualifiers=FIL&rules=checkstyle%3Afoo,pmd%3Abar&priorities=MAJOR,BLOCKER&output=html&"));
}
}