diff --git a/pom.xml b/pom.xml index bc0158879cc86ca568cd7b6d25d78c2a65c657c8..9cbfee396949026204ba72f8bffe6e053b2b1c55 100755 --- a/pom.xml +++ b/pom.xml @@ -91,7 +91,19 @@ <artifactId>icu4j</artifactId> <version>52.1</version> </dependency> - </dependencies> + <dependency> + <groupId>org.renjin</groupId> + <artifactId>renjin-script-engine</artifactId> + <version>RELEASE</version> + </dependency> +</dependencies> +<repositories> + <repository> + <id>bedatadriven</id> + <name>bedatadriven public repo</name> + <url>https://nexus.bedatadriven.com/content/groups/public/</url> + </repository> +</repositories> <build> <plugins> <plugin> diff --git a/src/main/java/no/nibio/vips/model/RenjinModel.java b/src/main/java/no/nibio/vips/model/RenjinModel.java new file mode 100644 index 0000000000000000000000000000000000000000..ce74dd77126f5a0ec614490e1e35acc50fb552ac --- /dev/null +++ b/src/main/java/no/nibio/vips/model/RenjinModel.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2017 NIBIO <http://www.nibio.no/>. + * + * This file is part of VIPSCommon. + * VIPSCommon is free software: you can redistribute it and/or modify + * it under the terms of the NIBIO Open Source License as published by + * NIBIO, either version 1 of the License, or (at your option) any + * later version. + * + * VIPSCommon 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 + * NIBIO Open Source License for more details. + * + * You should have received a copy of the NIBIO Open Source License + * along with VIPSCommon. If not, see <http://www.nibio.no/licenses/>. + * + */ + +package no.nibio.vips.model; + +import java.io.InputStreamReader; +import javax.script.ScriptEngine; +import javax.script.ScriptException; +import org.renjin.script.RenjinScriptEngineFactory; +import org.renjin.sexp.ExternalPtr; + +/** + * When implementing a model using Renjin (http://www.renjin.org/ - R on the Java Virtual Machine), + * you must extend this class. + * + * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a> + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +public abstract class RenjinModel { + + protected ScriptEngine engine; + + public RenjinModel() + { + // create a Renjin engine: + RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory(); + engine = factory.getScriptEngine(); + } + + /** + * Run an R script file available on the classpath + * @param scriptPath + * @throws ScriptException + */ + public void runRScript(String scriptPath) throws ScriptException + { + InputStreamReader fr = new java.io.InputStreamReader(this.getClass().getResourceAsStream(scriptPath)); + engine.eval(fr); + } + + /** + * Place a Java object in the Renjin script engine + * @param objectName + * @param object + */ + public void placeObjectInScriptEngine(String objectName, Object object) + { + engine.put(objectName, object); + } + + /** + * + * @param objectName + * @return a Java object from the Renjin script engine + */ + public Object getObjectFromScriptEngine(String objectName) + { + ExternalPtr ptr = (ExternalPtr) engine.get(objectName); + return ptr.getInstance(); + } +}