Project: android-rackspacecloud
package com.rackspace.cloud.files.api.client;
 
import java.io.IOException; 
import java.io.StringReader; 
import java.net.MalformedURLException; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.util.ArrayList; 
 
import javax.xml.parsers.FactoryConfigurationError; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 
 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpDelete; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.methods.HttpPut; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.protocol.RequestExpectContinue; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 
import org.xml.sax.XMLReader; 
 
import android.content.Context; 
import android.text.Editable; 
import android.util.Log; 
 
import com.rackspace.cloud.files.api.client.parsers.ContainerXMLParser; 
import com.rackspace.cloud.servers.api.client.Account; 
import com.rackspace.cloud.servers.api.client.CloudServersException; 
import com.rackspace.cloud.servers.api.client.EntityManager; 
import com.rackspace.cloud.servers.api.client.http.HttpBundle; 
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser; 
 
/**
 * @author Phillip Toohill 
 *  
 */
 
public class ContainerManager extends EntityManager { 
 private Context context; 
  
 public ContainerManager(Context context) { 
  this.context = context; 
 
 
 public HttpBundle create(Editable editable) throws CloudServersException { 
  HttpResponse resp = null
  CustomHttpClient httpclient = new CustomHttpClient(context); 
   
  String url = getSafeURL(Account.getAccount().getStorageUrl(), editable.toString()); 
  HttpPut put = new HttpPut(url); 
   
  put.addHeader("X-Auth-Token", Account.getAccount().getAuthToken()); 
  httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class); 
 
  HttpBundle bundle = new HttpBundle(); 
  bundle.setCurlRequest(put); 
   
  try { 
   resp = httpclient.execute(put); 
   bundle.setHttpResponse(resp); 
  catch (ClientProtocolException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (IOException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (FactoryConfigurationError e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  
  return bundle; 
 
 
 public ArrayList<Container> createCDNList(boolean detail) throws CloudServersException { 
   
  CustomHttpClient httpclient = new CustomHttpClient(context); 
  HttpGet get = new HttpGet(Account.getAccount().getCdnManagementUrl()+"?format=xml"); 
  ArrayList<Container> cdnContainers = new ArrayList<Container>(); 
   
  get.addHeader("X-Auth-Token", Account.getAccount().getAuthToken()); 
   
  try {    
   HttpResponse resp = httpclient.execute(get);       
      BasicResponseHandler responseHandler = new BasicResponseHandler(); 
      String body = responseHandler.handleResponse(resp); 
       
      if (resp.getStatusLine().getStatusCode() == 200) {        
       ContainerXMLParser cdnContainerXMLParser = new ContainerXMLParser(); 
       SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); 
       XMLReader xmlReader = saxParser.getXMLReader(); 
       xmlReader.setContentHandler(cdnContainerXMLParser); 
              
       xmlReader.parse(new InputSource(new StringReader(body))); 
       cdnContainers = cdnContainerXMLParser.getContainers();        
      } else { 
       CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser(); 
       SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); 
       XMLReader xmlReader = saxParser.getXMLReader(); 
       xmlReader.setContentHandler(parser); 
       xmlReader.parse(new InputSource(new StringReader(body)));        
       CloudServersException cse = parser.getException();        
       throw cse; 
      } 
  catch (ClientProtocolException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (IOException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (ParserConfigurationException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (SAXException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (FactoryConfigurationError e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  
   
   
  return cdnContainers; 
 
 
  
 public HttpBundle enable(String container, String ttl, String logRet) 
   throws CloudServersException { 
  HttpResponse resp = null
  CustomHttpClient httpclient = new CustomHttpClient(context); 
  String url = getSafeURL(Account.getAccount().getCdnManagementUrl(), container); 
  HttpPut put = new HttpPut(url); 
 
  put.addHeader("X-Auth-Token", Account.getAccount().getAuthToken()); 
  put.addHeader("X-TTL", ttl); 
  put.addHeader("X-Log-Retention", logRet); 
  Log.d("info cdn", url); 
  Log.v("info cdn", ttl + container + logRet); 
  httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class); 
 
  HttpBundle bundle = new HttpBundle(); 
  bundle.setCurlRequest(put); 
   
  try { 
   resp = httpclient.execute(put); 
   bundle.setHttpResponse(resp); 
  catch (ClientProtocolException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (IOException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (FactoryConfigurationError e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  
  return bundle; 
 
 public HttpBundle disable(String container, String cdn, String ttl, String logRet) 
 throws CloudServersException { 
       HttpResponse resp = null
      CustomHttpClient httpclient = new CustomHttpClient(context); 
     String url = getSafeURL(Account.getAccount().getCdnManagementUrl(), container); 
        HttpPost post = new HttpPost(url); 
         
        post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken()); 
         post.addHeader("X-TTL", ttl); 
         post.addHeader("X-Log-Retention", logRet); 
         post.addHeader("X-CDN-Enabled", cdn); 
         httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class); 
 
         HttpBundle bundle = new HttpBundle(); 
      bundle.setCurlRequest(post); 
          
         try { 
          resp = httpclient.execute(post); 
          bundle.setHttpResponse(resp); 
         catch (ClientProtocolException e) { 
          CloudServersException cse = new CloudServersException(); 
          cse.setMessage(e.getLocalizedMessage()); 
          throw cse; 
         catch (IOException e) { 
          CloudServersException cse = new CloudServersException(); 
          cse.setMessage(e.getLocalizedMessage()); 
          throw cse; 
         catch (FactoryConfigurationError e) { 
          CloudServersException cse = new CloudServersException(); 
          cse.setMessage(e.getLocalizedMessage()); 
          throw cse; 
         
         return bundle; 
 
 
 public HttpBundle delete(String string) throws CloudServersException { 
  HttpResponse resp = null
  CustomHttpClient httpclient = new CustomHttpClient(context); 
  String url = getSafeURL(Account.getAccount().getStorageUrl(), string); 
  HttpDelete put = new HttpDelete(url); 
   
  put.addHeader("X-Auth-Token", Account.getAccount().getAuthToken()); 
  httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class); 
 
  HttpBundle bundle = new HttpBundle(); 
  bundle.setCurlRequest(put); 
   
  try { 
   resp = httpclient.execute(put); 
   bundle.setHttpResponse(resp); 
  catch (ClientProtocolException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (IOException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (FactoryConfigurationError e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  
  return bundle; 
 
 
 public ArrayList<Container> createList(boolean detail) 
   throws CloudServersException { 
 
  CustomHttpClient httpclient = new CustomHttpClient(context); 
  HttpGet get = new HttpGet(Account.getAccount().getStorageUrl() + "?format=xml"); 
  ArrayList<Container> containers = new ArrayList<Container>(); 
 
  get.addHeader("X-Storage-Token", Account.getAccount().getStorageToken()); 
  get.addHeader("Content-Type""application/xml"); 
 
  try { 
   HttpResponse resp = httpclient.execute(get); 
   BasicResponseHandler responseHandler = new BasicResponseHandler(); 
   String body = responseHandler.handleResponse(resp); 
 
   if (resp.getStatusLine().getStatusCode() == 200 
     || resp.getStatusLine().getStatusCode() == 203) { 
    ContainerXMLParser containerXMLParser = new ContainerXMLParser(); 
    SAXParser saxParser = SAXParserFactory.newInstance() 
      .newSAXParser(); 
    XMLReader xmlReader = saxParser.getXMLReader(); 
    xmlReader.setContentHandler(containerXMLParser); 
 
    xmlReader.parse(new InputSource(new StringReader(body))); 
    containers = containerXMLParser.getContainers(); 
   else { 
    CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser(); 
    SAXParser saxParser = SAXParserFactory.newInstance() 
      .newSAXParser(); 
    XMLReader xmlReader = saxParser.getXMLReader(); 
    xmlReader.setContentHandler(parser); 
    xmlReader.parse(new InputSource(new StringReader(body))); 
    CloudServersException cse = parser.getException(); 
    throw cse; 
   
  catch (ClientProtocolException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (IOException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (ParserConfigurationException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (SAXException e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  catch (FactoryConfigurationError e) { 
   CloudServersException cse = new CloudServersException(); 
   cse.setMessage(e.getLocalizedMessage()); 
   throw cse; 
  
 
  return containers; 
 
  
 private String getSafeURL(String badURL, String name){ 
  URI uri = null
  try { 
   uri = new URI("https", badURL.substring(8), "/" + name.toString()+"/"""); 
  catch (URISyntaxException e1) { 
   // TODO Auto-generated catch block 
   e1.printStackTrace(); 
  
  String url = null
  try { 
   url = uri.toURL().toString(); 
  catch (MalformedURLException e1) { 
   // TODO Auto-generated catch block 
   e1.printStackTrace(); 
  
  return url.substring(0, url.length()-1); 
 
 
}