class Types {

	public static boolean toBoolean(TemplateContext ctx, Object o) {
		if (o == null) {
			return false;
		}

		if (o instanceof Boolean) {
			return (Boolean) o;
		}

		if (o instanceof Number) {
			double d = ((Number) o).doubleValue();
			return !Double.isNaN(d) && d != 0;
		}

		if (o instanceof Collection<?>) {
			return !((Collection<?>) o).isEmpty();
		}

		if (o instanceof Map<?, ?>) {
			return !((Map<?, ?>) o).isEmpty();
		}

		if (Types.isString(ctx, o)) {
			return !StringUtils.isEmpty(Types.toString(ctx, o));
		}

		return true;
	}

	private  Types();

}