| 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; |
| } |
| } |