package fr.openwide.core.commons.util.functional.converter; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Converter; public class StringBooleanConverter extends Converter<String, Boolean> { private static final StringBooleanConverter INSTANCE = new StringBooleanConverter(); private static final Set<String> trueValues = new HashSet<String>(4); private static final Set<String> falseValues = new HashSet<String>(4); static { trueValues.add("true"); trueValues.add("on"); trueValues.add("yes"); trueValues.add("1"); falseValues.add("false"); falseValues.add("off"); falseValues.add("no"); falseValues.add("0"); } public static StringBooleanConverter get() { return INSTANCE; } protected StringBooleanConverter() { } @Override protected Boolean doForward(String a) { String value = StringUtils.lowerCase(StringUtils.trim(a)); if (trueValues.contains(value)) { return Boolean.TRUE; } else if (falseValues.contains(value)) { return Boolean.FALSE; } else { throw new IllegalArgumentException("Invalid boolean value '" + a + "'"); } } @Override protected String doBackward(Boolean b) { return b.toString(); } /** * Workaround sonar/findbugs - https://github.com/google/guava/issues/1858 * Guava Converter overrides only equals to add javadoc, but findbugs warns about non coherent equals/hashcode * possible issue. */ @Override public boolean equals(Object object) { return super.equals(object); } /** * Workaround sonar/findbugs - see #equals(Object) */ @Override public int hashCode() { return super.hashCode(); } }