예제 #1
0
  /**
   * Return the maximum value of a non-modal range property value scaled to a given unit. Throws an
   * exception if no property value exists or an error occurs.
   *
   * @param ph The property holder from which to retrieve the property value.
   * @param pd The property to retrieve.
   * @param unit The unit to scale the value to.
   * @return The maximum of the range value scaled to the given unit.
   * @throws InvalidModelException Thrown if the property value cannot be retrieved because the
   *     model is incomplete or otherwise invalid.
   * @throws PropertyNotPresentException Thrown if the property is undefined for ph.
   * @throws PropertyIsModalException Thrown if ph is modal and declarative.
   * @throws IllegalStateException Thrown if the lookup encounters a cycle of property reference
   *     dependencies.
   * @throws IllegalArgumentException Thrown if the given unit literal is not from the property's
   *     unit type or if ph, pd, or unit is null.
   * @throws PropertyDoesNotApplyToHolderException Thrown if pd does not apply to ph.
   * @throws PropertyIsListException Thrown if the property is not scalar.
   * @throws ClassCastException Thrown if the retrieved value is not a range value.
   */
  public static double getScaledRangeMaximum(
      final NamedElement ph, final Property pd, final UnitLiteral unit)
      throws InvalidModelException, PropertyNotPresentException, PropertyIsModalException,
          IllegalStateException, IllegalArgumentException, PropertyDoesNotApplyToHolderException,
          PropertyIsListException, ClassCastException {
    final PropertyExpression pv = checkUnitsAndGetSimplePropertyValue(ph, pd, unit);
    RangeValue rv = (RangeValue) pv;
    PropertyExpression maximum = rv.getMaximum().evaluate(null).first().getValue();

    if (maximum instanceof NumberValue) {
      return ((NumberValue) maximum).getScaledValue(unit);
    }
    throw new InvalidModelException(maximum, "Cannot evaluate upper range limit");
  }
예제 #2
0
  /**
   * Return the maximum value of a non-modal range property value scaled to a given unit. Returns a
   * given default value if no property value exists. Throws an exception if an error occurs.
   *
   * @param ph The property holder from which to retrieve the property value.
   * @param pd The property to retrieve.
   * @param unit The unit to scale the value to.
   * @param defaultVal The value to return if the property has no value.
   * @return The maximum of the range value scaled to the given unit.
   */
  public static double getScaledRangeMaximum(
      final NamedElement ne, final Property pd, final UnitLiteral unit, final double defaultVal) {
    try {
      final PropertyExpression pv = checkUnitsAndGetSimplePropertyValue(ne, pd, unit);
      final RangeValue rv = (RangeValue) pv;
      PropertyExpression maximum = rv.getMaximum().evaluate(null).first().getValue();

      if (maximum instanceof NumberValue) {
        return ((NumberValue) maximum).getScaledValue(unit);
      } else {
        return defaultVal;
      }
    } catch (PropertyLookupException e) {
      return defaultVal;
    }
  }