package com.temenos.useragent.generic.http;
/*
* #%L
* useragent-generic-java
* %%
* Copyright (C) 2012 - 2016 Temenos Holdings N.V.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.http.HttpMessage;
import org.apache.http.StatusLine;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.temenos.useragent.generic.Result;
import com.temenos.useragent.generic.context.ConnectionConfig;
import com.temenos.useragent.generic.context.ContextFactory;
/**
* Helper for the Http Client operations.
*
* @author ssethupathi
*
*/
public class DefaultHttpClientHelper {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultHttpClientHelper.class);
/**
* Builds and returns the {@link HttpMessage http message} with the request
* headers.
*
* @param request
* @param message
*/
public static void buildRequestHeaders(HttpRequest request,
HttpMessage message) {
HttpHeader header = request.headers();
for (String name : header.names()) {
message.addHeader(name, header.get(name));
}
}
/**
* Builds and returns the {@link HttpHeader http header} from the response
* message.
*
* @param response
* message
* @param http
* header
*/
public static HttpHeader buildResponseHeaders(
CloseableHttpResponse httpResponse) {
HttpHeader header = new HttpHeader();
for (org.apache.http.Header httpHeader : httpResponse.getAllHeaders()) {
header.set(httpHeader.getName(), httpHeader.getValue());
}
return header;
}
/**
* Builds and returns http interaction execution result.
*
* @param httpResponse
* @return interaction execution result
*/
public static Result buildResult(CloseableHttpResponse httpResponse) {
StatusLine statusLine = httpResponse.getStatusLine();
return new HttpResult(statusLine.getStatusCode(),
statusLine.getReasonPhrase());
}
/**
* Builds and returns the basic authentication provider.
*
* @return
*/
public static CredentialsProvider getBasicCredentialProvider() {
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
ConnectionConfig config = ContextFactory.get().getContext()
.connectionCongfig();
credentialsProvider.setCredentials(
AuthScope.ANY,
new UsernamePasswordCredentials(config
.getValue(ConnectionConfig.USER_NAME), config
.getValue(ConnectionConfig.PASS_WORD)));
return credentialsProvider;
}
/**
* Removes the optional parameter part of the content type and returns the
* type and subtype part.
* <p>
* For example, returns <i>application/atom+xml</i> from
* <i>application/atom+xml;type=entry</i>
* </p>
*
* @param content
* type with optional parameter
* @return content type without parameter
*/
public static String removeParameter(String contentType) {
int parameterSeparatorIndex = contentType.indexOf(";");
if (parameterSeparatorIndex > 0) {
return contentType.substring(0, parameterSeparatorIndex).trim();
} else {
return contentType;
}
}
/**
* Extracts and returns the optional parameter part of the content type.
* <p>
* For example, returns <i>type=entry</i> from
* <i>application/atom+xml;type=entry</i>
* </p>
*
* @param content
* type with optional parameter
* @return optional parameter, if present
*/
public static String extractParameter(String contentType) {
int parameterStartIndex = contentType.indexOf(";") + 1;
if (parameterStartIndex > 0
&& (parameterStartIndex) < contentType.length()) {
return contentType.substring(parameterStartIndex).trim();
} else {
return "";
}
}
}