Search in sources :

Example 1 with TMLExpressionException

use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.

the class ASTMulNode method interpret.

private Operand interpret(Operand ao, Operand bo) {
    Object a = ao.value;
    Object b = bo.value;
    if (a instanceof Integer) {
        int inta = (Integer) a;
        if (b instanceof Integer) {
            return Operand.ofInteger(inta * (Integer) b);
        } else if (b instanceof Long) {
            return Operand.ofLong(inta * (Long) b);
        } else if (b instanceof Double) {
            return Operand.ofFloat(inta * (Double) b);
        }
    } else if (a instanceof Long) {
        long longa = (Long) a;
        if (b instanceof Integer) {
            return Operand.ofLong(longa * (Integer) b);
        } else if (b instanceof Long) {
            return Operand.ofLong(longa * (Long) b);
        } else if (b instanceof Double) {
            return Operand.ofFloat(longa * (Double) b);
        }
    } else if (a instanceof Double) {
        double doublea = (Double) a;
        if (b instanceof Integer) {
            return Operand.ofFloat(doublea * (Integer) b);
        } else if (b instanceof Long) {
            return Operand.ofFloat(doublea * (Long) b);
        } else if (b instanceof Double) {
            return Operand.ofFloat(doublea * (Double) b);
        }
    } else if (a instanceof Money || b instanceof Money) {
        return Operand.ofMoney(new Money(Utils.getDoubleValue(a) * Utils.getDoubleValue(b)));
    } else if (a instanceof Percentage || b instanceof Percentage) {
        return Operand.ofPercentage(new Percentage(Utils.getDoubleValue(a) * Utils.getDoubleValue(b)));
    } else if ((a instanceof String) || (b instanceof String)) {
        throw new TMLExpressionException("Multiplication not defined for String values");
    }
    return Operand.NULL;
}
Also used : Money(com.dexels.navajo.document.types.Money) Percentage(com.dexels.navajo.document.types.Percentage) TMLExpressionException(com.dexels.navajo.expression.api.TMLExpressionException)

Example 2 with TMLExpressionException

use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.

the class ASTSubtractNode method interpret.

private final Operand interpret(Operand ao, Operand bo, String expression) {
    Object a = ao.value;
    Object b = bo.value;
    if (!(a instanceof ArrayList || b instanceof ArrayList)) {
        return Operand.ofDynamic(Utils.subtract(a, b, expression));
    } else if ((a instanceof ArrayList) && !(b instanceof ArrayList)) {
        ArrayList list = (ArrayList) a;
        ArrayList result = new ArrayList();
        for (int i = 0; i < list.size(); i++) {
            Object val = list.get(i);
            Object rel = Utils.subtract(val, b, expression);
            result.add(rel);
        }
        return Operand.ofList(result);
    } else if ((b instanceof ArrayList) && !(a instanceof ArrayList)) {
        ArrayList list = (ArrayList) b;
        ArrayList result = new ArrayList();
        for (int i = 0; i < list.size(); i++) {
            Object val = list.get(i);
            Object rel = Utils.subtract(a, val, expression);
            result.add(rel);
        }
        return Operand.ofList(result);
    } else if (a instanceof ArrayList && b instanceof ArrayList) {
        ArrayList list1 = (ArrayList) a;
        ArrayList list2 = (ArrayList) b;
        if (list1.size() != list2.size()) {
            throw new TMLExpressionException("Can only subtract lists of equals length. Lengths found: " + list1.size() + " and " + list2.size() + " expression: " + expression);
        }
        ArrayList result = new ArrayList();
        for (int i = 0; i < list1.size(); i++) {
            Object val1 = list1.get(i);
            Object val2 = list2.get(i);
            Object rel = Utils.subtract(val1, val2, expression);
            result.add(rel);
        }
        return Operand.ofList(result);
    }
    throw new TMLExpressionException("Unknown type");
}
Also used : ArrayList(java.util.ArrayList) TMLExpressionException(com.dexels.navajo.expression.api.TMLExpressionException)

Example 3 with TMLExpressionException

use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.

the class Utils method compareDates.

