
package cust.cm.report;

import java.util.*;

import wt.fc.PersistenceHelper;
import wt.fc.WTObject;
import wt.fc.QueryResult;

import wt.inf.container.WTContained;
import wt.inf.container.WTContainer;
import wt.inf.container.WTContainerHelper;

import wt.org.WTUser;
import wt.org.WTPrincipal;
import wt.org.WTOrganization;

import wt.change2.ChangeHelper2;
import wt.change2.WTChangeIssue;
import wt.change2.WTChangeOrder2;
import wt.change2.WTChangeRequest2;
import wt.change2.WTChangeActivity2;

import wt.query.QuerySpec;

import wt.workflow.engine.*;
import wt.workflow.definer.*;
import wt.workflow.engine.WfEngineService;

import wt.method.RemoteMethodServer;
import wt.httpgw.GatewayAuthenticator;

public class cmReport_16 {

	// PR  - wt.change2.WTChangeIssue		- getChangeIssues
	// ECR - wt.change2.WTChangeRequest2	- getChangeRequest
	// ECN - wt.change2.WTChangeOrder2		- getChangeOrders
	// ECA - wt.change2.WTChangeActivities2	- getChangeActivities

	static String divA = "\n**************************************************";
	static String divE = "\n==================================================\n";
	static String ECT;
	static String bis = "";
	static String tis = "\t";

	public static void main(String[] args) throws Exception {
		RemoteMethodServer rms = RemoteMethodServer.getDefault();
		GatewayAuthenticator auth = new GatewayAuthenticator();
		auth.setRemoteUser("wcadmin");
		rms.setAuthenticator(auth);

		if ( args.length > 0 ) { ECT = args[0]; }
		else { ECT = "-ALL"; }

		new cmReport_16();
	}

	public cmReport_16() throws Exception {
		if ( ECT.equals("-PR")) { PR(); }
		else if ( ECT.equals("-ECR")) { ECR(); }
		else if ( ECT.equals("-ECN")) { ECN(); }
		else if ( ECT.equals("-ECA")) { ECA(); }
		else if ( ECT.equals("-ALL")){  PR(); ECR(); ECN(); ECA(); }
	}

	public void PR() throws Exception {
		// WTChangeIssue.class
		QueryResult resCHI=PersistenceHelper.manager.find(new QuerySpec(WTChangeIssue.class));
		while(resCHI.hasMoreElements()) {
			WTChangeIssue wtin = (WTChangeIssue)resCHI.nextElement();
			System.out.println( divE+"PR: "+wtin.getTeamName()+"\n\nName: "+wtin.getName());
			System.out.println( "Number: "+wtin.getNumber()+"\nDescription: "+wtin.getDescription());
			System.out.println( "Creator Name: "+wtin.getCreatorName()+"\nCreator EMail: "+wtin.getCreatorEMail());
			System.out.println( "LifeCycle State: "+wtin.getState()+"\nOrganization Name: "+wtin.getOrganizationName());
			System.out.println( "Requester: "+wtin.getRequester()+"\nIssue Priority: "+wtin.getIssuePriority());
			System.out.println( "Category: "+wtin.getCategory());

			QueryResult qrcm = WfEngineHelper.service.getAssociatedProcesses(wtin, null, ((WTContained)wtin).getContainerReference());
			while(qrcm.hasMoreElements()) {
				WfProcess wfprocess = (WfProcess)qrcm.nextElement();
				getWF(wfprocess,bis);
			}
			getCMCI(wtin);
		}
		System.out.println(divE+"Number of PR's: "+resCHI.size()+divE+divA);
	}

