From 8379c5cd31c322207719eb4e45506aaeac4bcccd Mon Sep 17 00:00:00 2001 From: Nicolas CHABALIER Date: Tue, 19 Dec 2023 17:13:54 +0100 Subject: [PATCH] Refactoring (remove r2js package for backward compatibility) and fix getting resources from external program. --- .../R/{R2js => }/AbstractR2jsSession.java | 3 +- .../org/math/R/{R2js => }/R2jsSession.java | 93 +++++-------------- .../java/org/math/R/{R2js => }/R2jsUtils.java | 2 +- src/test/java/org/math/R/BasicTest.java | 2 - src/test/java/org/math/R/BrentTest.java | 2 - .../org/math/R/GradientDescent1DTest.java | 2 - .../java/org/math/R/GradientDescentTest.java | 2 - .../org/math/R/{R2js => }/R2jsParserTest.java | 4 +- .../math/R/{R2js => }/R2jsSessionTest.java | 4 +- src/test/java/org/math/R/RPanelsTest.java | 2 - 10 files changed, 29 insertions(+), 87 deletions(-) rename src/main/java/org/math/R/{R2js => }/AbstractR2jsSession.java (99%) rename src/main/java/org/math/R/{R2js => }/R2jsSession.java (67%) rename src/main/java/org/math/R/{R2js => }/R2jsUtils.java (99%) rename src/test/java/org/math/R/{R2js => }/R2jsParserTest.java (98%) rename src/test/java/org/math/R/{R2js => }/R2jsSessionTest.java (99%) diff --git a/src/main/java/org/math/R/R2js/AbstractR2jsSession.java b/src/main/java/org/math/R/AbstractR2jsSession.java similarity index 99% rename from src/main/java/org/math/R/R2js/AbstractR2jsSession.java rename to src/main/java/org/math/R/AbstractR2jsSession.java index c947e605..6c7743d3 100644 --- a/src/main/java/org/math/R/R2js/AbstractR2jsSession.java +++ b/src/main/java/org/math/R/AbstractR2jsSession.java @@ -1,4 +1,4 @@ -package org.math.R.R2js; +package org.math.R; import java.io.BufferedReader; import java.io.File; @@ -13,7 +13,6 @@ import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; -import org.math.R.*; /** * This class evaluate an R expression by parsing it in javascript expression diff --git a/src/main/java/org/math/R/R2js/R2jsSession.java b/src/main/java/org/math/R/R2jsSession.java similarity index 67% rename from src/main/java/org/math/R/R2js/R2jsSession.java rename to src/main/java/org/math/R/R2jsSession.java index 7aec1772..4db39f33 100644 --- a/src/main/java/org/math/R/R2js/R2jsSession.java +++ b/src/main/java/org/math/R/R2jsSession.java @@ -1,12 +1,10 @@ -package org.math.R.R2js; +package org.math.R; import org.graalvm.polyglot.*; -import org.math.R.RLog; -import org.math.R.RLogPrintStream; -import java.io.File; -import java.io.PrintStream; +import java.io.*; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.*; public class R2jsSession extends AbstractR2jsSession { @@ -58,19 +56,29 @@ protected void putVariable(String varname, Object var) { context.getBindings("js").putMember(varname, var); } + private static StringBuilder resourceToStringBuilder(String resource) { + InputStream inputStream = R2jsSession.class.getResourceAsStream(MATH_JS_FILE); + StringBuilder textBuilder = new StringBuilder(); + try (Reader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) { + int c = 0; + while ((c = reader.read()) != -1) { + textBuilder.append((char) c); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + return textBuilder; + } protected synchronized void loadJSLibraries() throws Exception { if(MATH_SOURCE == null) { - URL math_url = getClass().getResource(MATH_JS_FILE); - URL rand_url = getClass().getResource(RAND_JS_FILE); - URL r_url = getClass().getResource(R_JS_FILE); - if (math_url == null || rand_url == null || r_url == null) { - throw new IllegalArgumentException("file not found!"); - } else { - MATH_SOURCE = Source.newBuilder("js",new File(math_url.toURI())).build(); - RAND_SOURCE = Source.newBuilder("js",new File(rand_url.toURI())).build(); - R_SOURCE = Source.newBuilder("js",new File(r_url.toURI())).build(); - } + Reader mathReader = new InputStreamReader(R2jsSession.class.getResourceAsStream(MATH_JS_FILE)); + Reader randReader = new InputStreamReader(R2jsSession.class.getResourceAsStream(RAND_JS_FILE)); + Reader rReader = new InputStreamReader(R2jsSession.class.getResourceAsStream(R_JS_FILE)); + + MATH_SOURCE = Source.newBuilder("js",mathReader, "math.js").build(); + RAND_SOURCE = Source.newBuilder("js",randReader, "rand.js").build(); + R_SOURCE = Source.newBuilder("js",rReader, "R.js").build(); } this.context.eval(MATH_SOURCE); @@ -230,61 +238,6 @@ public Object cast(Object o) throws ClassCastException { } catch (Exception e) { } return o; - - -// return o; -//// // If it's a ScriptObjectMirror, it can be an array or a matrix -// if (o instanceof Integer) { -// return Double.valueOf((int) o); -// } else if (o instanceof ScriptObjectMirror) { -// try { -//// System.err.println("// Casting of the ScriptObjectMirror to a double matrix"); -// return ((ScriptObjectMirror) o).to(double[][].class); -// } catch (Exception e) {//e.printStackTrace(); -// } -// -// try { -//// System.err.println("// Casting of the ScriptObjectMirror to a string array"); -// String[] stringArray = ((ScriptObjectMirror) o).to(String[].class); -// -//// System.err.println("// Check if the String[] array can be cast to a double[] array"); -// try { -// for (String string : stringArray) { -// Double.valueOf(string); -// } -// } catch (Exception e) {//e.printStackTrace(); -// // It can't be cast to double[] so we return String[] -// return stringArray; -// } -// -//// System.err.println("// return double[] array"); -// return ((ScriptObjectMirror) o).to(double[].class); -// -// } catch (Exception e) {//e.printStackTrace(); -// } -// -// try { -//// System.err.println("// Casting of the ScriptObjectMirror to a double array"); -// return ((ScriptObjectMirror) o).to(double[].class); -// } catch (Exception e) {//e.printStackTrace(); -// } -// -// try { -//// System.err.println(" // Casting of the ScriptObjectMirror to a list/map"); -// Map m = ((ScriptObjectMirror) o).to(Map.class); -// try { -// return asMatrix(m); -// } catch (ClassCastException c) { -// //c.printStackTrace(); -// return m; -// } -// } catch (Exception e) {//e.printStackTrace(); -// } -// -// throw new IllegalArgumentException("Impossible to cast object: ScriptObjectMirror"); -// } else { -// return o; -// } } @Override diff --git a/src/main/java/org/math/R/R2js/R2jsUtils.java b/src/main/java/org/math/R/R2jsUtils.java similarity index 99% rename from src/main/java/org/math/R/R2js/R2jsUtils.java rename to src/main/java/org/math/R/R2jsUtils.java index ef916e28..9aee6eeb 100644 --- a/src/main/java/org/math/R/R2js/R2jsUtils.java +++ b/src/main/java/org/math/R/R2jsUtils.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package org.math.R.R2js; +package org.math.R; import java.util.ArrayList; import java.util.List; diff --git a/src/test/java/org/math/R/BasicTest.java b/src/test/java/org/math/R/BasicTest.java index ebaa806c..77b9ad0e 100644 --- a/src/test/java/org/math/R/BasicTest.java +++ b/src/test/java/org/math/R/BasicTest.java @@ -9,8 +9,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.math.R.R2js.AbstractR2jsSession; -import org.math.R.R2js.R2jsSession; /** * diff --git a/src/test/java/org/math/R/BrentTest.java b/src/test/java/org/math/R/BrentTest.java index 9b01a326..d686db7e 100644 --- a/src/test/java/org/math/R/BrentTest.java +++ b/src/test/java/org/math/R/BrentTest.java @@ -7,8 +7,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.math.R.R2js.R2jsSession; -import org.math.R.R2js.AbstractR2jsSession; import org.math.array.DoubleArray; import org.math.array.LinearAlgebra; diff --git a/src/test/java/org/math/R/GradientDescent1DTest.java b/src/test/java/org/math/R/GradientDescent1DTest.java index df7ede1f..6be16eee 100644 --- a/src/test/java/org/math/R/GradientDescent1DTest.java +++ b/src/test/java/org/math/R/GradientDescent1DTest.java @@ -7,8 +7,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.math.R.R2js.AbstractR2jsSession; -import org.math.R.R2js.R2jsSession; import org.math.R.Rsession.RException; import org.math.array.DoubleArray; diff --git a/src/test/java/org/math/R/GradientDescentTest.java b/src/test/java/org/math/R/GradientDescentTest.java index a4e05909..483ac362 100644 --- a/src/test/java/org/math/R/GradientDescentTest.java +++ b/src/test/java/org/math/R/GradientDescentTest.java @@ -6,8 +6,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.math.R.R2js.AbstractR2jsSession; -import org.math.R.R2js.R2jsSession; import org.math.R.Rsession.RException; import org.math.array.DoubleArray; diff --git a/src/test/java/org/math/R/R2js/R2jsParserTest.java b/src/test/java/org/math/R/R2jsParserTest.java similarity index 98% rename from src/test/java/org/math/R/R2js/R2jsParserTest.java rename to src/test/java/org/math/R/R2jsParserTest.java index aa20bd47..3212c95f 100644 --- a/src/test/java/org/math/R/R2js/R2jsParserTest.java +++ b/src/test/java/org/math/R/R2jsParserTest.java @@ -1,8 +1,10 @@ -package org.math.R.R2js; +package org.math.R; import java.util.Arrays; import java.util.List; import org.junit.Test; +import org.math.R.AbstractR2jsSession; +import org.math.R.R2jsUtils; import org.math.R.Rsession; /** diff --git a/src/test/java/org/math/R/R2js/R2jsSessionTest.java b/src/test/java/org/math/R/R2jsSessionTest.java similarity index 99% rename from src/test/java/org/math/R/R2js/R2jsSessionTest.java rename to src/test/java/org/math/R/R2jsSessionTest.java index 017ad1d7..a96e8e98 100644 --- a/src/test/java/org/math/R/R2js/R2jsSessionTest.java +++ b/src/test/java/org/math/R/R2jsSessionTest.java @@ -1,4 +1,4 @@ -package org.math.R.R2js; +package org.math.R; import java.io.*; import java.net.InetAddress; @@ -16,8 +16,6 @@ //import org.graalvm.polyglot.*; import org.junit.Test; -import org.math.R.RLog; -import org.math.R.RLogSlf4j; import org.math.R.Rsession.RException; import static org.junit.Assert.*; diff --git a/src/test/java/org/math/R/RPanelsTest.java b/src/test/java/org/math/R/RPanelsTest.java index 9b2b06ae..8d40921f 100644 --- a/src/test/java/org/math/R/RPanelsTest.java +++ b/src/test/java/org/math/R/RPanelsTest.java @@ -10,8 +10,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.math.R.R2js.AbstractR2jsSession; -import org.math.R.R2js.R2jsSession; import org.math.R.Rsession.RException; /**