package edu.ucsb.eucalyptus.cloud.ws;
import java.io.File;
import java.util.Map;
import java.util.Set;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethodBase;
import com.eucalyptus.util.EucalyptusCloudException;
import com.eucalyptus.util.StorageProperties;
public class HttpWriter extends HttpTransfer {
private HttpClient httpClient;
private HttpMethodBase method;
public HttpWriter(String httpVerb, String bucket, String key, String eucaOperation, String eucaHeader) {
httpClient = new HttpClient();
String walrusAddr = StorageProperties.WALRUS_URL;
if(walrusAddr != null) {
String addr = walrusAddr + "/" + bucket + "/" + key;
method = constructHttpMethod(httpVerb, addr, eucaOperation, eucaHeader);
}
}
public HttpWriter(String httpVerb, File file, String size, CallBack callback, String bucket, String key, String eucaOperation, String eucaHeader, Map<String, String> httpParameters) {
httpClient = new HttpClient();
String walrusAddr = StorageProperties.WALRUS_URL;
if(walrusAddr != null) {
String addr = walrusAddr + "/" + bucket + "/" + key;
Set<String> paramKeySet = httpParameters.keySet();
boolean first = true;
for(String paramKey : paramKeySet) {
if(!first) {
addr += "&";
} else {
addr += "?";
}
first = false;
addr += paramKey;
String value = httpParameters.get(paramKey);
if(value != null)
addr += "=" + value;
}
method = constructHttpMethod(httpVerb, addr, eucaOperation, eucaHeader);
if(method != null) {
method.setRequestHeader("Transfer-Encoding", "chunked");
method.addRequestHeader(StorageProperties.StorageParameters.EucaSnapSize.toString(), size);
((PutMethodWithProgress)method).setOutFile(file);
((PutMethodWithProgress)method).setCallBack(callback);
}
}
}
public void run() throws EucalyptusCloudException {
try {
httpClient.executeMethod(method);
method.releaseConnection();
} catch (Exception ex) {
throw new EucalyptusCloudException("error transferring", ex);
}
}
}