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.qualitygate.internal; 021 022 import org.json.simple.JSONValue; 023 import org.sonar.wsclient.internal.HttpRequestFactory; 024 import org.sonar.wsclient.qualitygate.*; 025 026 import java.util.*; 027 028 public class DefaultQualityGateClient implements QualityGateClient { 029 030 private static final String ROOT_URL = "/api/qualitygates"; 031 private static final String LIST_URL = ROOT_URL + "/list"; 032 private static final String SHOW_URL = ROOT_URL + "/show"; 033 private static final String CREATE_URL = ROOT_URL + "/create"; 034 private static final String CREATE_CONDITION_URL = ROOT_URL + "/create_condition"; 035 private static final String UPDATE_CONDITION_URL = ROOT_URL + "/update_condition"; 036 private static final String DELETE_CONDITION_URL = ROOT_URL + "/delete_condition"; 037 private static final String RENAME_URL = ROOT_URL + "/rename"; 038 private static final String DESTROY_URL = ROOT_URL + "/destroy"; 039 private static final String SET_DEFAULT_URL = ROOT_URL + "/set_as_default"; 040 private static final String UNSET_DEFAULT_URL = ROOT_URL + "/unset_default"; 041 private static final String SELECT_URL = ROOT_URL + "/select"; 042 private static final String DESELECT_URL = ROOT_URL + "/deselect"; 043 044 private final HttpRequestFactory requestFactory; 045 046 public DefaultQualityGateClient(HttpRequestFactory requestFactory) { 047 this.requestFactory = requestFactory; 048 } 049 050 @Override 051 public QualityGates list() { 052 String json = requestFactory.get(LIST_URL, Collections.<String, Object> emptyMap()); 053 return jsonToQualityGates(json); 054 } 055 056 @Override 057 public QualityGate create(String qGateName) { 058 String json = requestFactory.post(CREATE_URL, Collections.singletonMap("name", (Object) qGateName)); 059 return jsonToQualityGate(json); 060 } 061 062 @Override 063 public QualityGate rename(long qGateId, String qGateName) { 064 Map<String, Object> params = new HashMap<String, Object>(); 065 params.put("id", qGateId); 066 params.put("name", qGateName); 067 String json = requestFactory.post(RENAME_URL, params); 068 return jsonToQualityGate(json); 069 } 070 071 @Override 072 public QualityGateDetails show(long qGateId) { 073 String json = requestFactory.get(SHOW_URL, Collections.singletonMap("id", (Object) qGateId)); 074 return jsonToDetails(json); 075 } 076 077 @Override 078 public QualityGateDetails show(String qGateName) { 079 String json = requestFactory.get(SHOW_URL, Collections.singletonMap("name", (Object) qGateName)); 080 return jsonToDetails(json); 081 } 082 083 @Override 084 public QualityGateCondition createCondition(NewCondition condition) { 085 String json = requestFactory.post(CREATE_CONDITION_URL, condition.urlParams()); 086 return jsonToCondition(json); 087 } 088 089 @Override 090 public QualityGateCondition updateCondition(UpdateCondition condition) { 091 String json = requestFactory.post(UPDATE_CONDITION_URL, condition.urlParams()); 092 return jsonToCondition(json); 093 } 094 095 @Override 096 public void deleteCondition(long conditionId) { 097 requestFactory.post(DELETE_CONDITION_URL, Collections.singletonMap("id", (Object) conditionId)); 098 } 099 100 @Override 101 public void destroy(long qGateId) { 102 requestFactory.post(DESTROY_URL, Collections.singletonMap("id", (Object) qGateId)); 103 } 104 105 @Override 106 public void setDefault(long qGateId) { 107 requestFactory.post(SET_DEFAULT_URL, Collections.singletonMap("id", (Object) qGateId)); 108 } 109 110 @Override 111 public void unsetDefault() { 112 requestFactory.post(UNSET_DEFAULT_URL, Collections.<String, Object> emptyMap()); 113 } 114 115 @Override 116 public void selectProject(long qGateId, long projectId) { 117 requestFactory.post(SELECT_URL, selectionParams(qGateId, projectId)); 118 } 119 120 @Override 121 public void deselectProject(long qGateId, long projectId) { 122 requestFactory.post(DESELECT_URL, selectionParams(qGateId, projectId)); 123 } 124 125 private Map<String, Object> selectionParams(long qGateId, long projectId) { 126 Map<String, Object> params = new HashMap<String, Object>(); 127 params.put("gateId", Long.toString(qGateId)); 128 params.put("projectId", Long.toString(projectId)); 129 return params; 130 } 131 132 133 @SuppressWarnings({"rawtypes", "unchecked"}) 134 private QualityGate jsonToQualityGate(String json) { 135 Map jsonRoot = (Map) JSONValue.parse(json); 136 return new DefaultQualityGate((Map) jsonRoot); 137 } 138 139 @SuppressWarnings({"rawtypes", "unchecked"}) 140 private QualityGates jsonToQualityGates(String json) { 141 Map jsonRoot = (Map) JSONValue.parse(json); 142 return new DefaultQualityGates((Map) jsonRoot); 143 } 144 145 @SuppressWarnings({"rawtypes", "unchecked"}) 146 private QualityGateDetails jsonToDetails(String json) { 147 Map jsonRoot = (Map) JSONValue.parse(json); 148 return new DefaultQualityGateDetails((Map) jsonRoot, jsonToConditions(json)); 149 } 150 151 @SuppressWarnings({"rawtypes", "unchecked"}) 152 private Collection<QualityGateCondition> jsonToConditions(String json) { 153 Map jsonRoot = (Map) JSONValue.parse(json); 154 Collection<Map> conditionArray = (Collection<Map>) jsonRoot.get("conditions"); 155 Collection<QualityGateCondition> conditions = new ArrayList<QualityGateCondition>(); 156 if (conditionArray != null) { 157 for (Map conditionJson: conditionArray) { 158 conditions.add(new DefaultQualityGateCondition(conditionJson)); 159 } 160 } 161 return conditions; 162 } 163 164 @SuppressWarnings({"rawtypes", "unchecked"}) 165 private DefaultQualityGateCondition jsonToCondition(String json) { 166 return new DefaultQualityGateCondition((Map) JSONValue.parse(json)); 167 } 168 }