blob: f8a408aab5834987ac7e2e1230ff90da8abd1589 [file] [log] [blame]
package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.dataelement;
import java.util.Map;
import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
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.exception.provider.ProviderException;
import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
/**
* Connects to a PropertySingleValued as specified by DAAS containing a simple
* value
*
* @author schnicke
*
*/
public class ConnectedProperty extends ConnectedDataElement implements IProperty {
public ConnectedProperty(VABElementProxy proxy) {
super(proxy);
}
@Override
public Object get() throws Exception {
return getValue();
}
@Override
public void set(Object newValue) throws ProviderException {
getProxy().setModelPropertyValue(Property.VALUE, PropertyValueTypeDefHelper.prepareForSerialization(newValue));
}
@Override
public PropertyValueTypeDef getValueType() {
return PropertyValueTypeDefHelper.readTypeDef(getElem().getPath(Property.VALUETYPE));
}
@SuppressWarnings("unchecked")
@Override
public IReference getValueId() {
return Reference.createAsFacade((Map<String, Object>) getElem().getPath(Property.VALUEID));
}
@SuppressWarnings("unchecked")
protected <T> T retrieveObject() {
return (T) getProxy().getModelPropertyValue(Property.VALUE);
}
@Override
protected KeyElements getKeyElement() {
return KeyElements.PROPERTY;
}
@Override
public Object getValue() {
Object value = retrieveObject();
if(value instanceof String) {
return PropertyValueTypeDefHelper.getJavaObject(value, getValueType());
}else {
return value;
}
}
@Override
public void setValue(Object value) {
this.set(value);
}
@Override
public Property getLocalCopy() {
return Property.createAsFacade(getElem()).getLocalCopy();
}
}