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 ScheduleJobsCustom {

	//Publish ALL PROTOTYPE versions of an object

	public static QueryResult ProtoDrwAll()
	{
		ObjectVector objectvector = new ObjectVector();

		try {
			QuerySpec queryspec = new QuerySpec(wt.epm.EPMDocumentMaster.class);
			queryspec.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, "%.DRW"));

			QueryResult qr = PersistenceHelper.manager.find(queryspec);
			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("PROTOTYPE")) {
						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(representation == null)
							objectvector.addElement(epmdocument);
					}
				}
			} while(true);
		}
		catch(Exception exception)
		{
			exception.printStackTrace();
			objectvector = new ObjectVector();
		}
		return new QueryResult(objectvector);
	}

	//Publish NoRep PROTOTYPE versions of an object

	public static QueryResult ProtoDrwNoRep()
	{
		ObjectVector objectvector = new ObjectVector();

		try {
			QuerySpec queryspec = new QuerySpec(wt.epm.EPMDocumentMaster.class);
			queryspec.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, "%.DRW"));

			QueryResult qr = PersistenceHelper.manager.find(queryspec);
			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("PROTOTYPE")) {
						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(representation == null)
							objectvector.addElement(epmdocument);
					}
				}
			} while(true);
		}
		catch(Exception exception)
		{
			exception.printStackTrace();
			objectvector = new ObjectVector();
		}
		return new QueryResult(objectvector);
	}

	//Publish ALL RELEASED versions of an object

	public static QueryResult RelDrwAll()
	{
		ObjectVector objectvector = new ObjectVector();

		try {
			QuerySpec queryspec = new QuerySpec(wt.epm.EPMDocumentMaster.class);
			queryspec.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, "%.DRW"));

			QueryResult qr = PersistenceHelper.manager.find(queryspec);
			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("RELEASED")) {
						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(representation == null)
							objectvector.addElement(epmdocument);
					}
				}
			} while(true);
		}
		catch(Exception exception)
		{
			exception.printStackTrace();
			objectvector = new ObjectVector();
		}
		return new QueryResult(objectvector);
	}

	//Publish NoRep RELEASED versions of an object

	public static QueryResult RelDrwNoRep()
	{
		ObjectVector objectvector = new ObjectVector();

		try {
			QuerySpec queryspec = new QuerySpec(wt.epm.EPMDocumentMaster.class);
			queryspec.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, "%.DRW"));

			QueryResult qr = PersistenceHelper.manager.find(queryspec);
			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("RELEASED")) {
						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(representation == null)
							objectvector.addElement(epmdocument);
					}
				}
			} while(true);
		}
		catch(Exception exception)
		{
			exception.printStackTrace();
			objectvector = new ObjectVector();
		}
		return new QueryResult(objectvector);
	}
}
