diff --git a/nb-configuration.xml b/nb-configuration.xml
index 6995d35469afb453779bdafd31d4626163522c32..8a89e6deb1612912550a17f804b7132c7c3a2b6c 100644
--- a/nb-configuration.xml
+++ b/nb-configuration.xml
@@ -15,6 +15,6 @@ Any value defined here will override the pom.xml file value but is only applicab
-->
<netbeans.hint.license>default_1</netbeans.hint.license>
<org-netbeans-modules-javascript2-editor.jsversion>ECMA5</org-netbeans-modules-javascript2-editor.jsversion>
- <netbeans.hint.jdkPlatform>JDK_1.8_SUN</netbeans.hint.jdkPlatform>
+ <netbeans.hint.jdkPlatform>JDK_1.8__GraalVM_1.0_</netbeans.hint.jdkPlatform>
</properties>
</project-shared-configuration>
diff --git a/pom.xml b/pom.xml
index 9c0c93d3c4b10023b6c32d3b592d9943e15750c3..aa2736771087603066e0a6ce29c474e6ba584bf1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,24 +29,19 @@
<version>5.3.1</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.seleniumhq.selenium</groupId>
- <artifactId>selenium-java</artifactId>
- <scope>test</scope>
- <version>2.44.0</version>
- </dependency>
- <dependency>
- <groupId>com.opera</groupId>
- <artifactId>operadriver</artifactId>
- <scope>test</scope>
- <version>1.5</version>
- <exclusions>
- <exclusion>
- <groupId>org.seleniumhq.selenium</groupId>
- <artifactId>selenium-remote-driver</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
+
+ <dependency>
+ <groupId>org.graalvm.sdk</groupId>
+ <artifactId>graal-sdk</artifactId>
+ <version>1.0.0-rc12</version>
+ </dependency>
+ <dependency>
+ <groupId>com.eclipsesource.j2v8</groupId>
+ <artifactId>j2v8_linux_x86_64</artifactId>
+ <version>4.8.0</version>
+ </dependency>
+
+
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
diff --git a/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModel.java b/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModel.java
index 2999eaf462e243494a36bc845edfde562aa85c1f..d1fe7368b9a5d8daf6ff8538b35e37ef34ed65bc 100644
--- a/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModel.java
+++ b/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModel.java
@@ -51,9 +51,9 @@ public class FallArmywormModel extends I18nImpl implements Model{
private Date plantingDate;
private String intercroppingType;
private final Map<String, Double> INTERCROPPING_RISK_REDUCTION;
- Integer RISK_THRESHOLD_HIGH = 100;
+ Integer RISK_THRESHOLD_HIGH = 50;
Double OBSERVATIONS_10KM_ABSCENCE_RISK_REDUCTION = 10d/100; // 10% risk reduction if no observations within 10km
- Double OBSERVATIONS_25KM_ABSCENCE_RISK_REDUCTION = 60d/100; // 60% risk reduction if no observations within 25km
+ Double OBSERVATIONS_25KM_ABSCENCE_RISK_REDUCTION = 70d/100; // 60% risk reduction if no observations within 25km
public final static ModelId MODEL_ID = new ModelId("FAWMODEL01");
private final ModelUtil modelUtil;
@@ -154,7 +154,7 @@ public class FallArmywormModel extends I18nImpl implements Model{
@Override
public String getLicense() {
return
- " Copyright (c) 2019 FAO <http://www.fao.org/>. \n" +
+ " Copyright (c) 2019 NIBIO <http://www.nibio.no/>. \n" +
"\n" +
" This program is free software: you can redistribute it and/or modify\n" +
" it under the terms of the GNU Affero General Public License as\n" +
@@ -174,7 +174,7 @@ public class FallArmywormModel extends I18nImpl implements Model{
@Override
public String getCopyright() {
- return "(c) 2019 FAO (http://www.fao.org/).";
+ return "(c) 2019 NIBIO (http://www.nibio.no/).";
}
diff --git a/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJSAdapter.java b/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelGraalVMAdapter.java
similarity index 79%
rename from src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJSAdapter.java
rename to src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelGraalVMAdapter.java
index c88b05750d1aef41be3e885efcda454fd8ca8120..e242a4e4192ff688dea7feecef2186baec320548 100644
--- a/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJSAdapter.java
+++ b/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelGraalVMAdapter.java
@@ -23,61 +23,63 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.util.Date;
+import java.io.Reader;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
-import java.util.stream.Collectors;
-import javax.script.Invocable;
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
-import jdk.nashorn.api.scripting.ScriptObjectMirror;
import no.nibio.vips.entity.ModelConfiguration;
import no.nibio.vips.entity.Result;
-import no.nibio.vips.entity.ResultImpl;
import no.nibio.vips.i18n.I18nImpl;
import no.nibio.vips.model.ConfigValidationException;
import no.nibio.vips.model.Model;
import no.nibio.vips.model.ModelExcecutionException;
import no.nibio.vips.model.ModelId;
import no.nibio.vips.util.ModelUtil;
+import org.graalvm.polyglot.Context;
+import org.graalvm.polyglot.Source;
+import org.graalvm.polyglot.Value;
/**
* @copyright 2019 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/
-public class FallArmywormModelJSAdapter extends I18nImpl {
+public class FallArmywormModelGraalVMAdapter extends I18nImpl implements Model{
- protected ScriptEngine engine;
+ protected Context jsContext;
+ protected Value jsBindings;
- public final static ModelId MODEL_ID = new ModelId("FAWMODEL01");
+ public final static ModelId MODEL_ID = new ModelId("FAWMODEL02");
private final ModelUtil modelUtil;
- public FallArmywormModelJSAdapter() {
+ public FallArmywormModelGraalVMAdapter() {
super("no.nibio.vips.model.fallarmywormmodel.texts");
- ScriptEngineManager sem = new ScriptEngineManager();
- engine = sem.getEngineByName("nashorn");
- modelUtil = new ModelUtil();
- try {
-
- this.addJavaScript("/js/moment.min.js");
- this.addJavaScript("/js/moment-timezone-with-data.min.js");
- this.addJavaScript("/js/FallArmywormModelImpl.js");
- } catch (InstantiationException ex) {
- Logger.getLogger(FallArmywormModelJSAdapter.class.getName()).log(Level.SEVERE, null, ex);
- }
+ modelUtil = new ModelUtil();
+ try {
+ jsContext = Context.create("js");
+ jsBindings = jsContext.getBindings("js");
+ this.addJavaScript("/js/moment.min.js");
+ this.addJavaScript("/js/moment-timezone-with-data.min.js");
+ this.addJavaScript("/js/FallArmywormModelImpl.js");
+ } catch (IOException ex) {
+ Logger.getLogger(FallArmywormModelGraalVMAdapter.class.getName()).log(Level.SEVERE, null, ex);
+ }
}
+
+
public List<Result> getResult() throws ModelExcecutionException {
- try
- {
+ //try
+ //{
ObjectMapper mapper = new ObjectMapper();
- ScriptObjectMirror jsObject = (ScriptObjectMirror) this.getRunnableJSWrapper().invokeFunction("getResult");
- List<Result> retVal = (List<Result>) jsObject.keySet().stream().map(key->{
+ //ScriptObjectMirror jsObject = (ScriptObjectMirror) this.getRunnableJSWrapper().invokeFunction("getResult");
+ List<Map> jsResultList = jsBindings.getMember("getResult").execute().as(List.class);
+ System.out.println("jsResultList size is " + jsResultList.size());
+ /*List<Result> retVal = (List<Result>) jsObject.keySet().stream().map(key->{
Result r = new ResultImpl();
ScriptObjectMirror resultObject = (ScriptObjectMirror) jsObject.get(key);
r.setWarningStatus((Integer)resultObject.get("warningStatus"));
@@ -87,13 +89,14 @@ public class FallArmywormModelJSAdapter extends I18nImpl {
ScriptObjectMirror allValues = (ScriptObjectMirror) resultObject.get("allValues");
r.setAllValues(allValues.to(Map.class));
return r;
- }).collect(Collectors.toList());
- return retVal;
- }
- catch(ScriptException | NoSuchMethodException ex)
+ }).collect(Collectors.toList());*/
+ //return retVal;
+ return new ArrayList<>();
+ //}
+ /*catch(ScriptException | NoSuchMethodException ex)
{
throw new ModelExcecutionException("ERROR: There was a problem running the JavaScript code. Message is: " + ex.getMessage());
- }
+ }*/
}
@@ -114,7 +117,7 @@ public class FallArmywormModelJSAdapter extends I18nImpl {
public String getLicense() {
return
- " Copyright (c) 2019 FAO <http://www.fao.org/>. \n" +
+ " Copyright (c) 2019 NIBIO <http://www.nibio.no/>. \n" +
"\n" +
" This program is free software: you can redistribute it and/or modify\n" +
" it under the terms of the GNU Affero General Public License as\n" +
@@ -133,7 +136,7 @@ public class FallArmywormModelJSAdapter extends I18nImpl {
public String getCopyright() {
- return "(c) 2019 FAO (http://www.fao.org/).";
+ return "(c) 2019 NIBIO (http://www.nibio.no/).";
}
@@ -207,10 +210,11 @@ public class FallArmywormModelJSAdapter extends I18nImpl {
}
ObjectMapper mapper = new ObjectMapper();
String jsonInput = mapper.writeValueAsString(config);
+ jsBindings.getMember("setConfiguration").execute(jsonInput);
//System.out.println(jsonInput);
- this.getRunnableJSWrapper().invokeFunction("setConfiguration", jsonInput);
+
}
- catch(ScriptException | NoSuchMethodException | JsonProcessingException ex)
+ catch(JsonProcessingException ex)
{
throw new ConfigValidationException("ERROR: There was a problem with running the JavaScript code. Message is: " + ex.getMessage());
}
@@ -237,22 +241,11 @@ public class FallArmywormModelJSAdapter extends I18nImpl {
* @param scriptPath
* @throws ScriptException
*/
- protected final void addJavaScript(String scriptPath) throws InstantiationException
+ protected final void addJavaScript(String scriptPath) throws IOException
{
- try
- {
- InputStreamReader fr = new java.io.InputStreamReader(this.getClass().getResourceAsStream(scriptPath));
- engine.eval(fr);
- }catch(ScriptException ex)
- {
- throw new InstantiationException(ex.getMessage());
- }
+ Reader stream = new InputStreamReader(this.getClass().getResourceAsStream(scriptPath));
+ Source source = Source.newBuilder("js", stream, "JavaScript").build();
+ jsContext.eval(source);
}
- protected Invocable getRunnableJSWrapper()
- {
- return (Invocable) engine;
- }
-
-
}
diff --git a/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJ2V8Adapter.java b/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJ2V8Adapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..73acb405932598d9e76ebe81a9d9773c996b009f
--- /dev/null
+++ b/src/main/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJ2V8Adapter.java
@@ -0,0 +1,277 @@
+/*
+ * Copyright (c) 2019 NIBIO <http://www.nibio.no/>.
+ *
+ * This file is part of FallArmywormModel.
+ * FallArmywormModel is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FallArmywormModel 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with FallArmywormModel. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+package no.nibio.vips.model.fallarmywormmodel;
+
+import com.eclipsesource.v8.V8;
+import com.eclipsesource.v8.V8Array;
+import com.eclipsesource.v8.V8Object;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.script.ScriptException;
+import no.nibio.vips.entity.ModelConfiguration;
+import no.nibio.vips.entity.Result;
+import no.nibio.vips.entity.ResultImpl;
+import no.nibio.vips.i18n.I18nImpl;
+import no.nibio.vips.model.ConfigValidationException;
+import no.nibio.vips.model.Model;
+import no.nibio.vips.model.ModelExcecutionException;
+import no.nibio.vips.model.ModelId;
+import no.nibio.vips.util.ModelUtil;
+
+
+/**
+ * Adapter for the Android compatible J2V8 JavaScript adapter: https://github.com/eclipsesource/j2v8
+ *
+ * @copyright 2019 <a href="http://www.nibio.no/">NIBIO</a>
+ * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
+ */
+public class FallArmywormModelJ2V8Adapter extends I18nImpl implements Model{
+
+ V8 runtime;
+
+ public final static ModelId MODEL_ID = new ModelId("FAWMODEL03");
+ private final ModelUtil modelUtil;
+
+ public FallArmywormModelJ2V8Adapter() {
+ super("no.nibio.vips.model.fallarmywormmodel.texts");
+ modelUtil = new ModelUtil();
+ try {
+ this.runtime = V8.createV8Runtime();
+ //jsBindings = jsContext.getBindings("js");
+ this.addJavaScript("/js/moment.min.js");
+ this.addJavaScript("/js/moment-timezone-with-data.min.js");
+ this.addJavaScript("/js/FallArmywormModelImpl.js");
+
+ } catch (IOException ex) {
+ Logger.getLogger(FallArmywormModelJ2V8Adapter.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+
+
+ public List<Result> getResult() throws ModelExcecutionException {
+ //try
+ //{
+ List<Result> retVal = new ArrayList<>();
+ ObjectMapper mapper = new ObjectMapper();
+ V8Array resultArray = this.runtime.executeArrayFunction("getResult",null);
+ //System.out.println("Got " + resultArray.length() + " result items back");
+ for(Integer i=0;i<resultArray.length();i++)
+ {
+ V8Object resultObject = resultArray.getObject(i);
+ Result r = new ResultImpl();
+ r.setWarningStatus((Integer)resultObject.get("warningStatus"));
+
+ r.setValidTimeStart(mapper.convertValue((String)resultObject.getString("validTimeStart"), Date.class));
+ r.setValidTimeEnd(mapper.convertValue((String)resultObject.getString("validTimeEnd"), Date.class));
+ V8Object allValues = resultObject.getObject("allValues");
+ for(String key: allValues.getKeys())
+ { System.out.println("key=" + key);
+
+ String keyWithoutNS = key.split("\\.")[key.split("\\.").length - 1];
+ String nameSpace = key.split("\\.").length == 1 ? FallArmywormModelJ2V8Adapter.MODEL_ID.toString() : key.split("\\.")[0];
+ r.setValue(nameSpace, keyWithoutNS, String.valueOf(allValues.get(key)));
+ }
+ retVal.add(r);
+ allValues.release();
+ resultObject.release();
+
+ }
+ resultArray.release();
+ String[] keysLeft = this.runtime.getKeys();
+ System.out.println("Still keeping " + keysLeft[0]);
+ //this.releaseAll();
+ this.runtime.release();
+
+ return retVal;
+ }
+
+ private void releaseAll()
+ {
+ for(String key: this.runtime.getKeys())
+ {
+ System.out.println("Trying to release " + key +", which is a " + V8.getStringRepresentation(this.runtime.getType(key)));
+ ((V8Object)this.runtime.get(key)).release();
+ }
+ }
+
+
+ public ModelId getModelId() {
+ return MODEL_ID;
+ }
+
+
+ public String getModelName() {
+ return this.getModelName(Model.DEFAULT_LANGUAGE);
+ }
+
+
+ public String getModelName(String language) {
+ return this.getText("name", language);
+ }
+
+
+ public String getLicense() {
+ return
+ " Copyright (c) 2019 NIBIO <http://www.nibio.no/>. \n" +
+ "\n" +
+ " This program is free software: you can redistribute it and/or modify\n" +
+ " it under the terms of the GNU Affero General Public License as\n" +
+ " published by the Free Software Foundation, either version 3 of the\n" +
+ " License, or (at your option) any later version.\n" +
+ "\n" +
+ " This program is distributed in the hope that it will be useful,\n" +
+ " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +
+ " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" +
+ " GNU Affero General Public License for more details.\n" +
+ "\n" +
+ " You should have received a copy of the GNU Affero General Public License\n" +
+ " along with this program. If not, see <https://www.gnu.org/licenses/>.";
+
+ }
+
+
+ public String getCopyright() {
+ return "(c) 2019 NIBIO (http://www.nibio.no/).";
+ }
+
+
+ public String getModelDescription() {
+ return this.getModelName(Model.DEFAULT_LANGUAGE);
+ }
+
+
+ public String getModelDescription(String language) {
+ try
+ {
+ return this.modelUtil.getTextWithBase64EncodedImages(this.getText("description", language), this.getClass());
+ }
+ catch(IOException ex)
+ {
+ return this.getText("description", language);
+ }
+ }
+
+
+ public String getWarningStatusInterpretation() {
+ return this.getWarningStatusInterpretation(Model.DEFAULT_LANGUAGE);
+ }
+
+
+ public String getWarningStatusInterpretation(String language) {
+ return this.getText("statusInterpretation", language);
+ }
+
+
+ public String getModelUsage() {
+ return this.getModelUsage(Model.DEFAULT_LANGUAGE);
+ }
+
+
+ public String getModelUsage(String language) {
+ return this.getText("usage", language);
+ }
+
+
+ public String getSampleConfig() {
+ return "{\n" +
+ " \"modelId\": \"FAWMODEL01\",\n" +
+ " \"configParameters\": {\n" +
+ " \"longitude\": \"12.4885772\",\n" +
+ " \"latitude\": \"41.8822185\",\n" +
+ " \"plantingDate\": \"2019-02-02\",\n" +
+ " \"intercroppingType\": \"BEANS/DESMODIUM\",\n" +
+ " \"timeZone\": \"Europe/Rome\",\n" +
+ " \"observations10kmLast3Months\": 0,\n" +
+ " \"observations25kmLast3Months\": 0\n" +
+ " }\n" +
+ "}";
+ }
+
+
+ public void setConfiguration(ModelConfiguration config) throws ConfigValidationException {
+ try
+ {
+ if(config.getConfigParameter("observations10kmLast3Months") == null || config.getConfigParameter("observations25kmLast3Months") == null)
+ {
+ Map<Integer, Integer> observations = this.getFAWObservations(Double.valueOf((String) config.getConfigParameter("longitude")), Double.valueOf((String)config.getConfigParameter("longitude")));
+ if(config.getConfigParameter("observations10kmLast3Months") == null)
+ {
+ config.setConfigParameter("observations10kmLast3Months", observations.get(10));
+ }
+ if(config.getConfigParameter("observations25kmLast3Months") == null)
+ {
+ config.setConfigParameter("observations25kmLast3Months", observations.get(25));
+ }
+ }
+ ObjectMapper mapper = new ObjectMapper();
+ String jsonInput = mapper.writeValueAsString(config);
+ V8Array params = new V8Array(runtime).push(jsonInput);
+ this.runtime.executeVoidFunction("setConfiguration", params);
+ params.release();
+ //jsBindings.getMember("setConfiguration").execute(jsonInput);
+ //System.out.println(jsonInput);
+
+ }
+ catch(JsonProcessingException ex)
+ {
+ throw new ConfigValidationException("ERROR: There was a problem with running the JavaScript code. Message is: " + ex.getMessage());
+ }
+ }
+
+ /**
+ * TODO: Actually pull the data from the FAMEWS server
+ * Need some help from Fabio Lana
+ * @param longitude
+ * @param latitude
+ * @return
+ */
+ private Map<Integer, Integer> getFAWObservations(Double longitude, Double latitude)
+ {
+
+ Map<Integer, Integer> retVal = new HashMap<>();
+ retVal.put(10, 0);
+ retVal.put(25,40);
+ return retVal;
+ }
+
+ /**
+ * Add JavaScript
+ * @param scriptPath
+ * @throws ScriptException
+ */
+ protected final void addJavaScript(String scriptPath) throws IOException
+ {
+ String js = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(scriptPath))).lines().collect(Collectors.joining("\n"));
+ this.runtime.executeVoidScript(js);
+ }
+
+}
diff --git a/src/main/resources/js/FallArmywormModelImpl.js b/src/main/resources/js/FallArmywormModelImpl.js
index 83281d03a0ed8e554698249fb2c92d6219a6baee..2c625dec1137484deeaf49a88af9dd20728915fb 100644
--- a/src/main/resources/js/FallArmywormModelImpl.js
+++ b/src/main/resources/js/FallArmywormModelImpl.js
@@ -18,7 +18,7 @@
/**
* The JavaScript implementation of the Fall Armyworm model
- * @copyright 2019 FAO.org
+ * @copyright 2019 NIBIO.no
* @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/
@@ -197,6 +197,8 @@ var setConfiguration = function (modelConfigurationUnknownType)
TM = getDailyObservations(TMHourly, timeZone, 4);
}
*/
+ // TEST
+
};
/**
diff --git a/src/test/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJSAdapterTest.java b/src/test/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJSAdapterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5890344e4f316a3465d0ff0028aee53f5de3a2e
--- /dev/null
+++ b/src/test/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJSAdapterTest.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (c) 2019 NIBIO <http://www.nibio.no/>.
+ *
+ * This file is part of FallArmywormModel.
+ * FallArmywormModel is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FallArmywormModel 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with FallArmywormModel. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package no.nibio.vips.model.fallarmywormmodel;
+
+import no.nibio.vips.model.fallarmywormmodel.FallArmywormModel;
+import java.util.List;
+import no.nibio.vips.entity.ModelConfiguration;
+import no.nibio.vips.entity.Result;
+import no.nibio.vips.model.ModelId;
+import no.nibio.vips.util.test.WeatherDataFileReader;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author treinar
+ */
+public class FallArmywormModelJSAdapterTest {
+
+ public FallArmywormModelJSAdapterTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() {
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ }
+
+ @Before
+ public void setUp() {
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ /**
+ * Test of getResult method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetResult() throws Exception {
+ System.out.println("getResult");
+ WeatherDataFileReader fr = new WeatherDataFileReader();
+ ModelConfiguration config = fr.getModelConfigurationWithWeatherData("/romeweather.json", "FAWMODEL01");
+ config.setConfigParameter("observations", null);
+ config.setConfigParameter("longitude", "12.4885772");
+ config.setConfigParameter("latitude", "41.8822185");
+ config.setConfigParameter("plantingDate", "2019-02-02");
+ config.setConfigParameter("timeZone", "Europe/Rome");
+ config.setConfigParameter("intercroppingType", "BEANS/DESMODIUM");
+ config.setConfigParameter("observations10kmLast3Months", 0);
+ config.setConfigParameter("observations25kmLast3Months", 0);
+ FallArmywormModel instance = new FallArmywormModel();
+ instance.setConfiguration(config);
+ List<Result> result = instance.getResult();
+ assertNotNull(result);
+ result.forEach(r->{System.out.println(r.getValidTimeStart() + " Accumulated RISK = " + String.valueOf(r.getValue(FallArmywormModel.MODEL_ID.toString(), "accumulatedRisk")) + ", warning status = " + r.getWarningStatus());});
+
+ }
+
+ /**
+ * Test of getModelId method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelId() {
+
+ System.out.println("getModelId");
+ FallArmywormModel instance = new FallArmywormModel();
+ String expResult = "FAWMODEL01";
+ ModelId result = instance.getModelId();
+ assertEquals(expResult, result.toString());
+
+
+ }
+
+ /**
+ * Test of getModelName method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelName_0args() {
+
+ System.out.println("getModelName");
+ FallArmywormModel instance = new FallArmywormModel();
+ String expResult = "Fall Armyworm Model";
+ String result = instance.getModelName();
+ assertEquals(expResult, result);
+
+ }
+
+ /**
+ * Test of getModelName method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelName_String() {
+
+ System.out.println("getModelName");
+ String language = "nb";
+ FallArmywormModel instance = new FallArmywormModel();
+ String expResult = "Fall Armyworm-modell";
+ String result = instance.getModelName(language);
+ assertEquals(expResult, result);
+
+ }
+
+ /**
+ * Test of getLicense method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetLicense() {
+
+ System.out.println("getLicense");
+ FallArmywormModel instance = new FallArmywormModel();
+ String expResult = "";
+ String result = instance.getLicense();
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getCopyright method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetCopyright() {
+
+ System.out.println("getCopyright");
+ FallArmywormModel instance = new FallArmywormModel();
+ String result = instance.getCopyright();
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getModelDescription method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelDescription_0args() {
+
+ System.out.println("getModelDescription");
+ FallArmywormModel instance = new FallArmywormModel();
+ String result = instance.getModelDescription();
+ assertNotNull(result);
+
+ }
+
+ /**
+ * Test of getModelDescription method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelDescription_String() {
+
+ System.out.println("getModelDescription");
+ String language = "nb";
+ FallArmywormModel instance = new FallArmywormModel();
+ String result = instance.getModelDescription(language);
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getWarningStatusInterpretation method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetWarningStatusInterpretation_0args() {
+
+ System.out.println("getWarningStatusInterpretation");
+ FallArmywormModel instance = new FallArmywormModel();
+ String result = instance.getWarningStatusInterpretation();
+ assertNotNull(result);
+
+ }
+
+ /**
+ * Test of getWarningStatusInterpretation method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetWarningStatusInterpretation_String() {
+
+ System.out.println("getWarningStatusInterpretation");
+ String language = "nb";
+ FallArmywormModel instance = new FallArmywormModel();
+ String result = instance.getWarningStatusInterpretation(language);
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getModelUsage method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelUsage_0args() {
+
+ System.out.println("getModelUsage");
+ FallArmywormModel instance = new FallArmywormModel();
+ String result = instance.getModelUsage();
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getModelUsage method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelUsage_String() {
+
+ System.out.println("getModelUsage");
+ String language = "nb";
+ FallArmywormModel instance = new FallArmywormModel();
+ String result = instance.getModelUsage(language);
+ assertNotNull(result);
+
+ }
+
+ /**
+ * Test of getSampleConfig method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetSampleConfig() {
+
+ System.out.println("getSampleConfig");
+ FallArmywormModel instance = new FallArmywormModel();
+ String result = instance.getSampleConfig();
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of setConfiguration method, of class FallArmywormModel.
+ */
+ //@Test
+ public void testSetConfiguration() throws Exception {
+ System.out.println("setConfiguration");
+ WeatherDataFileReader fr = new WeatherDataFileReader();
+ ModelConfiguration config = fr.getModelConfigurationWithWeatherData("/romeweather.json", "FAWMODEL01");
+ config.setConfigParameter("plantingDate", "2019-01-22+01");
+ config.setConfigParameter("timeZone", "Europe/Rome");
+ FallArmywormModel instance = new FallArmywormModel();
+ instance.setConfiguration(config);
+
+ }
+
+}
diff --git a/src/test/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJV8AdapterTest.java b/src/test/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJV8AdapterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a134f7f1feb98036588bd3e8ec5d317d6f840857
--- /dev/null
+++ b/src/test/java/no/nibio/vips/model/fallarmywormmodel/FallArmywormModelJV8AdapterTest.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (c) 2019 NIBIO <http://www.nibio.no/>.
+ *
+ * This file is part of FallArmywormModel.
+ * FallArmywormModel is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FallArmywormModel 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with FallArmywormModel. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package no.nibio.vips.model.fallarmywormmodel;
+
+
+import java.util.List;
+import no.nibio.vips.entity.ModelConfiguration;
+import no.nibio.vips.entity.Result;
+import no.nibio.vips.model.ModelId;
+import no.nibio.vips.util.test.WeatherDataFileReader;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author treinar
+ */
+public class FallArmywormModelJV8AdapterTest {
+
+ public FallArmywormModelJV8AdapterTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() {
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ }
+
+ @Before
+ public void setUp() {
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ /**
+ * Test of getResult method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetResult() throws Exception {
+ System.out.println("getResult");
+ WeatherDataFileReader fr = new WeatherDataFileReader();
+ ModelConfiguration config = fr.getModelConfigurationWithWeatherData("/romeweather.json", "FAWMODEL01");
+ config.setConfigParameter("observations", null);
+ config.setConfigParameter("longitude", "12.4885772");
+ config.setConfigParameter("latitude", "41.8822185");
+ config.setConfigParameter("plantingDate", "2019-02-02");
+ config.setConfigParameter("timeZone", "Europe/Rome");
+ config.setConfigParameter("intercroppingType", "BEANS/DESMODIUM");
+ config.setConfigParameter("observations10kmLast3Months", 0);
+ config.setConfigParameter("observations25kmLast3Months", 0);
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ instance.setConfiguration(config);
+ List<Result> result = instance.getResult();
+ assertNotNull(result);
+ result.forEach(r->{System.out.println(r.getValidTimeStart() + " Accumulated RISK = " + String.valueOf(r.getValue(FallArmywormModelJ2V8Adapter.MODEL_ID.toString(), "accumulatedRisk")) + ", warning status = " + r.getWarningStatus());});
+
+ }
+
+ /**
+ * Test of getModelId method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelId() {
+
+ System.out.println("getModelId");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String expResult = "FAWMODEL03";
+ ModelId result = instance.getModelId();
+ assertEquals(expResult, result.toString());
+
+
+ }
+
+ /**
+ * Test of getModelName method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelName_0args() {
+
+ System.out.println("getModelName");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String expResult = "Fall Armyworm Model";
+ String result = instance.getModelName();
+ assertEquals(expResult, result);
+
+ }
+
+ /**
+ * Test of getModelName method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelName_String() {
+
+ System.out.println("getModelName");
+ String language = "nb";
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String expResult = "Fall Armyworm-modell";
+ String result = instance.getModelName(language);
+ assertEquals(expResult, result);
+
+ }
+
+ /**
+ * Test of getLicense method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetLicense() {
+
+ System.out.println("getLicense");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String expResult = "";
+ String result = instance.getLicense();
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getCopyright method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetCopyright() {
+
+ System.out.println("getCopyright");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String result = instance.getCopyright();
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getModelDescription method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelDescription_0args() {
+
+ System.out.println("getModelDescription");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String result = instance.getModelDescription();
+ assertNotNull(result);
+
+ }
+
+ /**
+ * Test of getModelDescription method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelDescription_String() {
+
+ System.out.println("getModelDescription");
+ String language = "nb";
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String result = instance.getModelDescription(language);
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getWarningStatusInterpretation method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetWarningStatusInterpretation_0args() {
+
+ System.out.println("getWarningStatusInterpretation");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String result = instance.getWarningStatusInterpretation();
+ assertNotNull(result);
+
+ }
+
+ /**
+ * Test of getWarningStatusInterpretation method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetWarningStatusInterpretation_String() {
+
+ System.out.println("getWarningStatusInterpretation");
+ String language = "nb";
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String result = instance.getWarningStatusInterpretation(language);
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getModelUsage method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelUsage_0args() {
+
+ System.out.println("getModelUsage");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String result = instance.getModelUsage();
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of getModelUsage method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetModelUsage_String() {
+
+ System.out.println("getModelUsage");
+ String language = "nb";
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String result = instance.getModelUsage(language);
+ assertNotNull(result);
+
+ }
+
+ /**
+ * Test of getSampleConfig method, of class FallArmywormModel.
+ */
+ @Test
+ public void testGetSampleConfig() {
+
+ System.out.println("getSampleConfig");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ String result = instance.getSampleConfig();
+ assertNotNull(result);
+
+
+ }
+
+ /**
+ * Test of setConfiguration method, of class FallArmywormModel.
+ */
+ //@Test
+ public void testSetConfiguration() throws Exception {
+ System.out.println("setConfiguration");
+ WeatherDataFileReader fr = new WeatherDataFileReader();
+ ModelConfiguration config = fr.getModelConfigurationWithWeatherData("/romeweather.json", "FAWMODEL01");
+ config.setConfigParameter("plantingDate", "2019-01-22+01");
+ config.setConfigParameter("timeZone", "Europe/Rome");
+ FallArmywormModelJ2V8Adapter instance = new FallArmywormModelJ2V8Adapter();
+ instance.setConfiguration(config);
+
+ }
+
+}