/// /// <summary> * Gets the NamePath of this DevCap in form " /// * <code>DevCapsName/SubelemName1/SubelemName2/...</code>"<br> /// * If this DevCap is located in DevCapPool and not in a DevCaps, it /// * describes the reusable resource. In this case DevCap root will have the /// * attribute "Name" = value of DevCaps/@Name, but will have no info about /// * <code>DevCaps/@Context</code> or <code>DevCaps/@LinkUsage</code>. /// * <p> /// * default: getNamePath(false) /// * </summary> /// * <param name="bRecurse"> /// * if true, returns " /// * <code>DevCapsName/SubelemName1/SubelemName2/...</code>" </param> /// * <returns> String - NamePath of this DevCap </returns> /// public VString getNamePathVector() { string result = getDevCapsName(); EnumContext cont = getContext(); VString vResult = new VString(); if (cont.Equals(EnumContext.JMF) && (ParentNode is JDFMessageService) && result.Length > 4) { JDFMessageService serv = (JDFMessageService)ParentNode; List <EnumFamily> vf = serv.getFamilies(); if (vf != null) { int size = vf.Count; for (int i = 0; i < size; i++) { vResult.Add("JMF/" + vf[i].getName() + "/" + result.Substring(4)); } } if (EnumJMFRole.Sender.Equals(serv.getJMFRole())) { vResult.Add("JMF/Response/" + result.Substring(4)); } } else { if (cont.Equals(EnumContext.Link)) { result = ElementName.JDF + "/" + ElementName.RESOURCELINKPOOL + "/" + result; } else if (cont.Equals(EnumContext.Resource)) { string nam = result; result = ElementName.JDF + "/" + ElementName.RESOURCEPOOL + "/" + result; for (int i = 0; i < 6; i++) { vResult.Add(result); result = result + "/" + nam; } } vResult.Add(result); } return(vResult); }
private string getDevCapsName() { string nam = getName(); EnumContext cont = getContext(); if (cont.Equals(EnumContext.Link)) { nam += JDFConstants.LINK; } else if (cont.Equals(EnumContext.Element) && !ElementName.JDF.Equals(nam)) { nam = ElementName.JDF + "/" + nam; } else if (cont.Equals(EnumContext.JMF) && !ElementName.JMF.Equals(nam)) { nam = ElementName.JMF + "/" + nam; } return(nam); // default is nam for resources }
/// /// <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); } } } } }