
package ext;

import java.util.*;
import java.io.*;
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.enterprise.*;
import wt.series.*;
import com.ptc.windchill.enterprise.templates.*;

public class epmList_1B {

	public static void FindEpmNumbered(String drwNo) throws WTException, WTPropertyVetoException {

		Vector qrVector = new Vector();

		ClassAttribute versionAttribute = new ClassAttribute(EPMDocument.class, "versionInfo.identifier.versionId");
		ClassAttribute numberAttribute = new ClassAttribute(EPMDocument.class, EPMDocument.NUMBER);
		ClassAttribute iterationAttribute = new ClassAttribute(EPMDocument.class, "iterationInfo.identifier.iterationId");

		QuerySpec qs = new QuerySpec(EPMDocument.class);

		qs.appendSelect(numberAttribute, false);
		qs.appendSelect(versionAttribute, false);
		qs.appendSelect(iterationAttribute, 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(numberAttribute, false));
		qs.appendOrderBy(new OrderBy(versionAttribute, false));

		final QueryResult qr = PersistenceHelper.manager.find(qs);

		while (qr.hasMoreElements())
		{
			Object[] obj = (Object[]) qr.nextElement();
			Series curSer = Series.newSeries((wt.vc.VersionIdentifier.class).getName(), (String) obj[2]);
			String curNo = (String) obj[1];

			try
			{
				Object[] prevObj = (Object[]) qrVector.lastElement();
				String prevNo = (String) prevObj[1];
				Series prevSer = Series.newSeries((wt.vc.VersionIdentifier.class).getName(), (String) prevObj[2]);

				if ((curNo.equals(prevNo)) && (prevSer.lessThan(curSer))) {
					qrVector.remove(prevObj);
				} else
				if ((curNo.equals(prevNo)) && (prevSer.greaterThan(curSer))) {
					continue;
				}
			}
			catch(NoSuchElementException e) { }
			catch(Exception e) { }

			qrVector.addElement(obj);
		}

		String txtTot="";
		Enumeration qrEnum = qrVector.elements();

		while (qrEnum.hasMoreElements())
		{
			Object[] newObj = (Object[]) qrEnum.nextElement();
			System.out.println( newObj[1] + "," + newObj[2] + "."+newObj[3]);
			txtTot=txtTot+newObj[1] + "," + newObj[2] + "."+newObj[3]+"\r\n";
		}

		try {
			File file = new File("empList.csv");
			Writer writer = new BufferedWriter(new FileWriter(file));
			writer.write(txtTot);
			writer.flush();
			writer.close();
		}
		catch(IOException eIO){
			eIO.printStackTrace();
		}
	}

	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();
			}
		}
	}
}
