package interdroid.swan.swansong; /** * An enumeration which represents UnaryLogicalOperators. * * @author nick <palmer@cs.vu.nl> * */ public enum UnaryLogicOperator implements ParseableEnum<UnaryLogicOperator>, LogicOperator { /** Logical NOT. */ NOT(0, "!"); /** The converted value of this value. */ private int mValue; /** The string version of the enum. */ private String mName; /** * Construct a UnaryLogical Operator. * * @param value * the converted value. * @param name * the name of the operator. */ private UnaryLogicOperator(final int value, final String name) { mValue = value; mName = name; } @Override public int convert() { return mValue; } @Override public UnaryLogicOperator convertInt(final int val) { UnaryLogicOperator ret = null; for (UnaryLogicOperator op : UnaryLogicOperator.values()) { if (op.convert() == val) { ret = op; break; } } return ret; } /** * Parses and returns a UnaryLogicOperator. * * @param val * the string to parse * @return the corresponding UnaryLogicOperator */ public UnaryLogicOperator parseString(final String val) { UnaryLogicOperator ret = null; for (UnaryLogicOperator op : UnaryLogicOperator.values()) { if (op.toParseString().equals(val)) { ret = op; break; } } return ret; } /** * Parse a string and return the value. * * @param value * the value to parse * @return the enum which matches the string. */ public static UnaryLogicOperator parse(final String value) { return NOT.parseString(value); } /** * Converts a persisted int to the matching enumeration value. * * @param value * the value to get the enumeration for * @return the enumeration matching this value */ public static UnaryLogicOperator convert(final int value) { return NOT.convertInt(value); } @Override public String toString() { return mName; } @Override public String toParseString() { return mName; } @Override public TriState operate(TriState first, TriState last) { // ignore last result, this is a unary operation if (mValue == 0) { // NOT if (first == TriState.TRUE) { return TriState.FALSE; } else if (first == TriState.FALSE) { return TriState.TRUE; } else { return TriState.UNDEFINED; } } else { return TriState.UNDEFINED; } } }