AgileApps Support Wiki Pre Release

REST API:PackageDownloadClient

From AgileApps Support Wiki

The PackageDownloadClient demo program extends the REST API:BaseClient class to download a package from the platform to your local system.

package demo.rest;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;

import org.apache.wink.client.ClientResponse;
import org.apache.wink.client.ClientWebException;
import org.apache.wink.client.Resource;
import org.apache.wink.common.internal.utils.MediaTypeUtils;
import org.apache.wink.common.model.multipart.InMultiPart;
import org.apache.wink.common.model.multipart.InPart;

/**
 * Download a package from the platform to the local system.
 * This program extends demo.rest.BaseClient.java 
 * which in turn makes use of demo.rest.BaseUtil.java to handle
 * logging in, logging out, and message formatting.
 */
public class PackageDownloadClient extends BaseClient
{

    public static void main(String[] args)
    {
        // packageId is the unique id associated with the package.
        // Get it from the platform UI while viewing a package.
        String packageId = "761fb822e95d48c498d4c4f97dd1470b";
        String lastPublishedVersion="true";
        String downloadPackageUrl = baseUrl + "/package/operation/download/"
                  + packageId+"?lastPublishedVersion="+lastPublishedVersion;

        // Instantiate BaseClient.client and get sessionId
        PackageDownloadClient client = new PackageDownloadClient();
        cookieString = client.login(); 
       try
        {
            Resource resource = getResource(downloadPackageUrl);
            resource.header("Cookie", cookieString);

            ClientResponse response =
                resource.accept(MediaTypeUtils.MULTIPART_MIXED).post(
                    ClientResponse.class, "");

            InMultiPart iMultiPart = 
                response.getEntity(InMultiPart.class);

            while (iMultiPart.hasNext())
            {
                InPart iPart = iMultiPart.next();
                String contentType = iPart.getContentType();
                if (contentType.contains(MediaType.APPLICATION_XML))
                {
                    InputStream ips = iPart.getInputStream();
                    echoResponse(ips);
                }
                else if (contentType.contains(MediaType.APPLICATION_OCTET_STREAM))
                {
                    MultivaluedMap<String, String> headers = iPart.getHeaders();
                    String cDHeader = headers.getFirst("Content-Disposition");

                    String fileName = "";
                    Pattern p = Pattern.compile("filename=.*");
                    Matcher m = p.matcher(cDHeader);
                    if (m.find())
                    {
                        fileName = m.group();
                    }

                    fileName = fileName.replace("filename=", "");
                    File packageZipFile = new File("c:\\" + fileName);
                    FileOutputStream fos = null;
                    fos = new FileOutputStream(packageZipFile);

                    InputStream is = iPart.getInputStream();
                    int size = 0;
                    int i = 0;
                    byte[] ba = new byte[8196];
                    while ((i = is.read(ba)) != -1)
                    {
                        fos.write(ba, 0, i);
                        size += i;
                    }
                    fos.close();
                    System.out.println("Package downloaded to " 
                        + packageZipFile.getAbsolutePath());
                }
                else 
                {
                    System.out.println("Unrecognized media type: " + contentType);
                }
            }
        }
        catch (ClientWebException webException)
        {
            echoResponse(webException);
        }
        catch (IOException io)
        {
            io.printStackTrace();
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        finally
        {
            client.logout();
        }
    }
}