GetDocument.java sample program

How to retrieve a document by specifying the document name.


package com.ixiasoft.samples;
/**
 * Title: GetDocument.java - a sample to retrieve a document from a docbase
 *
 * Description:  This sample shows how to retrieve a document into
 *               a document base *when you know the name of the document*.
 *
 *               It also shows how to handle errors that might occur when
 *               you attempt to retrieve the document.
 *
 * Syntax:       GetDocument user=<domain\\user>
 *                           password=<password>
 *                           server=<ServerName>
 *                           docbase=<DocBaseName>
 *                           docname=<DocumentName>
 *                           path=<Path>
 *
 * Copyright:    Copyright (c) 2003, 2010
 * Company:      Ixiasoft Technologies Inc.
 *
 * @version      2.0
 * Modified:     2010-06-28
 */

import com.ixia.textmlserver.*;
import java.io.*;
import java.util.*;

public class GetDocument
{
    final static String TOKEN_USER     = "USER";
    final static String TOKEN_PASSWORD = "PASSWORD";
    final static String TOKEN_SERVER   = "SERVER";
    final static String TOKEN_DOCBASE  = "DOCBASE";
    final static String TOKEN_PATH     = "PATH";
    final static String TOKEN_DOCNAME  = "DOCNAME";

    // Valid parameters accepted from command-line
    final static String [] validTokens =
        { TOKEN_USER, TOKEN_PASSWORD, TOKEN_SERVER, TOKEN_DOCBASE,
          TOKEN_PATH, TOKEN_DOCNAME };

    // Which parameters must be specified in command-line
    final static boolean[] mandatory   =
        { true      , true          , true        , true         ,
          true      , true };


    // Extract run-time parameters from command-line
    private static HashMap<String, String> Extract(String [] args)
    {
        HashMap<String, String> retval = new HashMap<String, String>(10);

        for (int i = 0; i < args.length; ++i)
        {
            StringTokenizer tokens = new StringTokenizer(args[i], "=", false);
            String token = null, value = null;

            if (tokens.hasMoreElements())
                token = tokens.nextToken();
            if (tokens.hasMoreElements())
                value = tokens.nextToken();

            if (token == null || value == null)
            {
                retval.clear();
                return retval;
            }

            boolean found = false;
            for (int j = 0; j < validTokens.length && !found; ++j)
            {
                if (validTokens[j].equalsIgnoreCase(token) &&
                    !retval.containsKey(validTokens[j]))
                {
                    retval.put(validTokens[j], value);
                    found = true;
                }
            }

            if (!found)
            {
                retval.clear();
                return retval;
            }
        }

        for (int i = 0; i < validTokens.length; ++i)
        {
            if (mandatory[i] && !retval.containsKey(validTokens[i]))
            {
                retval.clear();
                return retval;
            }
        }

        return retval;
    }


    // If run-time parameters are missing or invalid, display Help
    private static void Usage()
    {
        System.out.println
            ("GetDocument user=<domain\\user> password=<password> " +
             "server=<ServerName> docbase=<DocBaseName> "           +
             "docname=<DocumentName> path=<path>");
        System.out.println
            ("\t<domain\\user> name of the user used for security purpose");
        System.out.println
            ("\t<password> password of the user");
        System.out.println
            ("\t<ServerName> Textmlserver name");
        System.out.println
            ("\t<DocBaseName> Document base name");
        System.out.println
            ("\t<DocumentName> Name of the document to retrieve");
        System.out.println
            ("\t<path> The path where the document will be saved");
    }


    // Save the <content> of the document to path\file <filename>
    private static void WriteFile
        (String fileName, IxiaDocument.Content content)
        throws java.io.IOException
    {
        FileOutputStream f = new FileOutputStream(fileName);

        try
        {
            content.SaveTo(f);
        }
        finally
        {
            f.close();
        }
    }


    // Save String <strContent> to file <filename>, a Unicode-16 file
    private static void WriteFile(String fileName, String strContent)
                                 throws java.io.IOException
    {
        OutputStreamWriter f =
            new OutputStreamWriter(new FileOutputStream(fileName),
                                  "UTF-16LE");  // 16-bit little-endian

        try
        {
            f.write("\ufeff"); //  BOM for 16-bit little-endian Unicode file
            f.write(strContent);
        }
        finally
        {
            f.close();
        }
    }


