blob: fb8e500659e34f860efc52f46edccbe955cc2705 [file] [log] [blame]
package org.eclipse.basyx.aas.factory.xml;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import org.eclipse.basyx.aas.factory.xml.api.parts.AssetXMLConverter;
import org.eclipse.basyx.aas.factory.xml.converters.AssetAdministrationShellXMLConverter;
import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
import org.eclipse.basyx.aas.metamodel.api.parts.asset.IAsset;
import org.eclipse.basyx.submodel.factory.xml.api.parts.ConceptDescriptionXMLConverter;
import org.eclipse.basyx.submodel.factory.xml.converters.SubmodelXMLConverter;
import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
import org.eclipse.basyx.submodel.metamodel.api.parts.IConceptDescription;
import org.eclipse.basyx.vab.factory.xml.XmlParser;
import org.xml.sax.SAXException;
/**
* This class can be used to parse XML to Metamodel Objects
*
* @author conradi
*
*/
public class XMLToMetamodelConverter {
private Map<String, Object> root = new HashMap<>();
/**
* Initializes the Parser with XML given as a String
*
* @param xmlContent
* the XML content to be parsed
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
@SuppressWarnings("unchecked")
public XMLToMetamodelConverter(String xmlContent) throws ParserConfigurationException, SAXException, IOException {
root.putAll((Map<? extends String, ? extends Object>) XmlParser.buildXmlMap(xmlContent)
.get(MetamodelToXMLConverter.AASENV));
}
/**
* Parses the AASs form the XML
*
* @return the AASs parsed form the XML
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
@SuppressWarnings("unchecked")
public List<IAssetAdministrationShell> parseAAS() throws ParserConfigurationException, SAXException, IOException {
Map<String, Object> xmlAASs = (Map<String, Object>) root
.get(AssetAdministrationShellXMLConverter.ASSET_ADMINISTRATION_SHELLS);
// First, parse all conceptDescriptions
List<IConceptDescription> conceptDescriptions = parseConceptDescriptions();
// Then parse the AAS -> the available conceptDescriptions have to be mapped to the contained concept
// dictionaries
return AssetAdministrationShellXMLConverter.parseAssetAdministrationShells(xmlAASs, conceptDescriptions);
}
/**
* Parses the Assets form the XML
*
* @return the Assets parsed form the XML
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
@SuppressWarnings("unchecked")
public List<IAsset> parseAssets() throws ParserConfigurationException, SAXException, IOException {
Map<String, Object> xmlAssets = (Map<String, Object>) root.get(AssetXMLConverter.ASSETS);
return AssetXMLConverter.parseAssets(xmlAssets);
}
/**
* Parses the SubModels form the XML
*
* @return the SubModels parsed form the XML
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
@SuppressWarnings("unchecked")
public List<ISubModel> parseSubmodels() {
Map<String, Object> xmlSubmodels = (Map<String, Object>) root.get(SubmodelXMLConverter.SUBMODELS);
return SubmodelXMLConverter.parseSubmodels(xmlSubmodels);
}
/**
* Parses the ConceptDescriptions form the XML
*
* @return the ConceptDescriptions parsed form the XML
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
@SuppressWarnings("unchecked")
public List<IConceptDescription> parseConceptDescriptions() {
Map<String, Object> xmlConceptDescriptions = (Map<String, Object>) root.get(ConceptDescriptionXMLConverter.CONCEPT_DESCRIPTIONS);
return ConceptDescriptionXMLConverter.parseConceptDescriptions(xmlConceptDescriptions);
}
}