IntegerRange.java
package org.osate.pluginsupport.properties;
import static org.osate.pluginsupport.properties.CodeGenUtil.resolveNamedValue;
import java.util.Objects;
import java.util.Optional;
import java.util.OptionalLong;
import org.osate.aadl2.Aadl2Factory;
import org.osate.aadl2.IntegerLiteral;
import org.osate.aadl2.Mode;
import org.osate.aadl2.NamedElement;
import org.osate.aadl2.PropertyExpression;
import org.osate.aadl2.RangeValue;
/**
* @since 5.0
*/
public class IntegerRange {
private final long minimum;
private final long maximum;
private final OptionalLong delta;
public IntegerRange(long minimum, long maximum) {
this(minimum, maximum, OptionalLong.empty());
}
public IntegerRange(long minimum, long maximum, long delta) {
this(minimum, maximum, OptionalLong.of(delta));
}
public IntegerRange(long minimum, long maximum, OptionalLong delta) {
this.minimum = minimum;
this.maximum = maximum;
this.delta = delta;
}
/**
* This constructor is meant only to be called by generated Java property getters when looking up the value of a
* property.
*/
public IntegerRange(PropertyExpression propertyExpression, NamedElement lookupContext, Optional<Mode> mode) {
RangeValue rangeValue = (RangeValue) propertyExpression;
minimum = ((IntegerLiteral) resolveNamedValue(rangeValue.getMinimum(), lookupContext, mode)).getValue();
maximum = ((IntegerLiteral) resolveNamedValue(rangeValue.getMaximum(), lookupContext, mode)).getValue();
if (rangeValue.getDelta() == null) {
delta = OptionalLong.empty();
} else {
PropertyExpression resolvedDelta = resolveNamedValue(rangeValue.getDelta(), lookupContext, mode);
delta = OptionalLong.of(((IntegerLiteral) resolvedDelta).getValue());
}
}
/**
* This constructor is meant only to be called by generated Java property getters when looking up the value of a
* property constant.
*
* @since 7.1
*/
public IntegerRange(PropertyExpression propertyExpression) {
RangeValue rangeValue = (RangeValue) propertyExpression;
minimum = ((IntegerLiteral) resolveNamedValue(rangeValue.getMinimum())).getValue();
maximum = ((IntegerLiteral) resolveNamedValue(rangeValue.getMaximum())).getValue();
if (rangeValue.getDelta() == null) {
delta = OptionalLong.empty();
} else {
delta = OptionalLong.of(((IntegerLiteral) resolveNamedValue(rangeValue.getDelta())).getValue());
}
}
public long getMinimum() {
return minimum;
}
public long getMaximum() {
return maximum;
}
public OptionalLong getDelta() {
return delta;
}
public RangeValue toPropertyExpression() {
RangeValue rangeValue = Aadl2Factory.eINSTANCE.createRangeValue();
IntegerLiteral minimumValue = Aadl2Factory.eINSTANCE.createIntegerLiteral();
minimumValue.setValue(minimum);
rangeValue.setMinimum(minimumValue);
IntegerLiteral maximumValue = Aadl2Factory.eINSTANCE.createIntegerLiteral();
maximumValue.setValue(maximum);
rangeValue.setMaximum(maximumValue);
delta.ifPresent(delta -> {
IntegerLiteral deltaValue = Aadl2Factory.eINSTANCE.createIntegerLiteral();
deltaValue.setValue(delta);
rangeValue.setDelta(deltaValue);
});
return rangeValue;
}
@Override
public int hashCode() {
return Objects.hash(minimum, maximum, delta);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof IntegerRange)) {
return false;
}
IntegerRange other = (IntegerRange) obj;
return minimum == other.minimum && maximum == other.maximum && Objects.equals(delta, other.delta);
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder(minimum + " .. " + maximum);
delta.ifPresent(it -> builder.append(" delta " + it));
return builder.toString();
}
}