001 /* 002 * SonarQube, open source software quality management tool. 003 * Copyright (C) 2008-2013 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.internal; 021 022 import com.github.kevinsawicki.http.HttpRequest; 023 import org.sonar.wsclient.base.HttpException; 024 025 import javax.annotation.Nullable; 026 import java.util.Map; 027 028 /** 029 * Not an API. Please do not use this class, except maybe for unit tests. 030 */ 031 public class HttpRequestFactory { 032 033 private final String baseUrl; 034 private String login, password, proxyHost, proxyLogin, proxyPassword; 035 private int proxyPort; 036 private int connectTimeoutInMilliseconds; 037 private int readTimeoutInMilliseconds; 038 039 public HttpRequestFactory(String baseUrl) { 040 this.baseUrl = baseUrl; 041 } 042 043 public HttpRequestFactory setLogin(@Nullable String login) { 044 this.login = login; 045 return this; 046 } 047 048 public HttpRequestFactory setPassword(@Nullable String password) { 049 this.password = password; 050 return this; 051 } 052 053 public HttpRequestFactory setProxyHost(@Nullable String proxyHost) { 054 this.proxyHost = proxyHost; 055 return this; 056 } 057 058 public HttpRequestFactory setProxyLogin(@Nullable String proxyLogin) { 059 this.proxyLogin = proxyLogin; 060 return this; 061 } 062 063 public HttpRequestFactory setProxyPassword(@Nullable String proxyPassword) { 064 this.proxyPassword = proxyPassword; 065 return this; 066 } 067 068 public HttpRequestFactory setProxyPort(int proxyPort) { 069 this.proxyPort = proxyPort; 070 return this; 071 } 072 073 public HttpRequestFactory setConnectTimeoutInMilliseconds(int connectTimeoutInMilliseconds) { 074 this.connectTimeoutInMilliseconds = connectTimeoutInMilliseconds; 075 return this; 076 } 077 078 public HttpRequestFactory setReadTimeoutInMilliseconds(int readTimeoutInMilliseconds) { 079 this.readTimeoutInMilliseconds = readTimeoutInMilliseconds; 080 return this; 081 } 082 083 public String getBaseUrl() { 084 return baseUrl; 085 } 086 087 public String getLogin() { 088 return login; 089 } 090 091 public String getPassword() { 092 return password; 093 } 094 095 public String getProxyHost() { 096 return proxyHost; 097 } 098 099 public String getProxyLogin() { 100 return proxyLogin; 101 } 102 103 public String getProxyPassword() { 104 return proxyPassword; 105 } 106 107 public int getProxyPort() { 108 return proxyPort; 109 } 110 111 public int getConnectTimeoutInMilliseconds() { 112 return connectTimeoutInMilliseconds; 113 } 114 115 public int getReadTimeoutInMilliseconds() { 116 return readTimeoutInMilliseconds; 117 } 118 119 public String get(String wsUrl, Map<String, Object> queryParams) { 120 HttpRequest request = prepare(HttpRequest.get(baseUrl + wsUrl, queryParams, true)); 121 return execute(request); 122 } 123 124 public String post(String wsUrl, Map<String, Object> queryParams) { 125 HttpRequest request = prepare(HttpRequest.post(baseUrl + wsUrl, true)).form(queryParams, HttpRequest.CHARSET_UTF8); 126 return execute(request); 127 } 128 129 private String execute(HttpRequest request) { 130 try { 131 if (request.ok()) { 132 return request.body(HttpRequest.CHARSET_UTF8); 133 } 134 // TODO handle error messages 135 throw new HttpException(request.url().toString(), request.code()); 136 137 } catch (HttpRequest.HttpRequestException e) { 138 throw new IllegalStateException("Fail to request " + request.url(), e.getCause()); 139 } 140 } 141 142 private HttpRequest prepare(HttpRequest request) { 143 if (proxyHost != null) { 144 request.useProxy(proxyHost, proxyPort); 145 if (proxyLogin != null) { 146 request.proxyBasic(proxyLogin, proxyPassword); 147 } 148 } 149 request 150 .acceptGzipEncoding() 151 .uncompress(true) 152 .acceptJson() 153 .acceptCharset(HttpRequest.CHARSET_UTF8) 154 .connectTimeout(connectTimeoutInMilliseconds) 155 .readTimeout(readTimeoutInMilliseconds) 156 .trustAllCerts() 157 .trustAllHosts(); 158 if (login != null) { 159 request.basic(login, password); 160 } 161 return request; 162 } 163 }