package nl.ipo.cds.validation.operators; import nl.ipo.cds.validation.Expression; import nl.ipo.cds.validation.ValidationMessage; import nl.ipo.cds.validation.ValidatorContext; public class Compare { public static class Equals<K extends Enum<K> & ValidationMessage<K, C>, C extends ValidatorContext<K, C>, T extends Comparable<T>> extends AbstractCompareOperator<K, C, T> { public Equals (final Expression<K, C, T> a, final Expression<K, C, T> b) { super(a, b); } @Override public Boolean evaluate (final T a, final T b, final C context) { return a.compareTo (b) == 0; } @Override public String getOperatorName () { return "=="; } } public static class NotEquals<K extends Enum<K> & ValidationMessage<K, C>, C extends ValidatorContext<K, C>, T extends Comparable<T>> extends AbstractCompareOperator<K, C, T> { public NotEquals (final Expression<K, C, T> a, final Expression<K, C, T> b) { super(a, b); } @Override public Boolean evaluate (final T a, final T b, final C context) { return a.compareTo (b) != 0; } @Override public String getOperatorName () { return "!="; } } public static class LessThan<K extends Enum<K> & ValidationMessage<K, C>, C extends ValidatorContext<K, C>, T extends Comparable<T>> extends AbstractCompareOperator<K, C, T> { public LessThan (final Expression<K, C, T> a, final Expression<K, C, T> b) { super(a, b); } @Override public Boolean evaluate (final T a, final T b, final C context) { return a.compareTo (b) < 0; } @Override public String getOperatorName () { return "<"; } } public static class GreaterThan<K extends Enum<K> & ValidationMessage<K, C>, C extends ValidatorContext<K, C>, T extends Comparable<T>> extends AbstractCompareOperator<K, C, T> { public GreaterThan (final Expression<K, C, T> a, final Expression<K, C, T> b) { super(a, b); } @Override public Boolean evaluate (final T a, final T b, final C context) { return a.compareTo (b) > 0; } @Override public String getOperatorName () { return ">"; } } public static class LessThanEquals<K extends Enum<K> & ValidationMessage<K, C>, C extends ValidatorContext<K, C>, T extends Comparable<T>> extends AbstractCompareOperator<K, C, T> { public LessThanEquals (final Expression<K, C, T> a, final Expression<K, C, T> b) { super(a, b); } @Override public Boolean evaluate (final T a, final T b, final C context) { return a.compareTo (b) <= 0; } @Override public String getOperatorName () { return "<="; } } public static class GreaterThanEquals<K extends Enum<K> & ValidationMessage<K, C>, C extends ValidatorContext<K, C>, T extends Comparable<T>> extends AbstractCompareOperator<K, C, T> { public GreaterThanEquals (final Expression<K, C, T> a, final Expression<K, C, T> b) { super(a, b); } @Override public Boolean evaluate (final T a, final T b, final C context) { return a.compareTo (b) >= 0; } @Override public String getOperatorName () { return ">="; } } }