import java.beans.PropertyVetoException;
import java.io.*;
import java.util.*;
import wt.content.*;
import wt.doc.*;
import wt.enterprise.RevisionControlled;
import wt.fc.*;
import wt.folder.CabinetBased;
import wt.folder.FolderHelper;
import wt.query.*;
import wt.util.WTException;
import wt.vc.*;
import wt.lifecycle.*;
import wt.query.*;
import wt.project.*;
import wt.util.SortedEnumeration;
import wt.util.*;
import wt.team.*;
import java.sql.Timestamp;
import wt.method.*;

public class GetContents implements RemoteAccess
{
	private static void extractContent( WTDocument wtDoc, String outputDir )
	{
		try
		{
			String  errorMessage = "";
			wt.content.ContentHolder syHold = null;

			syHold = (wt.doc.WTDocument)wt.content.ContentHelper.service.getContents(((wt.content.ContentHolder)wtDoc));

 
			//java.util.Vector vectorOfAppData = wt.content.ContentHelper.getApplicationData((wt.content.ContentHolder)syHold);
			java.util.Vector vectorOfAppData = wt.content.ContentHelper.getContentListAll( syHold );

			if( vectorOfAppData != null)
			{
				java.util.Iterator appIter = vectorOfAppData.iterator();

				while (appIter.hasNext())
				{
					wt.content.ApplicationData syAppData = (wt.content.ApplicationData)(appIter.next());
					String docName = syAppData.getFileName();

					//For Richard - C 5084116
					long fileSize = syAppData.getFileSize();
					Sytem.out.println("FileSize is: " + fileSize);

					// Create the fully qualified path name for content file that will be saved to the Windchill server for FTP to the UG Object Adapter
					String syContentFileName = outputDir + ((outputDir.endsWith("\\")) ? docName : "\\" + docName);

					// Save the content file to disk on the Windchill server
					wt.content.ContentServerHelper.service.writeContentStream(syAppData, syContentFileName);
				}
			}
			else
			{
				errorMessage = "--> This primary business object has no primary content file. No file extracted.";
				System.out.println("errorMessage");
			}
		}
		catch (Exception e)
		{
			System.out.println("--> WTException");
			e.printStackTrace();
		}
	}

	public static void getWTDocument(String number, String outputDir)
	{
		WTDocument myDoc = null;
		try
		{
			myDoc = new WTDocument();
			QuerySpec qs = new QuerySpec( WTDocument.class );
			qs.appendWhere( new SearchCondition(WTDocument.class, "master>number", SearchCondition.EQUAL, number ) );
			qs.appendAnd();
			qs.appendWhere( new SearchCondition(WTDocument.class, "iterationInfo.latest", SearchCondition.IS_TRUE ) );
			qs.appendOrderBy( new OrderBy( new ClassAttribute(WTDocument.class, "iterationInfo.branchId" ), true ), 0 );
			System.out.println( "Now Querying for Doc Using: " + qs.toString() );
			QueryResult qr = PersistenceHelper.manager.find( qs );

			while( qr.hasMoreElements() )
			{
				myDoc = (WTDocument)qr.nextElement();
			}
			System.out.println( "Found: " + myDoc.getName() );
			extractContent( myDoc, outputDir );
		}
		catch( Exception e )
		{
			e.printStackTrace();
		}
	}

	public static void main( String[] args )
	{
		if (args.length < 2)
		{
			System.out.println ("Usage: windchill GetContents <document-number> <path-where-file-should be saved>");
			System.exit(0);
		}
		else
		{
			try
			{
				RemoteMethodServer rms = RemoteMethodServer.getDefault();

				//This is so that it does not prompt for the user login
				rms.setUserName("wcadmin");
				rms.setPassword("wcadmin");

				Class[] rmiArgTypes = new Class [2];
				rmiArgTypes[0] = java.lang.String.class;
				rmiArgTypes[1] = java.lang.String.class;

				String[] rmiArgs = new String[2];
				rmiArgs[0] = args[0];
				rmiArgs[1] = args[1];
				rms.invoke("getWTDocument", "GetContents", null, rmiArgTypes, rmiArgs);
				System.exit(0);
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}