    // Main routine
    public static void main(String[] args)
    {

        // Parse the command line
        HashMap<String, String> map = Extract(args);

        // Validate the parameters
        if (map.isEmpty())
        {
            Usage();
            return;
        }

        String user = (String) map.get(TOKEN_USER);

        if (user.indexOf("\\") == -1)
        {
            Usage();
            return;
        }

        String documentName = (String) map.get(TOKEN_DOCNAME);
        String path         = (String) map.get(TOKEN_PATH);

        // Prepare parameters for ClientServicesFactory
        HashMap<String, String> parms = new HashMap<String, String>(1);

        try
        {
            // Get the ClientServices object
            ClientServices cs =
                com.ixia.textmlserver.ClientServicesFactory.getInstance
                    ("CORBA", parms);

            // extract domain (or machine-name) from <user>
            String domain   = user.substring(0, user.indexOf("\\"));
            String userName = user.substring(user.indexOf("\\") + 1);

            // Prepare to login to the TEXTML Server instance
            cs.Login(domain, userName, (String) map.get(TOKEN_PASSWORD));

            try
            {
                // Get the ServerServices for the server specified by the user
                IxiaServerServices ss =
                    cs.ConnectServer((String) map.get(TOKEN_SERVER));

                try
                {
                    // Get the DocbaseServices for the specified docbase
                    // on that server
                    IxiaDocBaseServices docbase =
                        ss.ConnectDocBase((String) map.get(TOKEN_DOCBASE));
                    try
                    {
                        // Get the DocumentServices for the specified docbase
                        IxiaDocumentServices ds = docbase.DocumentServices();

                        try
                        {
                            // Prepare an array big enough to hold the names
                            // of the documents to be retrieved.
                            // We are only retrieving one document.
                            String [] documents = new String[1];
                            documents[0] = documentName;

                            // Get the specified documents.
                            // We want:
                            // -- the actual content of the document
                            //    (normally XML).
                            // -- the document's properties
                            // The document is a "user document".

                            IxiaDocumentServices.Result [] result =
                                ds.GetDocuments(documents,
                                    Constants.TEXTML_DOCUMENT_CONTENT |
                                    Constants.TEXTML_DOCUMENT_PROPERTIES,
                                    Constants.TEXTML_DOCUMENT);

                            // A Result object has two fields:
                            // -- a Document object.
                            // -- an Error object.
                            if (result == null) // Should not ever happen
                            {
                                System.out.println
                                    ("An unexpected error occurred");
                                return;
                            }
                            // An error occurred for this document
                            else if (result[0].error != null)
                            {
                                // Handle expected errors
                                if (result[0].error.GetErrorCode() ==
                                    TextmlserverError.TEXTML_E_TRANSACTION_LOG)
                                {
                                    // Get a list of events for this document
                                    Iterator events =
                                        result[0].error.GetEvents();

                                    // Display all the events
                                    while (events.hasNext())
                                    {
                                      TextmlserverError.Event event =
                                        (TextmlserverError.Event) events.next();
                                      System.err.println (event.toString());
                                    }
                                }
                            }

                            if (result[0].error != null)
                            {
                             System.err.println
                               ("The following error occurred while getting " +
                                documentName);
                             System.err.println(result[0].error.getMessage());
                             return;
                            }

                            WriteFile(path + File.separator +
                                      result[0].document.GetName(),
                                      result[0].document.GetContent());

                            System.out.println
                                (documentName + " successfully saved.") ;

                            WriteFile
                                (path + File.separator +
                                "P_" + result[0].document.GetName() + ".xml",
                                result[0].document.GetProperties());

                            System.out.println
                                (documentName +
                                 "'s properties successfully saved.");
                        }
                        finally
                        {
                            ds.Release();  // Free this object's memory
                        }
                    }
                    finally
                    {
                        docbase.Release();
                    }
                }
                finally
                {
                    ss.Release();
                }
            }
            finally
            {
                // don't forget to logout
                cs.Logout();
            }
        }
        catch (Exception e)
        {
            System.err.println("Exception occurred: ");
            e.printStackTrace(System.err);
        }

    }
}