package ext.ngc.pdmlink.change2.validators; import com.ptc.core.components.validators.DefaultCreateValidator; import com.ptc.core.ui.validation.*; import com.ptc.netmarkets.util.misc.NmActionServiceHelper; import com.ptc.windchill.cadx.common.util.WorkInProgressUtilities; import com.ptc.windchill.enterprise.object.ActionDelegateHelper; import java.util.*; import org.apache.log4j.Logger; import wt.access.*; import wt.change2.*; import wt.epm.EPMDocument; import wt.fc.WTReference; import wt.generic.GenericHelper; import wt.generic.GenericizableMaster; import wt.inf.container.WTContainerHelper; import wt.inf.container.WTContainerRef; import wt.log4j.LogR; import wt.org.WTUser; import wt.part.WTPart; import wt.preference.PreferenceHelper; import wt.preference.PreferenceService2; import wt.session.SessionHelper; import wt.util.WTException; // object is to halt new change notice action or completion of, if change request is not in implementation lc state public class CR_State_Validator_03 extends DefaultUIComponentValidator { //wt.services/svc/default/com.ptc.core.ui.validation.UIComponentValidator/summaryReport/wt.change2.WTChangeOrder2/0=com.ptc.windchill.enterprise.change2.validators.ChangeNoticeReportValidator/duplicate public CR_State_Validator_03() { } public UIValidationResultSet performFullPreValidation(UIValidationKey uivalidationkey, UIValidationCriteria uivalidationcriteria, Locale locale) throws WTException { System.out.println("ENTERING ReviseValidator.performFullPreValidation"); System.out.println((new StringBuilder()).append(" validationKey -> ").append(uivalidationkey).toString()); System.out.println((new StringBuilder()).append(" validationCriteria -> ").append(uivalidationcriteria.toString()).toString()); UIValidationResultSet uivalidationresultset = new UIValidationResultSet(); WTContainerRef wtcontainerref = uivalidationcriteria.getParentContainer(); WTReference wtreference = uivalidationcriteria.getContextObject(); if(wtcontainerref != null && wtreference != null) { Class class1 = wtcontainerref.getReferencedClass(); Class class2 = wtreference.getReferencedClass(); boolean flag = wt.pdmlink.PDMLinkProduct.class.isAssignableFrom(class1); boolean flag1 = wt.inf.library.WTLibrary.class.isAssignableFrom(class1); boolean flag2 = wt.projmgmt.admin.Project2.class.isAssignableFrom(class1); System.out.println((new StringBuilder()).append("wtRefObj display value is ").append(wtcontainerref).toString()); System.out.println((new StringBuilder()).append("wtRefObj CLASS is ").append(wtcontainerref.getClass()).toString()); System.out.println((new StringBuilder()).append("flags - invokedFromProduct is ").append(flag).append("\t invokedFromLibrary ").append(flag1).toString()); System.out.println((new StringBuilder()).append("flag - invokedFromProject is ").append(flag2).toString()); if((flag || flag1) && (wt.pdmlink.PDMLinkProduct.class.isAssignableFrom(class2) || wt.inf.library.WTLibrary.class.isAssignableFrom(class2) || wt.folder.Folder.class.isAssignableFrom(class2))) { System.out.println("enabling revise action"); uivalidationresultset.addResult(new UIValidationResult(uivalidationkey, UIValidationStatus.ENABLED)); return uivalidationresultset; } if(flag2) if(wt.access.agreement.AuthorizationAgreement.class.isAssignableFrom(class2)) { System.out.println("agreement object -> revise action should be available for this object in projectlink, continue to further validation for this object"); } else { System.out.println("hiding revise action in projectlink"); uivalidationresultset.addResult(new UIValidationResult(uivalidationkey, UIValidationStatus.HIDDEN)); return uivalidationresultset; } } uivalidationresultset = performReviseValidation(uivalidationkey, uivalidationcriteria, locale, "full"); System.out.println((new StringBuilder()).append("RETURNING ").append(uivalidationresultset.toString()).toString()); System.out.println("EXITING ReviseValidator.performFullPreValidation"); return uivalidationresultset; } public UIValidationResultSet performFullPreValidation(UIValidationKey uivalidationkey, UIValidationCriteria uivalidationcriteria, Locale locale) throws WTException { return performValidation(uivalidationkey, uivalidationcriteria); } public UIValidationResultSet performLimitedPreValidation(UIValidationKey uivalidationkey, UIValidationCriteria uivalidationcriteria, Locale locale) throws WTException { return performValidation(uivalidationkey, uivalidationcriteria); } private UIValidationResultSet performValidation(UIValidationKey uivalidationkey, UIValidationCriteria uivalidationcriteria) throws WTException { System.out.println("ENTERING ChangeNoticeReportValidator.performValidation"); UIValidationStatus uivalidationstatus = UIValidationStatus.HIDDEN; UIValidationResultSet uivalidationresultset = UIValidationResultSet.newInstance(); System.out.println((new StringBuilder()).append(" validation criteria ").append(uivalidationcriteria == null ? "is null" : (new StringBuilder()).append(" component type is ").append(uivalidationcriteria.getComponentType()).toString()).toString()); if(uivalidationcriteria != null) { if(ComponentType.INFO.equals(uivalidationcriteria.getComponentType())) uivalidationstatus = UIValidationStatus.ENABLED; System.out.println((new StringBuilder()).append("Validation validationKey being added to result set is ").append(uivalidationkey).toString()); System.out.println((new StringBuilder()).append("Validation status being added to result set is ").append(uivalidationstatus).toString()); uivalidationresultset.addResult(UIValidationResult.newInstance(uivalidationkey, uivalidationstatus)); } System.out.println((new StringBuilder()).append("EXITING ChangeNoticeReportValidator.performValidation").append(uivalidationresultset).toString()); return uivalidationresultset; } /* if(wtreference != null && wtreference.getReferencedClass() != null && wt.change2.ChangeRequestIfc.class.isAssignableFrom(wtreference.getReferencedClass())) { ChangeRequestIfc changerequestifc = (ChangeRequestIfc)wtreference.getObject(); uivalidationstatus = proposedsolutionhandler.displayChangeAnalysisTable(changerequestifc).booleanValue() ? UIValidationStatus.ENABLED : UIValidationStatus.HIDDEN; } */ //private static final Logger logger = LogR.getLogger("com.ptc.windchill.enterprise.change2"); public ChangeMgmtCreateWizardsValidator() { containerRef = null; isLimited = false; actionDelegateHelper = new ActionDelegateHelper(); criteria = null; } public UIValidationResultSet performFullPreValidation(UIValidationKey uivalidationkey, UIValidationCriteria uivalidationcriteria, Locale locale) throws WTException { UIValidationResultSet uivalidationresultset = super.performFullPreValidation(uivalidationkey, uivalidationcriteria, locale); UIComponentValidator uicomponentvalidator = getWorkPackageValidator(); System.out.println((new StringBuilder()).append("The work package validator is ").append(uicomponentvalidator).toString()); if(uicomponentvalidator != null) { UIValidationResultSet uivalidationresultset1 = uicomponentvalidator.performFullPreValidation(uivalidationkey, uivalidationcriteria, locale); if(!uivalidationresultset1.getAllResults().isEmpty()) return uivalidationresultset1; } return performValidation(uivalidationresultset, uivalidationkey, uivalidationcriteria, false); } public UIValidationResultSet performLimitedPreValidation(UIValidationKey uivalidationkey, UIValidationCriteria uivalidationcriteria, Locale locale) throws WTException { UIValidationResultSet uivalidationresultset = super.performLimitedPreValidation(uivalidationkey, uivalidationcriteria, locale); return performValidation(uivalidationresultset, uivalidationkey, uivalidationcriteria, true); } public UIValidationResult validateSelectedAction(UIValidationKey uivalidationkey, UIValidationCriteria uivalidationcriteria, Locale locale) throws WTException { UIValidationResult uivalidationresult = super.validateSelectedAction(uivalidationkey, uivalidationcriteria, locale); UIValidationResultSet uivalidationresultset = UIValidationResultSet.newInstance(); uivalidationresultset.addResult(uivalidationresult); uivalidationresultset = performValidation(uivalidationresultset, uivalidationkey, uivalidationcriteria, false); uivalidationresult = uivalidationresultset.getSingleResult(uivalidationkey, uivalidationcriteria.getContextObject()); return uivalidationresult; } UIComponentValidator getWorkPackageValidator() { return getSubValidator("WPValidation"); } private UIValidationResultSet performValidation(UIValidationResultSet uivalidationresultset, UIValidationKey uivalidationkey, UIValidationCriteria uivalidationcriteria, boolean flag) throws WTException { boolean flag1 = determineHidden(uivalidationresultset, uivalidationkey); List list = uivalidationresultset.getResultsByValidationKey(uivalidationkey); UIValidationResultSet uivalidationresultset1 = UIValidationResultSet.newInstance(); criteria = uivalidationcriteria; UIValidationStatus uivalidationstatus; WTReference wtreference; for(Iterator iterator = list.iterator(); iterator.hasNext(); uivalidationresultset1.addResult(UIValidationResult.newInstance(uivalidationkey, uivalidationstatus, wtreference))) { UIValidationResult uivalidationresult = (UIValidationResult)iterator.next(); uivalidationstatus = uivalidationresult.getStatus(); wtreference = uivalidationcriteria.getContextObject(); if(uivalidationstatus.equals(UIValidationStatus.HIDDEN) || uivalidationstatus.equals(UIValidationStatus.DENIED) || uivalidationstatus.equals(UIValidationStatus.DISABLED)) continue; uivalidationstatus = flag1 ? UIValidationStatus.HIDDEN : UIValidationStatus.DENIED; System.out.println((new StringBuilder()).append("Validation criteria context object is ").append(wtreference).toString()); System.out.println((new StringBuilder()).append("Validation is being peformed in workspace is ").append(uivalidationcriteria.getInWorkspace()).toString()); if(wtreference != null && isWorkspaceValid(uivalidationcriteria, wtreference)) { setWTContainerRef(uivalidationcriteria.getInvokedFromContainer()); String s = uivalidationkey.getObjectType(); setLimited(flag); String s1 = getClassNameForType(s); System.out.println((new StringBuilder()).append("Validation criteria requestor object is ").append(s1).toString()); if(s1 != null) { wt.fc.Persistable persistable = wtreference.getObject(); System.out.println((new StringBuilder()).append("Class for container validation is ").append(persistable == null ? "null" : persistable.getClass().getName()).toString()); System.out.println((new StringBuilder()).append("PDMLink container valid on create is ").append(actionDelegateHelper.isPDMLinkContainerValidOnCreate(persistable, getWTContainerRef(), SessionHelper.getPrincipal())).toString()); if(actionDelegateHelper.isPDMLinkContainerValidOnCreate(persistable, getWTContainerRef(), SessionHelper.getPrincipal()) && isChangeManagementCommonValid(persistable) && isCreateChangeItemValid(s1, persistable)) uivalidationstatus = flag1 ? UIValidationStatus.ENABLED : UIValidationStatus.PERMITTED; } } System.out.println((new StringBuilder()).append("The create ").append(uivalidationkey.getObjectType()).append(" wizard action is ").append(uivalidationstatus).toString()); } return uivalidationresultset1; } public UIValidationResult validateFormSubmission (UIValidationKey validationKey,UIValidationCriteria validationCriteria, Locale locale) throws WTException { UIValidationResult result = UIValidationResult.newInstance(validationKey, UIValidationStatus.NOT_VALIDATED); String oldTaskName = validationCriteria.getOldText().get("change_name"); String newTaskName = validationCriteria.getText().get("change_name"); String checkString = "AFFECTED & RESULTING OBJECTS"; if (oldTaskName.indexOf(checkString) >= 0 && newTaskName.indexOf(checkString) < 0) { result.setStatus(UIValidationStatus.PROMPT_FOR_CONFIRMATION); } return result; } // wt.rule.init.AttrValue attrvalue = InitRuleHelper.getAttrValue("lifeCycle.id", obj, wtcontainerref); /* static Set getDocuments(WTPart wtpart) throws WTException { HashSet hashset = new HashSet(); QueryResult queryresult = WTPartHelper.service.getDescribedByDocuments(wtpart, true); do { if(!queryresult.hasMoreElements()) break; LifeCycleManaged lifecyclemanaged = (LifeCycleManaged)queryresult.nextElement(); if(lifecyclemanaged.getLifeCycleState().equals(State.RELEASED)) { hashset.add(new Key(lifecyclemanaged)); } else { Changeable2 changeable2 = (Changeable2)lifecyclemanaged; if(!getPendingECNs(changeable2).isEmpty()) hashset.add(new Key(changeable2)); } } while(true); queryresult = WTPartHelper.service.getReferencesWTDocumentMasters(wtpart); do { if(!queryresult.hasMoreElements()) break; WTDocumentMaster wtdocumentmaster = (WTDocumentMaster)queryresult.nextElement(); List list = getVersions(wtdocumentmaster, null, true); if(!list.isEmpty()) hashset.add(list); } while(true); return hashset; } private void stateValidate(LifeCycleState lifecyclestate) throws WTPropertyVetoException { if(lifecyclestate == null) { Object aobj[] = { new PropertyDisplayName(CLASSNAME, "state") }; throw new WTPropertyVetoException("wt.introspection.introspectionResource", "22", aobj, new PropertyChangeEvent(this, "state", state, lifecyclestate)); } else { return; } } wt\change2\process\ProcessHelper.java //##begin user.operations preserve=yes private static String checkLifeCycleManagedFinished( QueryResult result ) { // Initially assume NO_SUBORDINATES String result_value = ProcessHelper.NO_SUBORDINATES; while (result.hasMoreElements()) { Persistable persistable = (Persistable) result.nextElement(); if (persistable instanceof LifeCycleManaged) { LifeCycleManaged life_cycle_managed = (LifeCycleManaged) persistable; if (life_cycle_managed.getLifeCycleState().equals(State.toState("COMPLETED"))) { // If we were in CANCELLED state, then set it to COMPLETE result_value = ProcessHelper.COMPLETE; } else if (life_cycle_managed.getLifeCycleState().equals(State.toState("CANCELLED"))) { if (result_value == ProcessHelper.NO_SUBORDINATES) { // If there were NO_SUBORDINATES, then we move to CANCELLED // otherwise we stay in the CANCELLED or COMPLETE state result_value = ProcessHelper.CANCELLED; } } else { // There are still activies that are not CANCELLED and not COMPLETE return new String(ProcessHelper.NOT_FINISHED); } } } return new String(result_value); } public static String checkLifeCycleManagedFinished( LifeCycleManaged life_cycle_managed ) { String result_value = ProcessHelper.NOT_FINISHED; if (life_cycle_managed.getLifeCycleState().equals(State.toState("COMPLETED"))) { result_value = ProcessHelper.COMPLETE; } else if (life_cycle_managed.getLifeCycleState().equals(State.toState("CANCELLED"))) { result_value = ProcessHelper.CANCELLED; } else { result_value = ProcessHelper.NOT_FINISHED; } return new String(result_value); } public static String checkRequestSubmitted( ChangeItem cItem ) throws ChangeException2, WTException { //##begin checkRequestSubmitted%37A8E4410119.body preserve=yes ChangeRequestIfc change_request = null; // if the change object passed was a Change Request, then use it if (cItem instanceof ChangeRequestIfc) { change_request = (ChangeRequestIfc) cItem; } // otherwise find the parent change request else { Change2DelegateFactory factory = new Change2DelegateFactory(); FindChangeRequestDelegate delegate = factory.getFindChangeRequestDelegate( (ChangeItemIfc) cItem ); change_request = delegate.findChangeRequest( (ChangeItemIfc) cItem ); } if (change_request instanceof LifeCycleManaged) { LifeCycleManaged life_cycled = (LifeCycleManaged) change_request; if (LifeCycleHelper.service.isInInitialPhase(life_cycled)) { if (!(life_cycled.isLifeCycleAtGate())) { return ProcessHelper.NOT_SUBMITTED; } } if (life_cycled instanceof WTChangeRequest2) { WTChangeRequest2 request = (WTChangeRequest2) life_cycled; Complexity complexity = request.getComplexity(); if ( complexity != null ) return complexity.toString(); } return new String(); // We don't know how to get a complexity } return null; // We can't check if its been submitted } public class MyValidator extends DefaultUIComponentValidator{ public UIValidationResult validateSelectedAction (String a_key, UIValidationCriteria a_criteria, Locale a_locale) { // get required info from UIValidationCriteria WTContainerRef parentContainer = a_criteria.getParentContainer(); WTReference contextObject = a_criteria.getContextObject(); WTPrincipalReference userRef = a_criteria.getUser(); // create status and message objects to pass back UIValidationStatus status = null; UIValidationFeedbackMsg msg = null; // perform validation logic if (we can allow this action to proceed){ status = UIValidationStatus.PERMITTED; } else{ status = UIValidationStatus.DENIED; msg = new UIValidationMsg(localized text, UIValidationMsgType.INFO) } // return a validation result with the calculated status and message return new UIValidationResult(a_key, contextObject, status, msg); } } */ protected boolean isLifeCycleBasic(UIValidationCriteria uivalidationcriteria) throws WTException { Boolean boolean1 = Boolean.valueOf(false); List list = uivalidationcriteria == null ? null : uivalidationcriteria.getTargetObjects_nonPersistable(); Object obj = null; if(list != null && list.size() > 0) obj = list.get(0); if(objectMap.containsKey(obj) && (objectMap.get(obj) instanceof Boolean)) return ((Boolean)objectMap.get(obj)).booleanValue(); wt.inf.container.WTContainerRef wtcontainerref = uivalidationcriteria == null ? null : uivalidationcriteria.getInvokedFromContainer(); if(obj == null || wtcontainerref == null) return false; wt.rule.init.AttrValue attrvalue = InitRuleHelper.getAttrValue("lifeCycle.id", obj, wtcontainerref); if(attrvalue != null) { System.out.println("Checking for basic lifecycle"); LifeCycleTemplate lifecycletemplate = (LifeCycleTemplate)InitRuleHelper.evaluator.getValue(attrvalue, obj, wtcontainerref); if(lifecycletemplate.isBasic()) { System.out.println("The LifeCycleTemplate is basic."); boolean1 = Boolean.valueOf(true); } } objectMap.put(obj, boolean1); return boolean1.booleanValue(); } boolean isCreateChangeOrder2Valid(Object obj) { if(obj != null && wt.change2.ChangeRequestIfc.class.isAssignableFrom(obj.getClass())) { System.out.println("Object was a Change Request. Returning ENABLED"); return true; } try { if(!isLimited && obj != null) { Object obj1 = PreferenceHelper.service.getValue(getWTContainerRef(), CHANGE_NOTICE_WITHOUT_CHANGE_REQUESTS, "WINDCHILL", (WTUser)SessionHelper.getPrincipal()); System.out.println((new StringBuilder()).append("Preference Service returned value: ").append(obj1).toString()); if(obj1 != null && (obj1 instanceof Boolean) && ((Boolean)obj1).booleanValue()) { System.out.println("Setting the validation result to enabled "); return true; } } } catch(Exception exception) { exception.printStackTrace(); } System.out.println("Setting the validation result to disabled "); return false; } protected boolean isCreateChangeActivity2Valid(Object obj) throws WTException { if(obj != null && wt.change2.ChangeOrderIfc.class.isAssignableFrom(obj.getClass())) { System.out.println((new StringBuilder()).append("access permission set include access permission modify is ").append(criteria.getAccessPermissionSet((AccessControlled)obj).includes(AccessPermission.MODIFY)).toString()); return criteria.getAccessPermissionSet((AccessControlled)obj).includes(AccessPermission.MODIFY); } else { return true; } } protected boolean isCreateChangeRequest2Valid(Object obj) { return true; } protected boolean isCreateWTVarianceValid(Object obj) { if(obj instanceof WTPart) { WTPart wtpart = (WTPart)obj; System.out.println((new StringBuilder()).append("Create WTVariance Valid is ").append(!GenericHelper.isConfigurable((GenericizableMaster)wtpart.getMaster(), true)).toString()); if(GenericHelper.isConfigurable((GenericizableMaster)wtpart.getMaster(), true)) return false; } return true; } protected boolean isCreateChangeIssueValid(Object obj) { return true; } void setWTContainerRef(WTContainerRef wtcontainerref) { System.out.println((new StringBuilder()).append("The parent container is being set:").append(wtcontainerref).toString()); containerRef = wtcontainerref; } WTContainerRef getWTContainerRef() { if(containerRef == null) try { System.out.println("The container was null. Trying to obtain the exchange container."); containerRef = WTContainerHelper.getExchangeRef(); } catch(WTException wtexception) { wtexception.printStackTrace(); } return containerRef; } private boolean isCreateChangeItemValid(String s, Object obj) throws WTException { System.out.println((new StringBuilder()).append("Create change item valid, type class is ").append(s).toString()); if(s.equals(PROBLEM_REPORT_CLASS_NAME)) return isCreateChangeIssueValid(obj); if(s.equals(VARIANCE_CLASS_NAME)) return isCreateWTVarianceValid(obj); if(s.equals(CHANGE_REQUEST_CLASS_NAME)) return isCreateChangeRequest2Valid(obj); if(s.equals(CHANGE_NOTICE_CLASS_NAME)) return isCreateChangeOrder2Valid(obj); if(s.equals(CHANGE_TASK_CLASS_NAME)) return isCreateChangeActivity2Valid(obj); else return false; } private static UIValidationKey validationKeyArray[] = { UIValidationKey.newInstance("create", "problemReport", "CREATE_PROBLEMREPORT"), UIValidationKey.newInstance("create", "variance", "CREATE_VARIANCE"), UIValidationKey.newInstance("create", "changeRequest", "CREATE_CHANGEREQUEST"), UIValidationKey.newInstance("create", "changeNotice", "CREATE_CHANGENOTICE"), UIValidationKey.newInstance("create", "changeTask"), UIValidationKey.newInstance("relatedChanges", "change", "THIRD_LEVEL_RELATED_CHANGES"), UIValidationKey.newInstance("changeMonitor", "change", "CHANGE_MONITOR_SUB_TAB") }; private static UIValidationKey thirdPartyReportingValidationKeyArray[] = { UIValidationKey.newInstance("summaryReport", "changeNotice") }; //private static Logger logger = LogR.getLogger(com/ptc/windchill/enterprise/change2/validators/ChangeMgmtUISolutionGroup.getName()); //CLASS_NAME = (com.ptc.windchill.projectlink.upgrade.org.CleanupLDAPForOrgGroup.class).getName(); private static final long serialVersionUID = 0x1a08febbd2L; private static final Logger logger = LogR.getLogger("com.ptc.windchill.enterprise.change2"); //private static String CHANGE_NOTICE_WITHOUT_CHANGE_REQUESTS = "/ChangeNoticeWithoutChangeRequest/enabled"; //private static final String PROBLEM_REPORT_CLASS_NAME = wt/change2/WTChangeIssue.getName(); //private static final String VARIANCE_CLASS_NAME = wt/change2/WTVariance.getName(); private static final String CHANGE_REQUEST_CLASS_NAME = (wt.change2.WTChangeRequest2.class).getName(); //private static final String CHANGE_REQUEST_CLASS_NAME = wt.change2.WTChangeRequest2.class.getName(); //private static final String CHANGE_REQUEST_CLASS_NAME = wt.change2.WTChangeRequest2.getName(); //private static final String CHANGE_NOTICE_CLASS_NAME = wt/change2/WTChangeOrder2.getName(); //private static final String CHANGE_TASK_CLASS_NAME = wt/change2/WTChangeActivity2.getName(); private WTContainerRef containerRef; private boolean isLimited; protected ActionDelegateHelper actionDelegateHelper; private UIValidationCriteria criteria; }