⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdfdevicecapgenerator.java

📁 java xml 应用开发
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            {
                devCaps = deviceCap.appendDevCaps();
                final String id = Integer.toString(dcID);
                dcID++;
                devCaps.setName("NodeInfo");
                devCaps.setID("DCs_" + id);
                        
                final JDFDevCap dc = devCapPool.appendDevCap();
                dc.setName("NodeInfo");
                dc.setID("DC_" + id);
                devCaps.setDevCapRef("DC_" + id);
            }
                       
            setDevCapForChildElements(nodeInfo);
        }
    }
    
    /**
     * @param deviceCap
     * @param node
     */
    private void setCustomerInfoDescription(final JDFNode node)
    {
        final JDFCustomerInfo customerInfo = node.getCustomerInfo();
        if (customerInfo!=null)
        {       
            JDFDevCaps devCaps = (JDFDevCaps) deviceCap.getChildWithAttribute(ElementName.DEVCAPS, 
                                                AttributeName.NAME, null, ElementName.CUSTOMERINFO, 0, true);
            if (devCaps==null)
            {
                devCaps = deviceCap.appendDevCaps();
                final String id = Integer.toString(dcID);
                dcID++;
                devCaps.setName("CustomerInfo");
                devCaps.setID("DCs_" + id);
                        
                final JDFDevCap dc = devCapPool.appendDevCap();
                dc.setName("CustomerInfo");
                dc.setID("DC_" + id);
                devCaps.setDevCapRef("DC_" + id);
            }
                       
            setDevCapForChildElements(customerInfo);
        }
    }
    
   
   
    /**
     * @param node
     */
    private void setResourceDescription(final JDFNode node)
    {
        final JDFResourcePool resPool = node.getResourcePool();
        if (resPool!=null)
        {// get all resources of ResourcePool
            final VElement vRes = resPool.getChildElementVector(null,  null, null, true, 0, true);// resolve the target
            for (int r = 0; r < vRes.size(); r++) 
            {
                setDevCapForChildElements((JDFResource) vRes.elementAt(r));
            }
        }
    }
    
    
    /**
     * Creates DevCap elements for all subelemens, sets refDevCaps of this (references to children),
     * creates all State elements for Attributes and Spans,
     * sets other attributes of DevCap for 'parElem' (MinOccurs, MaxOccurs)
     * @param parElem - element to work with 
     * @return DevCap/@ID of the correponding to 'parElem' DevCap element
     */
    private String setDevCapForChildElements(final JDFElement parElem)
    {
        final String parElemName = parElem.getLocalName();
        String elemID = parElem.getAttribute(AttributeName.ID,null,"");
        
        final JDFAttributeMap attrMap = new JDFAttributeMap();
    
        attrMap.put(AttributeName.NAME,parElemName);
        
        if (!elemID.equals(JDFConstants.EMPTYSTRING))
        {
            attrMap.put(AttributeName.ID, "DC_" + elemID);
        }
        
        final VElement vDevCap = devCapPool.getChildElementVector(ElementName.DEVCAP,
                                                            null, 
                                                            attrMap, true, 0, false);
        JDFDevCap dc = null;
        if (!vDevCap.isEmpty())
        {
            dc = (JDFDevCap) vDevCap.elementAt(0); // vector vDevCap must have only 1 element
        }
        else
        {
            dc = devCapPool.appendDevCap();
            dc.setName(parElemName);
            
            if (elemID.equals(JDFConstants.EMPTYSTRING))
            {
                elemID = Integer.toString(dcID);
                dcID++;
            }
            dc.setID("DC_" + elemID);
        }
        elemID = dc.getID();
        
        // get all children of parElem we want to reference
        final VElement vEl = parElem.getChildElementVector(null,null,null, true, 99999, true); // resolve the target
        if ((parElem instanceof JDFResource) && 
            (parElem.hasAttribute_KElement(AttributeName.PARTIDKEYS,null, false)))
        {
            final JDFResource resRoot = (JDFResource) parElem;
            vEl.addAll(resRoot.getLeaves(true));
            vEl.remove(resRoot);//resRoot.getLeaves(true) includes in vEl 'resRoot', we need only its children
        }

        final VElement spanVector = new VElement();
        final VString devCapRefs = new VString();
        for (int i = 0; i < vEl.size(); i++ )
        {
            final JDFElement element = (JDFElement) vEl.elementAt(i);
            
            if (element instanceof JDFSpanBase)
            {
                spanVector.addElement(element);
            }
            else 
            {
                final String refStr = setDevCapForChildElements(element); // recursion
                
                if (!devCapRefs.contains(refStr) 
                        && !refStr.equals(elemID)) // can`t reference itself - case for Partition
                {
                    devCapRefs.addElement(refStr);
                }
            }
        }
        if (!devCapRefs.isEmpty())
        {
            dc.setDevCapRefs(devCapRefs);
        }
        
        setStatesForSpans(spanVector, dc);
        setStatesForAttributes(parElem,dc);
        setMinOccurs(parElem, dc);

        return elemID;
    }

    /**
     * @param parElem
     * @param dc
     */
    private void setMinOccurs(final JDFElement parElem, JDFDevCap dc)
    {
        final String elementName = parElem.getLocalName();
        
        if ((new VString(parElem.requiredElements(),JDFConstants.COMMA)).contains(elementName))
        {
            dc.setMinOccurs(1);
        }
        else // optional
        {
            dc.setMinOccurs(0);
        }
    }


    /**
     * @param dc
     * @param spanVector
     */
    private void setStatesForSpans(final VElement spanVector, final JDFDevCap dc)
    {
        // TODO Complete list
        // TODO set appropriate ListType, MinOccurs, MaxOccurs for lists
       for (int sp = 0; sp < spanVector.size(); sp++) // TBD without checking if already exist
        {
            final JDFSpanBase span = (JDFSpanBase) spanVector.elementAt(sp);
            final String spValue = span.hasAttribute("Preferred") 
                                   ?  span.getAttribute("Preferred") 
                                   :  span.getAttribute("Actual");
            final String dataType = span.getDataType().getName();
            final String stateType = dataType.substring(0, dataType.indexOf("Span"))+"State";
            JDFStateBase st;
            if ((new VString(dc.optionalElements(),JDFConstants.COMMA)).contains(stateType))
            {
                st = (JDFStateBase) dc.appendElement(stateType);
            }
            else if (dataType.equals("OptionSpan"))
            {
                st = (JDFStateBase) dc.appendElement(ElementName.BOOLEANSTATE);
            }
            else if (dataType.equals("TimeSpan"))
            {
                st = (JDFStateBase) dc.appendElement(ElementName.DATETIMESTATE);
            }
            else 
            {
                st = (JDFStateBase) dc.appendElement("StateBase");
            }
            st.setName(span.getLocalName());
            final String sID = "S_" + Integer.toString(stID);
            st.setID(sID);
            stID++;
            st.setListType(EnumListType.Span);
            st.setAttribute("AllowedValueList", spValue); // TBD may be not allowed ValueList
        }
    }    
    
    
    private void setStatesForAttributes(final JDFElement parElem, final JDFDevCap dc) 
    {
        // TODO Complete list
        // TODO set appropriate ListType, MinOccurs, MaxOccurs for lists
        final JDFAttributeMap attrmap = parElem.getAttributeMap();
        final VString vAttrMapKeys = attrmap.getKeys();
        for (int at=0; at < vAttrMapKeys.size(); at++)
        {
            final String key = (String) vAttrMapKeys.elementAt(at);
            final String value = attrmap.get(key);

            EnumAttributeType eAttrType = parElem.getAtrType(key);
            if(eAttrType==null)
            {
            	eAttrType=EnumAttributeType.string;
            }
            	
            
            
            if (!genericAttributes.contains(key))
            {
                JDFStateBase state;
               

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -