com.aspose.words
Interface IComparisonExpressionEvaluator


public interface IComparisonExpressionEvaluator 

When implemented, allows to override default comparison expressions evaluation for the FieldIf and FieldCompare fields.

Example:

Shows how to implement custom evaluation for the IF and COMPARE fields.
public void conditionEvaluationExtensionPoint(String fieldCode, byte comparisonResult, String comparisonError,
                                              String expectedResult) throws Exception {
    final String LEFT = "\"left expression\"";
    final String _OPERATOR = "<>";
    final String RIGHT = "\"right expression\"";

    DocumentBuilder builder = new DocumentBuilder();

    // Field codes that we use in this example:
    // 1.   " IF %s %s %s \"true argument\" \"false argument\" ".
    // 2.   " COMPARE %s %s %s ".
    Field field = builder.insertField(String.format(fieldCode, LEFT, _OPERATOR, RIGHT), null);

    // If the "comparisonResult" is undefined, we create "ComparisonEvaluationResult" with string, instead of bool.
    ComparisonEvaluationResult result = comparisonResult != -1
            ? new ComparisonEvaluationResult(comparisonResult == 1)
            : comparisonError != null ? new ComparisonEvaluationResult(comparisonError) : null;

    ComparisonExpressionEvaluator evaluator = new ComparisonExpressionEvaluator(result);
    builder.getDocument().getFieldOptions().setComparisonExpressionEvaluator(evaluator);

    builder.getDocument().updateFields();

    Assert.assertEquals(expectedResult, field.getResult());
    evaluator.assertInvocationsCount(1).assertInvocationArguments(0, LEFT, _OPERATOR, RIGHT);
}

public static Object[][] conditionEvaluationExtensionPointDataProvider() {
    return new Object[][]
            {
                    {" IF %s %s %s \"true argument\" \"false argument\" ", (byte) 1, null, "true argument"},
                    {" IF %s %s %s \"true argument\" \"false argument\" ", (byte) 0, null, "false argument"},
                    {" IF %s %s %s \"true argument\" \"false argument\" ", (byte) -1, "Custom Error", "Custom Error"},
                    {" IF %s %s %s \"true argument\" \"false argument\" ", (byte) -1, null, "true argument"},
                    {" COMPARE %s %s %s ", (byte) 1, null, "1"},
                    {" COMPARE %s %s %s ", (byte) 0, null, "0"},
                    {" COMPARE %s %s %s ", (byte) -1, "Custom Error", "Custom Error"},
                    {" COMPARE %s %s %s ", (byte) -1, null, "1"},
            };
}

/// <summary>
/// Comparison expressions evaluation for the FieldIf and FieldCompare.
/// </summary>
private static class ComparisonExpressionEvaluator implements IComparisonExpressionEvaluator {
    public ComparisonExpressionEvaluator(ComparisonEvaluationResult result) {
        mResult = result;
    }

    public ComparisonEvaluationResult evaluate(Field field, ComparisonExpression expression) {
        mInvocations.add(new String[]
                {
                        expression.getLeftExpression(),
                        expression.getComparisonOperator(),
                        expression.getRightExpression()
                });

        return mResult;
    }

    public ComparisonExpressionEvaluator assertInvocationsCount(int expected) {
        Assert.assertEquals(expected, mInvocations.size());
        return this;
    }

    public ComparisonExpressionEvaluator assertInvocationArguments(
            int invocationIndex,
            String expectedLeftExpression,
            String expectedComparisonOperator,
            String expectedRightExpression) {
        String[] arguments = mInvocations.get(invocationIndex);

        Assert.assertEquals(expectedLeftExpression, arguments[0]);
        Assert.assertEquals(expectedComparisonOperator, arguments[1]);
        Assert.assertEquals(expectedRightExpression, arguments[2]);

        return this;
    }

    private final ComparisonEvaluationResult mResult;
    private final ArrayList<String[]> mInvocations = new ArrayList<>();
}
See Also:
FieldOptions.ComparisonExpressionEvaluator

Method Summary
abstract ComparisonEvaluationResultevaluate(Field field, ComparisonExpression expression)
           Evaluates comparison expression.
 

