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

📄 jdfdevicecapgenerator.java

📁 java xml 应用开发
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/**
 * JDFDeviceCapGenerator.java
 *
 * @author Elena Skobchenko
 * 
 * Copyright (c) 2001-2005 The International Cooperation for the Integration 
 * of Processes in  Prepress, Press and Postpress (CIP4).  All rights reserved.
 */
import java.util.Vector;
import java.util.zip.DataFormatException;

import org.cip4.jdflib.auto.JDFAutoDevCaps.EnumContext;
import org.cip4.jdflib.auto.JDFAutoDevCaps.EnumLinkUsage;
import org.cip4.jdflib.auto.JDFAutoDeviceCap.EnumCombinedMethod;
import org.cip4.jdflib.auto.JDFAutoDeviceInfo.EnumDeviceStatus;
import org.cip4.jdflib.core.AttributeName;
import org.cip4.jdflib.core.ElementName;
import org.cip4.jdflib.core.JDFConstants;
import org.cip4.jdflib.core.JDFCustomerInfo;
import org.cip4.jdflib.core.JDFDoc;
import org.cip4.jdflib.core.JDFElement;
import org.cip4.jdflib.core.JDFNodeInfo;
import org.cip4.jdflib.core.JDFResourceLink;
import org.cip4.jdflib.core.KElement;
import org.cip4.jdflib.core.VElement;
import org.cip4.jdflib.core.VString;
import org.cip4.jdflib.core.AttributeInfo.EnumAttributeType;
import org.cip4.jdflib.core.JDFResourceLink.EnumUsage;
import org.cip4.jdflib.datatypes.JDFAttributeMap;
import org.cip4.jdflib.datatypes.JDFNumberRangeList;
import org.cip4.jdflib.jmf.JDFDeviceInfo;
import org.cip4.jdflib.jmf.JDFJMF;
import org.cip4.jdflib.jmf.JDFMessage;
import org.cip4.jdflib.jmf.JDFResponse;
import org.cip4.jdflib.node.JDFNode;
import org.cip4.jdflib.pool.JDFResourceLinkPool;
import org.cip4.jdflib.pool.JDFResourcePool;
import org.cip4.jdflib.resource.JDFDevice;
import org.cip4.jdflib.resource.JDFDeviceList;
import org.cip4.jdflib.resource.JDFResource;
import org.cip4.jdflib.resource.JDFValue;
import org.cip4.jdflib.resource.JDFResource.EnumResStatus;
import org.cip4.jdflib.resource.JDFResource.EnumResourceClass;
import org.cip4.jdflib.resource.devicecapability.JDFAction;
import org.cip4.jdflib.resource.devicecapability.JDFActionPool;
import org.cip4.jdflib.resource.devicecapability.JDFDevCap;
import org.cip4.jdflib.resource.devicecapability.JDFDevCapPool;
import org.cip4.jdflib.resource.devicecapability.JDFDevCaps;
import org.cip4.jdflib.resource.devicecapability.JDFDeviceCap;
import org.cip4.jdflib.resource.devicecapability.JDFNumberState;
import org.cip4.jdflib.resource.devicecapability.JDFStateBase;
import org.cip4.jdflib.resource.devicecapability.JDFTest;
import org.cip4.jdflib.resource.devicecapability.JDFTestPool;
import org.cip4.jdflib.resource.devicecapability.JDFStateBase.EnumListType;
import org.cip4.jdflib.span.JDFSpanBase;


public class JDFDeviceCapGenerator
{
    private JDFNode jdfRoot;
    private int dcID = 1000;
    private int stID = 3000;
    private VString genericAttributes;
    private JDFDeviceCap deviceCap;
    private JDFDevCapPool devCapPool;
    private JDFActionPool actionPool;
    private JDFTestPool testPool;
    private JDFDoc docDevCap;
    
    public JDFDeviceCapGenerator(final JDFNode jdfNode, final VString genAttr)
    {
        this.jdfRoot = jdfNode;
        this.genericAttributes = genAttr;
        generateDeviceCapabilities();
    }
    

