package org.jtwig.value.convert.bool;
import org.jtwig.value.Undefined;
import org.jtwig.value.convert.Converter;
import java.util.Map;
public class BooleanConverter implements Converter<Boolean> {
public static final String TRUE = "true";
public static final String FALSE = "false";
@Override
public Result<Boolean> convert(Object object) {
if (object == null) return Result.defined(false);
if (object == Undefined.UNDEFINED) return Result.defined(false);
if (object instanceof Boolean) return Result.defined((Boolean) object);
if (object instanceof String) {
if (TRUE.equals(object)) {
return Result.defined(true);
} else if (FALSE.equals(object)) {
return Result.defined(false);
}
}
if (object.getClass().isArray()) {
return Result.defined(((Object[]) object).length > 0);
} else if (object instanceof Iterable) {
return Result.defined(((Iterable) object).iterator().hasNext());
} else if (object instanceof Map) {
return Result.defined(((Map) object).size() > 0);
} else if (object instanceof Number) {
return Result.defined(((Number) object).intValue() != 0);
}
return Result.undefined();
}
}