
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.*;

public class epmList_11 {

	public static Enumeration FindEpmNumbered(String drwNo) throws WTException, WTPropertyVetoException {
		QuerySpec qs = new QuerySpec(EPMDocument.class);
		qs.appendWhere(new SearchCondition(EPMDocument.class,EPMDocument.NUMBER,SearchCondition.LIKE,drwNo));
		qs.appendAnd();
		qs.appendWhere(new SearchCondition(EPMDocument.class, "iterationInfo.latest", "TRUE"));

		System.out.println( "Now Querying Using: " + qs.toString() );

		final QueryResult qr = PersistenceHelper.manager.find(qs);

		Vector resultVector = new Vector();
		Vector returnVector = new Vector();

		while (qr.hasMoreElements())
		{
			System.out.println( "Got IN" );

			Object[] obj = (Object[]) qr.nextElement();

			System.out.println("obj.length: "+obj.length);

			Series currentSeries = Series.newSeries("wt.series.FileBasedSeries", (String) obj[3]);

			String currentNumber0 = (String) obj[0];
			System.out.println("currentNumber0 = " + currentNumber0);

			String currentNumber1 = (String) obj[1];
			System.out.println("currentNumber1 = " + currentNumber1);

			String currentNumber2 = (String) obj[2];
			System.out.println("currentNumber2 = " + currentNumber2);

			try
			{
				Object[] lastObj = (Object[]) resultVector.lastElement();
				String lastNumber = (String) lastObj[1];
				Series lastSeries = Series.newSeries("wt.series.FileBasedSeries", (String) lastObj[3]);

				if ((currentNumber0.equals(lastNumber)) && (lastSeries.lessThan(currentSeries)))
					resultVector.remove(lastObj);
				else if ((currentNumber0.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();

			ReferenceFactory rf = new ReferenceFactory();
			WTReference ref = rf.getReference(epmm);
			Versioned v = (Versioned) ref.getObject();

			String currentRevision = v.getVersionIdentifier().getValue();
			Series currentSeries = Series.newSeries("wt.series.FileBasedSeries", currentRevision);

			String s2 = VersionControlHelper.getVersionIdentifier((Versioned)epmm).getSeries().getValue();

			System.out.println( "VIdent: " + s2+ " & currentRevision:: "+currentRevision);
			System.out.println( epmm.getNumber() + "," + epmm.getVersionIdentifier().getValue() + "."+epmm.getIterationIdentifier().getValue());
		}
		*/

		return new Enumeration() {
			public boolean hasMoreElements() {
				return qr.hasMoreElements();
			}
			public Object nextElement() throws NoSuchElementException {
				return ((Persistable[])qr.nextElement());
			}
		};
	}

	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];

				try {
					Enumeration e = FindEpmNumbered(drwNo);
					while (e.hasMoreElements()) {
						System.out.println(((EPMDocument)e.nextElement()).getIdentity());
					}
				}
				catch (WTException wtee) {
					wtee.printStackTrace();
				}
				catch (WTPropertyVetoException wtpe) {
					wtpe.printStackTrace();
				}
				finally {
					System.exit(0);
				}

				System.exit(0);
			}
			catch(Exception exceptionMain)
			{
				exceptionMain.printStackTrace();
			}
		}
	}

    private final transient SearchInfo searchInfo = new SearchInfo();
}
