DownloadDocumentClient.java

From AgileApps Support Wiki
import com.platform.api.*;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class DownloadDocumentClient
{
  
  public static final String REST_SERVICE = 
    "https://{domainName}/networking/RESTService";
  public static final String USER_NAME = "jim@acme.com";
  public static final String PASSWORD = "jimacme";
  
  public static String login() throws Exception
  {    
    String sessionId = null;    
    StringBuilder loginRequestXML = 
    new StringBuilder("<?xml version=\"1.0\" ?>") 
        .append("    <longjump ver=\"2.0\">")
        .append("      <login_request>")   
        .append("        <login>").append(USER_NAME).append("</login>")   
        .append("        <password>").append(PASSWORD).append("</password>")
        .append("      </login_request>")
        .append("    </longjump>");
    
     // Create an instance of HttpClient.
    HttpClient client = new HttpClient();
    
    //Create GET method
    PostMethod method = new PostMethod(REST_SERVICE);
    
    //add to Request
    method.addParameter("xml_data", loginRequestXML.toString());
    
     // Provide custom retry handler is necessary
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
        new DefaultHttpMethodRetryHandler(3, false));
    
    try 
    {
        // Execute the method.
        int statusCode = client.executeMethod(method);
        if (statusCode != HttpStatus.SC_OK) 
        {
        System.err.println("Method failed: " + method.getStatusLine());
        }
    
        // Read the response body.
        byte[] responseBody = method.getResponseBody();        
        String file = new String(responseBody);
        
        int indexOfXMLStart = 
        file.indexOf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");      
        int indexOfXMLEnd = file.indexOf("</longjump>");        
        
        String xmlPartOfResponse = 
        file.substring(indexOfXMLStart, indexOfXMLEnd + 11);
        
        if(xmlPartOfResponse.contains("<session_id>"))
        {        
          int sessionIdBeginTagIndx = 
        xmlPartOfResponse.indexOf("<session_id>");          
          int sessionIdEndTagIndx = 
        xmlPartOfResponse.indexOf("</session_id>") 
        + "</session_id>".length();
          
          sessionId = 
        (xmlPartOfResponse.substring(sessionIdBeginTagIndx, sessionIdEndTagIndx))
              .replace("<session_id>", "")
                .replace("</session_id>", "")
                trim();
        }
        else if (xmlPartOfResponse.contains("<error>"))
        {
          int messageBeginTagIndx = xmlPartOfResponse.indexOf("<message>");          
          int messageEndTagIndx = xmlPartOfResponse.indexOf("</message>")
                  + "</message>".length();
          
          String message = 
        (xmlPartOfResponse.substring(messageBeginTagIndx, messageEndTagIndx))
                    .replace("<message>", "")
                    .replace("</message>", "")
                    .trim();          
          throw new Exception(message);
        }
        
    }
    catch (HttpException e) 
    {
        e.printStackTrace();       
        throw new InvocationTargetException(e, 
        "Fatal protocol violation: " + e.getMessage());
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
        
        throw new InvocationTargetException(e, 
        "Fatal transport error: " + e.getMessage());
    } 
    catch (Exception e)
    {
      e.printStackTrace();        
      throw new InvocationTargetException(e, e.getMessage());
    }
    finally 
    {
        // Release the connection.
        method.releaseConnection();       
        return sessionId;
    }
  }
  
  public static void pullDocumentFromRemoteServer(
    String userName, String password, String url, 
    String documentId, String lastPublished, String filePath)
  {    
    String sessionId = null;    
    try
    {
      sessionId = login();    
    }
    catch(Exception e)
    {
      System.out.println(e.getMessage());
    }
    
    StringBuilder downLoadDocumentXML = 
    new StringBuilder("<?xml version=\"1.0\" ?>") 
         .append("  <longjump ver=\"2.0\">")
         .append("  <resource_download_request>")
         .append("    <session_id>").append(sessionId).append("</session_id>")
         .append("    <type>document</type>")
         .append("    <id>").append(documentId).append("</id>")
         .append("      <last_published_version>")
         .append(lastPublished)
         .append("</last_published_version>")
         .append("  </resource_download_request>")
         .append("  </longjump>");

    // Create an instance of HttpClient.
    HttpClient client = new HttpClient();
    
    //Create GET method
    PostMethod method = new PostMethod(url);
    
    //add to Request
    method.addParameter("xml_data", downLoadDocumentXML.toString());
    
    // Provide custom retry handler is necessary
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
    new DefaultHttpMethodRetryHandler(3, false));
    
    try 
    {
      // Execute the method.
      int statusCode = client.executeMethod(method);      
      if (statusCode != HttpStatus.SC_OK) 
      {
      throw new Exception("Method failed: " + method.getStatusLine());
      }
      
      // Read the response body.
      byte[] responseBody = method.getResponseBody();
      File targetFile = null;
      System.out.println(method.getResponseHeader("Content-Disposition").getValue());
      if(method.getResponseHeader("Content-Disposition")
         .getValue().contains("filename"))
      {
        String fileName = method.getResponseHeader("Content-Disposition").getValue();
        fileName = fileName.replace("filename=", "");
        targetFile = new File(filePath + fileName);
        FileOutputStream out = new FileOutputStream(targetFile.getPath());      
        out.write(responseBody);
        out.close();
        System.out.println("Document download completed." );        
      }
      else
      {
        throw new Exception(method.getResponseBodyAsString());
      }      
    
    }
    catch (HttpException e) 
    {
      e.printStackTrace();    
    } 
    catch (IOException e) 
    {
      e.printStackTrace();  
    } 
    catch (Exception e)
    {
      e.printStackTrace();
    }
    finally 
    {
      // Release the connection.
      method.releaseConnection();
    }        
  }
  
public static void main(String args[])
  {
    DownloadDocumentClient dpc = new DownloadDocumentClient();  
    try
    {
      String documentId = "4ef61b05a5f547b185af7adbdf6dd529";      
      String lastPublishedVersion = "false";
      String filePath = "C:\\";
      dpc.pullDocumentFromRemoteServer(USER_NAME, PASSWORD, REST_SERVICE, 
        documentId, lastPublishedVersion, filePath);
    }
    catch(Exception e)
    {
      System.out.println(e.getMessage());
    }
  }
}