📄 jdfdevicecapgenerator.java
字号:
/**
* 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 + -