| /******************************************************************************* |
| * Copyright (C) 2021 the Eclipse BaSyx Authors |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| ******************************************************************************/ |
| package org.eclipse.basyx.submodel.factory.xml.converters.submodelelement.dataelement; |
| |
| import java.util.Map; |
| |
| import org.eclipse.basyx.submodel.factory.xml.XMLHelper; |
| import org.eclipse.basyx.submodel.factory.xml.converters.reference.ReferenceXMLConverter; |
| import org.eclipse.basyx.submodel.factory.xml.converters.submodelelement.SubmodelElementXMLConverter; |
| import org.eclipse.basyx.submodel.metamodel.api.reference.IReference; |
| import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty; |
| import org.eclipse.basyx.submodel.metamodel.map.reference.Reference; |
| import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property; |
| import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDefHelper; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| |
| /** |
| * Parses <aas:property> and builds the Property object from it <br> |
| * Builds <aas:property> from a given Property object |
| * |
| * @author conradi |
| * |
| */ |
| public class PropertyXMLConverter extends SubmodelElementXMLConverter { |
| |
| private static Logger logger = LoggerFactory.getLogger(PropertyXMLConverter.class); |
| |
| public static final String PROPERTY = "aas:property"; |
| |
| |
| /** |
| * Parses a Map containing the content of XML tag <aas:property> |
| * |
| * @param xmlObject the Map with the content of XML tag <aas:property> |
| * @return the parsed Property |
| */ |
| @SuppressWarnings("unchecked") |
| public static Property parsePropery(Map<String, Object> xmlObject) { |
| |
| Property property = new Property(); |
| |
| populateSubmodelElement(xmlObject, property); |
| |
| String valueType = XMLHelper.getString(xmlObject.get(SubmodelElementXMLConverter.VALUE_TYPE)); |
| String value = XMLHelper.getString(xmlObject.get(SubmodelElementXMLConverter.VALUE)); |
| |
| Map<String, Object> xmlValueId = (Map<String, Object>) xmlObject.get(VALUE_ID); |
| Reference valueId = ReferenceXMLConverter.parseReference(xmlValueId); |
| |
| property.set(value, PropertyValueTypeDefHelper.fromName(valueType)); |
| |
| if(valueId != null) { |
| property.setValueId(valueId); |
| } |
| |
| return property; |
| } |
| |
| |
| |
| |
| /** |
| * Builds the <aas:property> XML tag for a Property |
| * |
| * @param document the XML document |
| * @param prop the ISingleProperty to build the XML for |
| * @return the <aas:property> XML tag for the given Property |
| */ |
| public static Element buildProperty(Document document, IProperty prop) { |
| Element propertyRoot = document.createElement(PROPERTY); |
| |
| populateSubmodelElement(document, propertyRoot, prop); |
| |
| String value = null; |
| |
| IReference valueId = prop.getValueId(); |
| if(valueId != null) { |
| Element valueIdRoot = document.createElement(VALUE_ID); |
| valueIdRoot.appendChild(ReferenceXMLConverter.buildReferenceXML(document, valueId)); |
| propertyRoot.appendChild(valueIdRoot); |
| } |
| |
| //for some reason, get() in ISingleProperty might throw an Exception |
| try { |
| Object valueObj = prop.getValue(); |
| value = valueObj == null ? null : valueObj.toString(); |
| } catch (Exception e) { |
| logger.error("Exeption in buildProperty!", e); |
| } |
| |
| if (value != null) { |
| Element valueEle = document.createElement(SubmodelElementXMLConverter.VALUE); |
| valueEle.appendChild(document.createTextNode(value)); |
| propertyRoot.appendChild(valueEle); |
| } |
| |
| String valueType = prop.getValueType().toString(); |
| if (valueType != null) { |
| Element valueTypeElem = document.createElement(SubmodelElementXMLConverter.VALUE_TYPE); |
| valueTypeElem.appendChild(document.createTextNode(valueType)); |
| propertyRoot.appendChild(valueTypeElem); |
| } |
| |
| return propertyRoot; |
| } |
| } |