Java源码示例:org.pentaho.reporting.libraries.formula.typing.TypeRegistry

示例1
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 3 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Object textValue = parameters.getValue( 0 );
  final Type startType = parameters.getType( 1 );
  final Object startValue = parameters.getValue( 1 );
  final Type lengthType = parameters.getType( 2 );
  final Object lengthValue = parameters.getValue( 2 );

  final Sequence text = new RecursiveSequence( textValue, context );
  final Number start = typeRegistry.convertToNumber( startType, startValue );
  final Number length = typeRegistry.convertToNumber( lengthType, lengthValue );

  if ( length.doubleValue() < 0 || start.doubleValue() < 1 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  return new TypeValuePair( AnyType.ANY_ARRAY, process( text, start.intValue(), length.intValue() ) );
}
 
示例2
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType1 = parameters.getType( 0 );
  final Object textValue1 = parameters.getValue( 0 );
  final Type textType2 = parameters.getType( 1 );
  final Object textValue2 = parameters.getValue( 1 );

  final String text = typeRegistry.convertToText( textType1, textValue1 );
  final String substring = typeRegistry.convertToText( textType2, textValue2 );

  return text.contains( substring ) ? RETURN_TRUE : RETURN_FALSE;
}
 
示例3
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType1 = parameters.getType( 0 );
  final Object textValue1 = parameters.getValue( 0 );
  final Type textType2 = parameters.getType( 1 );
  final Object textValue2 = parameters.getValue( 1 );

  final String text = typeRegistry.convertToText( textType1, textValue1 );
  final String substring = typeRegistry.convertToText( textType2, textValue2 );

  return text.startsWith( substring ) ? RETURN_TRUE : RETURN_FALSE;
}
 
示例4
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters )
  throws EvaluationException {
  final int length = parameters.getParameterCount();
  if ( length != 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();
  final Object value1Raw = parameters.getValue( 0 );
  final Object value2Raw = parameters.getValue( 1 );
  if ( value1Raw == null || value2Raw == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_NA_VALUE );
  }

  final Type type1 = parameters.getType( 0 );
  final Type type2 = parameters.getType( 1 );
  final ExtendedComparator comparator = typeRegistry.getComparator( type1, type2 );
  final boolean result = comparator.isEqual( type1, value1Raw, type2, value2Raw );
  if ( result ) {
    return RETURN_TRUE;
  } else {
    return RETURN_FALSE;
  }

}
 
示例5
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType1 = parameters.getType( 0 );
  final Object textValue1 = parameters.getValue( 0 );
  final Type patternType = parameters.getType( 1 );
  final Object patternValue = parameters.getValue( 1 );

  final String text = typeRegistry.convertToText( textType1, textValue1 );

  String regex = typeRegistry.convertToText( patternType, patternValue );

  // replace any * or % with .*
  regex = regex.replaceAll( "\\*", ".*" ).replaceAll( "%", ".*" );

  final Pattern p = Pattern.compile( regex );
  final Matcher m = p.matcher( text );

  return m.find() ? RETURN_TRUE : RETURN_FALSE;
}
 
示例6
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters )
  throws EvaluationException {
  final int length = parameters.getParameterCount();
  if ( length < 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();
  final Object value1Raw = parameters.getValue( 0 );
  final Type type1 = parameters.getType( 0 );
  for ( int i = 1; i < parameters.getParameterCount(); i++ ) {
    final Object value2Raw = parameters.getValue( i );
    if ( value1Raw == null || value2Raw == null ) {
      throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_NA_VALUE );
    }

    final Type type2 = parameters.getType( i );
    final ExtendedComparator comparator = typeRegistry.getComparator( type1, type2 );
    final boolean result = comparator.isEqual( type1, value1Raw, type2, value2Raw );
    if ( result ) {
      return RETURN_TRUE;
    }
  }
  return RETURN_FALSE;
}
 
示例7
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType1 = parameters.getType( 0 );
  final Object textValue1 = parameters.getValue( 0 );
  final Type textType2 = parameters.getType( 1 );
  final Object textValue2 = parameters.getValue( 1 );

  final String text = typeRegistry.convertToText( textType1, textValue1 );
  final String substring = typeRegistry.convertToText( textType2, textValue2 );

  return text.endsWith( substring ) ? RETURN_TRUE : RETURN_FALSE;
}
 
