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 ScheduleJobsExt {

	public QueryResult ProtoEpmAll() {		//Publish ALL PROTOTYPE versions of an object
		QueryResult QueRun("%.DRW","ALL","PROTOTYPE");
		QueryResult QueRun("%.PRT","ALL","PROTOTYPE");
		QueryResult QueRun("%.ASM","ALL","PROTOTYPE");
	}

	public QueryResult RelEpmAll() {		//Publish ALL RELEASED versions of an object
		QueryResult QueRun("%.DRW","ALL","RELEASED");
		QueryResult QueRun("%.PRT","ALL","RELEASED");
		QueryResult QueRun("%.ASM","ALL","RELEASED");
	}

	public QueryResult ProtoEpmNoRep() {	//Publish NoRep PROTOTYPE versions of an object
		QueryResult QueRun("%.DRW","NoRep","PROTOTYPE");
		QueryResult QueRun("%.PRT","NoRep","PROTOTYPE");
		QueryResult QueRun("%.ASM","NoRep","PROTOTYPE");
	}

	public QueryResult RelEpmNoRep() {		//Publish NoRep RELEASED versions of an object
		QueryResult QueRun("%.DRW","NoRep","RELEASED");
		QueryResult QueRun("%.PRT","NoRep","RELEASED");
		QueryResult QueRun("%.ASM","NoRep","RELEASED");
	}

	public QueryResult ProtoDrwAll() { QueryResult QueRun("%.DRW","ALL","PROTOTYPE"); }
	public QueryResult ProtoPrtAll() { QueryResult QueRun("%.PRT","ALL","PROTOTYPE"); }
	public QueryResult ProtoAsmAll() { QueryResult QueRun("%.ASM","ALL","PROTOTYPE"); }

	public QueryResult RelDrwAll() { QueryResult QueRun("%.DRW","ALL","RELEASED"); }
	public QueryResult RelPrtAll() { QueryResult QueRun("%.PRT","ALL","RELEASED"); }
	public QueryResult RelAsmAll() { QueryResult QueRun("%.ASM","ALL","RELEASED"); }

	public QueryResult ProtoDrwNoRep() { QueryResult QueRun("%.DRW","NoRep","PROTOTYPE"); }
	public QueryResult ProtoPrtNoRep() { QueryResult QueRun("%.PRT","NoRep","PROTOTYPE"); }
	public QueryResult ProtoAsmNoRep() { QueryResult QueRun("%.ASM","NoRep","PROTOTYPE"); }

	public QueryResult RelDrwNoRep() { QueryResult QueRun("%.DRW","NoRep","RELEASED"); }
	public QueryResult RelPrtNoRep() { QueryResult QueRun("%.PRT","NoRep","RELEASED"); }
	public QueryResult RelAsmNoRep() { QueryResult QueRun("%.ASM","NoRep","RELEASED"); }

	public QueryResult QueRun( String EpmType, String RepType, String targetState )
	{
		ObjectVector objectvector = new ObjectVector();

		try {
			QuerySpec qs = new QuerySpec(wt.epm.EPMDocumentMaster.class);

			if(

			qs.appendSearchCondition(new SearchCondition(wt.epm.EPMDocumentMaster.class, wt.epm.EPMDocumentMaster.NUMBER, SearchCondition.LIKE, "%.DRW"));

			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);
	}

    public static void main (String[] args) {
        System.out.println("Args="+args.length);
        if (args.length !=6) {
            printUsage();
            System.exit (1);
        }
        String typeObj = null;
		String actualState = null;
		String targetState = null;
        String lifecyclename = null;
        Boolean forceLatestIteration = null;
        String container_path = null;
        String classNameStr = null;
        try {
            typeObj = args[0];
		    actualState = args[1];
		    targetState = args[2];
            lifecyclename = args[3];
            forceLatestIteration = new Boolean(args[4]);
            container_path = args[5];

            if (typeObj.equals("PART")) {
                classNameStr = "wt.part.WTPart";
            }
            else if (typeObj.equals("CADDOC")) {
                classNameStr = "wt.epm.EPMDocument";
            }
            else if (typeObj.equals("DOCUMENT")) {
                classNameStr = "wt.doc.WTDocument";
            }
        }
        catch (Throwable e) {
            printUsage();
            e.printStackTrace();
        }

        if (typeObj.equals("ALL")) {
		    reassignLF("wt.part.WTPart",actualState,targetState,lifecyclename,forceLatestIteration,container_path);
		    reassignLF("wt.epm.EPMDocument",actualState,targetState,lifecyclename,forceLatestIteration,container_path);
		    reassignLF("wt.doc.WTDocument",actualState,targetState,lifecyclename,forceLatestIteration,container_path);
			System.exit (1);
        }
        else {
			reassignLF(classNameStr,actualState,targetState,lifecyclename,forceLatestIteration,container_path);
        	System.exit (1);
		}
    }
}
