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.issue.internal; 021 022 import org.json.simple.JSONValue; 023 import org.sonar.wsclient.internal.EncodingUtils; 024 import org.sonar.wsclient.internal.HttpRequestFactory; 025 import org.sonar.wsclient.issue.*; 026 027 import javax.annotation.Nullable; 028 029 import java.util.List; 030 import java.util.Map; 031 032 /** 033 * Do not instantiate this class, but use {@link org.sonar.wsclient.SonarClient#issueClient()}. 034 */ 035 public class DefaultIssueClient implements IssueClient { 036 037 private static final String SEARCH_URL = "/api/issues/search"; 038 private static final String ASSIGN_URL = "/api/issues/assign"; 039 040 private final HttpRequestFactory requestFactory; 041 private final IssueJsonParser parser; 042 043 public DefaultIssueClient(HttpRequestFactory requestFactory) { 044 this.requestFactory = requestFactory; 045 this.parser = new IssueJsonParser(); 046 } 047 048 public Issues find(IssueQuery query) { 049 String json = requestFactory.get(SEARCH_URL, query.urlParams()); 050 return parser.parseIssues(json); 051 } 052 053 @Override 054 public Issue create(NewIssue newIssue) { 055 String json = requestFactory.post("/api/issues/create", newIssue.urlParams()); 056 return jsonToIssue(json); 057 } 058 059 @Override 060 public Issue setSeverity(String issueKey, String severity) { 061 Map<String, Object> params = EncodingUtils.toMap("issue", issueKey, "severity", severity); 062 String json = requestFactory.post("/api/issues/set_severity", params); 063 return jsonToIssue(json); 064 } 065 066 @Override 067 public Issue assign(String issueKey, @Nullable String assignee) { 068 Map<String, Object> params = EncodingUtils.toMap("issue", issueKey, "assignee", assignee); 069 String json = requestFactory.post(ASSIGN_URL, params); 070 return jsonToIssue(json); 071 } 072 073 @Override 074 public Issue assignToMe(String issueKey) { 075 Map<String, Object> params = EncodingUtils.toMap("issue", issueKey, "me", "true"); 076 String json = requestFactory.post(ASSIGN_URL, params); 077 return jsonToIssue(json); 078 } 079 080 @Override 081 public Issue plan(String issueKey, @Nullable String actionPlanKey) { 082 Map<String, Object> params = EncodingUtils.toMap("issue", issueKey, "plan", actionPlanKey); 083 String json = requestFactory.post("/api/issues/plan", params); 084 return jsonToIssue(json); 085 } 086 087 @Override 088 public IssueComment addComment(String issueKey, String markdownText) { 089 Map<String, Object> params = EncodingUtils.toMap("issue", issueKey, "text", markdownText); 090 String json = requestFactory.post("/api/issues/add_comment", params); 091 Map rootJson = (Map) JSONValue.parse(json); 092 return new DefaultIssueComment((Map) rootJson.get("comment")); 093 } 094 095 @Override 096 public List<String> transitions(String issueKey) { 097 Map<String, Object> queryParams = EncodingUtils.toMap("issue", issueKey); 098 String json = requestFactory.get("/api/issues/transitions", queryParams); 099 return parser.parseTransitions(json); 100 } 101 102 @Override 103 public Issue doTransition(String issueKey, String transition) { 104 Map<String, Object> params = EncodingUtils.toMap("issue", issueKey, "transition", transition); 105 String json = requestFactory.post("/api/issues/do_transition", params); 106 return jsonToIssue(json); 107 } 108 109 @Override 110 public List<String> actions(String issueKey) { 111 Map<String, Object> queryParams = EncodingUtils.toMap("issue", issueKey); 112 String json = requestFactory.get("/api/issues/actions", queryParams); 113 return parser.parseActions(json); 114 } 115 116 @Override 117 public Issue doAction(String issueKey, String action) { 118 Map<String, Object> params = EncodingUtils.toMap("issue", issueKey, "actionKey", action); 119 String json = requestFactory.post("/api/issues/do_action", params); 120 return jsonToIssue(json); 121 } 122 123 @Override 124 public BulkChange bulkChange(BulkChangeQuery query) { 125 String json = requestFactory.post("/api/issues/bulk_change", query.urlParams()); 126 return parser.parseBulkChange(json); 127 } 128 129 @Override 130 public List<IssueChange> changes(String issueKey) { 131 Map<String, Object> queryParams = EncodingUtils.toMap("issue", issueKey); 132 String json = requestFactory.post("/api/issues/changelog", queryParams); 133 return parser.parseChangelog(json); 134 } 135 136 private Issue jsonToIssue(String json) { 137 Map jsonRoot = (Map) JSONValue.parse(json); 138 return new DefaultIssue((Map) jsonRoot.get("issue")); 139 } 140 141 }