示例8
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 1 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final Type type1 = parameters.getType( 0 );
  final Object value1 = parameters.getValue( 0 );
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final String result = typeRegistry.convertToText( type1, value1 );
  if ( result == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  final char[] chars = result.toCharArray();
  final StringBuffer b = new StringBuffer( chars.length );
  for ( int i = 0; i < chars.length; i++ ) {
    final char c = chars[ i ];
    convert( c, b );
  }
  return new TypeValuePair( TextType.TYPE, b.toString() );
}
 
示例9
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 3 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType = parameters.getType( 0 );
  final Object textValue = parameters.getValue( 0 );
  final Type startType = parameters.getType( 1 );
  final Object startValue = parameters.getValue( 1 );
  final Type lengthType = parameters.getType( 2 );
  final Object lengthValue = parameters.getValue( 2 );

  final String text = typeRegistry.convertToText( textType, textValue );
  final Number start = typeRegistry.convertToNumber( startType, startValue );
  final Number length = typeRegistry.convertToNumber( lengthType, lengthValue );

  if ( length.doubleValue() < 0 || start.doubleValue() < 1 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  return new TypeValuePair( TextType.TYPE, process( text, start.intValue(), length.intValue() ) );
}
 
示例10
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  if ( parameters.getParameterCount() != 3 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Number n1 = typeRegistry.convertToNumber( parameters.getType( 0 ), parameters.getValue( 0 ) );
  final Number n2 = typeRegistry.convertToNumber( parameters.getType( 1 ), parameters.getValue( 1 ) );
  final Number n3 = typeRegistry.convertToNumber( parameters.getType( 2 ), parameters.getValue( 2 ) );

  if ( n1 == null || n2 == null || n3 == null ) {
    throw EvaluationException.getInstance(
      LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  final LocalizationContext localizationContext = context
    .getLocalizationContext();
  final java.sql.Date date = DateUtil.createDate( n1.intValue(),
    n2.intValue(), n3.intValue(), localizationContext );

  return new TypeValuePair( DateTimeType.DATE_TYPE, date );
}
 
示例11
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  if ( parameters.getParameterCount() != 1 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();
  final Date d = typeRegistry.convertToDate( parameters.getType( 0 ), parameters.getValue( 0 ) );

  if ( d == null ) {
    throw EvaluationException.getInstance(
      LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  final Calendar gc = DateUtil.createCalendar( d, context.getLocalizationContext() );

  final int month = gc.get( Calendar.MONTH ) + 1;
  return new TypeValuePair( NumberType.GENERIC_NUMBER, new BigDecimal( month ) );
}
 
示例12
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  if ( parameters.getParameterCount() != 1 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Date d = typeRegistry.convertToDate( parameters.getType( 0 ), parameters.getValue( 0 ) );
  if ( d == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  final Calendar gc = DateUtil.createCalendar( d, context.getLocalizationContext() );

  final int dayOfMonth = gc.get( Calendar.DAY_OF_MONTH );
  //noinspection UnpredictableBigDecimalConstructorCall
  return new TypeValuePair( NumberType.GENERIC_NUMBER, new BigDecimal( (double) dayOfMonth ) );
}
 
示例13
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  if ( parameters.getParameterCount() != 1 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Date d = typeRegistry.convertToDate( parameters.getType( 0 ), parameters.getValue( 0 ) );
  if ( d == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  final LocalizationContext localizationContext = context.getLocalizationContext();
  final Date monthend = monthend( d, localizationContext );


  final Date date = DateUtil.normalizeDate( monthend, DateTimeType.DATE_TYPE );
  return new TypeValuePair( DateTimeType.DATE_TYPE, date );
}
 
示例14
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  if ( parameters.getParameterCount() != 1 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();
  final Number n = typeRegistry.convertToNumber( parameters.getType( 0 ), parameters.getValue( 0 ) );

  if ( n == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  final BigDecimal bd = NumberUtil.getAsBigDecimal( n );
  final BigDecimal day = new BigDecimal( NumberUtil.performIntRounding( bd ).intValue() );
  final BigDecimal dayFraction = bd.subtract( day );

  final BigDecimal hourAndMinutesVal = dayFraction.multiply( HOUR_24 );
  final BigDecimal hours = NumberUtil.performIntRounding( hourAndMinutesVal );
  return new TypeValuePair( NumberType.GENERIC_NUMBER, hours );
}
 
示例15
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  if ( parameters.getParameterCount() != 1 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Date d = typeRegistry.convertToDate( parameters.getType( 0 ), parameters.getValue( 0 ) );

  if ( d == null ) {
    throw EvaluationException.getInstance(
      LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  final Calendar gc = DateUtil.createCalendar( d, context.getLocalizationContext() );
  final int year = gc.get( Calendar.YEAR );
  //noinspection UnpredictableBigDecimalConstructorCall
  return new TypeValuePair( NumberType.GENERIC_NUMBER, new BigDecimal( (double) year ) );
}
 
示例16
private TypeValuePair get( final int pos ) throws EvaluationException {
  final LValue parameter = function.parameters[ pos ];
  final Type paramType = function.metaData.getParameterType( pos );
  if ( parameter != null ) {
    final TypeValuePair result = parameter.evaluate();
    if ( result.getValue() == null ) {
      return result;
    }

    // lets do some type checking, right?
    final TypeRegistry typeRegistry = function.getContext().getTypeRegistry();
    final TypeValuePair converted = typeRegistry.convertTo( paramType, result );
    if ( converted == null ) {
      if ( logger.isDebugEnabled() ) {
        logger.debug( "Failed to evaluate parameter " + pos + " on function " + function );
      }
      throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_AUTO_ARGUMENT_VALUE );
    }
    return converted;
  } else {
    return new TypeValuePair( paramType, function.metaData.getDefaultValue( pos ) );
  }
}
 
示例17
public TypeValuePair evaluate( final FormulaContext context,
                               final TypeValuePair value1,
                               final TypeValuePair value2 )
  throws EvaluationException {
  final TypeRegistry typeRegistry = context.getTypeRegistry();
  final Object value1Raw = value1.getValue();
  final Object value2Raw = value2.getValue();
  if ( value1Raw == null || value2Raw == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_NA_VALUE );
  }

  final Type type1 = value1.getType();
  final Type type2 = value2.getType();
  final ExtendedComparator comparator = typeRegistry.getComparator( type1, type2 );
  final boolean result = comparator.isEqual( type1, value1Raw, type2, value2Raw );
  if ( result ) {
    return RETURN_TRUE;
  } else {
    return RETURN_FALSE;
  }
}
 
示例18
public final TypeValuePair evaluate( final FormulaContext context,
                                     final TypeValuePair value1,
                                     final TypeValuePair value2 )
  throws EvaluationException {
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  if ( value1 == null || value2 == null ) {
    // If this happens, then one of the implementations has messed up.
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_UNEXPECTED_VALUE );
  }

  final Object raw1 = value1.getValue();
  final Object raw2 = value2.getValue();
  if ( raw1 == null || raw2 == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_NA_VALUE );
  }

  final Number number1 = convertToNumber( typeRegistry, value1.getType(), raw1, ZERO );
  final Number number2 = convertToNumber( typeRegistry, value2.getType(), raw2, ZERO );
  return new TypeValuePair( NumberType.GENERIC_NUMBER, evaluate( number1, number2 ) );
}
 
示例19
public TypeValuePair evaluate( final FormulaContext context, final TypeValuePair value1 )
  throws EvaluationException {
  final Object rawValue = value1.getValue();
  if ( rawValue == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_NA_VALUE );
  }

  final Type type = value1.getType();
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  if ( type.isFlagSet( Type.NUMERIC_TYPE ) == false &&
    type.isFlagSet( Type.ANY_TYPE ) == false ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  // return the same as zero minus value.
  final Number number = typeRegistry.convertToNumber( type, rawValue );
  final BigDecimal value = NumberUtil.getAsBigDecimal( number );
  final BigDecimal percentage = NumberUtil.divide( value, HUNDRED );
  return new TypeValuePair( NumberType.GENERIC_NUMBER, percentage );
}
 
示例20
public final TypeValuePair evaluate( final FormulaContext context,
                                     final TypeValuePair value1,
                                     final TypeValuePair value2 )
  throws EvaluationException {
  final TypeRegistry typeRegistry = context.getTypeRegistry();
  final Type type1 = value1.getType();
  final Type type2 = value2.getType();
  final Object value1Raw = value1.getValue();
  final Object value2Raw = value2.getValue();
  if ( value1Raw == null || value2Raw == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_NA_VALUE );
  }

  final ExtendedComparator comparator = typeRegistry.getComparator( type1, type2 );
  final int result = comparator.compare( type1, value1Raw, type2, value2Raw );
  if ( evaluate( result ) ) {
    return RETURN_TRUE;
  }
  return RETURN_FALSE;
}
 
示例21
public TypeValuePair evaluate( final FormulaContext context,
                               final TypeValuePair value1, final TypeValuePair value2 )
  throws EvaluationException {
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final ExtendedComparator comparator =
    typeRegistry.getComparator( value1.getType(), value2.getType() );
  final boolean result = comparator.isEqual
    ( value1.getType(), value1.getValue(),
      value2.getType(), value2.getValue() );

  if ( result == false ) {
    return RETURN_TRUE;
  } else {
    return RETURN_FALSE;
  }
}
 
示例22
public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters )
  throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw new EvaluationException( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType1 = parameters.getType( 0 );
  final Object textValue1 = parameters.getValue( 0 );
  final Type textType2 = parameters.getType( 1 );
  final Object textValue2 = parameters.getValue( 1 );

  final String text = typeRegistry.convertToText( textType1, textValue1 );
  final String substring = typeRegistry.convertToText( textType2, textValue2 );

  return text.contains( substring ) ? RETURN_TRUE : RETURN_FALSE;
}
 
示例23
public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters )
  throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw new EvaluationException( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType1 = parameters.getType( 0 );
  final Object textValue1 = parameters.getValue( 0 );
  final Type textType2 = parameters.getType( 1 );
  final Object textValue2 = parameters.getValue( 1 );

  final String text = typeRegistry.convertToText( textType1, textValue1 );
  final String substring = typeRegistry.convertToText( textType2, textValue2 );

  return text.startsWith( substring ) ? RETURN_TRUE : RETURN_FALSE;
}
 
示例24
public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters )
  throws EvaluationException {
  final int length = parameters.getParameterCount();
  if ( length != 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();
  final Object value1Raw = parameters.getValue( 0 );
  final Object value2Raw = parameters.getValue( 1 );
  if ( value1Raw == null || value2Raw == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_NA_VALUE );
  }

  final Type type1 = parameters.getType( 0 );
  final Type type2 = parameters.getType( 1 );
  final ExtendedComparator comparator = typeRegistry.getComparator( type1, type2 );
  final boolean result = comparator.isEqual( type1, value1Raw, type2, value2Raw );
  if ( result ) {
    return RETURN_TRUE;
  } else {
    return RETURN_FALSE;
  }

}
 
示例25
public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters )
  throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw new EvaluationException( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType1 = parameters.getType( 0 );
  final Object textValue1 = parameters.getValue( 0 );
  final Type textType2 = parameters.getType( 1 );
  final Object textValue2 = parameters.getValue( 1 );

  final String text = typeRegistry.convertToText( textType1, textValue1 );

  String regex = typeRegistry.convertToText( textType2, textValue2 );

  // replace any * or % with .*
  regex = regex.replaceAll( "\\*", ".*" ).replaceAll( "%", ".*" );

  Pattern p = Pattern.compile( regex );
  Matcher m = p.matcher( text );

  return m.find() ? RETURN_TRUE : RETURN_FALSE;
}
 
