package ext.publishing;

import com.ptc.wvs.server.util.PublishUtils;
import wt.content.ApplicationData;
import wt.content.ContentHelper;
import wt.content.ContentHolder;
import wt.content.ContentItem;
import wt.doc.*;
import wt.epm.*;
import wt.epm.EPMAuthoringAppType;
import wt.epm.EPMDocConfigSpec;
import wt.fc.ObjectVector;
import wt.fc.ObjectVectorIfc;
import wt.fc.Persistable;
import wt.fc.PersistenceHelper;
import wt.fc.PersistenceServerHelper;
import wt.fc.QueryResult;
import wt.inf.container.*;
import wt.lifecycle.*;
import wt.lifecycle.State;
import wt.query.QuerySpec;
import wt.query.SearchCondition;
import wt.representation.Representation;
import wt.vc.VersionControlHelper;
import wt.vc.config.ConfigHelper;
import wt.vc.config.LatestConfigSpec;
import wt.vc.config.LifeCycleConfigSpec;
import wt.viewmarkup.DerivedImage;

public class ScheduleJobsExt01 {

	public static QueryResult RelEpmAll() {
		QueryResult result = QueRun("ALL","ALL","RELEASED");
		return result;
	}

	public static QueryResult QueRun( String EpmType, String RepType, String targetState )
	{
		ObjectVector objectvector = new ObjectVector();

		try {
			QuerySpec qs = new QuerySpec(wt.epm.EPMDocumentMaster.class);

			if(EpmType.equals("ALL")) {
				qs.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, "%.DRW"));
        		qs.appendAnd();
				qs.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, "%.PRT"));
        		qs.appendAnd();
				qs.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, "%.ASM"));
			}
			else {
				qs.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, EpmType));
			}

			QueryResult qr = PersistenceHelper.manager.find(qs);
			do {
				if(!qr.hasMoreElements())
					break;

				EPMDocumentMaster epmdocumentmaster = (EPMDocumentMaster)qr.nextElement();
				EPMDocConfigSpec epmConfigSpec = EPMDocConfigSpec.newEPMDocConfigSpec();
				epmConfigSpec.setLifeCycleActive(true);

				QueryResult qr1 = ConfigHelper.service.filteredIterationsOf( epmdocumentmaster, epmConfigSpec );

				if(qr1.hasMoreElements()){
					EPMDocument epmdocument =(EPMDocument)qr1.nextElement();

					LifeCycleManaged LMObject = (LifeCycleManaged)epmdocument;
					String StStg = (String)LMObject.getLifeCycleState().toString();

					if(StStg.equals(targetState)) {
						Representation representation = PublishUtils.getRepresentation(epmdocument);
						System.out.println("STATE "+StStg+" Found: - EPMDoc ID: "+epmdocument+" - EPMDoc Version: "+PublishUtils.getIterationIdentifier(epmdocument));
						System.out.println("EPMDoc - Number: " + epmdocument.getNumber() + " - Name: " + epmdocument.getName()+ " - CadName: " + epmdocument.getCADName() + "\n" );

						if(RepType.equals("ALL")) {
							objectvector.addElement(epmdocument);
						}
						else {
							if(representation == null)
								objectvector.addElement(epmdocument);
						}
					}
				}
			} while(true);
		}
		catch(Exception exception)
		{
			exception.printStackTrace();
			objectvector = new ObjectVector();
		}
		return new QueryResult(objectvector);
	}
}
