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 );
}