示例26
public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters )
  throws EvaluationException {
  final int length = parameters.getParameterCount();
  if ( length < 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();
  final Object value1Raw = parameters.getValue( 0 );
  final Type type1 = parameters.getType( 0 );
  for ( int i = 1; i < parameters.getParameterCount(); i++ ) {
    final Object value2Raw = parameters.getValue( i );
    if ( value1Raw == null || value2Raw == null ) {
      throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_NA_VALUE );
    }

    final Type type2 = parameters.getType( i );
    final ExtendedComparator comparator = typeRegistry.getComparator( type1, type2 );
    final boolean result = comparator.isEqual( type1, value1Raw, type2, value2Raw );
    if ( result ) {
      return RETURN_TRUE;
    }
  }
  return RETURN_FALSE;
}
 
示例27
public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters )
  throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw new EvaluationException( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type textType1 = parameters.getType( 0 );
  final Object textValue1 = parameters.getValue( 0 );
  final Type textType2 = parameters.getType( 1 );
  final Object textValue2 = parameters.getValue( 1 );

  final String text = typeRegistry.convertToText( textType1, textValue1 );
  final String substring = typeRegistry.convertToText( textType2, textValue2 );

  return text.endsWith( substring ) ? RETURN_TRUE : RETURN_FALSE;
}
 
