blob: ad7db0e46b0b924534369c1090bb589c0491050a [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.identifier.IdentifierType;
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.api.submodelelement.dataelement.IProperty;
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.metamodel.map.submodelelement.dataelement.property.Property;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
/**
* GuidelineSpecificProperties as defined in the AAS Digital Nameplate Template document <br/>
* It is a submodel element collection which contains Asset specific nameplate
* information required by guideline, stipulation or legislation.
*
* @author haque
*
*/
public class GuidelineSpecificProperties extends SubmodelElementCollection {
public static final String GUIDELINEFORCONFORMITYDECLARATIONID = "GuidelineForConformityDeclaration";
public static final Reference SEMANTICID = new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "https://adminshell.io/zvei/nameplate/1/0/Nameplate/AssetSpecificProperties/GuidelineSpecificProperties", KeyType.IRI));
private GuidelineSpecificProperties() {
}
/**
* Constructor with mandatory attributes
*
* @param idShort
* @param declaration
* @param arbitrary
*/
public GuidelineSpecificProperties(String idShort, Property declaration, List<Property> arbitrary) {
super(idShort);
setSemanticID(SEMANTICID);
setGuidelineForConformityDeclaration(declaration);
setArbitrary(arbitrary);
}
/**
* Constructor with mandatory attributes
*
* @param idShort
* @param declaration
* @param arbitrary
*/
public GuidelineSpecificProperties(String idShort, String declaration, List<Property> arbitrary) {
super(idShort);
setSemanticID(SEMANTICID);
setGuidelineForConformityDeclaration(declaration);
setArbitrary(arbitrary);
}
/**
* Creates a GuidelineSpecificProperties SMC object from a map
*
* @param obj a GuidelineSpecificProperties SMC object as raw map
* @return a GuidelineSpecificProperties SMC object, that behaves like a facade for the given map
*/
public static GuidelineSpecificProperties createAsFacade(Map<String, Object> obj) {
if (obj == null) {
return null;
}
if (!isValid(obj)) {
throw new MetamodelConstructionException(GuidelineSpecificProperties.class, obj);
}
GuidelineSpecificProperties guidelineSpecificProperties = new GuidelineSpecificProperties();
guidelineSpecificProperties.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
return guidelineSpecificProperties;
}
/**
* Creates a GuidelineSpecificProperties SMC object from a map without validation
*
* @param obj a GuidelineSpecificProperties SMC object as raw map
* @return a GuidelineSpecificProperties SMC object, that behaves like a facade for the given map
*/
private static GuidelineSpecificProperties createAsFacadeNonStrict(Map<String, Object> obj) {
if (obj == null) {
return null;
}
GuidelineSpecificProperties guidelineSpecificProperties = new GuidelineSpecificProperties();
guidelineSpecificProperties.setMap((Map<String, Object>)SubmodelElementMapCollectionConverter.mapToSmECollection(obj));
return guidelineSpecificProperties;
}
/**
* Check whether all mandatory elements for GuidelineSpecificProperties SMC
* exist in the map
*
* @param obj
*
* @return true/false
*/
public static boolean isValid(Map<String, Object> obj) {
GuidelineSpecificProperties props = createAsFacadeNonStrict(obj);
return SubmodelElementCollection.isValid(obj)
&& props.getGuidelineForConformityDeclaration() != null
&& props.getArbitrary() != null
&& props.getArbitrary().size() > 0;
}
/**
* sets guideline, stipulation or legislation used for determining conformity
*
* @param declaration {@link Property}
*/
public void setGuidelineForConformityDeclaration(Property declaration) {
addSubModelElement(declaration);
}
/**
* sets guideline, stipulation or legislation used for determining conformity
*
* @param declaration {@link String}
*/
public void setGuidelineForConformityDeclaration(String declaration) {
Property declarationProp = new Property(GUIDELINEFORCONFORMITYDECLARATIONID, PropertyValueTypeDef.String);
declarationProp.setSemanticID(new Reference(new Key(KeyElements.CONCEPTDESCRIPTION, false, "0173-1#02-AAO856#002", IdentifierType.IRDI)));
declarationProp.set(declaration);
setGuidelineForConformityDeclaration(declarationProp);
}
/**
* gets sets guideline, stipulation or legislation used for determining conformity
*
* @return
*/
public IProperty getGuidelineForConformityDeclaration() {
return (IProperty) getSubmodelElement(GUIDELINEFORCONFORMITYDECLARATIONID);
}
/**
* Gets arbitrary, representing information required by further standards
* @return
*/
public List<IProperty> getArbitrary() {
List<IProperty> ret = new ArrayList<IProperty>();
Map<String, ISubmodelElement> elemMap = getSubmodelElements();
if (elemMap != null && elemMap.size() > 0) {
for (Map.Entry<String, ISubmodelElement> singleElement: elemMap.entrySet()) {
if (!singleElement.getKey().equals(GUIDELINEFORCONFORMITYDECLARATIONID)) {
ret.add((IProperty) singleElement.getValue());
}
}
}
return ret;
}
/**
* Sets arbitrary, representing information required by further standards
* @param arbitraries
*/
public void setArbitrary(List<Property> arbitraries) {
if (arbitraries != null & arbitraries.size() > 0) {
for (Property prop : arbitraries) {
addSubModelElement(prop);
}
}
}
}