/* * Firetweet - Twitter client for Android * * Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package twitter4j.http; import java.util.HashMap; import java.util.List; import java.util.Map; import twitter4j.TwitterException; import twitter4j.auth.Authorization; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationContext; import static twitter4j.http.RequestMethod.DELETE; import static twitter4j.http.RequestMethod.GET; import static twitter4j.http.RequestMethod.HEAD; import static twitter4j.http.RequestMethod.POST; import static twitter4j.http.RequestMethod.PUT; /** * HTTP Client wrapper with handy request methods, ResponseListener mechanism * * @author Yusuke Yamamoto - yusuke at mac.com */ public final class HttpClientWrapper { private final Configuration wrapperConf; private final HttpClient http; private final Map<String, List<String>> requestHeaders; private HttpResponseListener httpResponseListener; // never used with this project. Just for handiness for those using this // class. public HttpClientWrapper() { wrapperConf = ConfigurationContext.getInstance(); requestHeaders = wrapperConf.getRequestHeaders(); http = FactoryUtils.getHttpClient(wrapperConf); } public HttpClientWrapper(final Configuration wrapperConf) { this.wrapperConf = wrapperConf; requestHeaders = wrapperConf.getRequestHeaders(); http = FactoryUtils.getHttpClient(wrapperConf); } public HttpResponse delete(final String url, final String signUrl) throws TwitterException { return delete(url, signUrl, null, null); } public HttpResponse delete(final String url, final String signUrl, final Authorization authorization) throws TwitterException { return delete(url, signUrl, null, authorization); } public HttpResponse delete(final String url, final String signUrl, final HttpParameter[] parameters) throws TwitterException { return delete(url, signUrl, parameters, null); } public HttpResponse delete(final String url, final String signUrl, final HttpParameter[] parameters, final Authorization authorization) throws TwitterException { return request(new HttpRequest(DELETE, url, signUrl, parameters, authorization, requestHeaders)); } @Override public boolean equals(final Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; final HttpClientWrapper that = (HttpClientWrapper) o; if (!http.equals(that.http)) return false; if (!requestHeaders.equals(that.requestHeaders)) return false; if (!wrapperConf.equals(that.wrapperConf)) return false; return true; } public HttpResponse get(final String url, final String signUrl) throws TwitterException { return get(url, signUrl, null, null, null); } public HttpResponse get(final String url, final String signUrl, final Authorization authorization) throws TwitterException { return get(url, signUrl, null, authorization); } public HttpResponse get(final String url, final String signUrl, final HttpParameter[] parameters) throws TwitterException { return get(url, signUrl, parameters, null, null); } public HttpResponse get(final String url, final String signUrl, final HttpParameter[] parameters, final Authorization authorization) throws TwitterException { return get(url, signUrl, parameters, authorization, null); } public HttpResponse get(final String url, final String signUrl, final HttpParameter[] parameters, final Map<String, List<String>> requestHeaders) throws TwitterException { return get(url, signUrl, parameters, null, requestHeaders); } public HttpResponse get(final String url, final String signUrl, final Map<String, List<String>> requestHeaders) throws TwitterException { return get(url, signUrl, null, null, requestHeaders); } public HttpResponse get(final String url, final String signUrl, final Authorization authorization, final Map<String, List<String>> requestHeaders) throws TwitterException { return get(url, signUrl, null, authorization, requestHeaders); } public HttpResponse get(final String url, final String signUrl, final HttpParameter[] parameters, final Authorization authorization, final Map<String, List<String>> requestHeaders) throws TwitterException { final Map<String, List<String>> headers = new HashMap<>(this.requestHeaders); if (requestHeaders != null) { headers.putAll(requestHeaders); } return request(new HttpRequest(GET, url, signUrl, parameters, authorization, headers)); } @Override public int hashCode() { int result = wrapperConf.hashCode(); result = 31 * result + http.hashCode(); result = 31 * result + requestHeaders.hashCode(); return result; } public HttpResponse head(final String url, final String signUrl) throws TwitterException { return head(url, signUrl, null, null); } public HttpResponse head(final String url, final String signUrl, final Authorization authorization) throws TwitterException { return head(url, signUrl, null, authorization); } public HttpResponse head(final String url, final String signUrl, final HttpParameter[] parameters) throws TwitterException { return head(url, signUrl, parameters, null); } public HttpResponse head(final String url, final String signUrl, final HttpParameter[] parameters, final Authorization authorization) throws TwitterException { return request(new HttpRequest(HEAD, url, signUrl, parameters, authorization, requestHeaders)); } public HttpResponse post(final String url, final String signUrl) throws TwitterException { return post(url, signUrl, null, null, null); } public HttpResponse post(final String url, final String signUrl, final Authorization authorization) throws TwitterException { return post(url, signUrl, null, authorization, null); } public HttpResponse post(final String url, final String signUrl, final HttpParameter[] parameters) throws TwitterException { return post(url, signUrl, parameters, null, null); } public HttpResponse post(final String url, final String signUrl, final HttpParameter[] parameters, final Authorization authorization) throws TwitterException { return post(url, signUrl, parameters, authorization, null); } public HttpResponse post(final String url, final String signUrl, final HttpParameter[] parameters, final Authorization authorization, final Map<String, List<String>> requestHeaders) throws TwitterException { final Map<String, List<String>> headers = new HashMap<>(this.requestHeaders); if (requestHeaders != null) { headers.putAll(requestHeaders); } return request(new HttpRequest(POST, url, signUrl, parameters, authorization, headers)); } public HttpResponse post(final String url, final String signUrl, final HttpParameter[] parameters, final Map<String, List<String>> requestHeaders) throws TwitterException { return post(url, signUrl, parameters, null, requestHeaders); } public HttpResponse put(final String url, final String signUrl) throws TwitterException { return put(url, signUrl, null, null); } public HttpResponse put(final String url, final String signUrl, final Authorization authorization) throws TwitterException { return put(url, signUrl, null, authorization); } public HttpResponse put(final String url, final String signUrl, final HttpParameter[] parameters) throws TwitterException { return put(url, signUrl, parameters, null); } public HttpResponse put(final String url, final String signUrl, final HttpParameter[] parameters, final Authorization authorization) throws TwitterException { return request(new HttpRequest(PUT, url, signUrl, parameters, authorization, requestHeaders)); } public void setHttpResponseListener(final HttpResponseListener listener) { httpResponseListener = listener; } public void shutdown() { http.shutdown(); } @Override public String toString() { return "HttpClientWrapper{" + "wrapperConf=" + wrapperConf + ", http=" + http + ", requestHeaders=" + requestHeaders + ", httpResponseListener=" + httpResponseListener + '}'; } private HttpResponse request(final HttpRequest req) throws TwitterException { HttpResponse res; try { res = http.request(req); // fire HttpResponseEvent if (httpResponseListener != null) { httpResponseListener.httpResponseReceived(new HttpResponseEvent(req, res, null)); } } catch (final TwitterException te) { if (httpResponseListener != null) { httpResponseListener.httpResponseReceived(new HttpResponseEvent(req, null, te)); } throw te; } return res; } }