示例28
public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters )
  throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();

  if ( parameterCount == 0 ) {
    return new TypeValuePair( NumberType.GENERIC_NUMBER, BigDecimal.ZERO );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();
  BigDecimal last = null;
  for ( int paramIdx = 0; paramIdx < parameterCount; paramIdx++ ) {
    final Type type = parameters.getType( paramIdx );
    final Object value = parameters.getValue( paramIdx );
    final Sequence sequence = typeRegistry.convertToNumberSequence( type, value, isStrictSequenceNeeded() );

    while ( sequence.hasNext() ) {
      final LValue rawValue = sequence.nextRawValue();
      if ( rawValue == null ) {
        throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
      }
      final TypeValuePair nextValue = rawValue.evaluate();
      final Number number = typeRegistry.convertToNumber( nextValue.getType(), nextValue.getValue() );
      final BigDecimal next = NumberUtil.getAsBigDecimal( number );

      if ( last == null || last.compareTo( next ) > 0 ) {
        last = next;
      }
    }
  }

  if ( last == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  return new TypeValuePair( NumberType.GENERIC_NUMBER, last );
}
 
示例29
public TypeValuePair evaluate( final FormulaContext context,
                               final ParameterCallback parameters ) throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();

  if ( parameterCount == 0 ) {
    return new TypeValuePair( NumberType.GENERIC_NUMBER, BigDecimal.ZERO );
  }

  final TypeRegistry typeRegistry = context.getTypeRegistry();
  BigDecimal last = null;
  for ( int paramIdx = 0; paramIdx < parameterCount; paramIdx++ ) {
    final Type type = parameters.getType( paramIdx );
    final Object value = parameters.getValue( paramIdx );
    final Sequence sequence = typeRegistry.convertToNumberSequence( type, value, isStrictSequenceNeeded() );

    while ( sequence.hasNext() ) {
      final LValue rawValue = sequence.nextRawValue();
      if ( rawValue == null ) {
        throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
      }
      final TypeValuePair nextValue = rawValue.evaluate();
      final Number number = typeRegistry.convertToNumber( nextValue.getType(), nextValue.getValue() );
      final BigDecimal next = NumberUtil.getAsBigDecimal( number );

      if ( last == null || last.compareTo( next ) < 0 ) {
        last = next;
      }
    }
  }

  if ( last == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  return new TypeValuePair( NumberType.GENERIC_NUMBER, last );
}
 
示例30
public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters )
  throws EvaluationException {
  final int parameterCount = parameters.getParameterCount();
  if ( parameterCount != 2 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE );
  }
  final TypeRegistry typeRegistry = context.getTypeRegistry();

  final Type type1 = parameters.getType( 0 );
  final Object value1 = parameters.getValue( 0 );
  final Number number1 = typeRegistry.convertToNumber( type1, value1 );
  if ( number1 == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }
  final BigDecimal divided = NumberUtil.getAsBigDecimal( number1 );

  final Type type2 = parameters.getType( 1 );
  final Object value2 = parameters.getValue( 1 );
  final Number number2 = typeRegistry.convertToNumber( type2, value2 );
  if ( number2 == null ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE );
  }

  final BigDecimal divisor = NumberUtil.getAsBigDecimal( number2 );
  if ( divisor.signum() == 0 ) {
    throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARITHMETIC_VALUE );
  }

  final BigDecimal divide = new BigDecimal( divided.divide( divisor, 0, BigDecimal.ROUND_FLOOR ).toString() );
  BigDecimal reminder = divided.subtract( divisor.multiply( divide ) );
  if ( divide.signum() == 0 ) {
    if ( ( divided.signum() == -1 && divisor.signum() != -1 ) || ( divisor.signum() == -1
      && divided.signum() != -1 ) ) {
      reminder = divided.add( divisor );
    }
  }

  return new TypeValuePair( NumberType.GENERIC_NUMBER, reminder );
}