	public void ECR() throws Exception {
		// WTChangeRequest2.class
		QueryResult resCHR=PersistenceHelper.manager.find(new QuerySpec(WTChangeRequest2.class));
		while(resCHR.hasMoreElements()) {
			WTChangeRequest2 wtin = (WTChangeRequest2)resCHR.nextElement();
			System.out.println( divE+"ECR: "+wtin.getTeamName()+"\n\nName: "+wtin.getName());
			System.out.println( "Number: "+wtin.getNumber()+"\nDescription: "+wtin.getDescription());
			System.out.println( "Need Date: "+wtin.getNeedDate()+"\nCreator Name: "+wtin.getCreatorName());
			System.out.println( "Creator EMail: "+wtin.getCreatorEMail()+"\nLifeCycle State: "+wtin.getState());
			System.out.println( "Organization Name: "+wtin.getOrganizationName()+"\nRequest Priority: "+wtin. getRequestPriority());
			System.out.println( "Category: "+wtin.getCategory() );

			QueryResult qrcm = WfEngineHelper.service.getAssociatedProcesses(wtin, null, ((WTContained)wtin).getContainerReference());
			while(qrcm.hasMoreElements()) {
				WfProcess wfprocess = (WfProcess)qrcm.nextElement();
				getWF(wfprocess,bis);
			}
			getCMCR(wtin);
		}
		System.out.println(divE+"Number of ECR's: "+resCHR.size()+divE+divA);
	}

	public void ECN() throws Exception {
		// WTChangeOrder2.class
		QueryResult resCHO=PersistenceHelper.manager.find(new QuerySpec(WTChangeOrder2.class));
		while(resCHO.hasMoreElements()) {
			WTChangeOrder2 wtin = (WTChangeOrder2)resCHO.nextElement();
			System.out.println( divE+"ECN: "+wtin.getTeamName()+"\n");
			System.out.println( "Name: "+wtin.getName()+"\nNumber: "+wtin.getNumber());
			System.out.println( "Description: "+wtin.getDescription()+"\nNeed Date: "+wtin.getNeedDate());
			System.out.println( "Creator Name: "+wtin.getCreatorName()+"\nCreator EMail: "+wtin.getCreatorEMail());
			System.out.println( "LifeCycle State: "+wtin.getState()+"\nOrganization Name: "+wtin.getOrganizationName());

			QueryResult qrcm = WfEngineHelper.service.getAssociatedProcesses(wtin, null, ((WTContained)wtin).getContainerReference());
			while(qrcm.hasMoreElements()) {
				WfProcess wfprocess = (WfProcess)qrcm.nextElement();
				getWF(wfprocess,bis);
			}
			getCMCN(wtin);
		}
		System.out.println(divE+"Number of ECN's: "+resCHO.size()+divE+divA);
	}

	public void ECA() throws Exception {
		// WTChangeActivity2.class
		QueryResult resCHA=PersistenceHelper.manager.find(new QuerySpec(WTChangeActivity2.class));
		while(resCHA.hasMoreElements()) {
			WTChangeActivity2 wtin = (WTChangeActivity2)resCHA.nextElement();
			System.out.println( divE+"ECA: "+wtin.getTeamName()+"\n");
			System.out.println( "Name: "+wtin.getName()+"\nNumber: "+wtin.getNumber());
			System.out.println( "Description: "+wtin.getDescription()+"\nNeed Date: "+wtin.getNeedDate());
			System.out.println( "Creator Name: "+wtin.getCreatorName()+"\nCreator EMail: "+wtin.getCreatorEMail());
			System.out.println( "LifeCycle State: "+wtin.getState());

			QueryResult qrcm = WfEngineHelper.service.getAssociatedProcesses(wtin, null, ((WTContained)wtin).getContainerReference());
			while(qrcm.hasMoreElements()) {
				WfProcess wfprocess = (WfProcess)qrcm.nextElement();
				getWF(wfprocess,bis);
			}
		}
		System.out.println(divE+"Number of ECA's: "+resCHA.size()+divE+divA);
	}

