/**
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
*/
package org.diirt.datasource.formula.vnumber;
import java.util.Arrays;
import java.util.List;
import org.diirt.datasource.formula.FormulaFunction;
import org.diirt.vtype.VBoolean;
/**
* Implementation for ?: operator.
*
* @author carcassi
*/
class ConditionalOperatorFormulaFunction implements FormulaFunction {
@Override
public String getName() {
return "?:";
}
@Override
public String getDescription() {
return "Conditional operator";
}
@Override
public boolean isPure() {
return true;
}
@Override
public boolean isVarArgs() {
return false;
}
@Override
public List<Class<?>> getArgumentTypes() {
return Arrays.<Class<?>>asList(VBoolean.class, Object.class, Object.class);
}
@Override
public List<String> getArgumentNames() {
return Arrays.asList("condition", "valueIfTrue", "valueIfFalse");
}
@Override
public Class<?> getReturnType() {
return VBoolean.class;
}
@Override
public Object calculate(List<Object> args) {
// Convert arguments to actual types
VBoolean condition = (VBoolean) args.get(0);
// Handle null case
if (condition == null) {
return null;
}
// Select return based on value
Object value;
if (condition.getValue()) {
value = args.get(1);
} else {
value = args.get(2);
}
return value;
}
}