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