r3882 - in branches/4.0.1: . src/main/java/fr/ifremer/isisfish/entities src/main/java/fr/ifremer/isisfish/equation src/main/java/fr/ifremer/isisfish/simulator src/main/java/fr/ifremer/isisfish/simulator/launcher src/main/java/fr/ifremer/isisfish/util src/test/java/fr/ifremer/isisfish/util
Author: echatellier Date: 2014-02-05 11:46:03 +0100 (Wed, 05 Feb 2014) New Revision: 3882 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3882 Log: refs #4289: Remove beanshell and compile prescript instead Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java Removed: branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java Modified: branches/4.0.1/pom.xml branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/EquationImpl.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/equation/Language.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/CompileHelper.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/EvaluatorHelper.java Modified: branches/4.0.1/pom.xml =================================================================== --- branches/4.0.1/pom.xml 2014-02-05 09:05:56 UTC (rev 3881) +++ branches/4.0.1/pom.xml 2014-02-05 10:46:03 UTC (rev 3882) @@ -232,27 +232,13 @@ </exclusions> </dependency> - <!-- encore utilise pour les pre-scripts --> <dependency> - <groupId>org.beanshell</groupId> - <artifactId>bsh</artifactId> - <version>2.0b4</version> - <scope>compile</scope> - </dependency> - - <dependency> <groupId>com.bbn</groupId> <artifactId>openmap</artifactId> <version>5.0</version> <scope>compile</scope> </dependency> - <!-- <dependency> - <groupId>com.fifesoft</groupId> - <artifactId>languagesupport</artifactId> - <version>0.7</version> - </dependency> --> - <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/EquationImpl.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/EquationImpl.java 2014-02-05 09:05:56 UTC (rev 3881) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/entities/EquationImpl.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -30,7 +30,6 @@ import java.util.HashMap; import java.util.Map; -import bsh.Interpreter; import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.datastore.FormuleStorage; import fr.ifremer.isisfish.equation.Language; @@ -66,20 +65,7 @@ param.put("context", SimulationContext.get()); // default is BSH - if (Language.BSH.equals(getLanguage()) - || (("".equals(getLanguage()) || getLanguage() == null) && getJavaInterface() == null)) { - Interpreter bsh = new Interpreter(); - for (Map.Entry<String, Object> e : param.entrySet()) { - bsh.set(e.getKey(), e.getValue()); - } - Object val = bsh.eval(eq); - if (val instanceof Number) { - double result = ((Number) val).doubleValue(); - return result; - } else { - throw new IsisFishRuntimeException(_("isisfish.error.equation.return.number", eq)); - } - } else if (Language.JAVA.equals(getLanguage()) + if (Language.JAVA.equals(getLanguage()) || getJavaInterface() != null) { // default Java if there are javaInterface Object val = EvaluatorHelper.evaluate( Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/equation/Language.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/equation/Language.java 2014-02-05 09:05:56 UTC (rev 3881) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/equation/Language.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -40,8 +40,6 @@ /** Java language. */ final static public String JAVA = "java"; - /** Bean shell language. */ - final static public String BSH = "BSH"; /** ECMAScript language. */ final static public String ECMASCRIPT = "ECMAScript"; /** GROOVY language. */ Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java 2014-02-05 09:05:56 UTC (rev 3881) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -3,9 +3,9 @@ * IsisFish * * $Id$ - * $HeadURL$ + * $HeadURL: http://svn.forge.codelutin.com/svn/isis-fish/branches/4.0.1/src/main/java/fr... $ * %% - * Copyright (C) 2007 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * Copyright (C) 2014 Ifremer, Code Lutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -22,71 +22,26 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ - package fr.ifremer.isisfish.simulator; -import static org.nuiton.i18n.I18n._; +import fr.ifremer.isisfish.util.Args; -import org.nuiton.topia.TopiaContext; - -import fr.ifremer.isisfish.datastore.SimulationStorage; - -import bsh.Interpreter; - /** - * SimulationPreScript. + * Interface d'utilisation d'un prescript. * - * Created: 14 nov. 07 00:06:18 - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ + * @author Eric Chatellier */ -public class SimulationPreScript implements SimulationListener { +public interface SimulationPreScript { - /* - * @see fr.ifremer.isisfish.simulator.SimulationListener#afterSimulation(fr.ifremer.isisfish.simulator.SimulationContext) + /** + * Compute prescript + * + * @param context simulation context + * @param db database context + * @return equation result + * @throws Exception */ - @Override - public void afterSimulation(SimulationContext context) { - } + @Args({"context"}) + public void compute(SimulationContext context) throws Exception; - /* - * @see fr.ifremer.isisfish.simulator.SimulationListener#beforeSimulation(fr.ifremer.isisfish.simulator.SimulationContext) - */ - @Override - public void beforeSimulation(SimulationContext context) { - try { - context.message(_("isisfish.message.presimulation.script.execution")); - - SimulationStorage simulation = context.getSimulationStorage(); - SimulationParameter parameters = simulation.getParameter(); - String presimulationScript = parameters.getPreScript(); - if ((parameters.getUsePreScript() || parameters.getUseSimulationPlan()) - && presimulationScript != null - && !"".equals(presimulationScript)) { - - // utilisation de la db en memoire que l'on commitera - TopiaContext tx = context.getDB(); - - Interpreter bsh = new Interpreter(); - bsh.set("context", context); - bsh.set("db", tx); - bsh.eval("import org.nuiton.topia.*;"); - bsh.eval("import org.nuiton.topia.persistence.*;"); - bsh.eval("import fr.ifremer.isisfish.*;"); - bsh.eval("import fr.ifremer.isisfish.types.*;"); - bsh.eval("import fr.ifremer.isisfish.entities.*;"); - bsh.eval("import java.util.*;"); - bsh.eval(presimulationScript); - - tx.commitTransaction(); - } - } catch (Exception eee) { - throw new SimulationException( - _("Can't evaluate simulation prescript"), eee); - } - } } Copied: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java (from rev 3860, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScript.java) =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java (rev 0) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationPreScriptListener.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -0,0 +1,88 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2007 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.simulator; + +import static org.nuiton.i18n.I18n._; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.nuiton.topia.TopiaContext; + +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.util.EvaluatorHelper; + +/** + * SimulationPreScript. + * + * Created: 14 nov. 07 00:06:18 + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class SimulationPreScriptListener implements SimulationListener { + + /* + * @see fr.ifremer.isisfish.simulator.SimulationListener#afterSimulation(fr.ifremer.isisfish.simulator.SimulationContext) + */ + @Override + public void afterSimulation(SimulationContext context) { + } + + /* + * @see fr.ifremer.isisfish.simulator.SimulationListener#beforeSimulation(fr.ifremer.isisfish.simulator.SimulationContext) + */ + @Override + public void beforeSimulation(SimulationContext context) { + try { + context.message(_("isisfish.message.presimulation.script.execution")); + + SimulationStorage simulation = context.getSimulationStorage(); + SimulationParameter parameters = simulation.getParameter(); + String presimulationScript = parameters.getPreScript(); + if ((parameters.getUsePreScript() || parameters.getUseSimulationPlan()) + && StringUtils.isNotBlank(presimulationScript)) { + + // utilisation de la db en memoire que l'on commitera + TopiaContext tx = context.getDB(); + + Map<String, Object> args = new HashMap<>(); + args.put("context", context); + EvaluatorHelper.evaluate(SimulationPreScript.class.getPackage().getName(), + "PreScript", SimulationPreScript.class, presimulationScript, args); + + tx.commitTransaction(); + } + } catch (Exception eee) { + throw new SimulationException( + _("Can't evaluate simulation prescript"), eee); + } + } +} Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2014-02-05 09:05:56 UTC (rev 3881) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -66,7 +66,7 @@ import fr.ifremer.isisfish.simulator.SimulationExportResultWrapper; import fr.ifremer.isisfish.simulator.SimulationListener; import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.SimulationPreScript; +import fr.ifremer.isisfish.simulator.SimulationPreScriptListener; import fr.ifremer.isisfish.simulator.Simulator; import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.types.TimeStep; @@ -515,7 +515,7 @@ // enregistrement des listeners de simulation // - prescript (before simulation) // - export (after simulation) - context.addSimulationListener(new SimulationPreScript()); + context.addSimulationListener(new SimulationPreScriptListener()); // si le simulateur est de type SimulationStep il faut ajouter les regles context.addSimulationListener(new SimulationExportResultWrapper()); } Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/CompileHelper.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/CompileHelper.java 2014-02-05 09:05:56 UTC (rev 3881) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/CompileHelper.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -73,9 +73,6 @@ /** Logger for this class. */ private static final Log log = LogFactory.getLog(CompileHelper.class); - - /** CP detector proxy. */ - //protected static CodepageDetectorProxy detector; /** * Recherche tous les fichiers qui un source plus recent que la version compilé. Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/EvaluatorHelper.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/EvaluatorHelper.java 2014-02-05 09:05:56 UTC (rev 3881) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/util/EvaluatorHelper.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -71,7 +71,7 @@ } /** - * Verifie si une equation est syntaxiquement correcte. + * Verifie si un script (prescript/equation) est syntaxiquement correct. * * @param javaInterface * @param script @@ -173,9 +173,6 @@ // if Java file is newer than class file, compile java file if (!fileDest.exists() || FileUtils.isFileNewer(fileSrc, fileDest)) { try { - // does'nt contains isisdatabase-3 directory - //int compileResult = CompileHelper.compile(fileRootSrc, fileSrc, fileRootSrc, null); - List<File> classpath = new ArrayList<File>(); classpath.add(fileRootSrc.getAbsoluteFile()); classpath.add(IsisFish.config.getDatabaseDirectory().getAbsoluteFile()); @@ -203,28 +200,31 @@ } /** - * Generate equation content. + * Generate script content. * - * Warning, content are always on a unique single line (without \n) for - * debuging purpose. + * Warning, content are always on a unique single line (without \n) for debugging purpose. * * @param packageName * @param className * @param interfaceMethod * @param script - * @return equation return + * @return script return (or null) */ protected static String generateContent(String packageName, String className, Method interfaceMethod, String script) { String content = ""; if (packageName != null && !"".equals(packageName)) { content += "package " + packageName + ";"; } + + // add common used imports + content += "import java.util.*;"; + content += "import java.io.*;"; content += "import fr.ifremer.isisfish.entities.*;"; + content += "import fr.ifremer.isisfish.types.*;"; content += "import org.nuiton.math.matrix.*;"; - content += "import fr.ifremer.isisfish.types.*;"; - content += "import org.apache.commons.logging.Log;"; - content += "import org.apache.commons.logging.LogFactory;"; - content += "import java.util.*;"; + content += "import org.apache.commons.logging.*;"; + + // generate content (do not add \n here, this help debug) content += "public class " + className + " implements " + interfaceMethod.getDeclaringClass().getName() + " {"; content += "private static Log log = LogFactory.getLog(" + className + ".class);"; content += "public " + interfaceMethod.getReturnType().getName() + " " + interfaceMethod.getName() + "("; Deleted: branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java =================================================================== --- branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java 2014-02-05 09:05:56 UTC (rev 3881) +++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -1,175 +0,0 @@ -/* - * #%L - * IsisFish - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 Ifremer, Code Lutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.isisfish.util; - -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -import org.junit.Assert; -import org.junit.Test; - -import fr.ifremer.isisfish.AbstractIsisFishTest; -import fr.ifremer.isisfish.equation.EmigrationEquation; -import fr.ifremer.isisfish.equation.PopulationGrowth; -import fr.ifremer.isisfish.equation.PopulationGrowthReverse; -import fr.ifremer.isisfish.equation.PopulationReproductionEquation; - -/** - * Test class for {@link EvaluatorHelper}. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class EvaluateHelperTest extends AbstractIsisFishTest { - - /** - * Test #normalizeClassName(). - */ - @Test - public void testNormalizeClassName() { - Assert.assertEquals("Test", EvaluatorHelper.normalizeClassName("Test")); - Assert.assertEquals("Te_t", EvaluatorHelper.normalizeClassName("Te/t")); - Assert.assertEquals("org_test_Test", EvaluatorHelper - .normalizeClassName("org.test.Test")); - } - - /** - * Test #check(). - */ - @Test - public void testCheck() { - String equationContent = "return 12.0;"; - - int result = EvaluatorHelper.check(EmigrationEquation.class, - equationContent, null); - Assert.assertEquals(0, result); - } - - /** - * Test #evaluate(). - */ - @Test - public void testEvaluate() { - String equationContent = "return age * 2.0;"; - - Map<String, Object> args = new HashMap<String, Object>(); - args.put("context", null); - args.put("age", 2.0); - args.put("group", null); - Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestEvaluate", PopulationGrowth.class, equationContent, args); - - Assert.assertNotNull(result); - Assert.assertEquals("4.0", result.toString()); - } - - /** - * Test #evaluate() but twice to check that previous - * class don't stay in class loader. - */ - @Test - public void testDoubleContentEvaluate() { - - Map<String, Object> args = new HashMap<String, Object>(); - args.put("context", null); - args.put("length", 2.0); - args.put("group", null); - - String equationContent = "return length * 2.0;"; - Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestDoubleContentEvaluate", PopulationGrowthReverse.class, - equationContent, args); - Assert.assertNotNull(result); - Assert.assertEquals("4.0", result.toString()); - - equationContent = "return length * 3.0;"; - result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestDoubleContentEvaluate", PopulationGrowthReverse.class, - equationContent, args); - Assert.assertNotNull(result); - Assert.assertEquals("6.0", result.toString()); - } - - /** - * Test que le repertoire des scripts en bien présent - * dans le classpath de compilation. - */ - @Test - public void testEquationWithDatabaseContent() { - Map<String, Object> args = new HashMap<String, Object>(); - args.put("context", null); - args.put("length", 2.0); - args.put("group", null); - - String equationContent = "String name = scripts.ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP;"; - equationContent += "return length * 2.0;"; - Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestEquationWithDatabaseContent", PopulationGrowthReverse.class, - equationContent, args); - Assert.assertNotNull(result); - Assert.assertEquals("4.0", result.toString()); - } - - /** - * Test that commons logging logger in present for use in equation. - */ - @Test - public void testEquationWithLogger() { - Map<String, Object> args = new HashMap<String, Object>(); - args.put("context", null); - args.put("length", 2.0); - args.put("group", null); - - String equationContent = "log.info(\"Test logger\");"; - equationContent += "return 1.0;"; - Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", - "TestEquationWithDatabaseContent", PopulationGrowthReverse.class, - equationContent, args); - Assert.assertNotNull(result); - Assert.assertEquals("1.0", result.toString()); - } - - /** - * Test que le contenu du fichier java correspondant à l'equation est - * corectement généré. - * Notemment suite à l'utilsation de paranamer et aux retrait des - * annotations. - */ - @Test - public void testGenerateContent() { - Class clazz = PopulationReproductionEquation.class; - Method method = clazz.getDeclaredMethods()[0]; - String content = EvaluatorHelper.generateContent("fr.ifremer.isisfish.equation", - "Test", method, "return 42.0;"); - - Assert.assertTrue(content.contains("fr.ifremer.isisfish.simulator.SimulationContext context")); - Assert.assertTrue(content.contains("java.util.List<PopulationGroup> groups")); - } -} Copied: branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java (from rev 3860, branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluateHelperTest.java) =================================================================== --- branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java (rev 0) +++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/util/EvaluatorHelperTest.java 2014-02-05 10:46:03 UTC (rev 3882) @@ -0,0 +1,191 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2010 Ifremer, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.util; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Test; + +import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.equation.EmigrationEquation; +import fr.ifremer.isisfish.equation.PopulationGrowth; +import fr.ifremer.isisfish.equation.PopulationGrowthReverse; +import fr.ifremer.isisfish.equation.PopulationReproductionEquation; +import fr.ifremer.isisfish.simulator.SimulationContext; +import fr.ifremer.isisfish.simulator.SimulationPreScript; + +/** + * Test class for {@link EvaluatorHelper}. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class EvaluatorHelperTest extends AbstractIsisFishTest { + + /** + * Test #normalizeClassName(). + */ + @Test + public void testNormalizeClassName() { + Assert.assertEquals("Test", EvaluatorHelper.normalizeClassName("Test")); + Assert.assertEquals("Te_t", EvaluatorHelper.normalizeClassName("Te/t")); + Assert.assertEquals("org_test_Test", EvaluatorHelper + .normalizeClassName("org.test.Test")); + } + + /** + * Test #check(). + */ + @Test + public void testCheck() { + String equationContent = "return 12.0;"; + + int result = EvaluatorHelper.check(EmigrationEquation.class, + equationContent, null); + Assert.assertEquals(0, result); + } + + /** + * Test #evaluate(). + */ + @Test + public void testEvaluate() { + String equationContent = "return age * 2.0;"; + + Map<String, Object> args = new HashMap<String, Object>(); + args.put("context", null); + args.put("age", 2.0); + args.put("group", null); + Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestEvaluate", PopulationGrowth.class, equationContent, args); + + Assert.assertNotNull(result); + Assert.assertEquals("4.0", result.toString()); + } + + /** + * Test #evaluate() but twice to check that previous + * class don't stay in class loader. + */ + @Test + public void testDoubleContentEvaluate() { + + Map<String, Object> args = new HashMap<String, Object>(); + args.put("context", null); + args.put("length", 2.0); + args.put("group", null); + + String equationContent = "return length * 2.0;"; + Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestDoubleContentEvaluate", PopulationGrowthReverse.class, + equationContent, args); + Assert.assertNotNull(result); + Assert.assertEquals("4.0", result.toString()); + + equationContent = "return length * 3.0;"; + result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestDoubleContentEvaluate", PopulationGrowthReverse.class, + equationContent, args); + Assert.assertNotNull(result); + Assert.assertEquals("6.0", result.toString()); + } + + /** + * Test que le repertoire des scripts en bien présent + * dans le classpath de compilation. + */ + @Test + public void testEquationWithDatabaseContent() { + Map<String, Object> args = new HashMap<String, Object>(); + args.put("context", null); + args.put("length", 2.0); + args.put("group", null); + + String equationContent = "String name = scripts.ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP;"; + equationContent += "return length * 2.0;"; + Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestEquationWithDatabaseContent", PopulationGrowthReverse.class, + equationContent, args); + Assert.assertNotNull(result); + Assert.assertEquals("4.0", result.toString()); + } + + /** + * Test that commons logging logger in present for use in equation. + */ + @Test + public void testEquationWithLogger() { + Map<String, Object> args = new HashMap<String, Object>(); + args.put("context", null); + args.put("length", 2.0); + args.put("group", null); + + String equationContent = "log.info(\"Test logger\");"; + equationContent += "return 1.0;"; + Object result = EvaluatorHelper.evaluate("fr.isisfish.equation", + "TestEquationWithDatabaseContent", PopulationGrowthReverse.class, + equationContent, args); + Assert.assertNotNull(result); + Assert.assertEquals("1.0", result.toString()); + } + + /** + * Test que le contenu du fichier java correspondant à l'equation est + * corectement généré. + * Notemment suite à l'utilsation de paranamer et aux retrait des + * annotations. + */ + @Test + public void testGenerateContent() { + Class clazz = PopulationReproductionEquation.class; + Method method = clazz.getDeclaredMethods()[0]; + String content = EvaluatorHelper.generateContent("fr.ifremer.isisfish.equation", + "Test", method, "return 42.0;"); + + Assert.assertTrue(content.contains("fr.ifremer.isisfish.simulator.SimulationContext context")); + Assert.assertTrue(content.contains("java.util.List<PopulationGroup> groups")); + } + + /** + * Test d'execution d'un prescript. + */ + @Test + public void testPrescriptContent() { + String content = "if (context != null) {\n" + + " // test\n" + + "}\n"; + Map<String, Object> args = new HashMap<>(); + args.put("context", SimulationContext.get()); + EvaluatorHelper.evaluate("fr.isisfish.prescript", + "TestPrescript", SimulationPreScript.class, content, args); + } +}
participants (1)
-
echatellier@users.forge.codelutin.com