for (Expression e : ((FeatureAttributeVisitor) visitor).getExpressions()) { if (!(e instanceof PropertyName)) { return false;
/** * Returns true if the visitor is geometryless, that is, it's not accessing a geometry field in * the target schema * * @param visitor * @return */ public static boolean isGeometryless(FeatureVisitor visitor, SimpleFeatureType schema) { if (visitor instanceof FeatureAttributeVisitor) { // pass through unless one of the expressions requires the geometry attribute FilterAttributeExtractor extractor = new FilterAttributeExtractor(schema); for (Expression e : ((FeatureAttributeVisitor) visitor).getExpressions()) { e.accept(extractor, null); } for (PropertyName pname : extractor.getPropertyNameSet()) { AttributeDescriptor att = (AttributeDescriptor) pname.evaluate(schema); if (att instanceof GeometryDescriptor) { return false; } } return true; } else if (visitor instanceof CountVisitor) { return true; } return false; } }
/** * Checks if the visitor is accessing only properties available in the specified feature type, * or as a special case, if it's a count visitor accessing no properties at all * * @param visitor * @param featureType * @return */ public static boolean isTypeCompatible(FeatureVisitor visitor, SimpleFeatureType featureType) { if (visitor instanceof FeatureAttributeVisitor) { // pass through if the target schema contains all the necessary attributes FilterAttributeExtractor extractor = new FilterAttributeExtractor(featureType); for (Expression e : ((FeatureAttributeVisitor) visitor).getExpressions()) { e.accept(extractor, null); } for (PropertyName pname : extractor.getPropertyNameSet()) { AttributeDescriptor att = (AttributeDescriptor) pname.evaluate(featureType); if (att == null) { return false; } } return true; } else if (visitor instanceof CountVisitor) { return true; } return false; } }
} else { FeatureAttributeVisitor fav = (FeatureAttributeVisitor) visitor; exp = fav.getExpressions().get(0);