public static final boolean compareDates(Object a, Object b, String compareChar) {
    if (b instanceof Integer) {
        int offset = ((Integer) b).intValue();
        Calendar cal = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        Date today = new Date();
        cal.setTime(today);
        cal.add(Calendar.YEAR, -offset);
        cal2.setTime((Date) a);
        today = cal.getTime();
        if (compareChar.equals("==")) {
            return (compare(cal.get(Calendar.YEAR), cal2.get(Calendar.YEAR), compareChar));
        } else {
            return (compare(today, (Date) a, compareChar));
        }
    } else if (b instanceof Date) {
        return (compare((Date) a, (Date) b, compareChar));
    } else if (b instanceof ClockTime) {
        return (compare(((ClockTime) a).dateValue(), ((ClockTime) b).dateValue(), compareChar));
    } else if (b == null) {
        if (compareChar.equals("==")) {
            return a == null;
        } else {
            return a != null;
        }
    }
    throw new TMLExpressionException("Invalid date comparison (a =" + a + ", b = " + b + ")");
}
Also used : Calendar(java.util.Calendar) ClockTime(com.dexels.navajo.document.types.ClockTime) TMLExpressionException(com.dexels.navajo.expression.api.TMLExpressionException) Date(java.util.Date)

Example 4 with TMLExpressionException

use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.

the class Utils method add.

/**
 * Generic method to add two objects.
 */
public static final Object add(Object a, Object b, String expression) {
    if ((a == null) && (b == null)) {
        return null;
    } else if (a == null) {
        return b;
    } else if (b == null) {
        return a;
    }
    if ((a instanceof String) || (b instanceof String)) {
        String sA = Utils.getStringValue(a);
        String sB = Utils.getStringValue(b);
        return sA + sB;
    } else if ((a instanceof DatePattern || a instanceof Date) && (b instanceof DatePattern || b instanceof Date)) {
        DatePattern dp1 = null;
        DatePattern dp2 = null;
        if (a instanceof Date) {
            dp1 = DatePattern.parseDatePattern((Date) a);
        } else {
            dp1 = (DatePattern) a;
        }
        if (b instanceof Date) {
            dp2 = DatePattern.parseDatePattern((Date) b);
        } else {
            dp2 = (DatePattern) b;
        }
        dp1.add(dp2);
        return dp1.getDate();
    } else if ((a instanceof Money) || (b instanceof Money)) {
        if (!(a instanceof Money || a instanceof Integer || a instanceof Long || a instanceof Double))
            throw new TMLExpressionException("Invalid argument for operation: " + a.getClass() + ", expression: " + expression);
        if (!(b instanceof Money || b instanceof Integer || b instanceof Long || b instanceof Double))
            throw new TMLExpressionException("Invalid argument for operation: " + b.getClass() + ", expression: " + expression);
        Money arg1 = (a instanceof Money ? (Money) a : new Money(a));
        Money arg2 = (b instanceof Money ? (Money) b : new Money(b));
        return new Money(arg1.doubleValue() + arg2.doubleValue());
    } else if ((a instanceof Percentage) || (b instanceof Percentage)) {
        if (!(a instanceof Percentage || a instanceof Integer || a instanceof Long || a instanceof Double))
            throw new TMLExpressionException("Invalid argument for operation: " + a.getClass() + ", expression: " + expression);
        if (!(b instanceof Percentage || b instanceof Integer || b instanceof Long || b instanceof Double))
            throw new TMLExpressionException("Invalid argument for operation: " + b.getClass() + ", expression: " + expression);
        Percentage arg1 = (a instanceof Percentage ? (Percentage) a : new Percentage(a));
        Percentage arg2 = (b instanceof Percentage ? (Percentage) b : new Percentage(b));
        return new Percentage(arg1.doubleValue() + arg2.doubleValue());
    } else if ((a instanceof ClockTime && b instanceof DatePattern)) {
        DatePattern dp1 = DatePattern.parseDatePattern(((ClockTime) a).dateValue());
        DatePattern dp2 = (DatePattern) b;
        dp1.add(dp2);
        return new ClockTime(dp1.getDate());
    } else if ((b instanceof ClockTime && a instanceof DatePattern)) {
        DatePattern dp1 = DatePattern.parseDatePattern(((ClockTime) b).dateValue());
        DatePattern dp2 = (DatePattern) a;
        dp1.add(dp2);
        return new ClockTime(dp1.getDate());
    } else if ((a instanceof ClockTime && b instanceof ClockTime)) {
        DatePattern dp1 = DatePattern.parseDatePattern(((ClockTime) a).dateValue());
        DatePattern dp2 = DatePattern.parseDatePattern(((ClockTime) b).dateValue());
        dp1.add(dp2);
        return new ClockTime(dp1.getDate());
    } else if ((a instanceof Boolean && b instanceof Boolean)) {
        Boolean ba = (Boolean) a;
        Boolean bb = (Boolean) b;
        return Integer.valueOf((ba.booleanValue() ? 1 : 0) + (bb.booleanValue() ? 1 : 0));
    } else if (a instanceof Integer) {
        int inta = (Integer) a;
        if (b instanceof Integer) {
            return inta + (Integer) b;
        } else if (b instanceof Long) {
            return inta + (Long) b;
        } else if (b instanceof Double) {
            return inta + (Double) b;
        }
    } else if (a instanceof Long) {
        long longa = (Long) a;
        if (b instanceof Integer) {
            return longa + (Integer) b;
        } else if (b instanceof Long) {
            return longa + (Long) b;
        } else if (b instanceof Double) {
            return longa + (Double) b;
        }
    } else if (a instanceof Double) {
        double doublea = (Double) a;
        if (b instanceof Integer) {
            return doublea + (Integer) b;
        } else if (b instanceof Long) {
            return doublea + (Long) b;
        } else if (b instanceof Double) {
            return doublea + (Double) b;
        }
    }
    throw new TMLExpressionException("Addition: Unknown type. " + " expression: " + expression);
}
Also used : Percentage(com.dexels.navajo.document.types.Percentage) TMLExpressionException(com.dexels.navajo.expression.api.TMLExpressionException) ClockTime(com.dexels.navajo.document.types.ClockTime) Date(java.util.Date) Money(com.dexels.navajo.document.types.Money) DatePattern(com.dexels.navajo.document.types.DatePattern)

Example 5 with TMLExpressionException

use of com.dexels.navajo.expression.api.TMLExpressionException in project navajo by Dexels.

the class ASTAddNode method interpret.

private final Operand interpret(Operand ao, Operand bo, String expression) {
    Object a = ao.value;
    Object b = bo.value;
    if (!(a instanceof ArrayList || b instanceof ArrayList)) {
        return Operand.ofDynamic(Utils.add(a, b, expression));
    } else if ((a instanceof List) && !(b instanceof List)) {
        List list = (List) a;
        List result = new ArrayList();
        for (int i = 0; i < list.size(); i++) {
            Object val = list.get(i);
            Object rel = Utils.add(val, b, expression);
            result.add(rel);
        }
        return Operand.ofList(result);
    } else if ((b instanceof ArrayList) && !(a instanceof ArrayList)) {
        ArrayList list = (ArrayList) b;
        ArrayList result = new ArrayList();
        for (int i = 0; i < list.size(); i++) {
            Object val = list.get(i);
            Object rel = Utils.add(a, val, expression);
            result.add(rel);
        }
        return Operand.ofList(result);
    } else if (a instanceof ArrayList && b instanceof ArrayList) {
        ArrayList list1 = (ArrayList) a;
        ArrayList list2 = (ArrayList) b;
        if (list1.size() != list2.size()) {
            throw new TMLExpressionException("Can only add lists of equals length. Lengths found: " + list1.size() + " and " + list2.size() + " expression: " + expression);
        }
        ArrayList result = new ArrayList();
        for (int i = 0; i < list1.size(); i++) {
            Object val1 = list1.get(i);
            Object val2 = list2.get(i);
            Object rel = Utils.add(val1, val2, expression);
            result.add(rel);
        }
        return Operand.ofList(result);
    }
    throw new TMLExpressionException("Unknown type");
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) ArrayList(java.util.ArrayList) TMLExpressionException(com.dexels.navajo.expression.api.TMLExpressionException)

Aggregations

TMLExpressionException (com.dexels.navajo.expression.api.TMLExpressionException)129 Message (com.dexels.navajo.document.Message)26 Navajo (com.dexels.navajo.document.Navajo)26 Binary (com.dexels.navajo.document.types.Binary)23 Property (com.dexels.navajo.document.Property)17 ArrayList (java.util.ArrayList)16 Operand (com.dexels.navajo.document.Operand)15 List (java.util.List)13 NavajoException (com.dexels.navajo.document.NavajoException)12 IOException (java.io.IOException)12 Selection (com.dexels.navajo.document.Selection)11 Access (com.dexels.navajo.script.api.Access)10 Calendar (java.util.Calendar)10 ContextExpression (com.dexels.navajo.expression.api.ContextExpression)9 Test (org.junit.Test)9 Money (com.dexels.navajo.document.types.Money)8 SystemException (com.dexels.navajo.script.api.SystemException)8 StringTokenizer (java.util.StringTokenizer)8 ImmutableMessage (com.dexels.immutable.api.ImmutableMessage)7 ClockTime (com.dexels.navajo.document.types.ClockTime)7