/** * Evaluates the * * @param schema */ public BindingFilterVisitor(FeatureType schema) { this.schema = schema; this.expressionTypeVisitor = new ExpressionTypeVisitor(schema); }
@Override public Object visit(Add expression, Object extraData) { return visitBinaryExpression(expression); }
Class<?> largestType(Class<?> type1, Class<?> type2) { // start with the easy cases if (type1.isAssignableFrom(type2)) { return type1; } else if (type2.isAssignableFrom(type1)) { return type2; } // consider numbers and promotions if (Number.class.isAssignableFrom(type1) && Number.class.isAssignableFrom(type2)) { List<Class<?>> c1 = PROMOTIONS.get(type1); List<Class<?>> c2 = PROMOTIONS.get(type2); if (c1 == null || c2 == null) { return Object.class; } List<Class<?>> intersection = new ArrayList<>(c1); intersection.retainAll(c2); if (intersection.isEmpty()) { return Object.class; } else { // lowest shared type return intersection.get(0); } } // ok, let's get the most specific superclass then... return getCommonSuperclass(type1, type2); }
protected Class<?> visitBinaryExpression(BinaryExpression expression) { Class<?> type1 = (Class<?>) expression.getExpression1().accept(this, null); Class<?> type2 = (Class<?>) expression.getExpression2().accept(this, null); return largestType(type1, type2); }
@Before public void setup() throws Exception { ft = DataUtilities.createType( "test", "theGeom:LineString,b:java.lang.Byte,s:java.lang.Short,i:java.lang.Integer,l:java.lang.Long,d:java.lang.Double,label:String"); visitor = new ExpressionTypeVisitor(ft); }
@Override public Object visit(Divide expression, Object extraData) { return visitBinaryExpression(expression); }
@Before public void setup() throws Exception { ft = DataUtilities.createType( "test", "theGeom:LineString,b:java.lang.Byte,s:java.lang.Short,i:java.lang.Integer,l:java.lang.Long,d:java.lang.Double,label:String"); visitor = new ExpressionTypeVisitor(ft); }
@Override public Object visit(Multiply expression, Object extraData) { return visitBinaryExpression(expression); }
this.filters = filters; this.featureType = featureType; this.expressionTypeVisitor = new ExpressionTypeVisitor(featureType);
@Override public Object visit(Subtract expression, Object extraData) { return visitBinaryExpression(expression); }