	public void getCMCI(WTChangeIssue wtcrci) throws Exception {
		// checking for Related ECR's
		QueryResult wt2cr = ChangeHelper2.service.getChangeRequest(wtcrci);
		if (wt2cr.size()>0) {
			while(wt2cr.hasMoreElements()) {
				WTChangeRequest2 ecr=(WTChangeRequest2)wt2cr.nextElement();
				System.out.println( divE+"\tRelated ECR: "+ecr.getTeamName()+"\n" );
				System.out.println( "\tName: "+ecr.getName()+"\n\tNumber: "+ecr.getNumber());
				System.out.println( "\tDescription: "+ecr.getDescription()+"\n\tNeed Date: "+ecr.getNeedDate());
				System.out.println( "\tCreator Name: "+ecr.getCreatorName()+"\n\tCreator EMail: "+ecr.getCreatorEMail());
				System.out.println( "\tLifeCycle State: "+ecr.getState()+"\n\tOrganization Name: "+ecr.getOrganizationName());
				System.out.println( "\tRequest Priority: "+ecr.getRequestPriority()+"\n\tCategory: "+ecr.getCategory());

				QueryResult qrcm = WfEngineHelper.service.getAssociatedProcesses(ecr, null, ((WTContained)ecr).getContainerReference());
				while(qrcm.hasMoreElements()) {
					WfProcess wfprocess = (WfProcess)qrcm.nextElement();
					getWF(wfprocess,tis);
				}
			}
		} else { System.out.println( "\n\tNO Related ECR's." ); }
	}

	public void getCMCR(WTChangeRequest2 wtcmcr) throws Exception {
		// Checking for Related PR's
		QueryResult wt2ci = ChangeHelper2.service.getChangeIssues(wtcmcr);
		if (wt2ci.size()>0) {
			while(wt2ci.hasMoreElements()) {
				WTChangeIssue pr=(WTChangeIssue)wt2ci.nextElement();
				System.out.println( divE+"\tRelated PR: "+pr.getTeamName()+"\n");
				System.out.println( "\tName: "+pr.getName()+"\tNumber: "+pr.getNumber());
				System.out.println( "\tDescription: "+pr.getDescription()+"\n\tCreator Name: "+pr.getCreatorName());
				System.out.println( "\tCreator EMail: "+pr.getCreatorEMail()+"\n\tLifeCycle State: "+pr.getState());
				System.out.println( "\tOrganization Name: "+pr.getOrganizationName()+"\n\tRequester: "+pr.getRequester());
				System.out.println( "\tIssue Priority: "+pr.getIssuePriority()+"\n\tCategory: "+pr.getCategory());

				QueryResult qrcm = WfEngineHelper.service.getAssociatedProcesses(pr, null, ((WTContained)pr).getContainerReference());
				while(qrcm.hasMoreElements()) {
					WfProcess wfprocess = (WfProcess)qrcm.nextElement();
					getWF(wfprocess,tis);
				}
			}
		} else { System.out.println( "\n\tNO Related PR's." ); }

		// checking for Related ECN's
		QueryResult wt2cn = ChangeHelper2.service.getChangeOrders(wtcmcr);
		if (wt2cn.size()>0) {
			while(wt2cn.hasMoreElements()) {
				WTChangeOrder2 ecn=(WTChangeOrder2)wt2cn.nextElement();
				System.out.println( divE+"\tRelated ECN: "+ecn.getTeamName()+"\n");
				System.out.println( "\tName: "+ecn.getName()+"\n\tNumber: "+ecn.getNumber());
				System.out.println( "\tDescription: "+ecn.getDescription()+"\n\tNeed Date: "+ecn.getNeedDate());
				System.out.println( "\tCreator Name: "+ecn.getCreatorName()+"\n\tCreator EMail: "+ecn.getCreatorEMail());
				System.out.println( "\tLifeCycle State: "+ecn.getState()+"\n\tOrganization Name: "+ecn.getOrganizationName());

				QueryResult qrcm2 = WfEngineHelper.service.getAssociatedProcesses(ecn, null, ((WTContained)ecn).getContainerReference());
				while(qrcm2.hasMoreElements()) {
					WfProcess wfprocess2 = (WfProcess)qrcm2.nextElement();
					getWF(wfprocess2,tis);
				}
			}
		} else { System.out.println( "\n\tNO Related ECN's." ); }
	}

