package com.hubspot.jinjava.el.ext;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import de.odysseus.el.misc.NumberOperations;
import de.odysseus.el.misc.TypeConverter;
import de.odysseus.el.tree.impl.ast.AstBinary;
public class AdditionOperator extends AstBinary.SimpleOperator {
@SuppressWarnings("unchecked")
@Override
protected Object apply(TypeConverter converter, Object o1, Object o2) {
if (o1 instanceof Collection) {
List<Object> result = new ArrayList<>((Collection<Object>) o1);
if (o2 instanceof Collection) {
result.addAll((Collection<Object>) o2);
}
else {
result.add(o2);
}
return result;
}
else if (o1 instanceof Map && o2 instanceof Map) {
Map<Object, Object> result = new HashMap<>((Map<Object, Object>) o1);
result.putAll((Map<Object, Object>) o2);
return result;
}
if (o1 instanceof String || o2 instanceof String) {
return Objects.toString(o1).concat(Objects.toString(o2));
}
return NumberOperations.add(converter, o1, o2);
}
public static final AdditionOperator OP = new AdditionOperator();
}