/// /// <summary> * sets all relevant parameters of this to the values specified in resourceLink or its linked resource or JDF node /// * </summary> /// * <param name="resourceLink"> the resourceLink to extract the information from </param> /// * <param name="rqp"> parameters </param> /// public virtual void setLink(JDFResourceLink resourceLink, JDFResourceQuParams rqp) { if (resourceLink == null) { return; } JDFAmountPool ap = resourceLink.getAmountPool(); if (ap != null) { copyElement(ap, null); } else { if (resourceLink.hasAttribute(AttributeName.ACTUALAMOUNT)) { setActualAmount(resourceLink.getActualAmount(null)); } if (resourceLink.hasAttribute(AttributeName.AMOUNT)) { setAmount(resourceLink.getAmount(null)); } } setProcessUsage(resourceLink.getEnumProcessUsage()); JDFResource r = resourceLink.getTarget(); if (r == null && rqp != null) { rqp.setExact(false); } bool bExact = rqp == null ? false : rqp.getExact(); if (!bExact || r == null) // if we do not have a resource let's limp // along and provide as much as we have { setResourceName(resourceLink.getLinkedResourceName()); setAttribute(AttributeName.RESOURCEID, resourceLink.getrRef()); EnumUsage usage = resourceLink.getUsage(); if (usage != null) { setAttribute(AttributeName.USAGE, usage.getName()); } if (r != null && r.hasAttribute(AttributeName.PRODUCTID)) { setProductID(r.getProductID()); } } else { // create a copy of the resource in the original jdf JDFResource rr = (JDFResource)r.getParentNode_KElement().copyElement(r, null); rr.inlineRefElements(null, null, true); // move resource copy from the original node into this document moveElement(rr, null); } }
/// /// * <param name="node"> </param> /// * <param name="resCmd"> </param> /// * <returns> the new resource </returns> /// private JDFResource createNewResource(JDFNode node, JDFResource resCmd) { JDFResource resTarget = null; EnumUsage u = enclosingInstance.getUsage(); if (u != null) { resTarget = (JDFResource)node.getCreateResourcePool().copyElement(resCmd, null); JDFResourceLink rl = node.linkResource(resTarget, u, null); rl.copyAttribute(AttributeName.PROCESSUSAGE, enclosingInstance); //JDFResourceCmdParams.this); resTarget = getTargetResource(node); } return(resTarget); }
/// /// <summary> * emulate execution of a runlist by making it available </summary> /// private void executeRunList(EnumUsage usage) { JDFRunList rl = (JDFRunList)theExpandedNode.getResource(ElementName.RUNLIST, usage, 0); if (rl == null) { return; } if (!rl.hasChildElement(ElementName.LAYOUTELEMENT, null)) { rl.addPDF("./folder/Thedoc.pdf", 0, -1); } if (EnumUsage.Output.Equals(usage)) { rl.setResStatus(EnumResStatus.Available, true); } }
/// /// <summary> * </summary> /// private void executeMarksRunList(EnumUsage usage) { JDFRunList rl = (JDFRunList)theExpandedNode.getResource(ElementName.RUNLIST, usage, 0); if (!"Marks".Equals(theExpandedNode.getLink(rl, usage).getProcessUsage())) { rl = (JDFRunList)theExpandedNode.getResource(ElementName.RUNLIST, usage, 1); } if (!"Marks".Equals(theExpandedNode.getLink(rl, usage).getProcessUsage())) { rl = null; } if (rl != null && !rl.hasChildElement(ElementName.LAYOUTELEMENT, null)) { rl.addPDF("./folder/TheMarks.pdf", 0, -1); } }
/// /// <summary> * add a link to one of the resources /// * </summary> /// * <param name="bNew"> true - new link, false - original link </param> /// * <param name="r"> the resource that was valid before modification </param> /// * <param name="usage"> usage of the resource </param> /// * <returns> the ResourceLink object in the ResourceAudit that points to r </returns> /// public virtual JDFResourceLink addNewOldLink(bool bNew, JDFResource r, EnumUsage usage) { VElement v = getChildElementVector(null, null, null, true, 0, false); int iNew = bNew ? 0 : 1; for (int i = v.Count - 1; i >= 0; i--) { if (!(v[i] is JDFResourceLink)) { v.RemoveAt(i); } } if (v.Count != iNew) { throw new JDFException("JDFResourceLink::AddNewOldLink invalid ResourceAudit"); } JDFResourceLink l = (JDFResourceLink)appendElement(r.getLinkString(), JDFConstants.EMPTYSTRING); l.setTarget(r); l.setUsage(usage); return(l); }
// --------------------------------------------------------------------- // Methods for Attribute Usage // --------------------------------------------------------------------- /// /// <summary> * (5) set attribute Usage </summary> /// * <param name="enumVar">: the enumVar to set the attribute to </param> /// public virtual void setUsage(JDFResourceLink.EnumUsage enumVar) { setAttribute(AttributeName.USAGE, enumVar == null ? null : enumVar.getName(), null); }
/// /// <summary> * append elements to the node that match this DevCap, if they do not exist /// * yet /// * </summary> /// * <param name="node"> /// * the node to append the elements to </param> /// * <param name="bAll"> /// * if false, only add if minOccurs>=1 and required=true or a /// * default exists /// * </param> /// * <returns> KElement - the last element that was appended </returns> /// public virtual KElement appendMatchingElementsToNode(JDFNode node, bool bAll, org.cip4.jdflib.util.VectorMap <int, JDFResource> indexResMap, bool bLink) { KElement e = null; EnumContext context = getContext(); if (!bLink && EnumContext.Link.Equals(context)) { return(null); } if (bLink && !EnumContext.Link.Equals(context)) { return(null); } JDFDevCap devCap = getDevCap(); if (devCap == null) { return(null); } int minOcc = devCap.getMinOccurs(); if (minOcc == 0 && bAll) { minOcc = 1; } string nam = getName(); for (int i = 0; i < minOcc; i++) { if (context.Equals(EnumContext.Element)) { // vElem - for a common return type in all cases if (nam.Equals(ElementName.JDF)) { // nop - should actually never get here } else { e = node.getCreateElement(nam, getDevNS(), i); } } else if (context.Equals(EnumContext.Resource) || context.Equals(EnumContext.Link)) { EnumUsage linkUsage = getLinkUsage(); string procUsage = getProcessUsage(); JDFAttributeMap map = new JDFAttributeMap(); EnumProcessUsage pu = null; if (procUsage != null && procUsage.Length > 0) { map.put(AttributeName.PROCESSUSAGE, procUsage); pu = EnumProcessUsage.getEnum(procUsage); } if (linkUsage != null) { map.put(AttributeName.USAGE, linkUsage.getName()); } VElement links = node.getResourceLinks(nam, map, null); // now look for the correct combinedprocessindex - remove all // non-matching JDFIntegerRangeList tocNum = getTypeOccurrenceNum(); JDFIntegerList tocNum2 = tocNum == null ? null : tocNum.getIntegerList(); if (links != null && tocNum != null) { for (int ll = links.Count - 1; ll >= 0; ll--) { JDFResourceLink rl = (JDFResourceLink)links[ll]; JDFIntegerList il = rl.getCombinedProcessIndex(); if (il == null || !il.Contains(tocNum2)) { links.RemoveAt(ll); } } } if (links == null || links.Count <= i) { JDFResource r = null; // get a link hook for the matching combinedprocessindex if (bLink) { int kk = (tocNum2 == null || tocNum2.Count == 0) ? -1 : tocNum2.getInt(0); if (EnumUsage.Input.Equals(linkUsage)) { kk--; } List <JDFResource> v = null; indexResMap.TryGetValue(kk, out v); if (v != null) { int sv = v.Count; for (int kkk = 0; kkk < sv; kkk++) { JDFResource rr = v[kkk]; if (rr.LocalName.Equals(nam)) { r = rr; break; } } } } // we found no matching existing res - make a new one if (r == null) { r = node.addResource(nam, null, linkUsage, pu, null, getDevNS(), null); string id = devCap.getAttribute(AttributeName.ID, null, null); if (id != null) { JDFResourceLink rl = node.getLink(r, linkUsage); r.setID(id); if (rl != null) { rl.setrRef(id); } } if (tocNum2 == null || tocNum2.Count == 0) { indexResMap.putOne(-1, r); //(new int(-1), r); } else { indexResMap.putOne((int)tocNum2.elementAt(0), r); // only } // support // 1 // now } else // preexisting resource - just link it { e = node.linkResource(r, linkUsage, pu); } e = node.getLink(r, linkUsage); if (e != null) { JDFResourceLink rl = (JDFResourceLink)e; rl.setCombinedProcessIndex(tocNum2); } // update partititons JDFEnumerationState pidKeys = devCap.getEnumerationState(AttributeName.PARTIDKEYS); if (pidKeys != null) { VString keys = pidKeys.getAllowedValueList(); if (keys != null && keys.Count > 0) { JDFAttributeMap keyMap = new JDFAttributeMap(); for (int k = 0; k < keys.Count; k++) { string sk = "PartKey" + k; string key = keys.stringAt(k); if (key.Equals("RunIndex")) { sk = "0~-1"; } keyMap.put(key, sk); } r.getCreatePartition(keyMap, keys); } } } } else if (context.Equals(EnumContext.JMF)) { // TODO __Lena__ ... } } return(e); }
/// /// <summary> * gets the matching elements in node that match this devcap /// * </summary> /// * <param name="node"> /// * the node to search in </param> /// * <returns> VElement - the element vector of matching elements, /// * <code>null</code> if none were found </returns> /// private VElement getMatchingElementsFromNode(JDFNode node) { VElement vElem = new VElement(); string nam = getName(); EnumContext context = getContext(); JDFResourceLinkPool resLinkPool = node.getResourceLinkPool(); if (context.Equals(EnumContext.Element)) { // vElem - for a common return type in all cases if (nam.Equals(ElementName.JDF)) { vElem.Add(node); } else { vElem = node.getChildElementVector(nam, null, null, true, 0, false); } } else if (context.Equals(EnumContext.Link) || context.Equals(EnumContext.Resource)) { if (resLinkPool != null) { EnumUsage linkUsage = getLinkUsage(); string procUsage = getProcessUsage(); bool bLink = context.Equals(EnumContext.Link); VElement vElemLinks = resLinkPool.getInOutLinks(linkUsage, true, nam, null); if (vElemLinks != null) { int linkSize = vElemLinks.Count - 1; for (int j = linkSize; j >= 0; j--) { JDFResourceLink rl = (JDFResourceLink)vElemLinks[j]; string rlProcessUsage = rl.getProcessUsage(); if (!rlProcessUsage.Equals(procUsage)) { vElemLinks.RemoveAt(j); } } } if (!bLink) { vElem = JDFResourceLinkPool.resourceVector(vElemLinks, null); } else { vElem = vElemLinks; } } } else if (context.Equals(EnumContext.JMF)) { // TODO __Lena__ ... } else { // Context_Unknown throw new JDFException("JDFDevCaps wrong attribute Context value"); } if (vElem != null && vElem.Count == 0) { vElem = null; } return(vElem); }
/// /// * <param name="testRoot"> </param> /// * <param name="testlists"> </param> /// * <param name="level"> </param> /// * <param name="mrp"> </param> /// * <param name="irp"> </param> /// * <param name="resLinkPool"> </param> /// * <param name="goodElems"> </param> /// * <param name="badElems"> </param> /// * <param name="devCaps"> /// * @return </param> /// public virtual void analyzeDevCaps(KElement testRoot, EnumFitsValue testlists, EnumValidationLevel level, KElement mrp, KElement irp, SupportClass.HashSetSupport goodElems, Hashtable badElems, bool ignoreExtensions) { EnumAvailability av = getModuleAvailability(); KElement xpathRoot = testRoot; VElement vElemResources = null; if (testRoot is JDFNode) { JDFNode jdfNode = (JDFNode)testRoot; vElemResources = getMatchingElementsFromNode(jdfNode); xpathRoot = jdfNode.getResourceLinkPool(); if (xpathRoot == null) { xpathRoot = testRoot; } } else { vElemResources = getMatchingElementsFromJMF((JDFMessage)testRoot); } int svElemResources = vElemResources == null ? 0 : vElemResources.Count; EnumContext context = getContext(); KElement r = null; if (EnumValidationLevel.isRequired(level) && svElemResources < getMinOccurs() && EnumAvailability.Installed.Equals(av)) { if (EnumContext.Element.Equals(context) || EnumContext.JMF.Equals(context)) { r = mrp.appendElement("MissingElement"); r.setAttribute("XPath", xpathRoot.buildXPath(null, 1) + "/" + getName()); } else { EnumUsage linkUsage = getLinkUsage(); string procUsage = getProcessUsage(); r = mrp.appendElement("MissingResourceLink"); if (linkUsage != null) { r.setAttribute("Usage", linkUsage.getName()); } if (procUsage != null && procUsage.Length > 0) { r.setAttribute("ProcessUsage", procUsage); } r.setAttribute("XPath", xpathRoot.buildXPath(null, 1) + "/" + getName()); } r.setAttribute("Name", getName()); r.setAttribute("CapXPath", getName()); r.setAttribute("Occurrences", svElemResources, null); r.setAttribute("MinOccurs", getMinOccurs(), null); } else if (svElemResources > getMaxOccurs() || !EnumAvailability.Installed.Equals(av)) { if (context.Equals(EnumContext.Element) || context.Equals(EnumContext.JMF)) { r = irp.appendElement("ManyElement"); r.setAttribute("XPath", testRoot.buildXPath(null, 1) + "/" + getName()); } else { EnumUsage linkUsage = getLinkUsage(); string procUsage = getProcessUsage(); r = irp.appendElement("ManyResourceLink"); if (linkUsage != null) { r.setAttribute("Usage", linkUsage.getName()); } if (procUsage != null && procUsage.Length > 0) { r.setAttribute("ProcessUsage", procUsage); } r.setAttribute("XPath", xpathRoot.buildXPath(null, 1) + "/" + getName()); } r.setAttribute("Name", getName()); r.setAttribute("CapXPath", getName()); r.setAttribute("Occurrences", svElemResources, null); r.setAttribute("MaxOccurs", getMaxOccurs(), null); r.setAttribute("Availability", av == null ? "None" : av.getName()); } if (vElemResources != null) { for (int j = 0; j < svElemResources; j++) { KElement elem = vElemResources.item(j); if (!goodElems.Contains(elem)) { KElement report = devCapReport(elem, testlists, level, ignoreExtensions, irp); // InvalidResources if (report == null) { goodElems.Add(elem); KElement badReport = (KElement)badElems[elem]; if (badReport != null) { badReport.deleteNode(); } } else { badElems.Add(elem, report); } } } } }
/// /// * <param name="icsLevel"> </param> /// protected internal virtual void initPlateXM(EnumUsage usage) { JDFResourceLink rl = null; if (thePreviousNode != null) // either input (for cp, or output for // plateset) { rl = theNode.linkResource(thePreviousNode.getResource(ElementName.EXPOSEDMEDIA, null, 0), usage, null); } if (rl == null && theParentNode != null) { rl = theNode.ensureLink(theParentNode.getResource(ElementName.EXPOSEDMEDIA, null, 0), usage, null); } JDFExposedMedia xm = (JDFExposedMedia)theNode.getCreateResource(ElementName.EXPOSEDMEDIA, usage, 0); xm.setPartUsage(EnumPartUsage.Explicit); rl = theNode.getLink(xm, null); JDFMedia m = ((JDFExposedMedia)xm.getLeaves(false)[0]).getMedia(); if (m == null) { m = initPlateMedia(); } else { m = (JDFMedia)m.getResourceRoot(); if (theParentNode != null) { theNode.ensureLink(theParentNode.getResource("Media", EnumUsage.Input, 0), EnumUsage.Input, null); } } xm.setResStatus(EnumResStatus.Unavailable, false); if (!bPartitionedPlateMedia && xm.getMedia() == null) { xm.refElement(m); } if (EnumUsage.Input.Equals(usage)) { rl.setProcessUsage(EnumProcessUsage.Plate); JDFResourceLink link = theNode.getLink(m, null); if (link != null) { link.deleteNode(); } } if (vParts != null) { for (int i = 0; i < vParts.Count; i++) { JDFAttributeMap part = new JDFAttributeMap(vParts[i]); JDFResource xmp = xm.getCreatePartition(part, partIDKeys); int ncols = "Front".Equals(part.get("Side")) ? nCols[0] : nCols[1]; for (int j = 0; j < ncols; j++) { part.put(EnumPartIDKey.Separation, cols.stringAt(j)); xmp.getCreatePartition(part, partIDKeys); } } if (bPartitionedPlateMedia) { VJDFAttributeMap vSheets = getReducedMap(new VString("Side Separation PartVersion", null)); for (int i = 0; i < vSheets.Count; i++) { JDFAttributeMap part = new JDFAttributeMap(vSheets[i]); JDFExposedMedia xmp = (JDFExposedMedia)xm.getCreatePartition(part, partIDKeys); if (xmp.getMedia() == null) { xmp.refMedia((JDFMedia)m.getCreatePartition(part, null)); } } } } }