package io.evanwong.oss.hipchat.v2.commons;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.message.BasicHeader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
public abstract class GetRequest<T> extends Request<T> {
private static final Logger log = LoggerFactory.getLogger(GetRequest.class);
protected List<String> expansions = new ArrayList<>();
protected GetRequest(String accessToken, String baseUrl, HttpClient httpClient, ExecutorService executorService) {
super(accessToken, baseUrl, httpClient, executorService);
}
@Override
protected HttpResponse request() throws IOException {
Map<String, Object> params = toQueryMap();
if (!expansions.isEmpty()) {
params.put("expand", expansions.stream().collect(Collectors.joining(",")));
}
String encodedPath = getEncodedPath();
log.info("GET - path: {}, params: {}", encodedPath, params);
String query = params != null && params.size() > 0 ? "?" : "";
if (params != null) {
for (String key : params.keySet()) {
query += key + "=" + params.get(key) + "&";
}
}
HttpGet httpGet = new HttpGet(baseUrl + encodedPath + query);
httpGet.addHeader(new BasicHeader("Authorization", "Bearer " + accessToken));
return httpClient.execute(httpGet, HttpClientContext.create());
}
public boolean addExpansion(String title) {
return expansions.add(title);
}
public List<String> getExpansions() {
return new ArrayList<>(expansions);
}
}