	public void getCMCN(WTChangeOrder2 wtcmcn) throws Exception {
		// checking for Related ECR's
		QueryResult wt2cr = ChangeHelper2.service.getChangeRequest(wtcmcn);
		if (wt2cr.size()>0) {
			while(wt2cr.hasMoreElements()) {
				WTChangeRequest2 ecr=(WTChangeRequest2)wt2cr.nextElement();
				System.out.println( divE+"\tRelated ECR: "+ecr.getTeamName()+"\n");
				System.out.println( "\tName: "+ecr.getName()+"\n\tNumber: "+ecr.getNumber());
				System.out.println( "\tDescription: "+ecr.getDescription()+"\n\tNeed Date: "+ecr.getNeedDate());
				System.out.println( "\tCreator Name: "+ecr.getCreatorName()+"\n\tCreator EMail: "+ecr.getCreatorEMail());
				System.out.println( "\tLifeCycle State: "+ecr.getState()+"\n\tOrganization Name: "+ecr.getOrganizationName());
				System.out.println( "\tRequest Priority: "+ecr. getRequestPriority()+"\n\tCategory: "+ecr.getCategory());

				QueryResult qrcm = WfEngineHelper.service.getAssociatedProcesses(ecr, null, ((WTContained)ecr).getContainerReference());
				while(qrcm.hasMoreElements()) {
					WfProcess wfprocess = (WfProcess)qrcm.nextElement();
					getWF(wfprocess,tis);
				}
			}
		} else { System.out.println( "\n\tNO Related ECR's." ); }

		// checking for Related ECA's
		QueryResult wt2ca = ChangeHelper2.service.getChangeActivities(wtcmcn);
		if (wt2ca.size()>0) {
			while(wt2ca.hasMoreElements()) {
				WTChangeActivity2 eca=(WTChangeActivity2)wt2ca.nextElement();
				System.out.println( divE+"\tRelated ECA: "+eca.getTeamName()+"\n");
				System.out.println( "\tName: "+eca.getName()+"\n\tNumber: "+eca.getNumber());
				System.out.println( "\tDescription: "+eca.getDescription()+"\n\tNeed Date: "+eca.getNeedDate());
				System.out.println( "\tCreator Name: "+eca.getCreatorName()+"\n\tCreator EMail: "+eca.getCreatorEMail());
				System.out.println( "\tLifeCycle State: "+eca.getState());

				QueryResult qrcm2 = WfEngineHelper.service.getAssociatedProcesses(eca, null, ((WTContained)eca).getContainerReference());
				while(qrcm2.hasMoreElements()) {
					WfProcess wfprocess2 = (WfProcess)qrcm2.nextElement();
					getWF(wfprocess2,tis);
				}
			}
		} else { System.out.println( "\n\tNO Related ECA's." ); }
	}

	public void getWF(WfProcess wfprocessIN, String is) throws Exception {
		WTContainer container = WTContainerHelper.getContainer(wfprocessIN);
		WTUser wfCreator = (WTUser)(wfprocessIN).getCreator().getPrincipal();
		System.out.println( "\n"+is+"WfProcess Creator: "+wfCreator.getName()+"\n"+is+"Container: "+container.getName());
		System.out.println( is+"WfProcess Name: "+wfprocessIN.getName()+"\n"+is+"WfProcess Desc: "+wfprocessIN.getDescription());
		System.out.println( is+"Team Name: "+wfprocessIN.getTeamTemplateName()+"\n");

		ProcessData processdata = wfprocessIN.getContext();
		WfVariable wfvars[] = processdata.getVariableList();
		String[] PDS = processdata.getNames();

		for(int z = 0; z < wfvars.length; z++) {
			String tnStg = wfvars[z].getTypeName();
			if(tnStg.equals("boolean")||tnStg.equals("java.lang.Boolean")) {
				java.lang.Boolean wfbool = (java.lang.Boolean)wfvars[z].getValue();
				System.out.println( is+"Context Name: "+PDS[z]+"\n"+is+"Value: "+wfbool);
			}
			else if(tnStg.equals("java.lang.String")) {
				System.out.println( is+"Context Name: "+PDS[z]+"\n"+is+"Value: "+(String)wfvars[z].getValue());
			}
			else if(tnStg.equals("java.sql.Timestamp")) {
				java.sql.Timestamp wfTime = (java.sql.Timestamp)wfvars[z].getValue();
				System.out.println( is+"Context Name: "+PDS[z]+"\n"+is+"Value: "+wfTime);
			}
		}
	}
}
