package gov.nasa.ksc.publishing;

import com.ptc.wvs.server.util.PublishUtils;
import wt.doc.*;
import wt.epm.*;
import wt.part.*;
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.query.QuerySpec;
import wt.query.SearchCondition;
import wt.representation.Representation;
import wt.vc.VersionControlHelper;

/*

Add to site.xconf or additional xconf:

<!-- Schedule Publishing No Rep EpmDocs -->

<Property name="schedulejobs21" overridable="true" targetFile="codebase/wvs.properties" value="pubEpmNoRep50"/>
<Property name="pubEpmNoRep50.class" overridable="true" targetFile="codebase/wvs.properties" value="gov.nasa.ksc.publishing.PublishJobs_01"/>
<Property name="pubEpmNoRep50.description" overridable="true" targetFile="codebase/wvs.properties" value="PublishJobs_EPM_NoRep_50"/>
<Property name="pubEpmNoRep50.method" overridable="true" targetFile="codebase/wvs.properties" value="epm50"/>
<Property name="pubEpmNoRep50.enableOnContainers" overridable="true" targetFile="codebase/wvs.properties" value="true"/>

Add to wvs.properties.xconf:

<!-- Schedule Publishing No Rep EpmDocs -->

<Property default="pubEpmNoRep50" name="schedulejobs21"/>
<Property default="pubEpmNoRep50" name="pubEpmNoRep50.description"/>
<Property default="gov.nasa.ksc.publishing.PublishJobs_01" name="pubEpmNoRep50.class"/>
<Property default="epm50" name="pubEpmNoRep50.method"/>
<Property default="true" name="pubEpmNoRep50.enableOnContainers"/>

*/

public class PublishJobs_01 {

	public static QueryResult epm50()		{ QueryResult result = QueRun(50,"epm"); return result; }

	public static QueryResult epm500()		{ QueryResult result = QueRun(500,"epm"); return result; }
	public static QueryResult epm1000()		{ QueryResult result = QueRun(1000,"epm"); return result; }
	public static QueryResult epm1500()		{ QueryResult result = QueRun(1500,"epm"); return result; }
	public static QueryResult epm2000()		{ QueryResult result = QueRun(2000,"epm"); return result; }

	public static QueryResult wtd50()		{ QueryResult result = QueRun(50,"wtd"); return result; }

	public static QueryResult wtd500()		{ QueryResult result = QueRun(500,"wtd"); return result; }
	public static QueryResult wtd1000()		{ QueryResult result = QueRun(1000,"wtd"); return result; }
	public static QueryResult wtd1500()		{ QueryResult result = QueRun(1500,"wtd"); return result; }
	public static QueryResult wtd2000()		{ QueryResult result = QueRun(2000,"wtd"); return result; }

	public static QueryResult wtp50()		{ QueryResult result = QueRun(50,"wtp"); return result; }

	public static QueryResult wtp500()		{ QueryResult result = QueRun(500,"wtp"); return result; }
	public static QueryResult wtp1000()		{ QueryResult result = QueRun(1000,"wtp"); return result; }
	public static QueryResult wtp1500()		{ QueryResult result = QueRun(1500,"wtp"); return result; }
	public static QueryResult wtp2000()		{ QueryResult result = QueRun(2000,"wtp"); return result; }

	public static QueryResult QueRun( int qtyRun, String objType ) {
		ObjectVector objVector = new ObjectVector();
		int qrCnt=0;

		System.out.println("Int: "+qtyRun+" - objType: "+objType);

		try {
			if ( objType.equals("epm") ) {
				System.out.println("Found epm: "+objType);
				QuerySpec qs = new QuerySpec(wt.epm.EPMDocument.class);
				qs.appendSearchCondition(new SearchCondition(wt.epm.EPMDocument.class, wt.epm.EPMDocument.NUMBER, SearchCondition.LIKE, "%"));

				QueryResult qr = PersistenceHelper.manager.find(qs);

				while (qr.hasMoreElements()) {
					EPMDocument epm = (EPMDocument)qr.nextElement();
					Representation representation = PublishUtils.getRepresentation(epm);

					if( representation == null && qrCnt<qtyRun ) {
						System.out.println("Count: "+qrCnt+"Publishing - EPMDoc_NO:"+ epm.getNumber()+":Vers" + epm.getVersionIdentifier().getValue()+"."+epm.getIterationIdentifier().getValue()+":RepVers:"+PublishUtils.getIterationIdentifier(epm));
						objVector.addElement(epm);
						qrCnt++;
					}
				}
			}
			else if ( objType.equals("wtd") ) {
				System.out.println("Found wtd: "+objType);
				QuerySpec qs = new QuerySpec(WTDocument.class);
				qs.appendSearchCondition(new SearchCondition(WTDocument.class, WTDocument.NUMBER, SearchCondition.LIKE, "%"));

				QueryResult qr = PersistenceHelper.manager.find(qs);

				while (qr.hasMoreElements()) {
					WTDocument wtd = (WTDocument)qr.nextElement();
					Representation representation = PublishUtils.getRepresentation(wtd);

					if( representation == null && qrCnt<qtyRun ) {
						System.out.println("Count: "+qrCnt+"Publishing - WTDoc_NO:"+ wtd.getNumber()+":Vers" + wtd.getVersionIdentifier().getValue()+"."+wtd.getIterationIdentifier().getValue()+":RepVers:"+PublishUtils.getIterationIdentifier(wtd));
						objVector.addElement(wtd);
						qrCnt++;
					}
				}
			}
			else if ( objType.equals("wtp") ) {
				System.out.println("Found wtp: "+objType);
				QuerySpec qs = new QuerySpec(WTPart.class);
				qs.appendSearchCondition(new SearchCondition(WTPart.class, WTPart.NUMBER, SearchCondition.LIKE, "%"));

				QueryResult qr = PersistenceHelper.manager.find(qs);

				while (qr.hasMoreElements()) {
					WTPart wtp = (WTPart)qr.nextElement();
					Representation representation = PublishUtils.getRepresentation(wtp);

					if( representation == null && qrCnt<qtyRun ) {
						System.out.println("Count: "+qrCnt+"Publishing - WTPart_NO:"+ wtp.getNumber()+":Vers" + wtp.getVersionIdentifier().getValue()+"."+wtp.getIterationIdentifier().getValue()+":RepVers:"+PublishUtils.getIterationIdentifier(wtp));
						objVector.addElement(wtp);
						qrCnt++;
					}
				}
			}
		}
		catch(Exception exception)
		{
			exception.printStackTrace();
			objVector = new ObjectVector();
		}
		return new QueryResult(objVector);
	}
}
