package nl.ipo.cds.etl.filtering;
import java.util.Arrays;
import nl.ipo.cds.domain.AttributeExpression;
import nl.ipo.cds.domain.AttributeType;
import nl.ipo.cds.domain.FilterExpression;
import nl.ipo.cds.domain.OperatorExpression;
import nl.ipo.cds.domain.OperatorExpression.OperatorType;
import nl.ipo.cds.domain.ValueExpression;
import nl.ipo.cds.domain.ValueExpression.ValueType;
public class FilterExpressionFactory {
public static OperatorExpression equal (final AttributeExpression attribute, final ValueExpression value) {
return operatorExpression (OperatorType.EQUALS, attribute, value);
}
public static OperatorExpression notEqual (final AttributeExpression attribute, final ValueExpression value) {
return operatorExpression (OperatorType.NOT_EQUALS, attribute, value);
}
public static OperatorExpression lessThan (final AttributeExpression attribute, final ValueExpression value) {
return operatorExpression (OperatorType.LESS_THAN, attribute, value);
}
public static OperatorExpression lessThanEqual (final AttributeExpression attribute, final ValueExpression value) {
return operatorExpression (OperatorType.LESS_THAN_EQUAL, attribute, value);
}
public static OperatorExpression greaterThan (final AttributeExpression attribute, final ValueExpression value) {
return operatorExpression (OperatorType.GREATER_THAN, attribute, value);
}
public static OperatorExpression greaterThanEqual (final AttributeExpression attribute, final ValueExpression value) {
return operatorExpression (OperatorType.GREATER_THAN_EQUAL, attribute, value);
}
public static OperatorExpression like (final AttributeExpression attribute, final String value) {
return operatorExpression (OperatorType.LIKE, attribute, stringValue (value));
}
public static OperatorExpression in (final AttributeExpression attribute, final String value) {
return operatorExpression (OperatorType.IN, attribute, stringValue (value));
}
public static OperatorExpression and (final OperatorExpression ... children) {
return operatorExpression (OperatorType.AND, children);
}
public static OperatorExpression or (final OperatorExpression ... children) {
return operatorExpression (OperatorType.OR, children);
}
public static OperatorExpression notNull (final AttributeExpression child) {
return operatorExpression (OperatorType.NOT_NULL, new FilterExpression[] { child });
}
public static OperatorExpression operatorExpression (final OperatorType operatorType, final FilterExpression ... children) {
return operatorExpression (operatorType, true, children);
}
public static OperatorExpression operatorExpression (final OperatorType operatorType, final boolean caseSensitive, final FilterExpression ... children) {
final OperatorExpression exp = new OperatorExpression ();
exp.setOperatorType (operatorType);
exp.setCaseSensitive (caseSensitive);
if (children.length > 0) {
exp.setInputs (Arrays.asList (children));
}
return exp;
}
public static AttributeExpression attribute (final String attributeName, final AttributeType attributeType) {
final AttributeExpression attributeExpression = new AttributeExpression ();
attributeExpression.setAttributeName (attributeName);
attributeExpression.setAttributeType (attributeType);
return attributeExpression;
}
public static ValueExpression integerValue (final int value) {
return valueExpression (Integer.toString (value), ValueType.INTEGER);
}
public static ValueExpression stringValue (final String value) {
return valueExpression (value, ValueType.STRING);
}
public static ValueExpression doubleValue (final double value) {
return valueExpression (Double.toString (value), ValueType.DOUBLE);
}
public static ValueExpression valueExpression (final String value, final ValueType valueType) {
final ValueExpression exp = new ValueExpression ();
exp.setStringValue (value);
exp.setValueType (valueType);
return exp;
}
}