    public void generateDeviceCapabilities()
    {
        docDevCap = new JDFDoc(ElementName.JMF);
        
        final JDFJMF jmfRoot = docDevCap.getJMFRoot();

        if (jdfRoot!=null && jmfRoot!=null) 
        {       
            jmfRoot.init();
            jmfRoot.setSenderID("MessageSender");
            
            final JDFResponse responseKnownDevices = (JDFResponse) jmfRoot.appendMessageElement(JDFMessage.EnumFamily.Response,JDFResponse.EnumType.KnownDevices);
       
            final JDFDeviceList deviceList = responseKnownDevices.appendDeviceList();
            final JDFDeviceInfo deviceInfo = deviceList.appendDeviceInfo();
            deviceInfo.setDeviceStatus(EnumDeviceStatus.Idle);
            final JDFDevice device = deviceInfo.appendDevice();
            device.setDeviceID("DeviceID1");
            
            deviceCap = device.appendDeviceCap();
            
            final String nodeType = jdfRoot.getType();
            VString nodeTypes = jdfRoot.getTypes();
            VString devCapTypes = new VString(nodeType); // nodeType is 1 entry
            EnumCombinedMethod combinedMethod = EnumCombinedMethod.None;
            if (nodeType.equals(JDFConstants.PROCESSGROUP))
            {
                combinedMethod = EnumCombinedMethod.ProcessGroup;
                devCapTypes = nodeTypes; // nodeTypes must be in this case non null
            }
            else if (nodeType.equals(JDFConstants.COMBINED))
            {
                combinedMethod = EnumCombinedMethod.Combined;
                devCapTypes = nodeTypes; // nodeTypes must be in this case non null
            }
            deviceCap.setCombinedMethod(combinedMethod);
            deviceCap.setGenericAttributes(genericAttributes);
            deviceCap.setTypes(devCapTypes);
            
            devCapPool = deviceCap.appendDevCapPool();
            
            final Vector vNodes = jdfRoot.getvJDFNode(null,null,false);
            final int size = vNodes.size();
            for (int i = size-1; i >= 0; i--) 
            {              
                final JDFNode node = (JDFNode) vNodes.elementAt(i);
                
                setResourceLinksDescription(node); // first build all DevCaps + appropriate DevCap elements
                setNodeInfoDescription(node);
                setCustomerInfoDescription(node);
            }
            
            for (int i = size-1; i >= 0; i--) 
            {              
                final JDFNode node = (JDFNode) vNodes.elementAt(i);
                
                setResourceDescription(node); // build the rest of DevCap
            }
            
            actionPool = deviceCap.appendActionPool();
            final JDFAction act = actionPool.appendAction();
            act.setID("A_" + "action1");
            final String testRef = "test1";
            act.setTestRef(testRef);
            
            testPool = deviceCap.appendTestPool();
            final JDFTest test = testPool.appendTest();
            test.setID("T_" + testRef);
        }
    }


    /**
     * @param deviceCap
     * @param node
     */
    private void setResourceLinksDescription(final JDFNode node)
    {
        final JDFResourceLinkPool resLinkPool = node.getResourceLinkPool(); 
       
        VElement vResLinks = new VElement();
        if (resLinkPool!=null)
        {// get all links
            vResLinks = resLinkPool.getLinks(new JDFAttributeMap());
        }
        
        final int size = vResLinks.size();
        for (int rl = 0; rl < size; rl++) 
        {
            final JDFResourceLink resLink = (JDFResourceLink) vResLinks.elementAt(rl);
            final EnumUsage resLinkUsage = resLink.getUsage();
            final EnumLinkUsage linkUsage = EnumLinkUsage.getEnum(resLinkUsage.getName());
            
            final JDFResource res = (JDFResource) resLink.getTarget();
            if (res==null)
            {
                continue; // if smth is wrong with a resLink, 
            } // continue to build DevCap from other links
            
            final JDFAttributeMap attrMap = new JDFAttributeMap();
            final String resName = res.getLocalName();
            final String resID = res.getID();
            
            attrMap.put(AttributeName.NAME,resName);
            if (!resID.equals(JDFConstants.EMPTYSTRING))
            {
                attrMap.put(AttributeName.ID, "DCs_" + resID);
            }
            
            final VElement vDevCaps = deviceCap.getChildElementVector(ElementName.DEVCAPS,
                                                            null, attrMap, true, 99999, false);
            JDFDevCaps devCaps;
            boolean bFound = false;
            for (int i=0; i < vDevCaps.size(); i++)
            {
                devCaps = (JDFDevCaps) vDevCaps.elementAt(i);
                if (!devCaps.hasAttribute("LinkUsage") || 
                        (devCaps.hasAttribute("LinkUsage") && devCaps.getLinkUsage().equals(linkUsage)))
                {
                    bFound = true;
                }
            }
            
            if (!bFound)
            {
                devCaps = deviceCap.appendDevCaps();
                devCaps.setName(resName);
                final String id = "DCs_" + resID; // Hier resID must exist, cause DevCaps describes resources in ResPool
                devCaps.setID(id);
                devCaps.setContext(EnumContext.Resource); // default
                if (!linkUsage.equals(EnumLinkUsage.Unknown))
                {
                    devCaps.setLinkUsage(linkUsage);
                }
                
                // create for every DevCaps a corresponding DevCap in DevCapPool, 
                // set refDevCap to reference DevCap from DevCaps
                final JDFDevCap dc = devCapPool.appendDevCap();
                final String ref = "DC_" + resID;
                dc.setName(resName);
                dc.setID(ref);
                devCaps.setDevCapRef(ref);
            }
        }
    }

    /**
     * @param deviceCap
     * @param node
     */
    private void setNodeInfoDescription(final JDFNode node)
    {
        final JDFNodeInfo nodeInfo = node.getNodeInfo();
        if (nodeInfo!=null)
        {
            JDFDevCaps devCaps = (JDFDevCaps) deviceCap.getChildWithAttribute(ElementName.DEVCAPS, 
                                                AttributeName.NAME, null, 
                                                  ElementName.NODEINFO, 0, true);
            if (devCaps==null)

⌨️ 快捷键说明

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