package com.lyndir.omicron.api.util; import javax.annotation.Nullable; /** * @author lhunath, 2013-08-17 */ public interface Maybool { boolean isTrue(); boolean isKnown(); static Maybool yes() { return Value.YES; } static Maybool no() { return Value.NO; } static Maybool unknown() { return Value.UNKNOWN; } /** * @return YES if value is true, NO if value is false. */ static Maybool from(final boolean value) { return value? yes(): no(); } /** * @return UNKNOWN if value is null, YES if value is true, NO if value is false. */ static Maybool fromNullable(@Nullable final Boolean value) { return value == null? unknown(): value? yes(): no(); } enum Value implements Maybool { YES { @Override public boolean isTrue() { return true; } @Override public boolean isKnown() { return true; } }, NO { @Override public boolean isTrue() { return false; } @Override public boolean isKnown() { return true; } }, UNKNOWN { @Override public boolean isTrue() { return false; } @Override public boolean isKnown() { return false; } } } }