package context.arch.discoverer.query.comparison; import context.arch.discoverer.component.AttributeElement; import context.arch.storage.AttributeNameValue; public final class AttributeComparison extends AbstractComparison<AttributeNameValue<?>, AttributeNameValue<?>> { public static final String ATTRIBUTE_EQUAL = "ATTRIBUTE_EQUAL"; public static final String ATTRIBUTE_DIFFERENT = "ATTRIBUTE_DIFFERENT"; public static final String ATTRIBUTE_GREATER = "ATTRIBUTE_GREATER"; public static final String ATTRIBUTE_GREATER_EQUAL = "ATTRIBUTE_GREATER_EQUAL"; public static final String ATTRIBUTE_LESS = "ATTRIBUTE_LESS"; public static final String ATTRIBUTE_LESS_EQUAL = "ATTRIBUTE_LESS_EQUAL"; public enum Comparison { EQUAL(ATTRIBUTE_EQUAL), DIFFERENT(ATTRIBUTE_DIFFERENT), GREATER(ATTRIBUTE_GREATER), GREATER_EQUAL(ATTRIBUTE_GREATER_EQUAL), LESS(ATTRIBUTE_LESS), LESS_EQUAL(ATTRIBUTE_LESS_EQUAL); private String name; Comparison(String name) { this.name = name; } @Override public String toString() { return name; } } private Comparison comparison; public static final AttributeComparison EQUAL = new AttributeComparison(Comparison.EQUAL); public static final AttributeComparison DIFFERENT = new AttributeComparison(Comparison.DIFFERENT); public static final AttributeComparison GREATER = new AttributeComparison(Comparison.GREATER); public static final AttributeComparison GREATER_EQUAL = new AttributeComparison(Comparison.GREATER_EQUAL); public static final AttributeComparison LESS = new AttributeComparison(Comparison.LESS); public static final AttributeComparison LESS_EQUAL = new AttributeComparison(Comparison.LESS_EQUAL); public AttributeComparison(Comparison comparison) { super(comparison.toString(), AttributeElement.attributeClass, AttributeElement.attributeClass); this.comparison = comparison; } public Comparison getComparison() { return comparison; } @Override public Boolean compare(AttributeNameValue<?> att1, AttributeNameValue<?> att2) { Integer comp = att1.compareToValue(att2); if (comp == null) { return false; } // att1 and att2 not compatible switch (comparison) { case EQUAL: return comp == 0; case DIFFERENT: return comp != 0; case GREATER: return comp > 0; case GREATER_EQUAL: return comp >= 0; case LESS: return comp < 0; case LESS_EQUAL: return comp <= 0; default: return null; // should never happen } } }