Optimization and bug fix of isValid methods in Digital Nameplate Submodel and associated SMC
Signed-off-by: Ashfaqul Haque <ashfaqul.haque@iese.fraunhofer.de>
Change-Id: I83cad74e4a2cf9d10855e655bd60f54b8b3fba29
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/DigitalNameplateSubmodel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/DigitalNameplateSubmodel.java
index a0de434..a29b4f5 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/DigitalNameplateSubmodel.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/DigitalNameplateSubmodel.java
@@ -17,7 +17,6 @@
import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
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.MultiLanguageProperty;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
@@ -186,15 +185,16 @@
*
* @return true/false
*/
+ @SuppressWarnings("unchecked")
public static boolean isValid(Map<String, Object> obj) {
DigitalNameplateSubmodel submodel = createAsFacadeNonStrict(obj);
- return SubmodelElementCollection.isValid(obj)
- && submodel.getManufacturerName() != null
- && submodel.getManufacturerProductDesignation() != null
- && submodel.getAddress() != null
- && submodel.getManufacturerProductFamily() != null
- && submodel.getYearOfConstruction() != null;
+ return SubModel.isValid(obj)
+ && MultiLanguageProperty.isValid((Map<String, Object>) submodel.getManufacturerName())
+ && MultiLanguageProperty.isValid((Map<String, Object>) submodel.getManufacturerProductDesignation())
+ && Address.isValid((Map<String, Object>) submodel.getAddress())
+ && MultiLanguageProperty.isValid((Map<String, Object>) submodel.getManufacturerProductFamily())
+ && Property.isValid((Map<String, Object>) submodel.getYearOfConstruction());
}
/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Address.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Address.java
index 2c1cbd2..ac71604 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Address.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Address.java
@@ -152,13 +152,15 @@
*
* @return true/false
*/
+ @SuppressWarnings("unchecked")
public static boolean isValid(Map<String, Object> obj) {
Address address = createAsFacadeNonStrict(obj);
+
return SubmodelElementCollection.isValid(obj)
- && address.getStreet() != null
- && address.getZipCode() != null
- && address.getCityTown() != null
- && address.getNationalCode() != null;
+ && MultiLanguageProperty.isValid((Map<String, Object>) address.getStreet())
+ && MultiLanguageProperty.isValid((Map<String, Object>) address.getZipCode())
+ && MultiLanguageProperty.isValid((Map<String, Object>) address.getCityTown())
+ && MultiLanguageProperty.isValid((Map<String, Object>) address.getNationalCode());
}
/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Email.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Email.java
index ff223fd..dba6565 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Email.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Email.java
@@ -102,9 +102,12 @@
*
* @return true/false
*/
+ @SuppressWarnings("unchecked")
public static boolean isValid(Map<String, Object> obj) {
+ Email email = createAsFacadeNonStrict(obj);
+
return SubmodelElementCollection.isValid(obj)
- && createAsFacadeNonStrict(obj).getEmailAddress() != null;
+ && Property.isValid((Map<String, Object>) email.getEmailAddress());
}
/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Fax.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Fax.java
index 431d50a..9da20bd 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Fax.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Fax.java
@@ -100,9 +100,11 @@
*
* @return true/false
*/
+ @SuppressWarnings("unchecked")
public static boolean isValid(Map<String, Object> obj) {
+ Fax fax = createAsFacadeNonStrict(obj);
return SubmodelElementCollection.isValid(obj)
- && createAsFacadeNonStrict(obj).getFaxNumber() != null;
+ && MultiLanguageProperty.isValid((Map<String, Object>) fax.getFaxNumber());
}
/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Phone.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Phone.java
index 45b6a0b..31a3283 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Phone.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/address/Phone.java
@@ -100,9 +100,12 @@
*
* @return true/false
*/
+ @SuppressWarnings("unchecked")
public static boolean isValid(Map<String, Object> obj) {
+ Phone phone = createAsFacadeNonStrict(obj);
+
return SubmodelElementCollection.isValid(obj)
- && createAsFacadeNonStrict(obj).getTelephoneNumber() != null;
+ && MultiLanguageProperty.isValid((Map<String, Object>) phone.getTelephoneNumber());
}
/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/AssetSpecificProperties.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/AssetSpecificProperties.java
index 5125de5..8f02382 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/AssetSpecificProperties.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/AssetSpecificProperties.java
@@ -96,9 +96,18 @@
public static boolean isValid(Map<String, Object> obj) {
AssetSpecificProperties props = createAsFacadeNonStrict(obj);
- return SubmodelElementCollection.isValid(obj)
+ if (SubmodelElementCollection.isValid(obj)
&& props.getGuidelineSpecificProperties() != null
- && props.getGuidelineSpecificProperties().size() > 0;
+ && 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) {
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/GuidelineSpecificProperties.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/GuidelineSpecificProperties.java
index ad7db0e..90a4882 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/GuidelineSpecificProperties.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/assetspecificproperties/GuidelineSpecificProperties.java
@@ -104,13 +104,24 @@
*
* @return true/false
*/
+ @SuppressWarnings("unchecked")
public static boolean isValid(Map<String, Object> obj) {
GuidelineSpecificProperties props = createAsFacadeNonStrict(obj);
- return SubmodelElementCollection.isValid(obj)
- && props.getGuidelineForConformityDeclaration() != null
+ if (SubmodelElementCollection.isValid(obj)
+ && Property.isValid((Map<String, Object>) props.getGuidelineForConformityDeclaration())
&& props.getArbitrary() != null
- && props.getArbitrary().size() > 0;
+ && props.getArbitrary().size() > 0) {
+ for (IProperty arbitrary: props.getArbitrary()) {
+ if (!Property.isValid((Map<String, Object>) arbitrary)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ else {
+ return false;
+ }
}
/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Marking.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Marking.java
index 48a1829..2e88634 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Marking.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Marking.java
@@ -111,11 +111,12 @@
*
* @return true/false
*/
+ @SuppressWarnings("unchecked")
public static boolean isValid(Map<String, Object> obj) {
Marking marking = createAsFacadeNonStrict(obj);
return SubmodelElementCollection.isValid(obj)
- && marking.getMarkingName() != null
- && marking.getMarkingFile() != null;
+ && Property.isValid((Map<String, Object>) marking.getMarkingName())
+ && File.isValid((Map<String, Object>) marking.getMarkingFile());
}
/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Markings.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Markings.java
index 69cc9a7..ec6d2e2 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Markings.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/types/digitalnameplate/submodelelementcollections/markings/Markings.java
@@ -97,9 +97,20 @@
*/
public static boolean isValid(Map<String, Object> obj) {
Markings markings = createAsFacadeNonStrict(obj);
- return SubmodelElementCollection.isValid(obj)
+
+ if (SubmodelElementCollection.isValid(obj)
&& markings.getMarking() != null
- && markings.getMarking().size() > 0;
+ && markings.getMarking().size() > 0) {
+ for (Marking marking : markings.getMarking()) {
+ if (!Marking.isValid((Map<String, Object>) marking)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ else {
+ return false;
+ }
}
/**
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/TestDigitalNameplateSubmodel.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/TestDigitalNameplateSubmodel.java
index bff74fb..b2e1c39 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/TestDigitalNameplateSubmodel.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/types/digitalnameplate/submodelelementcollections/TestDigitalNameplateSubmodel.java
@@ -13,7 +13,9 @@
import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangString;
import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
@@ -23,7 +25,6 @@
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDef;
import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Address;
-import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.address.Fax;
import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.assetspecificproperties.AssetSpecificProperties;
import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings.Marking;
import org.eclipse.basyx.submodel.types.digitalnameplate.submodelelementcollections.markings.Markings;
@@ -52,7 +53,7 @@
public static Property yearsOfConstruction = new Property(DigitalNameplateSubmodel.YEARSOFCONSTRUCTIONID, PropertyValueTypeDef.String);
public static Markings markings;
public static AssetSpecificProperties assetSpecificProperties = new AssetSpecificProperties(Collections.singletonList(TestAssetSpecificProperties.guidelineSpecificProperties));
-
+ public static Identifier identifier = new Identifier(IdentifierType.IRI, "https://admin-shell.io/zvei/nameplate/1/0/Nameplate");
private Map<String, Object> submodelMap = new HashMap<String, Object>();
@Before
@@ -88,6 +89,7 @@
submodelMap.put(Referable.IDSHORT, DigitalNameplateSubmodel.SUBMODELID);
submodelMap.put(HasSemantics.SEMANTICID, DigitalNameplateSubmodel.SEMANTICID);
submodelMap.put(SubModel.SUBMODELELEMENT, elements);
+ submodelMap.put(Identifiable.IDENTIFICATION, identifier);
}
@Test
@@ -103,12 +105,19 @@
assertEquals(markings, submodelFromMap.getMarkings());
assertEquals(assetSpecificProperties, submodelFromMap.getAssetSpecificProperties());
assertEquals(DigitalNameplateSubmodel.SUBMODELID, submodelFromMap.getIdShort());
+ assertEquals(identifier, submodelFromMap.getIdentification());
}
@Test (expected = MetamodelConstructionException.class)
public void testCreateAsFacadeExceptionIdShort() {
submodelMap.remove(Referable.IDSHORT);
- Fax.createAsFacade(submodelMap);
+ DigitalNameplateSubmodel.createAsFacade(submodelMap);
+ }
+
+ @Test (expected = MetamodelConstructionException.class)
+ public void testCreateAsFacadeExceptionIdentifier() {
+ submodelMap.remove(Identifiable.IDENTIFICATION);
+ DigitalNameplateSubmodel.createAsFacade(submodelMap);
}
@SuppressWarnings("unchecked")