/*
(c) Copyright 2011 Telefonica, I+D. Printed in Spain (Europe). All Rights
Reserved.
The copyright to the software program(s) is property of Telefonica I+D.
The program(s) may be used and or copied only with the express written
consent of Telefonica I+D or in accordance with the terms and conditions
stipulated in the agreement/contract under which the program(s) have
been supplied.
*/
package com.telefonica.claudia.smi.context.impl;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;
import com.telefonica.claudia.clotho.utils.PropertyManager;
import com.telefonica.claudia.smi.context.Environment;
import com.telefonica.claudia.smi.context.EnvironmentDeployer;
import com.telefonica.claudia.smi.exception.EnvironmentDeploymentException;
import com.telefonica.claudia.smi.utils.Constants;
import com.telefonica.claudia.smi.utils.OneProperties;
/**
* An environment deployer implementation to deploy the environment
* using REST services
*
* @author luismarcos.ayllon
*
*/
public class EnvironmentServerDeployerImpl implements EnvironmentDeployer {
private static Logger log = Logger.getLogger(EnvironmentServerDeployerImpl.class);
private String host;
private String port;
private String path;
private HttpClient httpClient;
/**
* Constructor
*/
public EnvironmentServerDeployerImpl (){
host = PropertyManager.getInstance().getProperty(OneProperties.CONTEXT_HOST_PROPERTY);
port = PropertyManager.getInstance().getProperty(OneProperties.CONTEXT_PORT_PROPERTY);
path = Constants.VM_URL;
httpClient = new DefaultHttpClient();
}
/**
* {@inheritDoc}
*/
@Override
public void deploy(Environment environment) throws EnvironmentDeploymentException {
String vm_url = Constants.PROTOCOL + host + ":" + port + path + "/" + environment.getVmFqn();
HttpRequestBase method = new HttpPost(vm_url);
try {
HttpEntity request = new StringEntity(environment.getContent());
((HttpPost) method).setEntity(request);
method.setHeader("Content-Type", "application/xml");
HttpResponse response = httpClient.execute(method);
if (response.getStatusLine().getStatusCode() != 200)
throw new EnvironmentDeploymentException("Remote HTTP Error code: " + response.getStatusLine().getStatusCode());
log.info("Deploying context in " + vm_url);
} catch (UnsupportedEncodingException e) {
log.error (e.getMessage());
throw new EnvironmentDeploymentException (e);
} catch (ClientProtocolException e) {
log.error (e.getMessage());
throw new EnvironmentDeploymentException (e);
} catch (IOException e) {
log.error (e.getMessage());
throw new EnvironmentDeploymentException (e);
}
}
}