blob: d2a1d1de84d1b0e4728cc71129d68682a92b92ac [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2021 the Eclipse BaSyx Authors
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
******************************************************************************/
package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.dataelement;
import java.util.Map;
import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IRange;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueType;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueTypeHelper;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.range.Range;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.range.RangeValue;
import org.eclipse.basyx.submodel.restapi.MultiSubmodelElementProvider;
import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
/**
* "Connected" implementation of IRange
* @author conradi
*
*/
public class ConnectedRange extends ConnectedDataElement implements IRange {
public ConnectedRange(VABElementProxy proxy) {
super(proxy);
}
@Override
public ValueType getValueType() {
return ValueTypeHelper.readTypeDef(getElem().getPath(Range.VALUETYPE));
}
@Override
public Object getMin() {
Object min = getElem().getPath(Range.MIN);
return ValueTypeHelper.getJavaObject(min, getValueType());
}
@Override
public Object getMax() {
Object max = getElem().getPath(Range.MAX);
return ValueTypeHelper.getJavaObject(max, getValueType());
}
@Override
protected KeyElements getKeyElement() {
return KeyElements.RANGE;
}
@Override
public RangeValue getValue() {
return new RangeValue(getMin(), getMax());
}
@SuppressWarnings("unchecked")
@Override
public void setValue(Object value) {
if(RangeValue.isRangeValue(value)) {
RangeValue rangeValue = RangeValue.createAsFacade((Map<String, Object>) value);
setValue(rangeValue);
} else {
throw new IllegalArgumentException("Given object " + value + " is not a RangeValue");
}
}
@Override
public Range getLocalCopy() {
return Range.createAsFacade(getElem()).getLocalCopy();
}
@Override
public void setValue(RangeValue rangeValue) {
Object minRaw = rangeValue.getMin();
Object maxRaw = rangeValue.getMax();
RangeValue prepared = new RangeValue(
ValueTypeHelper.prepareForSerialization(minRaw),
ValueTypeHelper.prepareForSerialization(maxRaw)
);
getProxy().setValue(MultiSubmodelElementProvider.VALUE, prepared);
}
}