
package ext.SEQ;

//import com.infoengine.object.factory.*

import java.util.*;
import java.rmi.RemoteException;
import java.net.URL;
import java.beans.PropertyVetoException;
import java.io.*;

import wt.util.*;
import wt.fc.*;
import wt.vc.*;
import wt.query.*;
import wt.part.*;
import wt.epm.*;
import wt.httpgw.GatewayAuthenticator;
import wt.method.RemoteAccess;
import wt.method.RemoteMethodServer;

import wt.content.*;
import wt.representation.*;
import wt.folder.CabinetBased;

import wt.fv.StandardFvService;
import wt.content.ContentHTTPStream;

import wt.lifecycle.*;
import wt.lifecycle.State;

import wt.htmlutil.HtmlUtil;
import wt.httpgw.GatewayURL;

import com.ptc.wvs.common.util.WVSProperties;
import com.ptc.wvs.server.util.PublishUtils;
import com.ptc.wvs.server.util.WVSContentHelper;

import wt.iba.value.*;
import wt.iba.value.IBAHolder;
import wt.iba.value.litevalue.*;
import wt.iba.value.service.IBAValueHelper;
import wt.iba.value.service.IBAValueService;

import wt.iba.definition.AttributeDefinitionDataType;
import wt.iba.definition.litedefinition.*;
import wt.iba.definition.service.*;

import com.ptc.core.meta.server.IBAModel;
import com.ptc.core.meta.common.AttributeIdentifier;
import com.ptc.core.meta.common.impl.InstanceBasedAttributeIdentifier;
import com.ptc.core.meta.common.impl.InstanceBasedAttributeTypeIdentifier;
import com.ptc.core.meta.type.mgmt.common.TypeDefinitionDefaultView;

import wt.security.FileAccess;
import wt.security.WTSecurityException;

import wt.services.ManagerService;
import wt.services.ManagerServiceFactory;

import wt.session.SessionHelper;
import wt.session.SessionManager;

public class att2dat_03 implements RemoteAccess {

	public static Enumeration FindEpmNumbered(String dlLoc, String drwNo) throws WTException, WTPropertyVetoException {
		QuerySpec qs = new QuerySpec(EPMDocument.class);
		qs.appendWhere(new SearchCondition(EPMDocument.class,EPMDocument.NUMBER,SearchCondition.LIKE,drwNo));
		qs.appendAnd();
		qs.appendWhere(new SearchCondition(EPMDocument.class, "iterationInfo.latest", "TRUE"));
		final QueryResult qr = PersistenceHelper.manager.find(qs);

		while (qr.hasMoreElements()) {
			EPMDocument epmm = (EPMDocument)qr.nextElement();

			if (epmm.getNumber().endsWith(".prt") ) {
				LifeCycleManaged LMObject = (LifeCycleManaged)epmm;
				String StStg = (String)LMObject.getLifeCycleState().toString();

				if (StStg.compareTo("RELEASED") == 0) {
					System.out.println( "\nEPMDoc - Number: " + epmm.getNumber() + " - Name: " + epmm.getName()+ " - CadName: " + epmm.getCADName() );
					System.out.println( "EPMDocument " + epmm.getNumber() + " -Version: " + epmm.getVersionIdentifier().getValue() + " - Iteration:"+epmm.getIterationIdentifier().getValue());
					System.out.println( "Life Cycle State: "+StStg);

					String epmStg = epmm.getNumber();
					String txtTot="";
					String newNM = epmStg.replaceAll(".prt",".dat");
					String filePath = dlLoc+"\\"+newNM;
					System.out.println( "filePath: "+ filePath+"\n");

					for(int i=0;i<attrNM.length;i++){
						String tstStg = getIBA_EPM_Attr(epmm, attrNM[i]);
						System.out.println( "EPMDoc - IBA ProE Param: "+ attrNM[i]+ " & Value: " + tstStg );
						txtTot=txtTot+attrNM[i]+":"+tstStg+"\r\n";
					}

					try {
						File file = new File(filePath);
						Writer writer = new BufferedWriter(new FileWriter(file));
						writer.write(txtTot);
						writer.flush();
						writer.close();
					}
					catch(IOException eIO){
						eIO.printStackTrace();
					}

					queCnt++;
				}
			}
		}

		return new Enumeration() {
			public boolean hasMoreElements() {
				return qr.hasMoreElements();
			}
			public Object nextElement() throws NoSuchElementException {
				return ((Persistable[])qr.nextElement());
			}
		};
	}

	public static String getIBA_EPM_Attr(EPMDocument doc, String attrStg){
		String attrVal=null;
		String attrStgUp = attrStg.toUpperCase();

		try{
			IBAHolder ibaHolder=IBAValueHelper.service.refreshAttributeContainer((IBAHolder)doc, null, null, null);
			StandardIBADefinitionService defService=new StandardIBADefinitionService();
			DefaultAttributeContainer attributeContainer=(DefaultAttributeContainer)ibaHolder.getAttributeContainer();
			AttributeDefDefaultView attributeDefinition=defService.getAttributeDefDefaultViewByPath(attrStgUp);
			if(!(attributeContainer.getAttributeValues().length>0)){return "N/A";}
			AbstractValueView attValue= attributeContainer.getAttributeValues(attributeDefinition)[0];
			attrVal=attValue.getLocalizedDisplayString();
			return attrVal;
		}
		catch(WTException ew){
			ew.printStackTrace();
		}
		catch (RemoteException er){
			er.printStackTrace();
		}
		catch (ArrayIndexOutOfBoundsException ea){
			ea.printStackTrace();
		}
		return "N/A";
	}

	public static void main(String[] args) {
		if(args.length < 2)
		{
			System.out.println("Usage: windchill epmDown <path-where-file-should be saved> <epmdoc search string>");
			System.exit(0);
		} else
		{
			try {
				RemoteMethodServer rms = RemoteMethodServer.getDefault();
				GatewayAuthenticator auth = new GatewayAuthenticator();
				auth.setRemoteUser("wcadmin");
				rms.setAuthenticator(auth);

				String dlLoc = args[0];
				String drwNo = args[1];

				Class aclass[] = new Class[2];
				aclass[0] = java.lang.String.class;
				aclass[1] = java.lang.String.class;

                Object aobj[] = { dlLoc, drwNo };

				try {
					//rms.invoke("FindEpmNumbered", "ext.SEQ.att2dat_01", null, aclass, aobj);

					Enumeration e = FindEpmNumbered(dlLoc, drwNo);
					while (e.hasMoreElements()) {
						System.out.println(((EPMDocument)e.nextElement()).getIdentity());
					}

					System.out.println(queCnt+" Objects Queried.");
				}
				catch (WTException wtee) {
					wtee.printStackTrace();
				}
				catch (WTPropertyVetoException wtpe) {
					wtpe.printStackTrace();
				}
				finally {
					System.exit(0);
				}

				System.exit(0);
			}
			catch(Exception exceptionMain)
			{
				System.out.println("Exception in Main: "+exceptionMain);
				exceptionMain.printStackTrace();
			}
		}
	}
	static int queCnt=0;
	static String[] attrNM={
		"ITEMGROUP","MATERIAL","division","proi_revision","dwg_name","part_name","part_name_local",
		"description_1","description_1_local","description_2_local","current_sheet","ecn_no",
		"ecn_date","os_filename","dpr_cabinet","dpr_revision","dwgno","partname","partname_local",
		"desc","desc1_local","desc2_local","sheet","ecnno","ecndate","ecnstatus","filename"};
}
