package gueei.binding.converters;
import gueei.binding.Converter;
import gueei.binding.IObservable;
/**
* Converter to perform logical OR operation.
* It allows 1 or more arguments, if any argument is true, then it will be true. <br/>
* Return false only if all arguments are false
*
* @usage arg arg ...
*
* @arg arg boolean
*
* @return boolean
*/
public class OR extends Converter<Boolean> {
public OR(IObservable<?>[] dependents) {
super(Boolean.class, dependents);
}
@Override
public boolean ConvertBack(Object value, Object[] outResult) {
if ((!(value instanceof Boolean)) || (outResult.length<1)) return false;
outResult[0] = !((Boolean)value);
return true;
}
@Override
public Boolean calculateValue(Object... args) throws Exception {
if (args.length<1) return true;
int argLen = args.length;
for(int i=0; i<argLen; i++){
if (isTrue(args[i])) return true;
}
return false;
}
private boolean isTrue(Object item){
if (item instanceof Boolean)
return ((Boolean)item);
else if (item instanceof Number)
return item.equals(0);
else return item == null;
}
}