
it.uniroma2.art.semanticturkey.extension.impl.deployer.http.AbstractHTTPDeployer Maven / Gradle / Ivy
package it.uniroma2.art.semanticturkey.extension.impl.deployer.http;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import jakarta.annotation.Nullable;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.StatusLine;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.AuthCache;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import it.uniroma2.art.semanticturkey.extension.extpts.deployer.Deployer;
import it.uniroma2.art.semanticturkey.extension.extpts.deployer.Source;
/**
* Abstract base class of HTTP deployers.
*
* Manuel Fiorelli
*/
public abstract class AbstractHTTPDeployer implements Deployer {
public enum HttpVerbs {
GET, POST, PUT, PATCH, DELETE, UPDATE
}
protected void deployInternal(T source) throws IOException {
URI address;
try {
address = getAddress();
} catch (URISyntaxException e) {
throw new IOException(e);
}
HttpClientContext context;
@Nullable
Pair usernameAndPassword = getUsernameAndPassword();
if (usernameAndPassword != null) {
BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(
usernameAndPassword.getLeft(), usernameAndPassword.getRight()));
HttpHost targetHost = new HttpHost(address.getHost(),
address.getPort() != -1 ? address.getPort() : 80, address.getScheme());
AuthCache authCache = new BasicAuthCache();
authCache.put(targetHost, new BasicScheme());
context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setAuthCache(authCache);
} else {
context = null;
}
try (CloseableHttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build()) {
HttpEntityEnclosingRequestBase request;
HttpVerbs httpVerb = getHttpVerb();
if (httpVerb == HttpVerbs.PUT) {
request = new HttpPut(address);
} else if (httpVerb == HttpVerbs.POST) {
request = new HttpPost(address);
} else {
throw new IllegalStateException("Unsupported HTTP verb: " + httpVerb);
}
@Nullable
Map requestHeaders = getHttpRequestHeaders();
if (requestHeaders != null) {
for (Map.Entry aHeader : requestHeaders.entrySet()) {
request.addHeader(aHeader.getKey(), aHeader.getValue());
}
}
request.setEntity(createHttpEntity(source));
try (CloseableHttpResponse httpResponse = httpClient.execute(request, context)) {
StatusLine statusLine = httpResponse.getStatusLine();
if ((statusLine.getStatusCode() / 100) != 2) {
throw new IOException(buildExceptionFromResponse(httpResponse));
}
}
}
}
protected String buildExceptionFromResponse(CloseableHttpResponse httpResponse) throws IOException {
StatusLine statusLine = httpResponse.getStatusLine();
return "HTTP Error: " + statusLine.getStatusCode() + ":" + statusLine.getReasonPhrase();
}
protected abstract URI getAddress() throws URISyntaxException;
protected @Nullable Pair getUsernameAndPassword() {
return null;
}
protected abstract HttpVerbs getHttpVerb();
protected @Nullable Map getHttpRequestHeaders() {
return null;
}
protected abstract HttpEntity createHttpEntity(T source) throws IOException;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy