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;
}
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");
}
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 + ")");
}
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);
}
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");
}
Aggregations