public virtual void testSetPhaseJMF() { JDFDoc docJMF = new JDFDoc("JMF"); JDFJMF jmf = docJMF.getJMFRoot(); JDFSignal sig = jmf.appendSignal(EnumType.Status); JDFDeviceInfo di = sig.appendDeviceInfo(); di.appendEmployee().setPersonalID("p1"); JDFJobPhase phase = di.appendJobPhase(); phase.setPhaseStartTime(new JDFDate()); phase.setStatus(EnumNodeStatus.Setup); phase.setJobID(jdfRoot.getJobID(true)); phase.setJobPartID(jdfRoot.getJobPartID(true)); VElement el = myAuditPool.setPhase(jmf); Assert.IsNotNull(el); Assert.AreEqual(1, myAuditPool.getChildElementVector(ElementName.PHASETIME, null, null, true, 0, true).Count); Assert.IsNotNull(((JDFPhaseTime)myAuditPool.getAudit(0, EnumAuditType.PhaseTime, null, null)).getEmployee(0)); Assert.AreEqual(el, myAuditPool.getChildElementVector(ElementName.PHASETIME, null, null, true, 0, true)); el = myAuditPool.setPhase(jmf); Assert.IsNotNull(el); Assert.AreEqual(1, myAuditPool.getChildElementVector(ElementName.PHASETIME, null, null, true, 0, true).Count); Assert.AreEqual(el, myAuditPool.getChildElementVector(ElementName.PHASETIME, null, null, true, 0, true)); phase.setStatus(EnumNodeStatus.Aborted); el = myAuditPool.setPhase(jmf); Assert.IsNotNull(el); Assert.AreEqual(2, myAuditPool.getChildElementVector(ElementName.PHASETIME, null, null, true, 0, true).Count); Assert.AreEqual(el[0], myAuditPool.getChildElementVector(ElementName.PHASETIME, null, null, true, 0, true)[1]); }
public virtual void testIdle() { JDFExposedMedia m = (JDFExposedMedia)n.getMatchingResource("ExposedMedia",null,null,0); bool bChanged = sc.setPhase(EnumNodeStatus.InProgress,"i",EnumDeviceStatus.Running,"r"); Assert.IsTrue(bChanged); JDFDoc docJMF = sc.getDocJMFPhaseTime(); JDFResponse sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response,EnumType.Status,0); JDFDeviceInfo deviceInfo = sig.getDeviceInfo(0); JDFJobPhase jp = deviceInfo.getJobPhase(0); Assert.AreEqual(200,jp.getAmount(),0); sc.addPhase(resID,0,100,true); sc.setTrackWaste(m.getID(),true); bChanged = sc.setPhase(EnumNodeStatus.InProgress,"i",EnumDeviceStatus.Running,"r"); Assert.IsFalse(bChanged); docJMF = sc.getDocJMFPhaseTime(); sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response,EnumType.Status,0); bChanged = sc.setPhase(EnumNodeStatus.Completed,null,EnumDeviceStatus.Idle,null); Assert.IsTrue(bChanged); sc.setActiveNode(null,null,null); bChanged = sc.setPhase(null,null,EnumDeviceStatus.Idle,null); Assert.IsFalse(bChanged); bChanged = sc.setPhase(null,null,EnumDeviceStatus.Idle,"very idle"); Assert.IsTrue(bChanged); docJMF = sc.getDocJMFPhaseTime(); sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response,EnumType.Status,0); deviceInfo = sig.getDeviceInfo(0); jp = deviceInfo.getJobPhase(0); Assert.IsNull(jp); }
/// /// * <param name="lastAb"> </param> /// * <param name="jp"> </param> /// private void setJobPhaseAmounts(AmountBag lastAb, JDFJobPhase jp) { if (lastAb == null) { return; } LinkAmount la = getLinkAmount(lastAb.refID); if (la == null) { return; } if (la.bTrackWaste) { if (lastAb.phaseAmount != 0) { jp.setPhaseAmount(lastAb.phaseAmount); } if (lastAb.totalAmount != 0) { jp.setAmount(lastAb.totalAmount); } if (lastAb.phaseWaste != 0) { jp.setPhaseWaste(lastAb.phaseWaste); } if (lastAb.totalWaste != 0) { jp.setWaste(lastAb.totalWaste); } } else { if ((lastAb.phaseAmount + lastAb.phaseWaste) != 0) { jp.setPhaseAmount(lastAb.phaseAmount + lastAb.phaseWaste); } if ((lastAb.totalAmount + lastAb.totalWaste) != 0) { jp.setAmount(lastAb.totalAmount + lastAb.totalWaste); } } double total = 0; total = la.startAmount; if (total != 0) { jp.setTotalAmount(total); jp.setPercentCompleted(lastAb.totalAmount / total * 100.0); } }
public virtual void testAddPhase() { bool bChanged = sc.setPhase(EnumNodeStatus.InProgress, "i", EnumDeviceStatus.Running, "r"); Assert.IsTrue(bChanged); JDFDoc docJMF = sc.getDocJMFPhaseTime(); JDFResponse sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response, EnumType.Status, 0); JDFJobPhase jp = sig.getDeviceInfo(0).getJobPhase(0); Assert.AreEqual(200, jp.getAmount(), 0); sc.addPhase(resID, 0, 100, true); sc.setTrackWaste(resID, true); JDFResourceLink rlXM = n.getLink(xpMedia, null); for (int loop = 1; loop < 4; loop++) { bChanged = sc.setPhase(EnumNodeStatus.InProgress, "i", EnumDeviceStatus.Running, "r"); Assert.IsFalse(bChanged); docJMF = sc.getDocJMFPhaseTime(); sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response, EnumType.Status, 0); jp = sig.getDeviceInfo(0).getJobPhase(0); Assert.AreEqual(200, jp.getAmount(), 0, "multiple setPhase calls do not modify"); Assert.AreEqual(200, rlXM.getActualAmount(new JDFAttributeMap("Condition", "Good")), 0, "multiple setPhase calls do not modify: " + loop); Assert.AreEqual(200.0, jp.getPercentCompleted(), 0, "% " + loop); sc.addPhase(resID, 0, 100, true); Assert.AreEqual(loop * 100, jp.getWaste(), 0, "" + loop); Assert.AreEqual(100 * loop, rlXM.getActualAmount(new JDFAttributeMap("Condition", "Waste")), 0, "multiple setPhase calls do Stack: " + loop); } sc.setWorkType(EnumWorkType.Alteration); bChanged = sc.setPhase(EnumNodeStatus.InProgress, "ii", EnumDeviceStatus.Running, "r"); Assert.IsTrue(bChanged); docJMF = sc.getDocJMFPhaseTime(); sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response, EnumType.Status, 0); jp = sig.getDeviceInfo(0).getJobPhase(0); Assert.AreEqual(200, jp.getAmount(), 0); Assert.AreEqual(400, jp.getWaste(), 0); Assert.IsTrue(jp.hasAttribute(AttributeName.PHASEAMOUNT)); sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response, EnumType.Status, 1); jp = sig.getDeviceInfo(0).getJobPhase(0); Assert.AreEqual(0.0, jp.getPhaseAmount(), 0.0); Assert.AreEqual(EnumWorkType.Alteration, jp.getMISDetails().getWorkType()); sc.setFirstRefID("dummy"); sc.addPhase(resID, 0, 100, true); sc.setTrackWaste(resID, true); sc.setPhase(EnumNodeStatus.InProgress, "i", EnumDeviceStatus.Running, "r"); docJMF = sc.getDocJMFPhaseTime(); sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response, EnumType.Status, 0); jp = sig.getDeviceInfo(0).getJobPhase(0); Assert.IsFalse(jp.hasAttribute(AttributeName.AMOUNT)); Assert.AreEqual(EnumWorkType.Alteration, jp.getMISDetails().getWorkType()); }
public virtual void testMultiModule() { StatusCounter scRIP = new StatusCounter(n,null,null); scRIP.addModule("ID_RIP","RIP"); StatusCounter scSetter = new StatusCounter(n,null,null); scSetter.addModule("ID_Setter","Platesetter"); MultiModuleStatusCounter msc = new MultiModuleStatusCounter(); msc.addModule(scRIP); msc.addModule(scSetter); JDFExposedMedia m = (JDFExposedMedia)n.getMatchingResource("ExposedMedia",null,null,0); resID = m.getID(); scRIP.setFirstRefID(resID); scRIP.addPhase(resID,200,0,true); bool bChanged = scRIP.setPhase(EnumNodeStatus.InProgress,"i",EnumDeviceStatus.Running,"r"); Assert.IsTrue(bChanged); JDFDoc docJMF = scRIP.getDocJMFPhaseTime(); JDFResponse sig = (JDFResponse)docJMF.getJMFRoot().getMessageElement(EnumFamily.Response,EnumType.Status,0); JDFDeviceInfo deviceInfo = sig.getDeviceInfo(0); JDFJobPhase jp = deviceInfo.getJobPhase(0); Assert.AreEqual(200,jp.getAmount(),0); scRIP.addPhase(resID,0,100,true); scRIP.setTrackWaste(m.getID(),true); bChanged = scRIP.setPhase(EnumNodeStatus.InProgress,"i",EnumDeviceStatus.Running,"r"); Assert.IsFalse(bChanged); JDFDoc dJMFAll = msc.getStatusResponse(); Assert.AreEqual(dJMFAll.getRoot().getChildrenByTagName(ElementName.JOBPHASE,null,null,false,true,-1).Count,1); scSetter.setPhase(EnumNodeStatus.InProgress,"seti",EnumDeviceStatus.Running,"run"); scSetter.setFirstRefID(resID); scSetter.addPhase(resID,400,0,true); dJMFAll = msc.getStatusResponse(); Assert.AreEqual(2,dJMFAll.getRoot().getChildrenByTagName(ElementName.JOBPHASE,null,null,false,true,-1).Count,"1 RIP, 1 setter"); scRIP.setActiveNode(null,null,null); bChanged = scRIP.setPhase(null,null,EnumDeviceStatus.Idle,null); dJMFAll = msc.getStatusResponse(); Assert.AreEqual(1,dJMFAll.getRoot().getChildrenByTagName(ElementName.JOBPHASE,null,null,false,true,-1).Count); scSetter.setActiveNode(null,null,null); bChanged = scSetter.setPhase(null,null,EnumDeviceStatus.Idle,null); dJMFAll = msc.getStatusResponse(); Assert.AreEqual(0,dJMFAll.getRoot().getChildrenByTagName(ElementName.JOBPHASE,null,null,false,true,-1).Count); }
/// /// <summary> * Get all JobPhase from the current element /// * </summary> /// * <returns> Collection<JDFJobPhase> </returns> /// public virtual ICollection <JDFJobPhase> getAllJobPhase() { List <JDFJobPhase> v = new List <JDFJobPhase>(); JDFJobPhase kElem = (JDFJobPhase)getFirstChildElement(ElementName.JOBPHASE, null); while (kElem != null) { v.Add(kElem); kElem = (JDFJobPhase)kElem.getNextSiblingElement(ElementName.JOBPHASE, null); } return(v); }
/// /// <summary> * finds all status messages in a jmf and fills the phaseTime with the appropriate data /// * </summary> /// * <param name="jmf"> </param> /// * <returns> vector the vector of all modified phasetime elements </returns> /// public virtual VElement setPhase(JDFJMF jmf) { VElement vMessages = jmf.getMessageVector(null, EnumType.Status); if (vMessages == null) { return(null); } VElement vRet = new VElement(); for (int i = 0; i < vMessages.Count; i++) { JDFMessage status = (JDFMessage)vMessages[i]; VElement devInfos = status.getChildElementVector(ElementName.DEVICEINFO, null, null, true, 0, true); for (int j = 0; j < devInfos.Count; j++) { JDFDeviceInfo devInfo = (JDFDeviceInfo)devInfos[j]; VElement phases = devInfo.getChildElementVector(ElementName.JOBPHASE, null, null, true, 0, true); for (int k = 0; k < phases.Count; k++) { JDFJobPhase phase = (JDFJobPhase)phases[k]; string jobID = phase.getJobID(); if (!jobID.Equals(getParentJDF().getJobID(true))) { continue; } string jobPartID = phase.getJobPartID(); if (!jobPartID.Equals(getParentJDF().getJobPartID(true))) { continue; } JDFPhaseTime pt = setPhase(phase.getStatus(), phase.getStatusDetails(), phase.getPartMapVector(), devInfo.getChildElementVector(ElementName.EMPLOYEE, null)); pt.copyElement(phase.getMISDetails(), null); pt.setEnd(jmf.getTimeStamp()); pt.setStart(phase.getPhaseStartTime()); vRet.Add(pt); } } } vRet.unify(); return(vRet.Count == 0 ? null : vRet); }
public virtual void testPerfectingJMF() { JDFElement.setLongID(false); JDFJMF jmfStatus = JDFJMF.createJMF(EnumFamily.Signal, EnumType.Status); jmfStatus.setSenderID("thePress"); JDFSignal sig = jmfStatus.getSignal(0); JDFDeviceInfo di = sig.appendDeviceInfo(); di.setDeviceStatus(EnumDeviceStatus.Running); JDFJobPhase jp = di.appendJobPhase(); jp.setJobID("jobID"); jp.setJobPartID("jobPartID"); jp.setStatus(EnumNodeStatus.InProgress); JDFModuleStatus ms = jp.appendModuleStatus(); ms.setModuleID("ID_Perfecting_1"); ms.setModuleType("PerfectingModule"); ms.setDeviceStatus(EnumDeviceStatus.Idle); ms = jp.appendModuleStatus(); ms.setModuleType("PrintModule"); ms.setDeviceStatus(EnumDeviceStatus.Running); ms.setModuleIndex(new JDFIntegerRangeList("0 1 3 4")); ms = jp.appendModuleStatus(); ms.setModuleType("PrintModule"); ms.setDeviceStatus(EnumDeviceStatus.Idle); ms.setModuleIndex(new JDFIntegerRangeList("2")); jmfStatus.getOwnerDocument_JDFElement().write2File(sm_dirTestDataTemp + "StatusPerfecting.jmf", 2, false); Assert.IsTrue(jmfStatus.isValid(EnumValidationLevel.Complete), "known defect - wait for autoclass fix"); }
public virtual void testModules14() { VString v = new VString("orig fullList end", null); for (int i = 0; i < v.Count; i++) { reSetUp(); string testType = v.stringAt(i); JDFAuditPool ap = n.getCreateAuditPool(); ap.appendXMLComment("JDF 1.3 incompatible auditing of module phases the REQUIRED time attributes are not set in the ModulePhase elements\n" + "- note that phases may now arbitrarily overlap\n" + "The modulePhase elements now only specify which modules are involved, times are all defined by the phasetime proper", null); ap.appendXMLComment("The following phaseTime is executed by one module - the RIP,which executes two process steps (Interpreting and Rendering)", null); JDFPhaseTime ptRIP = ap.addPhaseTime(EnumNodeStatus.Setup, null, null); JDFDate date = new JDFDate(); ptRIP.setStart(date); JDFDoc jmfDoc = new JDFDoc("JMF"); JDFJMF jmf = jmfDoc.getJMFRoot(); jmf.setDescriptiveName("Initial phase when the RIP starts up"); JDFSignal signal = jmf.appendSignal(JDFMessage.EnumType.Status); JDFDeviceInfo di = signal.appendDeviceInfo(); JDFJobPhase jpRIP = di.appendJobPhase(); di.setDeviceStatus(EnumDeviceStatus.Setup); jpRIP.setStartTime(date); jpRIP.setStatus(EnumNodeStatus.Setup); jpRIP.setJobID(n.getJobID(true)); jpRIP.setJobPartID(n.getJobPartID(true)); JDFModuleStatus msRIP = jpRIP.appendModuleStatus(); msRIP.setCombinedProcessIndex(new JDFIntegerList("0 1")); msRIP.setModuleType("Imaging"); msRIP.setModuleID("ID_Imaging"); JDFModulePhase mpRIP = ptRIP.appendModulePhase(); mpRIP.setCombinedProcessIndex(new JDFIntegerList("0 1")); mpRIP.setModuleType("Imaging"); mpRIP.setModuleID("ID_Imaging"); JDFModuleStatus msPrint = di.appendModuleStatus(); msPrint.setCombinedProcessIndex(new JDFIntegerList("2")); msPrint.setModuleType("Printer"); msPrint.setModuleID("ID_Printer"); JDFModuleStatus msStitch = di.appendModuleStatus(); msStitch.setCombinedProcessIndex(new JDFIntegerList("3")); msStitch.setModuleType("Stitcher"); msStitch.setModuleID("ID_Stitcher"); jmfDoc.write2File(sm_dirTestDataTemp + "moduleStatus" + testType + "0.jmf", 2, false); date.addOffset(0, 5, 0, 0); jmf.setTimeStamp(date); JDFJobPhase jpPrint = di.appendJobPhase(); di.setDeviceStatus(EnumDeviceStatus.Running); jpPrint.setStatus(EnumNodeStatus.InProgress); jpPrint.setStartTime(date); jpPrint.setJobID(n.getJobID(true)); jpPrint.setJobPartID(n.getJobPartID(true)); msPrint = jpPrint.appendModuleStatus(); msPrint.setCombinedProcessIndex(new JDFIntegerList("2")); msPrint.setModuleType("Printer"); msPrint.setModuleID("ID_Printer"); msStitch = jpPrint.appendModuleStatus(); msStitch.setCombinedProcessIndex(new JDFIntegerList("3")); msStitch.setModuleType("Stitcher"); msStitch.setModuleID("ID_Stitcher"); di.removeChildren(ElementName.MODULESTATUS, null, null); jmf.setDescriptiveName("Phase when the Printer and Finisher start up; RIP is still RIPping"); jmfDoc.write2File(sm_dirTestDataTemp + "moduleStatus" + testType + "1.jmf", 2, false); ap.appendXMLComment("The following phaseTime is executed by two modules - sticher and printer", null); JDFPhaseTime ptPrint = ap.addPhaseTime(EnumNodeStatus.InProgress, null, null); JDFModulePhase mpPrint = ptPrint.appendModulePhase(); mpPrint.setCombinedProcessIndex(new JDFIntegerList("2")); mpPrint.setModuleType("Printer"); mpPrint.setModuleID("ID_Printer"); ptPrint.setStart(date); JDFModulePhase mpStitch = ptPrint.appendModulePhase(); mpStitch.setCombinedProcessIndex(new JDFIntegerList("3")); mpStitch.setModuleType("Stitcher"); mpStitch.setModuleID("ID_Stitcher"); date.addOffset(0, 30, 0, 0); ptRIP.setEnd(date); JDFDeviceInfo di2 = null; if (i < 2) { JDFSignal signal2 = jmf.appendSignal(JDFMessage.EnumType.Status); di2 = (JDFDeviceInfo)signal2.copyElement(di, null); di2.removeChild(ElementName.JOBPHASE, null, 0); if (i == 1) { JDFModuleStatus directMSRip = (JDFModuleStatus)di2.copyElement(msRIP, null); directMSRip.setDeviceStatus(EnumDeviceStatus.Idle); } } else { jpRIP.setAttribute("EndTime", date.DateTimeISO); jpRIP.setDescriptiveName("Added EndTime to explicitly close phase"); } jmf.setTimeStamp(date); jmf.setDescriptiveName("Phase when the RIP has completed, Printer and Finisher are still RIPping"); jmfDoc.write2File(sm_dirTestDataTemp + "moduleStatus" + testType + "2.jmf", 2, false); date.addOffset(0, 70, 0, 0); ptPrint.setEnd(date); jmf.setTimeStamp(date); if (i < 2) { signal.deleteNode(); signal = jmf.appendSignal(JDFMessage.EnumType.Status); di = (JDFDeviceInfo)signal.copyElement(di2, null); di.removeChild(ElementName.JOBPHASE, null, 0); di.removeChild(ElementName.MODULESTATUS, null, 0); di.setDeviceStatus(EnumDeviceStatus.Idle); signal.appendXMLComment("Or should the complete list of modules also be specified here?", di); } else { jpRIP.deleteNode(); jpPrint.setAttribute("EndTime", date.DateTimeISO); jpPrint.setDescriptiveName("Added EndTime to explicitly close phase"); } jmf.setDescriptiveName("Phase when the Printer and Finisher have completed"); jmfDoc.write2File(sm_dirTestDataTemp + "moduleStatus" + testType + "3.jmf", 2, false); doc.write2File(sm_dirTestDataTemp + "DigiPrintModule.1.4" + testType + ".jdf", 2, false); } }
public virtual void testStatusEquals() { // test if the auto classes implement the correct status // compare EnumNodeStatus JDFAuditPool myAuditPool = null; JDFDoc jdfDoc = new JDFDoc(ElementName.JDF); JDFNode jdfRoot = (JDFNode)jdfDoc.getRoot(); Assert.IsTrue(jdfRoot != null, "No Root found"); if (jdfRoot == null) { return; // soothe findbugs ;) } JDFAncestor ancestor = jdfRoot.appendAncestorPool().appendAncestor(); ancestor.setStatus(EnumNodeStatus.Completed); myAuditPool = jdfRoot.getCreateAuditPool(); JDFPhaseTime phaseTime = myAuditPool.addPhaseTime(JDFElement.EnumNodeStatus.Completed, null, null); JDFSpawned spawned = myAuditPool.addSpawned(jdfRoot, null, null, null, null); spawned.setStatus(JDFElement.EnumNodeStatus.Completed); Assert.AreEqual(spawned.getStatus(), phaseTime.getStatus()); Assert.AreEqual(spawned.getStatus(), ancestor.getStatus()); JDFDoc jmfDoc = new JDFDoc(ElementName.JMF); JDFJMF jmfRoot = jmfDoc.getJMFRoot(); Assert.IsTrue(jmfRoot != null, "No Root found"); if (jmfRoot == null) { return; // soothe findbugs ;) } JDFAcknowledge acknowledge = jmfRoot.appendAcknowledge(); acknowledge.setType("PipePush"); // Type is required and its existance // is validated for messages JDFJobPhase jobPhase = acknowledge.appendJobPhase(); jobPhase.setStatus(EnumNodeStatus.Completed); JDFMessage message = jmfRoot.appendMessageElement(EnumFamily.Command, null); message.setType("PipePush"); // Type is required and its existance is // validated for messages JDFPipeParams pipeParams = message.appendPipeParams(); pipeParams.setStatus(EnumNodeStatus.Completed); Assert.AreEqual(jobPhase.getStatus(), pipeParams.getStatus()); Assert.AreEqual(spawned.getStatus(), pipeParams.getStatus()); // compare EnumResStatus JDFDoc responseDoc = new JDFDoc(ElementName.RESPONSE); JDFResponse responseRoot = (JDFResponse)responseDoc.getRoot(); Assert.IsTrue(responseRoot != null, "No Root found"); if (responseRoot == null) { return; // soothe findbugs ;) } responseRoot.setType(ElementName.RESOURCE); JDFResourceInfo resInfo = responseRoot.appendResourceInfo(); resInfo.setResStatus(EnumResStatus.Available); JDFDoc commandDoc = new JDFDoc(ElementName.COMMAND); JDFCommand commandRoot = (JDFCommand)commandDoc.getRoot(); Assert.IsTrue(commandRoot != null, "No Root found"); if (commandRoot == null) { return; // soothe findbugs ;) } commandRoot.setType(ElementName.RESOURCE); JDFResourceCmdParams resCmdParams = commandRoot.appendResourceCmdParams(); resCmdParams.setResStatus(EnumResStatus.Available); Assert.AreEqual(resInfo.getStatus(), resCmdParams.getStatus()); // check EnumQueueStatus JDFDoc queueDoc = new JDFDoc(ElementName.QUEUE); JDFQueue queueRoot = (JDFQueue)queueDoc.getRoot(); Assert.IsTrue(queueRoot != null, "No Root found"); if (queueRoot == null) { return; // soothe findbugs ;) } queueRoot.setQueueStatus(EnumQueueStatus.Running); // check EnumQueueEntryStatus JDFQueueEntry queueEntry = queueRoot.appendQueueEntry(); queueEntry.setQueueEntryStatus(EnumQueueEntryStatus.Running); }
/// /// <summary> * Set the Status and StatusDetails of this node update the PhaseTime audit or append a new phasetime as appropriate /// * also prepare a status JMF /// * </summary> /// * <param name="nodeStatus"> the new status of the node </param> /// * <param name="nodeStatusDetails"> the new statusDetails of the node </param> /// * <param name="deviceStatus"> the new status of the device </param> /// * <param name="deviceStatusDetails"> the new statusDetails of the device </param> /// * <param name="vPartMap"> the vector of parts to that should be set </param> /// * <param name="vResLink"> the resourcelinks that are used to fill the various amount attributes in jobphase and phasetime /// * </param> /// public virtual void setPhase(EnumNodeStatus nodeStatus, string nodeStatusDetails, EnumDeviceStatus deviceStatus, string deviceStatusDetails, AmountBag[] amounts) { docJMFPhaseTime = new JDFDoc(ElementName.JMF); JDFJMF jmf = docJMFPhaseTime.getJMFRoot(); docJMFResource = new JDFDoc(ElementName.JMF); JDFJMF jmfRes = docJMFResource.getJMFRoot(); AmountBag ab = getBag(getFirstRefID(), amounts); LinkAmount la = getLinkAmount(getFirstRefID()); AmountBag lastAb = la == null ? null : la.lastBag; JDFAuditPool ap = m_Node.getCreateAuditPool(); // TODO rethink when to send 2 phases JDFPhaseTime pt1 = ap.getLastPhase(m_vPartMap, null); JDFPhaseTime pt2 = pt1; bool bEnd = nodeStatus.Equals(EnumNodeStatus.Completed) || nodeStatus.Equals(EnumNodeStatus.Aborted); pt2 = ap.setPhase(nodeStatus, nodeStatusDetails, m_vPartMap, null); if (bEnd) { JDFProcessRun pr = (JDFProcessRun)ap.addAudit(EnumAuditType.ProcessRun, null); pr.setPartMapVector(m_vPartMap); VElement audits = ap.getAudits(EnumAuditType.PhaseTime, null, m_vPartMap); for (int i = 0; i < audits.Count; i++) { pr.addPhase((JDFPhaseTime)audits[i]); } pr.setEndStatus(nodeStatus); } if (pt1 != null && pt2 != pt1) // we explicitly added a new phasetime // audit, thus we need to add a closing // JMF for the original jobPhase { JDFSignal s = (JDFSignal)jmf.appendMessageElement(JDFMessage.EnumFamily.Signal, JDFMessage.EnumType.Status); JDFDeviceInfo deviceInfo = s.appendDeviceInfo(); JDFJobPhase jp = deviceInfo.createJobPhaseFromPhaseTime(pt1); jp.setJobID(m_Node.getJobID(true)); jp.setJobPartID(m_Node.getJobPartID(false)); setJobPhaseAmounts(lastAb, jp); if (m_deviceID != null) { deviceInfo.setDeviceID(m_deviceID); } } if (pt2 != null) { JDFSignal s = (JDFSignal)jmf.appendMessageElement(JDFMessage.EnumFamily.Signal, JDFMessage.EnumType.Status); JDFDeviceInfo deviceInfo = s.appendDeviceInfo(); if (!bEnd) // don't write a jobphase for an idle device { JDFJobPhase jp = deviceInfo.createJobPhaseFromPhaseTime(pt2); setJobPhaseAmounts(ab, jp); } deviceInfo.setDeviceStatus(deviceStatus); deviceInfo.setStatusDetails(deviceStatusDetails); deviceInfo.setDeviceID(m_deviceID); m_Node.setPartStatus(m_vPartMap, nodeStatus, null); getVResLink(amounts, 2); // update the nodes links generateResourceSignal(amounts, jmfRes); if (bEnd) { pt2.deleteNode(); // zapp the last phasetime } else { pt2.setLinks(getVResLink(amounts, 1)); pt2.eraseEmptyAttributes(true); } } // cleanup! if (vLinkAmount != null) { for (int i = 0; i < vLinkAmount.Length; i++) { string refID = vLinkAmount[i].rl.getrRef(); AmountBag bag = getBag(refID, amounts); vLinkAmount[i].lastBag = new AmountBag(bag); } } jmf.eraseEmptyAttributes(true); }