
package ext;

import java.util.*;
import java.rmi.RemoteException;

import wt.util.*;
import wt.fc.*;
import wt.vc.*;
import wt.query.*;
import wt.epm.*;
import wt.lifecycle.*;
import wt.lifecycle.State;
import wt.httpgw.GatewayAuthenticator;
import wt.method.RemoteMethodServer;
import com.ptc.windchill.enterprise.search.server.*;

import wt.series.*;
import com.ptc.windchill.enterprise.templates.*;

public class epmList_13b {

	public static void FindEpmNumbered(String drwNo) throws WTException, WTPropertyVetoException {

		Vector resultVector = new Vector();
		Vector returnVector = new Vector();

		ClassAttribute versionAttribute = new ClassAttribute(EPMDocument.class, "versionInfo.identifier.versionId");

		QuerySpec qs = new QuerySpec(EPMDocument.class);

		qs.appendSelect(versionAttribute, false);
		qs.appendWhere(new SearchCondition(EPMDocument.class,EPMDocument.NUMBER,SearchCondition.LIKE,drwNo));
		qs.appendAnd();
		qs.appendWhere(new SearchCondition(EPMDocument.class, "iterationInfo.latest", "TRUE"));
		qs.appendOrderBy(new OrderBy(versionAttribute, false));

		System.out.println( "Now Querying Using: " + qs.toString() );

		final QueryResult result = PersistenceHelper.manager.find(qs);

		System.out.println("result.size(): "+result.size());

		while (result.hasMoreElements())
		{
			Object[] obj = (Object[]) result.nextElement();

			for(int i = 0; i < obj.length; i++)
			{
				System.out.println("obj[i]: "+obj[i]);
			}
			System.out.println("obj.length: "+obj.length);

			//String curVer = VersionControlHelper.getVersionIdentifier(obj[1]).getSeries().getValue();
			Series currentSeries = Series.newSeries("wt.series.FileBasedSeries", (String) obj[0]);
			String currentNumber = (String) obj[1];
			System.out.println("checking number = " + currentNumber);

			try
			{
				Object[] lastObj = (Object[]) resultVector.lastElement();
				String lastNumber = (String) lastObj[1];
				Series lastSeries = Series.newSeries("wt.series.FileBasedSeries", (String) lastObj[0]);

				if ((currentNumber.equals(lastNumber)) && (lastSeries.lessThan(currentSeries)))
					resultVector.remove(lastObj);
				else if ((currentNumber.equals(lastNumber)) && (lastSeries.greaterThan(currentSeries)))
					continue;
			}
			catch(NoSuchElementException e)
			{
			}
			catch(Exception e)
			{
			}

			System.out.println("Storing : " + currentNumber + "\t" + currentSeries.getValue());
			resultVector.addElement(obj);
		}
		/*
		while (qr.hasMoreElements())
		{
			EPMDocument epmm = (EPMDocument)qr.nextElement();

            wt.fc.QueryResult queryresult4 = VersionControlHelper.service.allVersionsFrom((Versioned)epmm);
			System.out.println("\nqueryresult4.size(): "+queryresult4.size());

			VersionIdentifier versionId = null;

			String version = epmm.getVersionIdentifier().getValue();

			MultilevelSeries mls = MultilevelSeries.newMultilevelSeries("wt.vc.VersionIdentifier", version);
			versionId = VersionIdentifier.newVersionIdentifier(mls);
			//versionId = VersionControlHelper.nextVersionId(obj);

            String multRevision =versionId.toString();

			String seriesValue = null;
            VersionIdentifier versionIdentifier = null;
            Series versionSeries = null;
            versionIdentifier = VersionControlHelper.getVersionIdentifier(epmm);
			versionSeries = versionIdentifier.getSeries();
			seriesValue = versionSeries.getValue();

            Versioned versioned = (Versioned)epmm;
            String currentRevision =VersionControlHelper.getVersionIdentifier(versioned).getValue();
            String nextRevision =VersionControlHelper.nextVersionId(versioned).getValue();
            //String lastestRevision =VersionControlHelper.latestVersionId(versioned).getValue();

			//OneOffVersioned version = (OneOffVersioned)epmm.getPersistable();
			//OneOffVersionInfo versionInfo = versioned.getOneOffVersionInfo();

			//VersionInfo epmDocVersionInfo = versionedEpm.getVersionInfo();

            long l = VersionControlHelper.getBranchIdentifier(versioned);

			System.out.println( "nextRevision: "+nextRevision+" & currentRevision: "+currentRevision );
			System.out.println("l: "+l);
			System.out.println("qr.size(): "+qr.size());
			System.out.println( epmm.getPersistInfo().getObjectIdentifier().toString());
			System.out.println( "seriesValue: "+seriesValue +" & multRevision: "+multRevision);

			Series currentSeries = Series.newSeries("wt.series.FileBasedSeries", currentRevision);

            //OneOffVersionInfo versionInfo = version.getOneOffVersionInfo();

			String s1 = VersionControlHelper.getVersionIdentifier(epmm).getSeries().getValue();

			String s2 = VersionControlHelper.getVersionIdentifier((Versioned)epmm).getSeries().getValue();

			System.out.println( "VIdent1: " + s1+ " VIdent2: " + s2+ " && currentRevision:: "+currentRevision);
			System.out.println( epmm.getNumber() + "," + epmm.getVersionIdentifier().getValue() + "."+epmm.getIterationIdentifier().getValue());
		}
		*/
	}

	public static void main(String[] args) {
		if(args.length < 1)
		{
			System.out.println("Usage: windchill epmList <epmdoc search string>");
			System.exit(0);
		} else
		{
			try {
				RemoteMethodServer rms = RemoteMethodServer.getDefault();
				GatewayAuthenticator auth = new GatewayAuthenticator();
				auth.setRemoteUser("wcadmin");
				rms.setAuthenticator(auth);

				String drwNo = args[0];

				FindEpmNumbered(drwNo);

				System.exit(0);
			}
			catch(Exception exceptionMain)
			{
				exceptionMain.printStackTrace();
			}
		}
	}

    private final transient SearchInfo searchInfo = new SearchInfo();
}
