break;
    public int compare(AbstractConstraint obj) {        if (obj instanceof Constraint) {            Constraint objC = (Constraint) obj;            // This is a normal constraint object.            switch (operation) {                case EQ:                    switch (objC.operation) {                        case EQ:                            if (left.equals(objC.left)) {                                return (right.equals(objC.right) ? EQUAL                                        : (right.notEqualTo(objC.right) ? EXCLUDES : INDEPENDENT));                            } else if (left.equals(objC.right)) {                                return (right.equals(objC.left) ? EQUAL                                        : (right.notEqualTo(objC.left) ? EXCLUDES : INDEPENDENT));                            } else if (right.equals(objC.left)) {                                return (left.notEqualTo(objC.right) ? EXCLUDES : INDEPENDENT);                            } else if (right.equals(objC.right)) {                                return (left.notEqualTo(objC.left) ? EXCLUDES : INDEPENDENT);                            } else {                                return INDEPENDENT;                            }                        case LT:                            if (left.equals(objC.left)) {                                return (right.lessThan(objC.right) ? IMPLIES                                        : (right.greaterOrEqual(objC.right) ? EXCLUDES                                            : INDEPENDENT));                            } else if (left.equals(objC.right)) {                                return (right.greaterThan(objC.left) ? IMPLIES                                        : (right.lessOrEqual(objC.left) ? EXCLUDES : INDEPENDENT));                            } else if (right.equals(objC.left)) {                                return (left.lessThan(objC.right) ? IMPLIES                                        : (left.greaterOrEqual(objC.right) ? EXCLUDES                                            : INDEPENDENT));                            } else if (right.equals(objC.right)) {                                return (left.greaterThan(objC.left) ? IMPLIES                                        : (left.lessOrEqual(objC.left) ? EXCLUDES : INDEPENDENT));                            } else {                                return INDEPENDENT;                            }                        case LIKE:                            return INDEPENDENT;                    }                    break;                case LT:                    switch (objC.operation) {                        case EQ:                            if (left.equals(objC.left)) {                                return (objC.right.lessThan(right) ? IMPLIED_BY                                        : (objC.right.greaterOrEqual(right) ? EXCLUDES                                            : INDEPENDENT));                            } else if (left.equals(objC.right)) {                                return (objC.left.lessThan(right) ? IMPLIED_BY                                        : (objC.left.greaterOrEqual(right) ? EXCLUDES                                            : INDEPENDENT));                            } else if (right.equals(objC.left)) {                                return (objC.right.greaterThan(left) ? IMPLIED_BY                                        : (objC.right.lessOrEqual(left) ? EXCLUDES : INDEPENDENT));                            } else if (right.equals(objC.right)) {                                return (objC.left.greaterThan(left) ? IMPLIED_BY                                        : (objC.left.lessOrEqual(left) ? EXCLUDES : INDEPENDENT));                            } else {                                return INDEPENDENT;                            }                        case LT:                            if (left.equals(objC.left)) {                                if (right.equals(objC.right)) {                                    return EQUAL;                                } else if (right.lessThan(objC.right)) {                                    return IMPLIES;                                } else if (right.greaterThan(objC.right)) {                                    return IMPLIED_BY;                                } else {                                    return INDEPENDENT;                                }                            } else if (left.equals(objC.right)) {                                if (right.equals(objC.left)                                        || right.lessThan(objC.left)) {                                    return EXCLUDES;                                } else if (right.greaterThan(objC.left)) {                                    return OR;                                } else {                                    return INDEPENDENT;                                }                            } else if (right.equals(objC.left)) {                                if (left.equals(objC.right)                                        || left.greaterThan(objC.right)) {                                    return EXCLUDES;                                } else if (left.lessThan(objC.right)) {                                    return OR;                                } else {                                    return INDEPENDENT;                                }                            } else if (right.equals(objC.right)) {                                if (left.equals(objC.left)) {                                    return EQUAL;                                } else if (left.greaterThan(objC.left)) {                                    return IMPLIES;                                } else if (left.lessThan(objC.left)) {                                    return IMPLIED_BY;                                } else {                                    return INDEPENDENT;                                }                            }                        case LIKE:                            return INDEPENDENT;                    }                case LIKE:                    switch (objC.operation) {                        case EQ:                        case LT:                            return INDEPENDENT;                        case LIKE:                            return (left.equals(objC.left)                                    && right.equals(objC.right)                                    ? EQUAL : INDEPENDENT);                    }                    break;            }        } else if (obj instanceof NotConstraint) {            NotConstraint objNC = (NotConstraint) obj;            return alterComparisonNotObj(compare(objNC.con));        } else if (obj instanceof ConstraintSet) {            return alterComparisonSwitch(obj.compare(this));        }        // TODO: we shouldn't ever reach this bit of the code. Log?        return INDEPENDENT;    }