Optimizes property access
* Removes redundant access
* Tidies ConnectedSubModel class
Change-Id: Icf6714b573a02a5a13c0e061222e5e8c68da6798
Signed-off-by: Frank Schnicke <frank.schnicke@iese.fraunhofer.de>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedElement.java
index 920faf0..c5fb00d 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedElement.java
@@ -1,6 +1,5 @@
package org.eclipse.basyx.submodel.metamodel.connected;
-import java.util.HashMap;
import java.util.Map;
import org.eclipse.basyx.submodel.metamodel.api.IElement;
@@ -18,11 +17,6 @@
private VABElementProxy proxy;
- /*
- * Stores element meta-information if retrieved from c# sdk
- */
- private HashMap<String, Object> localInformation = new HashMap<String, Object>();
-
public VABElementProxy getProxy() {
return proxy;
}
@@ -32,17 +26,6 @@
this.proxy = proxy;
}
- protected void putLocal(String key, Object value) {
- this.localInformation.put(key, value);
- }
-
- public void putAllLocal(Map<String, Object> opNode) {
- this.localInformation.putAll(opNode);
- }
-
- protected Object getLocal(String key) {
- return this.localInformation.get(key);
- }
@SuppressWarnings("unchecked")
protected VABModelMap<Object> getElem() {
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedSubModel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedSubModel.java
index 33a2768..a96451f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedSubModel.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedSubModel.java
@@ -3,16 +3,12 @@
import java.util.Map;
import java.util.Set;
-import org.eclipse.basyx.submodel.metamodel.api.IElementContainer;
import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
import org.eclipse.basyx.submodel.metamodel.api.qualifier.haskind.ModelingKind;
import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
-import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IDataElement;
-import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
import org.eclipse.basyx.submodel.metamodel.connected.facades.ConnectedVABElementContainerFacade;
import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.dataelement.property.ConnectedPropertyFactory;
import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
@@ -33,14 +29,12 @@
* @author rajashek
*
*/
-public class ConnectedSubModel extends ConnectedVABModelMap<Object> implements IElementContainer, ISubModel {
+public class ConnectedSubModel extends ConnectedVABElementContainerFacade implements ISubModel {
ConnectedPropertyFactory factory = new ConnectedPropertyFactory();
- ConnectedVABElementContainerFacade facade;
public ConnectedSubModel(VABElementProxy proxy) {
super(proxy);
- facade = new ConnectedVABElementContainerFacade(proxy);
}
@SuppressWarnings("unchecked")
@@ -89,26 +83,6 @@
public IReference getParent() {
return Reference.createAsFacade((Map<String, Object>) getElem().getPath(Referable.PARENT));
}
-
- @Override
- public void addSubModelElement(ISubmodelElement element) {
- facade.addSubModelElement(element);
- }
-
- @Override
- public Map<String, IDataElement> getDataElements() {
- return facade.getDataElements();
- }
-
- @Override
- public Map<String, IOperation> getOperations() {
- return facade.getOperations();
- }
-
- @Override
- public Map<String, ISubmodelElement> getSubmodelElements() {
- return facade.getSubmodelElements();
- }
@Override
public Set<IConstraint> getQualifier() {
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/facades/ConnectedVABElementContainerFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/facades/ConnectedVABElementContainerFacade.java
index 9530176..d65a4b9 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/facades/ConnectedVABElementContainerFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/facades/ConnectedVABElementContainerFacade.java
@@ -17,6 +17,9 @@
import org.eclipse.basyx.submodel.metamodel.map.modeltype.ModelType;
import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
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;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDefHelper;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.relationship.RelationshipElement;
import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
import org.eclipse.basyx.vab.modelprovider.VABPathTools;
@@ -28,8 +31,6 @@
*
*/
public class ConnectedVABElementContainerFacade extends ConnectedVABModelMap<Object> implements IElementContainer {
- ConnectedPropertyFactory factory = new ConnectedPropertyFactory();
-
public ConnectedVABElementContainerFacade(VABElementProxy proxy) {
super(proxy);
}
@@ -56,16 +57,24 @@
// Read values
Collection<Map<String, Object>> dataElemNodes = (Collection<Map<String, Object>>) smDeList;
- // Convert to IOperation
+ // Convert to IProperty
for (Map<String, Object> deNode : dataElemNodes) {
String id = (String) deNode.get(Referable.IDSHORT);
- ret.put(id, factory
- .createProperty(getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.PROPERTIES, id))));
+ PropertyValueTypeDef type = getType(deNode);
+ ret.put(id, ConnectedPropertyFactory.createProperty(getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.PROPERTIES, id)), type));
}
// Return result
return ret;
}
+ private PropertyValueTypeDef getType(Map<String, Object> deNode) {
+ if (deNode.containsKey(SubModel.PROPERTIES)) {
+ return PropertyValueTypeDef.Container;
+ } else {
+ return PropertyValueTypeDefHelper.readTypeDef(deNode.get(Property.VALUETYPE));
+ }
+ }
+
@SuppressWarnings("unchecked")
@Override
public Map<String, IOperation> getOperations() {
@@ -82,17 +91,14 @@
for (Map<String, Object> opNode : operationNodes) {
String id = (String) opNode.get(Referable.IDSHORT);
- ConnectedOperation conOp = new ConnectedOperation(
- getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.OPERATIONS, id)));
- // Cache operation properties
- conOp.putAllLocal(opNode);
+ ConnectedOperation conOp = new ConnectedOperation(getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.OPERATIONS, id)));
ret.put(id, conOp);
}
// Return result
return ret;
}
-
+
@SuppressWarnings("unchecked")
@Override
public Map<String, ISubmodelElement> getSubmodelElements() {
@@ -104,56 +110,48 @@
Object opList = getProxy().getModelPropertyValue(SubModel.OPERATIONS);
// Read values
Collection<Map<String, Object>> opNodes = (Collection<Map<String, Object>>) opList;
-
+
// Sub model dataElement list
Object deList = getProxy().getModelPropertyValue(SubModel.PROPERTIES);
// Read values
Collection<Map<String, Object>> deNodes = (Collection<Map<String, Object>>) deList;
-
// submodel element list; this list will contain all submodelElements
Object smElemList = getProxy().getModelPropertyValue(SubModel.SUBMODELELEMENT);
// Read values
Collection<Map<String, Object>> smElemNodes = (Collection<Map<String, Object>>) smElemList;
- //remove all submodelElements already contained in on of the other lists
+ // remove all submodelElements already contained in on of the other lists
smElemNodes.removeAll(opNodes);
smElemNodes.removeAll(deNodes);
-
// Convert to IOperation
for (Map<String, Object> opNode : opNodes) {
String id = (String) opNode.get(Referable.IDSHORT);
- ConnectedOperation conOp = new ConnectedOperation(
- getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.OPERATIONS, id)));
- // Cache operation properties
- conOp.putAllLocal(opNode);
+ ConnectedOperation conOp = new ConnectedOperation(getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.OPERATIONS, id)));
ret.put(id, conOp);
}
-
+
// Convert to IProperty
for (Map<String, Object> deNode : deNodes) {
String id = (String) deNode.get(Referable.IDSHORT);
- ret.put(id, factory
- .createProperty(getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.PROPERTIES, id))));
+ PropertyValueTypeDef type = getType(deNode);
+ ret.put(id, ConnectedPropertyFactory.createProperty(getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.PROPERTIES, id)), type));
}
-
+
// Convert to ISubmodelElement
for (Map<String, Object> smElemNode : smElemNodes) {
String id = (String) smElemNode.get(Referable.IDSHORT);
- String modelType = ((String)((Map<String, Object>)(getProxy().getDeepProxy(
- VABPathTools.concatenatePaths(ModelType.MODELTYPE, id)))).get(ModelType.NAME));
-
- //convert ISubmodelElementCollection
- if(modelType.equals(SubmodelElementCollection.MODELTYPE)) {
- ret.put(id, new ConnectedSubmodelElementCollection(
- getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.SUBMODELELEMENT, id))));
+ String modelType = ((String) ((Map<String, Object>) (getProxy().getDeepProxy(VABPathTools.concatenatePaths(ModelType.MODELTYPE, id)))).get(ModelType.NAME));
+
+ // convert ISubmodelElementCollection
+ if (modelType.equals(SubmodelElementCollection.MODELTYPE)) {
+ ret.put(id, new ConnectedSubmodelElementCollection(getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.SUBMODELELEMENT, id))));
}
- //convert IRelationshipElement
- if(modelType.equals(RelationshipElement.MODELTYPE)) {
- ret.put(id, new ConnectedRelationshipElement(
- getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.SUBMODELELEMENT, id))));
+ // convert IRelationshipElement
+ if (modelType.equals(RelationshipElement.MODELTYPE)) {
+ ret.put(id, new ConnectedRelationshipElement(getProxy().getDeepProxy(VABPathTools.concatenatePaths(SubModel.SUBMODELELEMENT, id))));
}
}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/dataelement/property/ConnectedPropertyFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/dataelement/property/ConnectedPropertyFactory.java
index 50ba595..8ba3128 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/dataelement/property/ConnectedPropertyFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/dataelement/property/ConnectedPropertyFactory.java
@@ -1,59 +1,35 @@
package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.dataelement.property;
-import java.util.Map;
-
import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.property.IProperty;
-import org.eclipse.basyx.submodel.metamodel.map.SubModel;
-import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
-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.metamodel.map.submodelelement.dataelement.property.valuetypedef.PropertyValueTypeDefHelper;
import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
- * Creates IProperties based on the attached meta data as specified in DAAS
- * document
+ * Supports with creation of connected properties
*
* @author schnicke
*
*/
public class ConnectedPropertyFactory {
- private static Logger logger = LoggerFactory.getLogger(ConnectedPropertyFactory.class);
-
- @SuppressWarnings("unchecked")
- public IProperty createProperty(VABElementProxy proxy) {
- // Since the VABElementProxy is already pointing to the property, get empty
- // property
- Map<String, Object> property = (Map<String, Object>) proxy.getModelPropertyValue("");
- if (property.containsKey(SubModel.PROPERTIES)) {
+ /**
+ * Creates a connected property based on the given type
+ *
+ * @param proxy
+ * the proxy element pointing to the specific property
+ * @param typeDef
+ * @return
+ */
+ public static IProperty createProperty(VABElementProxy proxy, PropertyValueTypeDef typeDef) {
+ if (typeDef == PropertyValueTypeDef.Container) {
return new ConnectedContainerProperty(proxy);
- } else if (property.containsKey(Property.VALUETYPE)) {
-
- PropertyValueTypeDef valueType = PropertyValueTypeDefHelper.readTypeDef(property.get(Property.VALUETYPE));
-
- if (valueType == PropertyValueTypeDef.Map) {
- return new ConnectedMapProperty(proxy);
- } else if (valueType == PropertyValueTypeDef.Collection) {
- return new ConnectedCollectionProperty(proxy);
- } else {
- ConnectedSingleProperty conProp = new ConnectedSingleProperty(proxy);
- conProp.putAllLocal(property);
- return conProp;
- }
-
- } else if ((property.get(Property.VALUE) != null) && (property.get(Referable.IDSHORT) != null)){
- // handle property without valueType
+ } else if (typeDef == PropertyValueTypeDef.Map) {
+ return new ConnectedMapProperty(proxy);
+ } else if (typeDef == PropertyValueTypeDef.Collection) {
+ return new ConnectedCollectionProperty(proxy);
+ } else {
+ // It is assumed to be an atomic value (e.g. integer, double, ...)
ConnectedSingleProperty conProp = new ConnectedSingleProperty(proxy);
- conProp.putAllLocal(property);
return conProp;
}
-
-
- logger.warn("Unknown property type");
- return null;
- }
-}
+ }}