diff --git a/pom.xml b/pom.xml index 22ca74301b34b586f6b5ebbc3c2e02be63dd1615..49bdcd6b9a61c91aa4d2fbc70af2dce3f26bc8f7 100755 --- a/pom.xml +++ b/pom.xml @@ -100,12 +100,12 @@ <dependency> <groupId>org.geotools</groupId> <artifactId>gt-api</artifactId> - <version>20.3</version> - </dependency> - <dependency> + <version>20.5</version> +</dependency> +<dependency> <groupId>org.geotools</groupId> <artifactId>gt-epsg-hsql</artifactId> - <version>20.3</version> + <version>20.5</version> </dependency> <dependency> @@ -130,19 +130,32 @@ <artifactId>unit-ri</artifactId> <version>1.0.3</version> </dependency> - +<dependency> + <groupId>org.renjin</groupId> + <artifactId>renjin-script-engine</artifactId> + <version>3.5-beta76</version> + </dependency> </dependencies> <repositories> - <repository> + <repository> <id>bedatadriven</id> <name>bedatadriven public repo</name> <url>https://nexus.bedatadriven.com/content/groups/public/</url> </repository> - <repository> + <repository> <id>osgeo</id> - <name>OSGEO</name> - <url>https://download.osgeo.org/webdav/geotools/</url> - </repository> + <name>OSGeo Release Repository</name> + <url>https://repo.osgeo.org/repository/release/</url> + <snapshots><enabled>false</enabled></snapshots> + <releases><enabled>true</enabled></releases> + </repository> + <repository> + <id>osgeo-snapshot</id> + <name>OSGeo Snapshot Repository</name> + <url>https://repo.osgeo.org/repository/snapshot/</url> + <snapshots><enabled>true</enabled></snapshots> + <releases><enabled>false</enabled></releases> + </repository> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> 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..5858a04ed9d8c7c5bceed8b9092cc922bef68b70 --- /dev/null +++ b/src/main/java/no/nibio/vips/model/RenjinModel.java @@ -0,0 +1,71 @@ +/* + * 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(); + } +}