blob: d68e4b237a6e2a5efd94096d165d86e138decbd6 [file] [log] [blame]
package org.eclipse.basyx.submodel.metamodel.facade.submodelelement;
import java.util.Map;
import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
import org.eclipse.basyx.submodel.metamodel.map.modeltype.ModelType;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.Blob;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.File;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.MultiLanguageProperty;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.Range;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.ReferenceElement;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.entity.Entity;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.event.BasicEvent;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.relationship.RelationshipElement;
/**
* Facade factory for SubmodelElement
*
* @author conradi
*
*/
public class SubmodelElementFacadeFactory {
/**
* Takes a Map and creates the corresponding SubmodelElement as facade
*
* @param smElement a Map containing the information of a SubmodelElement
* @return the actual of the given SubmodelElement map created as facade
*/
public static ISubmodelElement createSubmodelElement(Map<String, Object> submodelElement) {
String type = ModelType.createAsFacade(submodelElement).getName();
switch (type) {
case Property.MODELTYPE:
return Property.createAsFacade(submodelElement);
case BasicEvent.MODELTYPE:
return BasicEvent.createAsFacade(submodelElement);
case MultiLanguageProperty.MODELTYPE:
return MultiLanguageProperty.createAsFacade(submodelElement);
case Range.MODELTYPE:
return Range.createAsFacade(submodelElement);
case Entity.MODELTYPE:
return Entity.createAsFacade(submodelElement);
case File.MODELTYPE:
return File.createAsFacade(submodelElement);
case Blob.MODELTYPE:
return Blob.createAsFacade(submodelElement);
case ReferenceElement.MODELTYPE:
return ReferenceElement.createAsFacade(submodelElement);
case SubmodelElementCollection.MODELTYPE:
return SubmodelElementCollection.createAsFacade(submodelElement);
case RelationshipElement.MODELTYPE:
return RelationshipElement.createAsFacade(submodelElement);
case Operation.MODELTYPE:
return Operation.createAsFacade(submodelElement);
default:
throw new RuntimeException("Can not create a submodel element from given map");
}
}
}