Method Detail

evaluate

public abstract ComparisonEvaluationResult evaluate(Field field, ComparisonExpression expression)
Evaluates comparison expression. The implementation should return null to indicate that the default evaluation should be performed.

Example:

Shows how to implement custom evaluation for the IF and COMPARE fields.
public void conditionEvaluationExtensionPoint(String fieldCode, byte comparisonResult, String comparisonError,
                                              String expectedResult) throws Exception {
    final String LEFT = "\"left expression\"";
    final String _OPERATOR = "<>";
    final String RIGHT = "\"right expression\"";

    DocumentBuilder builder = new DocumentBuilder();

    // Field codes that we use in this example:
    // 1.   " IF %s %s %s \"true argument\" \"false argument\" ".
    // 2.   " COMPARE %s %s %s ".
    Field field = builder.insertField(String.format(fieldCode, LEFT, _OPERATOR, RIGHT), null);

    // If the "comparisonResult" is undefined, we create "ComparisonEvaluationResult" with string, instead of bool.
    ComparisonEvaluationResult result = comparisonResult != -1
            ? new ComparisonEvaluationResult(comparisonResult == 1)
            : comparisonError != null ? new ComparisonEvaluationResult(comparisonError) : null;

    ComparisonExpressionEvaluator evaluator = new ComparisonExpressionEvaluator(result);
    builder.getDocument().getFieldOptions().setComparisonExpressionEvaluator(evaluator);

    builder.getDocument().updateFields();

    Assert.assertEquals(expectedResult, field.getResult());
    evaluator.assertInvocationsCount(1).assertInvocationArguments(0, LEFT, _OPERATOR, RIGHT);
}

public static Object[][] conditionEvaluationExtensionPointDataProvider() {
    return new Object[][]
            {
                    {" IF %s %s %s \"true argument\" \"false argument\" ", (byte) 1, null, "true argument"},
                    {" IF %s %s %s \"true argument\" \"false argument\" ", (byte) 0, null, "false argument"},
                    {" IF %s %s %s \"true argument\" \"false argument\" ", (byte) -1, "Custom Error", "Custom Error"},
                    {" IF %s %s %s \"true argument\" \"false argument\" ", (byte) -1, null, "true argument"},
                    {" COMPARE %s %s %s ", (byte) 1, null, "1"},
                    {" COMPARE %s %s %s ", (byte) 0, null, "0"},
                    {" COMPARE %s %s %s ", (byte) -1, "Custom Error", "Custom Error"},
                    {" COMPARE %s %s %s ", (byte) -1, null, "1"},
            };
}

/// <summary>
/// Comparison expressions evaluation for the FieldIf and FieldCompare.
/// </summary>
private static class ComparisonExpressionEvaluator implements IComparisonExpressionEvaluator {
    public ComparisonExpressionEvaluator(ComparisonEvaluationResult result) {
        mResult = result;
    }

    public ComparisonEvaluationResult evaluate(Field field, ComparisonExpression expression) {
        mInvocations.add(new String[]
                {
                        expression.getLeftExpression(),
                        expression.getComparisonOperator(),
                        expression.getRightExpression()
                });

        return mResult;
    }

    public ComparisonExpressionEvaluator assertInvocationsCount(int expected) {
        Assert.assertEquals(expected, mInvocations.size());
        return this;
    }

    public ComparisonExpressionEvaluator assertInvocationArguments(
            int invocationIndex,
            String expectedLeftExpression,
            String expectedComparisonOperator,
            String expectedRightExpression) {
        String[] arguments = mInvocations.get(invocationIndex);

        Assert.assertEquals(expectedLeftExpression, arguments[0]);
        Assert.assertEquals(expectedComparisonOperator, arguments[1]);
        Assert.assertEquals(expectedRightExpression, arguments[2]);

        return this;
    }

    private final ComparisonEvaluationResult mResult;
    private final ArrayList<String[]> mInvocations = new ArrayList<>();
}

See Also:
          Aspose.Words Documentation - the home page for the Aspose.Words Product Documentation.
          Aspose.Words Support Forum - our preferred method of support.