blob: 8f0238224d61cd6a4aa4e14b19545172c6bdf97e [file] [log] [blame]
package org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
import org.eclipse.basyx.submodel.types.digitalnameplate.helper.DigitalNameplateSubmodelHelper;
/**
* AssetSpecificProperties as defined in the AAS Digital Nameplate Template document <br/>
* It is a submodel element collection which contains collection of guideline specific properties
*
* @author haque
*
*/
public class AssetSpecificProperties extends SubmodelElementCollection {
public static final String ASSETSPECIFICPROPERTIESID = "AssetSpecificProperties";
public static final String GUIDELINESPECIFICPROPERTYPREFIX = "GuidelineSpecificProperties";
public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "https://admin-shell.io/zvei/nameplate/1/0/Nameplate/AssetSpecificProperties", KeyType.IRI));
private AssetSpecificProperties() {
}
/**
* Constructor with default idShort
* @param guidelineSpecificProperties
*/
public AssetSpecificProperties(List<GuidelineSpecificProperties> guidelineSpecificProperties) {
this (ASSETSPECIFICPROPERTIESID, guidelineSpecificProperties);
}
/**
* Constructor with mandatory attributes
*
* @param idShort
* @param guidelineSpecificProperties
*/
public AssetSpecificProperties(String idShort, List<GuidelineSpecificProperties> guidelineSpecificProperties) {
super(idShort);
setSemanticID(SEMANTICID);
setGuidelineSpecificProperties(guidelineSpecificProperties);
}
/**
* Creates a AssetSpecificProperties SMC object from a map
*
* @param obj a AssetSpecificProperties SMC object as raw map
* @return a AssetSpecificProperties SMC object, that behaves like a facade for the given map
*/
public static AssetSpecificProperties createAsFacade(Map<String, Object> obj) {
if (obj == null) {
return null;
}
if (!isValid(obj)) {
throw new MetamodelConstructionException(AssetSpecificProperties.class, obj);
}
AssetSpecificProperties assetSpecificProperties = new AssetSpecificProperties();
assetSpecificProperties.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
return assetSpecificProperties;
}
/**
* Creates a AssetSpecificProperties SMC object from a map without validation
*
* @param obj a AssetSpecificProperties SMC object as raw map
* @return a AssetSpecificProperties SMC object, that behaves like a facade for the given map
*/
private static AssetSpecificProperties createAsFacadeNonStrict(Map<String, Object> obj) {
if (obj == null) {
return null;
}
AssetSpecificProperties assetSpecificProperties = new AssetSpecificProperties();
assetSpecificProperties.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
return assetSpecificProperties;
}
/**
* Check whether all mandatory elements for AssetSpecificProperties SMC
* exist in the map
*
* @param obj
*
* @return true/false
*/
public static boolean isValid(Map<String, Object> obj) {
AssetSpecificProperties props = createAsFacadeNonStrict(obj);
if (SubmodelElementCollection.isValid(obj)
&& props.getGuidelineSpecificProperties() != null
&& props.getGuidelineSpecificProperties().size() > 0) {
for (GuidelineSpecificProperties prop : props.getGuidelineSpecificProperties()) {
if (!GuidelineSpecificProperties.isValid((Map<String, Object>) prop)) {
return false;
}
}
return true;
} else {
return false;
}
}
public void setGuidelineSpecificProperties(List<GuidelineSpecificProperties> properties) {
if (properties != null & properties.size() > 0) {
for (GuidelineSpecificProperties prop : properties) {
addSubModelElement(prop);
}
}
}
@SuppressWarnings("unchecked")
public List<GuidelineSpecificProperties> getGuidelineSpecificProperties() {
List<GuidelineSpecificProperties> ret = new ArrayList<GuidelineSpecificProperties>();
List<ISubmodelElement> elements = DigitalNameplateSubmodelHelper.getSubmodelElementsByIdPrefix(GUIDELINESPECIFICPROPERTYPREFIX, getSubmodelElements());
for (ISubmodelElement element: elements) {
ret.add(GuidelineSpecificProperties.createAsFacade((Map<String, Object>) element));
}
return ret;
}
}