package org.geotoolkit.pending.demo.filter;
import java.util.Collection;
import org.geotoolkit.data.FeatureCollection;
import org.geotoolkit.data.FeatureIterator;
import org.geotoolkit.factory.FactoryFinder;
import org.geotoolkit.filter.function.FunctionFactory;
import org.geotoolkit.filter.function.Functions;
import org.geotoolkit.filter.function.math.MathFunctionFactory;
import org.geotoolkit.pending.demo.Demos;
import org.geotoolkit.util.StringUtilities;
import org.apache.sis.util.Classes;
import org.opengis.feature.Feature;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.Expression;
import org.opengis.filter.expression.Function;
public class ExpressionDemo {
private static final FilterFactory FF = FactoryFinder.getFilterFactory(null);
public static void main(String[] args) {
Demos.init();
final FeatureCollection collection = FilterDemo.createSampleCollection();
testExpression(collection, mathExpression());
testExpression(collection, functionExpression());
}
private static void testExpression(FeatureCollection collection, Expression exp){
System.out.println("\n==============================================================\n");
System.out.println(exp);
System.out.println('\n');
final FeatureIterator ite = collection.iterator();
try{
while(ite.hasNext()){
final Feature candidate = ite.next();
System.out.println(exp.evaluate(candidate));
}
}finally{
ite.close();
}
}
private static Expression mathExpression(){
final Expression multi = FF.multiply(FF.property("age"), FF.literal(3));
final Expression add = FF.add(multi, FF.literal(10));
return add;
}
private static Expression functionExpression(){
//display all available functions
System.out.println("\n==============================================================\n");
final Collection<FunctionFactory> factories = Functions.getFactories();
for(FunctionFactory ff : factories){
System.out.println(Classes.getShortClassName(ff));
System.out.println(StringUtilities.toStringTree((Object[])ff.getNames()));
}
final Function function = Functions.function(MathFunctionFactory.COS, null, FF.property("age"));
return function;
}
}