blob: af6f74d35821dff9f3aad908a6bf39060bd5e5d3 [file] [log] [blame]
package org.eclipse.basyx.submodel.factory.xml.converters.submodelelement;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.eclipse.basyx.submodel.factory.xml.XMLHelper;
import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElementCollection;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* Parses &lt;aas:submodelElementCollection&gt; and builds the SubmodelElementCollection object from it <br>
* Builds &lt;aas:submodelElementCollection&gt; form a given SubmodelElementCollection object
*
* @author conradi
*
*/
public class SubmodelElementCollectionXMLConverter extends SubmodelElementXMLConverter {
public static final String SUBMODEL_ELEMENT_COLLECTION = "aas:submodelElementCollection";
public static final String ORDERED = "aas:ordered";
public static final String ALLOW_DUPLICATES = "aas:allowDuplicates";
/**
* Parses a Map containing the content of XML tag &lt;aas:submodelElementCollection&gt;
*
* @param xmlObject the Map with the content of XML tag &lt;aas:submodelElementCollection&gt;
* @return the parsed SubmodelElementCollection
*/
@SuppressWarnings("unchecked")
public static SubmodelElementCollection parseSubmodelElementCollection(Map<String, Object> xmlObject) {
boolean ordered = Boolean.valueOf(XMLHelper.getString(xmlObject.get(ORDERED)));
boolean allowDuplicates = Boolean.valueOf(XMLHelper.getString(xmlObject.get(ALLOW_DUPLICATES)));
Map<String, Object> valueMap = (Map<String, Object>) xmlObject.get(VALUE);
List<ISubmodelElement> submodelElements = getSubmodelElements(valueMap);
SubmodelElementCollection smElemColl = new SubmodelElementCollection(submodelElements, ordered, allowDuplicates);
populateSubmodelElement(xmlObject, smElemColl);
return smElemColl;
}
/**
* Builds the &lt;aas:submodelElementCollection&gt; XML tag for a SubmodelElementCollection
*
* @param document the XML document
* @param smElemCollection the ISubmodelElementCollection to build the XML for
* @return the &lt;aas:submodelElementCollection&gt; XML tag for the given SubmodelElementCollection
*/
public static Element buildSubmodelElementCollection(Document document, ISubmodelElementCollection smElemCollection) {
Element smElemCollectionRoot = document.createElement(SUBMODEL_ELEMENT_COLLECTION);
populateSubmodelElement(document, smElemCollectionRoot, smElemCollection);
String isAllowedDuplicates = Boolean.toString(smElemCollection.isAllowDuplicates());
Element allowDuplicatesElem = document.createElement(ALLOW_DUPLICATES);
allowDuplicatesElem.appendChild(document.createTextNode(isAllowedDuplicates));
smElemCollectionRoot.appendChild(allowDuplicatesElem);
String isOrdered = Boolean.toString(smElemCollection.isOrdered());
Element orderedElem = document.createElement(ORDERED);
orderedElem.appendChild(document.createTextNode(isOrdered));
smElemCollectionRoot.appendChild(orderedElem);
Collection<ISubmodelElement> elems = smElemCollection.getSubmodelElements().values();
//recursively build the SubmodelElements contained in the ElementCollection
if(elems != null) {
Element valueRoot = document.createElement(VALUE);
smElemCollectionRoot.appendChild(valueRoot);
buildSubmodelElements(document, valueRoot, elems);
}
return smElemCollectionRoot;
}
}