package org.geotoolkit.pending.demo.filter; import org.geotoolkit.factory.FactoryFinder; import org.apache.sis.feature.builder.FeatureTypeBuilder; import org.geotoolkit.filter.function.javascript.JavaScriptFunctionFactory; import org.geotoolkit.pending.demo.Demos; import org.opengis.feature.Feature; import org.opengis.feature.FeatureType; import org.opengis.filter.FilterFactory; import org.opengis.filter.expression.Expression; import org.opengis.filter.expression.Literal; public class JavascriptFunctionDemo { private static final FilterFactory FF = FactoryFinder.getFilterFactory(null); public static void main(String[] args) { Demos.init(); final Feature feature = aFeature(); final String mathematicText = "x = $depth - 6 * $age; " + "y = Math.cos($weight); " + "z = 0; " + "if(x<0) z = 10; " + "else z = y/x; " + "z; "; final Literal formula = FF.literal(mathematicText); final Expression exp = FF.function(JavaScriptFunctionFactory.JAVASCRIPT, formula); final Object result = exp.evaluate(feature); System.out.println("JavaScript result = " + result); } private static Feature aFeature(){ final FeatureTypeBuilder ftb = new FeatureTypeBuilder(); ftb.setName("marine-life"); ftb.addAttribute(String.class).setName("family"); ftb.addAttribute(Double.class).setName("depth"); ftb.addAttribute(Integer.class).setName("age"); ftb.addAttribute(Float.class).setName("weight"); final FeatureType type = ftb.build(); final Feature feature1 = type.newInstance(); feature1.setPropertyValue("family","seashell"); feature1.setPropertyValue("depth",46.58); feature1.setPropertyValue("age",31); feature1.setPropertyValue("weight",132.56); return feature1; } }