From 567752fc4e7ee13e4f1be56e1bf6eeb87637bfa4 Mon Sep 17 00:00:00 2001 From: plata Date: Wed, 30 Jan 2019 17:20:37 +0100 Subject: [PATCH 01/32] First steps (#1637) --- .../src/main/java/module-info.java | 1 - .../containers/GenericContainersManager.java | 33 ++++++++++--------- .../src/main/java/module-info.java | 1 - .../controller/library/LibraryController.java | 33 ++++++++++--------- .../src/main/java/module-info.java | 2 +- .../phoenicis/library/ShortcutManager.java | 9 ++--- .../org/phoenicis/library/ShortcutRunner.java | 29 ++++++++++++---- .../src/main/java/module-info.java | 1 - .../nashorn/builtins/IncludeInjector.java | 10 ++---- pom.xml | 5 +++ 10 files changed, 70 insertions(+), 54 deletions(-) diff --git a/phoenicis-containers/src/main/java/module-info.java b/phoenicis-containers/src/main/java/module-info.java index 3447e7e7d03..36c7cc6fbf8 100644 --- a/phoenicis-containers/src/main/java/module-info.java +++ b/phoenicis-containers/src/main/java/module-info.java @@ -4,7 +4,6 @@ opens org.phoenicis.containers; requires com.fasterxml.jackson.core; requires com.fasterxml.jackson.databind; - requires jdk.scripting.nashorn; requires org.phoenicis.configuration; requires org.phoenicis.engines; requires org.phoenicis.library; diff --git a/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java b/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java index cd4c2f7c467..8ba5f37b53f 100644 --- a/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java +++ b/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java @@ -20,7 +20,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import jdk.nashorn.api.scripting.ScriptObjectMirror; import org.phoenicis.configuration.security.Safe; import org.phoenicis.containers.dto.ContainerCategoryDTO; import org.phoenicis.containers.dto.ContainerDTO; @@ -133,21 +132,23 @@ public void deleteContainer(ContainerDTO container, Consumer errorCal final String engineId = container.getEngine().toLowerCase(); List categories = this.libraryManager.fetchShortcuts(); - categories.stream().flatMap(shortcutCategoryDTO -> shortcutCategoryDTO.getShortcuts().stream()) - .forEach(shortcutDTO -> { - final InteractiveScriptSession interactiveScriptSession = this.scriptInterpreter - .createInteractiveSession(); - interactiveScriptSession.eval( - "include([\"engines\", \"" + engineId + "\", \"shortcuts\", \"reader\"]);", - ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { - final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; - shortcutReader.callMember("of", shortcutDTO); - final String containerName = (String) shortcutReader.callMember("container"); - if (containerName.equals(container.getName())) { - this.shortcutManager.deleteShortcut(shortcutDTO); - } - }, errorCallback), errorCallback); - }); + /* + * categories.stream().flatMap(shortcutCategoryDTO -> shortcutCategoryDTO.getShortcuts().stream()) + * .forEach(shortcutDTO -> { + * final InteractiveScriptSession interactiveScriptSession = this.scriptInterpreter + * .createInteractiveSession(); + * interactiveScriptSession.eval( + * "include([\"engines\", \"" + engineId + "\", \"shortcuts\", \"reader\"]);", + * ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { + * final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; + * shortcutReader.callMember("of", shortcutDTO); + * final String containerName = (String) shortcutReader.callMember("container"); + * if (containerName.equals(container.getName())) { + * this.shortcutManager.deleteShortcut(shortcutDTO); + * } + * }, errorCallback), errorCallback); + * }); + */ } /** diff --git a/phoenicis-javafx/src/main/java/module-info.java b/phoenicis-javafx/src/main/java/module-info.java index f95321c6e16..1128ffe92f0 100644 --- a/phoenicis-javafx/src/main/java/module-info.java +++ b/phoenicis-javafx/src/main/java/module-info.java @@ -44,7 +44,6 @@ requires javafx.base; requires javafx.controls; requires javafx.web; - requires jdk.scripting.nashorn; requires org.phoenicis.configuration; requires org.phoenicis.containers; requires org.phoenicis.engines; diff --git a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/library/LibraryController.java b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/library/LibraryController.java index 2da57bfe190..20caaf9f5a0 100644 --- a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/library/LibraryController.java +++ b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/library/LibraryController.java @@ -19,7 +19,6 @@ package org.phoenicis.javafx.controller.library; import javafx.application.Platform; -import jdk.nashorn.api.scripting.ScriptObjectMirror; import org.phoenicis.javafx.controller.library.console.ConsoleController; import org.phoenicis.javafx.dialogs.ConfirmDialog; import org.phoenicis.javafx.dialogs.ErrorDialog; @@ -150,21 +149,23 @@ private void createShortcut(ShortcutCreationDTO shortcutCreationDTO) { final String engineId = engine.toLowerCase(); final String container = split[1]; - final InteractiveScriptSession interactiveScriptSession = scriptInterpreter.createInteractiveSession(); - - interactiveScriptSession.eval( - "include([\"engines\", \"" + engineId + "\", \"shortcuts\", \"" + engineId + "\"]);", - ignored -> interactiveScriptSession.eval("new " + engine + "Shortcut()", output -> { - final ScriptObjectMirror shortcutObject = (ScriptObjectMirror) output; - shortcutObject.callMember("name", shortcutCreationDTO.getName()); - shortcutObject.callMember("category", shortcutCreationDTO.getCategory()); - shortcutObject.callMember("description", shortcutCreationDTO.getDescription()); - shortcutObject.callMember("miniature", shortcutCreationDTO.getMiniature()); - shortcutObject.callMember("search", shortcutCreationDTO.getExecutable().getName()); - shortcutObject.callMember("prefix", container); - shortcutObject.callMember("create"); - }, e -> this.showErrorMessage(e, tr("Error while creating shortcut"))), - e -> this.showErrorMessage(e, tr("Error while creating shortcut"))); + /* + * final InteractiveScriptSession interactiveScriptSession = scriptInterpreter.createInteractiveSession(); + * + * interactiveScriptSession.eval( + * "include([\"engines\", \"" + engineId + "\", \"shortcuts\", \"" + engineId + "\"]);", + * ignored -> interactiveScriptSession.eval("new " + engine + "Shortcut()", output -> { + * final ScriptObjectMirror shortcutObject = (ScriptObjectMirror) output; + * shortcutObject.callMember("name", shortcutCreationDTO.getName()); + * shortcutObject.callMember("category", shortcutCreationDTO.getCategory()); + * shortcutObject.callMember("description", shortcutCreationDTO.getDescription()); + * shortcutObject.callMember("miniature", shortcutCreationDTO.getMiniature()); + * shortcutObject.callMember("search", shortcutCreationDTO.getExecutable().getName()); + * shortcutObject.callMember("prefix", container); + * shortcutObject.callMember("create"); + * }, e -> this.showErrorMessage(e, tr("Error while creating shortcut"))), + * e -> this.showErrorMessage(e, tr("Error while creating shortcut"))); + */ } private void runShortcut(ShortcutDTO shortcutDTO) { diff --git a/phoenicis-library/src/main/java/module-info.java b/phoenicis-library/src/main/java/module-info.java index 4dda2d360b9..6e8e8638be6 100644 --- a/phoenicis-library/src/main/java/module-info.java +++ b/phoenicis-library/src/main/java/module-info.java @@ -4,7 +4,7 @@ opens org.phoenicis.library; requires com.fasterxml.jackson.databind; requires commons.lang; - requires jdk.scripting.nashorn; + requires java.scripting; requires org.apache.commons.io; requires org.phoenicis.configuration; requires org.phoenicis.multithreading; diff --git a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java index 09a78ba966d..cad482cd29d 100644 --- a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java +++ b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java @@ -19,7 +19,6 @@ package org.phoenicis.library; import com.fasterxml.jackson.databind.ObjectMapper; -import jdk.nashorn.api.scripting.ScriptObjectMirror; import org.apache.commons.io.FileUtils; import org.phoenicis.configuration.security.Safe; import org.phoenicis.library.dto.ShortcutDTO; @@ -122,9 +121,11 @@ public void uninstallFromShortcut(ShortcutDTO shortcutDTO, Consumer e interactiveScriptSession.eval("include([\"engines\", \"wine\", \"shortcuts\", \"reader\"]);", ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { - final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; - shortcutReader.callMember("of", shortcutDTO); - shortcutReader.callMember("uninstall"); + /* + * final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; + * shortcutReader.callMember("of", shortcutDTO); + * shortcutReader.callMember("uninstall"); + */ }, errorCallback), errorCallback); } diff --git a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java index e0a3bcb43f1..5988518c71a 100644 --- a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java +++ b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java @@ -21,7 +21,11 @@ import org.phoenicis.library.dto.ShortcutDTO; import org.phoenicis.scripts.interpreter.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; -import jdk.nashorn.api.scripting.ScriptObjectMirror; + +import javax.script.Invocable; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.script.ScriptException; import java.util.List; import java.util.function.Consumer; @@ -42,11 +46,20 @@ public void run(String shortcutName, List arguments, Consumer public void run(ShortcutDTO shortcutDTO, List arguments, Consumer errorCallback) { final InteractiveScriptSession interactiveScriptSession = scriptInterpreter.createInteractiveSession(); + ScriptEngineManager m = new ScriptEngineManager(); + ScriptEngine engine = m.getEngineByName("graal.js"); + Invocable inv = (Invocable) engine; interactiveScriptSession.eval("include([\"engines\", \"wine\", \"shortcuts\", \"reader\"]);", ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { - final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; - shortcutReader.callMember("of", shortcutDTO); - shortcutReader.callMember("run", arguments); + final Object shortcutReader = (Object) output; + try { + inv.invokeMethod(shortcutReader, "of", shortcutDTO); + inv.invokeMethod(shortcutReader, "run", arguments); + } catch (ScriptException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } }, errorCallback), errorCallback); } @@ -55,9 +68,11 @@ public void stop(ShortcutDTO shortcutDTO, Consumer errorCallback) { interactiveScriptSession.eval("include([\"engines\", \"wine\", \"shortcuts\", \"reader\"]);", ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { - final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; - shortcutReader.callMember("of", shortcutDTO); - shortcutReader.callMember("stop"); + /* + * final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; + * shortcutReader.callMember("of", shortcutDTO); + * shortcutReader.callMember("stop"); + */ }, errorCallback), errorCallback); } diff --git a/phoenicis-scripts/src/main/java/module-info.java b/phoenicis-scripts/src/main/java/module-info.java index 399ea008e47..b7209735cd5 100644 --- a/phoenicis-scripts/src/main/java/module-info.java +++ b/phoenicis-scripts/src/main/java/module-info.java @@ -6,7 +6,6 @@ opens org.phoenicis.scripts; opens org.phoenicis.scripts.wizard; requires java.scripting; - requires jdk.scripting.nashorn; requires org.apache.commons.io; requires org.phoenicis.configuration; requires org.phoenicis.entities; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/IncludeInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/IncludeInjector.java index 18cc15237ae..05d6b384fb4 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/IncludeInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/IncludeInjector.java @@ -1,14 +1,10 @@ package org.phoenicis.scripts.nashorn.builtins; -import jdk.nashorn.api.scripting.ScriptObjectMirror; import org.phoenicis.scripts.interpreter.ScriptException; import org.phoenicis.scripts.interpreter.ScriptFetcher; import org.phoenicis.scripts.nashorn.NashornEngine; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.function.Consumer; /** @@ -25,8 +21,8 @@ public IncludeInjector(ScriptFetcher scriptFetcher) { public void injectInto(NashornEngine nashornEngine) { final Set> includedScripts = new HashSet<>(); - nashornEngine.put("include", (Consumer) args -> { - final String[] arguments = args.to(String[].class); + nashornEngine.put("include", (Consumer) args -> { + final String[] arguments = (String[]) args.toArray(); final String script = scriptFetcher.getScript(arguments); if (script == null) { throwException(new ScriptException(Arrays.asList(arguments).toString() + " is not found")); diff --git a/pom.xml b/pom.xml index e87d7ec543d..e0ac9af7f05 100644 --- a/pom.xml +++ b/pom.xml @@ -80,6 +80,11 @@ gettext-commons 0.9.8 + + org.graalvm + graal-sdk + 1.0.0-rc7 + From c098fd242e7c3e5a531499d0ea0e77c70d49c31a Mon Sep 17 00:00:00 2001 From: plata Date: Sat, 23 Feb 2019 13:51:49 +0100 Subject: [PATCH 02/32] ShortcutRunner: include by ID --- .../src/main/java/org/phoenicis/library/ShortcutRunner.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java index 5988518c71a..f7740667228 100644 --- a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java +++ b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java @@ -49,7 +49,7 @@ public void run(ShortcutDTO shortcutDTO, List arguments, Consumer interactiveScriptSession.eval("new ShortcutReader()", output -> { final Object shortcutReader = (Object) output; try { @@ -66,7 +66,7 @@ public void run(ShortcutDTO shortcutDTO, List arguments, Consumer errorCallback) { final InteractiveScriptSession interactiveScriptSession = scriptInterpreter.createInteractiveSession(); - interactiveScriptSession.eval("include([\"engines\", \"wine\", \"shortcuts\", \"reader\"]);", + interactiveScriptSession.eval("include(\"engines.wine.shortcuts.reader\");", ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { /* * final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; From d0ec44afbcd5431e794a17f46f3b604c753686f8 Mon Sep 17 00:00:00 2001 From: plata Date: Sat, 2 Mar 2019 16:15:28 +0100 Subject: [PATCH 03/32] Rename Nashorn related classes to "PhoenicisScript..." (#1870) --- .../phoenicis/scripts/ScriptsConfiguration.java | 16 ++++++++-------- .../PhoenicisInteractiveScriptSession.java} | 12 ++++++------ .../PhoenicisScriptEngine.java} | 6 +++--- .../PhoenicisScriptEngineFactory.java} | 17 +++++++++-------- .../PhoenicisScriptInterpreter.java} | 14 +++++++------- .../builtins/BeanInjector.java | 8 ++++---- .../builtins/EngineInjector.java | 10 +++++----- .../builtins/IncludeInjector.java | 10 +++++----- .../engine/builtins/LocalisationInjector.java | 14 ++++++++++++++ .../builtins/ScriptUtilitiesInjector.java | 16 ++++++++++++++++ .../builtins/SetupWizardInjector.java | 13 +++++++------ .../nashorn/builtins/LocalisationInjector.java | 14 -------------- .../builtins/ScriptUtilitiesInjector.java | 15 --------------- .../{nashorn => engine}/builtins/utils.js | 0 .../org/phoenicis/tests/PhoenicisTestsApp.java | 2 +- 15 files changed, 85 insertions(+), 82 deletions(-) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{nashorn/NashornInteractiveSession.java => engine/PhoenicisInteractiveScriptSession.java} (68%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{nashorn/NashornEngine.java => engine/PhoenicisScriptEngine.java} (95%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{nashorn/NashornEngineFactory.java => engine/PhoenicisScriptEngineFactory.java} (67%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{nashorn/NashornScriptInterpreter.java => engine/PhoenicisScriptInterpreter.java} (68%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{nashorn => engine}/builtins/BeanInjector.java (78%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{nashorn => engine}/builtins/EngineInjector.java (58%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{nashorn => engine}/builtins/IncludeInjector.java (72%) create mode 100644 phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/LocalisationInjector.java create mode 100644 phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/ScriptUtilitiesInjector.java rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{nashorn => engine}/builtins/SetupWizardInjector.java (70%) delete mode 100644 phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/LocalisationInjector.java delete mode 100644 phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/ScriptUtilitiesInjector.java rename phoenicis-scripts/src/main/resources/org/phoenicis/scripts/{nashorn => engine}/builtins/utils.js (100%) diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java index c196cf63880..29c107db0fe 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java @@ -23,9 +23,9 @@ import org.phoenicis.scripts.interpreter.BackgroundScriptInterpreter; import org.phoenicis.scripts.interpreter.ScriptFetcher; import org.phoenicis.scripts.interpreter.ScriptInterpreter; -import org.phoenicis.scripts.nashorn.NashornEngineFactory; -import org.phoenicis.scripts.nashorn.NashornScriptInterpreter; -import org.phoenicis.scripts.nashorn.builtins.*; +import org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory; +import org.phoenicis.scripts.engine.PhoenicisScriptInterpreter; +import org.phoenicis.scripts.engine.builtins.*; import org.phoenicis.scripts.wizard.WizardConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; @@ -51,8 +51,8 @@ public class ScriptsConfiguration { private MultithreadingConfiguration multithreadingConfiguration; @Bean - public NashornEngineFactory scriptEngineFactory() { - return new NashornEngineFactory(Arrays.asList(new ScriptUtilitiesInjector(), + public PhoenicisScriptEngineFactory nashornScriptEngineFactory() { + return new PhoenicisScriptEngineFactory(Arrays.asList(new ScriptUtilitiesInjector(), new BeanInjector(applicationContext), new SetupWizardInjector(wizardConfiguration.setupWizardFactory()), new IncludeInjector(scriptFetcher()), new LocalisationInjector())); } @@ -64,12 +64,12 @@ public ScriptFetcher scriptFetcher() { @Bean public ScriptInterpreter scriptInterpreter() { - return new BackgroundScriptInterpreter(nashornInterpreter(), + return new BackgroundScriptInterpreter(nashornScriptInterpreter(), multithreadingConfiguration.scriptExecutorService()); } @Bean - ScriptInterpreter nashornInterpreter() { - return new NashornScriptInterpreter(scriptEngineFactory()); + ScriptInterpreter nashornScriptInterpreter() { + return new PhoenicisScriptInterpreter(nashornScriptEngineFactory()); } } diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornInteractiveSession.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisInteractiveScriptSession.java similarity index 68% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornInteractiveSession.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisInteractiveScriptSession.java index 5fd8c300dc6..ffaddd9fe6a 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornInteractiveSession.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisInteractiveScriptSession.java @@ -16,21 +16,21 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package org.phoenicis.scripts.nashorn; +package org.phoenicis.scripts.engine; import org.phoenicis.scripts.interpreter.InteractiveScriptSession; import java.util.function.Consumer; -public class NashornInteractiveSession implements InteractiveScriptSession { - private final NashornEngine nashornEngine; +public class PhoenicisInteractiveScriptSession implements InteractiveScriptSession { + private final PhoenicisScriptEngine phoenicisScriptEngine; - public NashornInteractiveSession(NashornEngineFactory nashornEngineFactory) { - this.nashornEngine = nashornEngineFactory.createEngine(); + public PhoenicisInteractiveScriptSession(PhoenicisScriptEngineFactory phoenicisScriptEngineFactory) { + this.phoenicisScriptEngine = phoenicisScriptEngineFactory.createEngine(); } @Override public void eval(String evaluation, Consumer responseCallback, Consumer errorCallback) { - responseCallback.accept(nashornEngine.evalAndReturn(evaluation, errorCallback)); + responseCallback.accept(phoenicisScriptEngine.evalAndReturn(evaluation, errorCallback)); } } diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornEngine.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java similarity index 95% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornEngine.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java index 2f922cab3db..ac9474558d6 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornEngine.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java @@ -16,7 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package org.phoenicis.scripts.nashorn; +package org.phoenicis.scripts.engine; import javax.script.ScriptEngine; import java.io.InputStreamReader; @@ -24,11 +24,11 @@ import java.util.List; import java.util.function.Consumer; -public class NashornEngine { +public class PhoenicisScriptEngine { private final ScriptEngine scriptEngine; private final List> errorHandlers = new ArrayList<>(); - NashornEngine(ScriptEngine scriptEngine) { + PhoenicisScriptEngine(ScriptEngine scriptEngine) { this.scriptEngine = scriptEngine; } diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornEngineFactory.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java similarity index 67% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornEngineFactory.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java index 29f45603592..efa1e392eed 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornEngineFactory.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java @@ -16,25 +16,26 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package org.phoenicis.scripts.nashorn; +package org.phoenicis.scripts.engine; -import org.phoenicis.scripts.nashorn.builtins.EngineInjector; +import org.phoenicis.scripts.engine.builtins.EngineInjector; import javax.script.ScriptEngineManager; import java.util.List; -public class NashornEngineFactory { +public class PhoenicisScriptEngineFactory { private final List engineInjectors; - public NashornEngineFactory(List engineInjectors) { + public PhoenicisScriptEngineFactory(List engineInjectors) { this.engineInjectors = engineInjectors; } - NashornEngine createEngine() { - final NashornEngine nashornEngine = new NashornEngine(new ScriptEngineManager().getEngineByName("nashorn")); + PhoenicisScriptEngine createEngine() { + final PhoenicisScriptEngine phoenicisScriptEngine = new PhoenicisScriptEngine( + new ScriptEngineManager().getEngineByName("nashorn")); - engineInjectors.forEach(engineInjector -> engineInjector.injectInto(nashornEngine)); + engineInjectors.forEach(engineInjector -> engineInjector.injectInto(phoenicisScriptEngine)); - return nashornEngine; + return phoenicisScriptEngine; } } diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornScriptInterpreter.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptInterpreter.java similarity index 68% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornScriptInterpreter.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptInterpreter.java index 6241c5607c7..1b81c6a2793 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/NashornScriptInterpreter.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptInterpreter.java @@ -16,28 +16,28 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package org.phoenicis.scripts.nashorn; +package org.phoenicis.scripts.engine; import org.phoenicis.scripts.interpreter.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.function.Consumer; -public class NashornScriptInterpreter implements ScriptInterpreter { - private final NashornEngineFactory nashornEngineFactory; +public class PhoenicisScriptInterpreter implements ScriptInterpreter { + private final PhoenicisScriptEngineFactory phoenicisScriptEngineFactory; - public NashornScriptInterpreter(NashornEngineFactory nashornEngineFactory) { - this.nashornEngineFactory = nashornEngineFactory; + public PhoenicisScriptInterpreter(PhoenicisScriptEngineFactory phoenicisScriptEngineFactory) { + this.phoenicisScriptEngineFactory = phoenicisScriptEngineFactory; } @Override public void runScript(String scriptContent, Runnable doneCallback, Consumer errorCallback) { - nashornEngineFactory.createEngine().eval(scriptContent, doneCallback, errorCallback); + phoenicisScriptEngineFactory.createEngine().eval(scriptContent, doneCallback, errorCallback); } @Override public InteractiveScriptSession createInteractiveSession() { - return new NashornInteractiveSession(nashornEngineFactory); + return new PhoenicisInteractiveScriptSession(phoenicisScriptEngineFactory); } } diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/BeanInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/BeanInjector.java similarity index 78% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/BeanInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/BeanInjector.java index 74d188f5ccd..73122411846 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/BeanInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/BeanInjector.java @@ -1,7 +1,7 @@ -package org.phoenicis.scripts.nashorn.builtins; +package org.phoenicis.scripts.engine.builtins; import org.phoenicis.configuration.security.Safe; -import org.phoenicis.scripts.nashorn.NashornEngine; +import org.phoenicis.scripts.engine.PhoenicisScriptEngine; import org.springframework.context.ApplicationContext; import java.lang.annotation.Annotation; @@ -18,8 +18,8 @@ public BeanInjector(ApplicationContext applicationContext) { } @Override - public void injectInto(NashornEngine nashornEngine) { - nashornEngine.put("Bean", (Function) this::fetchBean, this::throwException); + public void injectInto(PhoenicisScriptEngine phoenicisScriptEngine) { + phoenicisScriptEngine.put("Bean", (Function) this::fetchBean, this::throwException); } private Object fetchBean(String beanName) { diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/EngineInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/EngineInjector.java similarity index 58% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/EngineInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/EngineInjector.java index 770e0dbfd19..430170ffb35 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/EngineInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/EngineInjector.java @@ -1,17 +1,17 @@ -package org.phoenicis.scripts.nashorn.builtins; +package org.phoenicis.scripts.engine.builtins; -import org.phoenicis.scripts.nashorn.NashornEngine; +import org.phoenicis.scripts.engine.PhoenicisScriptEngine; /** * Injects some code into a Script Engine */ public interface EngineInjector { /** - * Injects component into a nashorn engine + * Injects component into an engine engine * - * @param nashornEngine The engine to be injected in + * @param phoenicisScriptEngine The engine to be injected in */ - void injectInto(NashornEngine nashornEngine); + void injectInto(PhoenicisScriptEngine phoenicisScriptEngine); /** * Throws a ScriptException error (can be use as a lambda) diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/IncludeInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/IncludeInjector.java similarity index 72% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/IncludeInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/IncludeInjector.java index afa056c14ab..ce89aaaa6bc 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/IncludeInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/IncludeInjector.java @@ -1,8 +1,8 @@ -package org.phoenicis.scripts.nashorn.builtins; +package org.phoenicis.scripts.engine.builtins; import org.phoenicis.scripts.interpreter.ScriptException; import org.phoenicis.scripts.interpreter.ScriptFetcher; -import org.phoenicis.scripts.nashorn.NashornEngine; +import org.phoenicis.scripts.engine.PhoenicisScriptEngine; import java.util.HashSet; import java.util.Set; @@ -19,17 +19,17 @@ public IncludeInjector(ScriptFetcher scriptFetcher) { } @Override - public void injectInto(NashornEngine nashornEngine) { + public void injectInto(PhoenicisScriptEngine phoenicisScriptEngine) { final Set includedScripts = new HashSet<>(); - nashornEngine.put("include", (Consumer) argument -> { + phoenicisScriptEngine.put("include", (Consumer) argument -> { final String script = scriptFetcher.getScript(argument); if (script == null) { throwException(new ScriptException(argument + " is not found")); } if (includedScripts.add(argument)) { - nashornEngine.eval("//# sourceURL=" + argument + "\n" + script, + phoenicisScriptEngine.eval("//# sourceURL=" + argument + "\n" + script, this::throwException); } }, this::throwException); diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/LocalisationInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/LocalisationInjector.java new file mode 100644 index 00000000000..9934ee36970 --- /dev/null +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/LocalisationInjector.java @@ -0,0 +1,14 @@ +package org.phoenicis.scripts.engine.builtins; + +import org.phoenicis.scripts.engine.PhoenicisScriptEngine; + +/** + * Injects tr() function into a Script Engine + */ +public class LocalisationInjector implements EngineInjector { + @Override + public void injectInto(PhoenicisScriptEngine phoenicisScriptEngine) { + phoenicisScriptEngine.eval("var tr = Packages.org.phoenicis.configuration.localisation.Localisation.tr;", + this::throwException); + } +} diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/ScriptUtilitiesInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/ScriptUtilitiesInjector.java new file mode 100644 index 00000000000..72e22c93578 --- /dev/null +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/ScriptUtilitiesInjector.java @@ -0,0 +1,16 @@ +package org.phoenicis.scripts.engine.builtins; + +import org.phoenicis.scripts.engine.PhoenicisScriptEngine; + +import java.io.InputStreamReader; + +/** + * Includes utils.js + */ +public class ScriptUtilitiesInjector implements EngineInjector { + @Override + public void injectInto(PhoenicisScriptEngine phoenicisScriptEngine) { + phoenicisScriptEngine.eval(new InputStreamReader(getClass().getResourceAsStream("utils.js")), + this::throwException); + } +} diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/SetupWizardInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/SetupWizardInjector.java similarity index 70% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/SetupWizardInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/SetupWizardInjector.java index b2e464e0be5..885c16c77b4 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/SetupWizardInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/SetupWizardInjector.java @@ -1,7 +1,7 @@ -package org.phoenicis.scripts.nashorn.builtins; +package org.phoenicis.scripts.engine.builtins; import org.phoenicis.scripts.TriFunction; -import org.phoenicis.scripts.nashorn.NashornEngine; +import org.phoenicis.scripts.engine.PhoenicisScriptEngine; import org.phoenicis.scripts.ui.InstallationType; import org.phoenicis.scripts.wizard.UiSetupWizardFactory; import org.phoenicis.scripts.wizard.UiSetupWizardImplementation; @@ -20,15 +20,16 @@ public SetupWizardInjector(UiSetupWizardFactory uiSetupWizardFactory) { } @Override - public void injectInto(NashornEngine nashornEngine) { - nashornEngine.eval("var InstallationType = Java.type(\"" + InstallationType.class.getCanonicalName() + "\")", + public void injectInto(PhoenicisScriptEngine phoenicisScriptEngine) { + phoenicisScriptEngine.eval( + "var InstallationType = Java.type(\"" + InstallationType.class.getCanonicalName() + "\")", this::throwException); - nashornEngine.put("SetupWizard", + phoenicisScriptEngine.put("SetupWizard", (TriFunction, UiSetupWizardImplementation>) (installationType, name, miniature) -> { final UiSetupWizardImplementation uiSetupWizardImplementation = uiSetupWizardFactory.create(name, miniature, installationType); - nashornEngine.addErrorHandler(e -> uiSetupWizardImplementation.close()); + phoenicisScriptEngine.addErrorHandler(e -> uiSetupWizardImplementation.close()); return uiSetupWizardImplementation; }, this::throwException); diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/LocalisationInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/LocalisationInjector.java deleted file mode 100644 index de336d90bd2..00000000000 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/LocalisationInjector.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.phoenicis.scripts.nashorn.builtins; - -import org.phoenicis.scripts.nashorn.NashornEngine; - -/** - * Injects tr() function into a Script Engine - */ -public class LocalisationInjector implements EngineInjector { - @Override - public void injectInto(NashornEngine nashornEngine) { - nashornEngine.eval("var tr = Packages.org.phoenicis.configuration.localisation.Localisation.tr;", - this::throwException); - } -} diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/ScriptUtilitiesInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/ScriptUtilitiesInjector.java deleted file mode 100644 index 43b98a908f4..00000000000 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/nashorn/builtins/ScriptUtilitiesInjector.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.phoenicis.scripts.nashorn.builtins; - -import org.phoenicis.scripts.nashorn.NashornEngine; - -import java.io.InputStreamReader; - -/** - * Includes utils.js - */ -public class ScriptUtilitiesInjector implements EngineInjector { - @Override - public void injectInto(NashornEngine nashornEngine) { - nashornEngine.eval(new InputStreamReader(getClass().getResourceAsStream("utils.js")), this::throwException); - } -} diff --git a/phoenicis-scripts/src/main/resources/org/phoenicis/scripts/nashorn/builtins/utils.js b/phoenicis-scripts/src/main/resources/org/phoenicis/scripts/engine/builtins/utils.js similarity index 100% rename from phoenicis-scripts/src/main/resources/org/phoenicis/scripts/nashorn/builtins/utils.js rename to phoenicis-scripts/src/main/resources/org/phoenicis/scripts/engine/builtins/utils.js diff --git a/phoenicis-tests/src/main/java/org/phoenicis/tests/PhoenicisTestsApp.java b/phoenicis-tests/src/main/java/org/phoenicis/tests/PhoenicisTestsApp.java index a7d854e8250..eb390223026 100644 --- a/phoenicis-tests/src/main/java/org/phoenicis/tests/PhoenicisTestsApp.java +++ b/phoenicis-tests/src/main/java/org/phoenicis/tests/PhoenicisTestsApp.java @@ -67,7 +67,7 @@ private void testApplication(CategoryDTO categoryDTO, ApplicationDTO application } private void testScript(CategoryDTO categoryDTO, ApplicationDTO applicationDTO, ScriptDTO scriptDTO) { - final ScriptInterpreter scriptInterpreter = applicationContext.getBean("nashornInterprpeter", + final ScriptInterpreter scriptInterpreter = applicationContext.getBean("nashornInterpreter", ScriptInterpreter.class); System.out.print("| |-- " + scriptDTO.getScriptName()); try { From 4f9422fd8a5402230baa433fd90eec6a84dee5d3 Mon Sep 17 00:00:00 2001 From: plata Date: Mon, 4 Mar 2019 13:55:09 +0100 Subject: [PATCH 04/32] Allow to create graal.js engine in PhoenicisScriptEngineFactory (#1872) --- docs/_docs/Developers/intellij-idea.md | 2 +- phoenicis-dist/pom.xml | 46 ++++++++++++++++++- .../src/flatpak/org.phoenicis.playonlinux.yml | 2 +- phoenicis-scripts/pom.xml | 16 +++++++ .../scripts/ScriptsConfiguration.java | 17 ++++++- .../engine/PhoenicisScriptEngineFactory.java | 6 ++- .../scripts/engine/ScriptEngineType.java | 19 ++++++++ pom.xml | 6 +-- 8 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java diff --git a/docs/_docs/Developers/intellij-idea.md b/docs/_docs/Developers/intellij-idea.md index 5fcd4a8fd73..85edae35406 100644 --- a/docs/_docs/Developers/intellij-idea.md +++ b/docs/_docs/Developers/intellij-idea.md @@ -18,7 +18,7 @@ add: JavaFXApplication with: * main class: org.phoenicis.javafx.JavaFXApplication * VM options: ``` ---add-modules=ALL-MODULE-PATH --module-path=phoenicis-dist/target/lib +--add-modules=ALL-MODULE-PATH --module-path=phoenicis-dist/target/lib -Dpolyglot.js.nashorn-compat=true -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath phoenicis-dist/target/lib --upgrade-module-path=phoenicis-dist/target/lib/compiler.jar ``` * **With Java 11**, you may need to remove the = in --module-path ``` diff --git a/phoenicis-dist/pom.xml b/phoenicis-dist/pom.xml index 51d1c6a26c6..2bd9f10e5fd 100644 --- a/phoenicis-dist/pom.xml +++ b/phoenicis-dist/pom.xml @@ -52,7 +52,51 @@ ${project.build.directory}/lib - commons-logging, xml-apis, xmlParserAPIs, xercesImpl + commons-logging, xml-apis, xmlParserAPIs, xercesImpl, truffle-api, graal-sdk + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.10 + + + copy-graal-dependencies + package + + copy + + + + + org.graalvm.compiler + compiler + ${graalvm.version} + jar + true + compiler.jar + + + org.graalvm.truffle + truffle-api + ${graalvm.version} + jar + true + truffle-api.jar + + + org.graalvm.sdk + graal-sdk + ${graalvm.version} + jar + true + graal-sdk.jar + + + ${project.build.directory}/lib diff --git a/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml b/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml index 744d4a08dd9..ee77e028288 100644 --- a/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml +++ b/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml @@ -70,4 +70,4 @@ modules: - type: script dest-filename: phoenicis-playonlinux commands: - - /app/jre/bin/java --module-path /app/phoenicis/lib/ --add-modules=ALL-MODULE-PATH org.phoenicis.javafx.JavaFXApplication "$@" + - /app/jre/bin/java --module-path /app/phoenicis/lib/ --add-modules=ALL-MODULE-PATH -Dpolyglot.js.nashorn-compat=true -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath /app/phoenicis/lib --upgrade-module-path=/app/phoenicis/lib/compiler.jar org.phoenicis.javafx.JavaFXApplication "$@" diff --git a/phoenicis-scripts/pom.xml b/phoenicis-scripts/pom.xml index f31dd1b6251..cdadd879d76 100644 --- a/phoenicis-scripts/pom.xml +++ b/phoenicis-scripts/pom.xml @@ -68,5 +68,21 @@ phoenicis-multithreading ${phoenicis.version} + + org.graalvm.sdk + graal-sdk + ${graalvm.version} + + + org.graalvm.js + js + ${graalvm.version} + runtime + + + org.graalvm.js + js-scriptengine + ${graalvm.version} + diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java index 29c107db0fe..8cd749ffe59 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java @@ -20,6 +20,7 @@ import org.phoenicis.multithreading.MultithreadingConfiguration; import org.phoenicis.repository.RepositoryConfiguration; +import org.phoenicis.scripts.engine.ScriptEngineType; import org.phoenicis.scripts.interpreter.BackgroundScriptInterpreter; import org.phoenicis.scripts.interpreter.ScriptFetcher; import org.phoenicis.scripts.interpreter.ScriptInterpreter; @@ -50,9 +51,16 @@ public class ScriptsConfiguration { @Autowired private MultithreadingConfiguration multithreadingConfiguration; + @Bean + public PhoenicisScriptEngineFactory graalScriptEngineFactory() { + return new PhoenicisScriptEngineFactory(ScriptEngineType.GRAAL, Arrays.asList(new ScriptUtilitiesInjector(), + new BeanInjector(applicationContext), new SetupWizardInjector(wizardConfiguration.setupWizardFactory()), + new IncludeInjector(scriptFetcher()), new LocalisationInjector())); + } + @Bean public PhoenicisScriptEngineFactory nashornScriptEngineFactory() { - return new PhoenicisScriptEngineFactory(Arrays.asList(new ScriptUtilitiesInjector(), + return new PhoenicisScriptEngineFactory(ScriptEngineType.NASHORN, Arrays.asList(new ScriptUtilitiesInjector(), new BeanInjector(applicationContext), new SetupWizardInjector(wizardConfiguration.setupWizardFactory()), new IncludeInjector(scriptFetcher()), new LocalisationInjector())); } @@ -64,10 +72,15 @@ public ScriptFetcher scriptFetcher() { @Bean public ScriptInterpreter scriptInterpreter() { - return new BackgroundScriptInterpreter(nashornScriptInterpreter(), + return new BackgroundScriptInterpreter(graalScriptInterpreter(), multithreadingConfiguration.scriptExecutorService()); } + @Bean + ScriptInterpreter graalScriptInterpreter() { + return new PhoenicisScriptInterpreter(graalScriptEngineFactory()); + } + @Bean ScriptInterpreter nashornScriptInterpreter() { return new PhoenicisScriptInterpreter(nashornScriptEngineFactory()); diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java index efa1e392eed..1272f67adb0 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java @@ -24,15 +24,17 @@ import java.util.List; public class PhoenicisScriptEngineFactory { + private final ScriptEngineType type; private final List engineInjectors; - public PhoenicisScriptEngineFactory(List engineInjectors) { + public PhoenicisScriptEngineFactory(ScriptEngineType type, List engineInjectors) { + this.type = type; this.engineInjectors = engineInjectors; } PhoenicisScriptEngine createEngine() { final PhoenicisScriptEngine phoenicisScriptEngine = new PhoenicisScriptEngine( - new ScriptEngineManager().getEngineByName("nashorn")); + new ScriptEngineManager().getEngineByName(type.toString())); engineInjectors.forEach(engineInjector -> engineInjector.injectInto(phoenicisScriptEngine)); diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java new file mode 100644 index 00000000000..01514631cfc --- /dev/null +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java @@ -0,0 +1,19 @@ +package org.phoenicis.scripts.engine; + +/** + * type of the script engine + */ +public enum ScriptEngineType { + NASHORN("nashorn"), GRAAL("graal.js"); + + private final String name; + + ScriptEngineType(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } +} diff --git a/pom.xml b/pom.xml index e5167ddf976..85a1670f443 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,7 @@ 2.24.5 5.1.5.RELEASE 2.8.1 + 1.0.0-rc12 @@ -80,11 +81,6 @@ gettext-commons 0.9.8 - - org.graalvm - graal-sdk - 1.0.0-rc7 - From 1eeb9d767206dbb9cb54e3b6411eee989e86c934 Mon Sep 17 00:00:00 2001 From: madoar Date: Tue, 5 Mar 2019 13:03:37 +0100 Subject: [PATCH 05/32] Add phoenicis script engine interface (#1882) - make PhoenicisScriptEngine an interface - cleanup ShortcutRunner - add some comments - change the constructor argument of the JSAScriptEngine class --- .../org/phoenicis/library/ShortcutRunner.java | 31 ++---- .../scripts/engine/JSAScriptEngine.java | 77 +++++++++++++++ .../scripts/engine/PhoenicisScriptEngine.java | 69 ++----------- .../engine/PhoenicisScriptEngineFactory.java | 5 +- .../scripts/engine/PolyglotScriptEngine.java | 96 +++++++++++++++++++ .../scripts/engine/ScriptEngineType.java | 33 ++++++- 6 files changed, 225 insertions(+), 86 deletions(-) create mode 100644 phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/JSAScriptEngine.java create mode 100644 phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PolyglotScriptEngine.java diff --git a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java index f7740667228..682057d4b16 100644 --- a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java +++ b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java @@ -18,15 +18,11 @@ package org.phoenicis.library; +import org.graalvm.polyglot.Value; import org.phoenicis.library.dto.ShortcutDTO; import org.phoenicis.scripts.interpreter.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; -import javax.script.Invocable; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; - import java.util.List; import java.util.function.Consumer; @@ -46,20 +42,12 @@ public void run(String shortcutName, List arguments, Consumer public void run(ShortcutDTO shortcutDTO, List arguments, Consumer errorCallback) { final InteractiveScriptSession interactiveScriptSession = scriptInterpreter.createInteractiveSession(); - ScriptEngineManager m = new ScriptEngineManager(); - ScriptEngine engine = m.getEngineByName("graal.js"); - Invocable inv = (Invocable) engine; interactiveScriptSession.eval("include(\"engines.wine.shortcuts.reader\");", ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { - final Object shortcutReader = (Object) output; - try { - inv.invokeMethod(shortcutReader, "of", shortcutDTO); - inv.invokeMethod(shortcutReader, "run", arguments); - } catch (ScriptException e) { - e.printStackTrace(); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } + final Value shortcutReader = (Value) output; + + shortcutReader.invokeMember("of", shortcutDTO); + shortcutReader.invokeMember("run", arguments); }, errorCallback), errorCallback); } @@ -68,11 +56,10 @@ public void stop(ShortcutDTO shortcutDTO, Consumer errorCallback) { interactiveScriptSession.eval("include(\"engines.wine.shortcuts.reader\");", ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { - /* - * final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; - * shortcutReader.callMember("of", shortcutDTO); - * shortcutReader.callMember("stop"); - */ + final Value shortcutReader = (Value) output; + + shortcutReader.invokeMember("of", shortcutDTO); + shortcutReader.invokeMember("stop"); }, errorCallback), errorCallback); } diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/JSAScriptEngine.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/JSAScriptEngine.java new file mode 100644 index 00000000000..19de9850bcc --- /dev/null +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/JSAScriptEngine.java @@ -0,0 +1,77 @@ +package org.phoenicis.scripts.engine; + +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +/** + * A {@link PhoenicisScriptEngine} wrapping around a {@link ScriptEngine} object defined by the Java Scripting API + */ +public class JSAScriptEngine implements PhoenicisScriptEngine { + private final ScriptEngine scriptEngine; + private final List> errorHandlers = new ArrayList<>(); + + /** + * Constructor + * + * @param engine The name of the engine + */ + public JSAScriptEngine(String engine) { + super(); + + this.scriptEngine = new ScriptEngineManager().getEngineByName(engine); + } + + public void eval(InputStreamReader inputStreamReader, Consumer errorCallback) { + try { + this.scriptEngine.eval(inputStreamReader); + } catch (Exception e) { + handleError(errorCallback, e); + } + } + + public void eval(String script, Runnable doneCallback, Consumer errorCallback) { + try { + this.scriptEngine.eval(script); + doneCallback.run(); + } catch (Exception e) { + handleError(errorCallback, e); + } + } + + public Object evalAndReturn(String line, Consumer errorCallback) { + try { + final Object evaluation = this.scriptEngine.eval(line); + if (evaluation == null) { + return null; + } + return evaluation; + } catch (Exception e) { + handleError(errorCallback, e); + return ""; + } + } + + private void handleError(Consumer errorCallback, Exception e) { + for (Consumer errorHandler : errorHandlers) { + errorHandler.accept(e); + } + errorCallback.accept(e); + } + + public void put(String name, Object object, Consumer errorCallback) { + try { + this.scriptEngine.put(name, object); + } catch (Exception e) { + handleError(errorCallback, e); + } + } + + public void addErrorHandler(Consumer errorHandler) { + errorHandlers.add(errorHandler); + } + +} diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java index ac9474558d6..bf65ac54142 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java @@ -18,72 +18,23 @@ package org.phoenicis.scripts.engine; -import javax.script.ScriptEngine; +import com.google.common.util.concurrent.Runnables; + import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.List; import java.util.function.Consumer; -public class PhoenicisScriptEngine { - private final ScriptEngine scriptEngine; - private final List> errorHandlers = new ArrayList<>(); - - PhoenicisScriptEngine(ScriptEngine scriptEngine) { - this.scriptEngine = scriptEngine; - } - - public void eval(InputStreamReader inputStreamReader, Consumer errorCallback) { - try { - this.scriptEngine.eval(inputStreamReader); - } catch (Exception e) { - handleError(errorCallback, e); - } - } - - public void eval(String script, Consumer errorCallback) { - eval(script, () -> { - }, errorCallback); - } - - public void eval(String script, Runnable doneCallback, Consumer errorCallback) { - try { - this.scriptEngine.eval(script); - doneCallback.run(); - } catch (Exception e) { - handleError(errorCallback, e); - } - } +public interface PhoenicisScriptEngine { + void eval(InputStreamReader inputStreamReader, Consumer errorCallback); - Object evalAndReturn(String line, Consumer errorCallback) { - try { - final Object evaluation = this.scriptEngine.eval(line); - if (evaluation == null) { - return null; - } - return evaluation; - } catch (Exception e) { - handleError(errorCallback, e); - return ""; - } - } + void eval(String script, Runnable doneCallback, Consumer errorCallback); - private void handleError(Consumer errorCallback, Exception e) { - for (Consumer errorHandler : errorHandlers) { - errorHandler.accept(e); - } - errorCallback.accept(e); + default void eval(String script, Consumer errorCallback) { + eval(script, Runnables.doNothing(), errorCallback); } - public void put(String name, Object object, Consumer errorCallback) { - try { - this.scriptEngine.put(name, object); - } catch (Exception e) { - handleError(errorCallback, e); - } - } + Object evalAndReturn(String line, Consumer errorCallback); - public void addErrorHandler(Consumer errorHandler) { - errorHandlers.add(errorHandler); - } + void put(String name, Object object, Consumer errorCallback); + void addErrorHandler(Consumer errorHandler); } diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java index 1272f67adb0..8901d836c97 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java @@ -32,9 +32,8 @@ public PhoenicisScriptEngineFactory(ScriptEngineType type, List this.engineInjectors = engineInjectors; } - PhoenicisScriptEngine createEngine() { - final PhoenicisScriptEngine phoenicisScriptEngine = new PhoenicisScriptEngine( - new ScriptEngineManager().getEngineByName(type.toString())); + public PhoenicisScriptEngine createEngine() { + final PhoenicisScriptEngine phoenicisScriptEngine = type.createScriptEngine(); engineInjectors.forEach(engineInjector -> engineInjector.injectInto(phoenicisScriptEngine)); diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PolyglotScriptEngine.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PolyglotScriptEngine.java new file mode 100644 index 00000000000..48e8df05df6 --- /dev/null +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PolyglotScriptEngine.java @@ -0,0 +1,96 @@ +package org.phoenicis.scripts.engine; + +import com.google.common.util.concurrent.Runnables; +import org.apache.commons.io.IOUtils; +import org.graalvm.polyglot.Context; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +/** + * A {@link PhoenicisScriptEngine} wrapping around a polyglot {@link Context} object defined by Graal + */ +public class PolyglotScriptEngine implements PhoenicisScriptEngine { + /** + * A list of error handlers + */ + private final List> errorHandlers; + + /** + * The scripting language + */ + private final String language; + + /** + * The context representing the handle to the scripting engine + */ + private final Context context; + + /** + * Constructor + * + * @param language The language name + * @param options A map of options for the Polyglot context + */ + public PolyglotScriptEngine(String language, Map options) { + super(); + + this.errorHandlers = new ArrayList<>(); + this.language = language; + this.context = Context.newBuilder(language) + .options(options).allowHostAccess(true).build(); + } + + @Override + public void eval(InputStreamReader inputStreamReader, Consumer errorCallback) { + try { + String script = IOUtils.toString(inputStreamReader); + + eval(script, Runnables.doNothing(), errorCallback); + } catch (IOException ioe) { + handleError(errorCallback, ioe); + } + } + + @Override + public void eval(String script, Runnable doneCallback, Consumer errorCallback) { + try { + this.context.eval(this.language, script); + } catch (Exception e) { + handleError(errorCallback, e); + } + } + + @Override + public Object evalAndReturn(String script, Consumer errorCallback) { + try { + return this.context.eval(this.language, script); + } catch (Exception e) { + handleError(errorCallback, e); + + return ""; + } + } + + @Override + public void put(String name, Object object, Consumer errorCallback) { + this.context.getBindings(this.language).putMember(name, object); + } + + @Override + public void addErrorHandler(Consumer errorHandler) { + this.errorHandlers.add(errorHandler); + } + + private void handleError(Consumer errorCallback, Exception e) { + for (Consumer errorHandler : this.errorHandlers) { + errorHandler.accept(e); + } + + errorCallback.accept(e); + } +} diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java index 01514631cfc..a993adc272c 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java @@ -1,17 +1,46 @@ package org.phoenicis.scripts.engine; +import java.util.Map; + /** - * type of the script engine + * The supported script engine types */ public enum ScriptEngineType { - NASHORN("nashorn"), GRAAL("graal.js"); + NASHORN("nashorn") { + @Override + public PhoenicisScriptEngine createScriptEngine() { + return new JSAScriptEngine("nashorn"); + } + }, + + GRAAL("graal.js") { + @Override + public PhoenicisScriptEngine createScriptEngine() { + return new PolyglotScriptEngine("js", Map.of("js.nashorn-compat", "true")); + } + }; + /** + * The name of the script engine type + */ private final String name; + /** + * Constructor + * + * @param name The name of the script engine type + */ ScriptEngineType(String name) { this.name = name; } + /** + * Creates a new instance of the {@link ScriptEngineType} + * + * @return The new instance of the {@link ScriptEngineType} + */ + public abstract PhoenicisScriptEngine createScriptEngine(); + @Override public String toString() { return this.name; From 7f612a77f380687a2888ae156893aca333a9bb3e Mon Sep 17 00:00:00 2001 From: plata Date: Tue, 5 Mar 2019 14:25:51 +0100 Subject: [PATCH 06/32] Remove ScriptObjectMirror (#1883) --- .../containers/GenericContainersManager.java | 33 +++++++++---------- .../views/mainwindow/library/LibraryView.java | 20 +++++------ .../phoenicis/library/ShortcutManager.java | 9 +++-- 3 files changed, 30 insertions(+), 32 deletions(-) diff --git a/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java b/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java index dac4b4903e3..aaf68e3a5a5 100644 --- a/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java +++ b/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java @@ -132,23 +132,22 @@ public void deleteContainer(ContainerDTO container, Consumer errorCal final String engineId = container.getEngine().toLowerCase(); List categories = this.libraryManager.fetchShortcuts(); - /* - * categories.stream().flatMap(shortcutCategoryDTO -> shortcutCategoryDTO.getShortcuts().stream()) - * .forEach(shortcutDTO -> { - * final InteractiveScriptSession interactiveScriptSession = this.scriptInterpreter - * .createInteractiveSession(); - * interactiveScriptSession.eval( - * "include(\"engines." + engineId + ".shortcuts.reader\");", - * ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { - * final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; - * shortcutReader.callMember("of", shortcutDTO); - * final String containerName = (String) shortcutReader.callMember("container"); - * if (containerName.equals(container.getName())) { - * this.shortcutManager.deleteShortcut(shortcutDTO); - * } - * }, errorCallback), errorCallback); - * }); - */ + categories.stream().flatMap(shortcutCategoryDTO -> shortcutCategoryDTO.getShortcuts().stream()) + .forEach(shortcutDTO -> { + final InteractiveScriptSession interactiveScriptSession = this.scriptInterpreter + .createInteractiveSession(); + interactiveScriptSession.eval( + "include(\"engines." + engineId + ".shortcuts.reader\");", + ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { + final org.graalvm.polyglot.Value shortcutReader = (org.graalvm.polyglot.Value) output; + shortcutReader.invokeMember("of", shortcutDTO); + final String containerName = shortcutReader.invokeMember("container").as(String.class); + if (containerName.equals(container.getName())) { + this.shortcutManager.deleteShortcut(shortcutDTO); + } + }, errorCallback), errorCallback); + }); + } /** diff --git a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/views/mainwindow/library/LibraryView.java b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/views/mainwindow/library/LibraryView.java index adec2883a73..31e52d6eb68 100644 --- a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/views/mainwindow/library/LibraryView.java +++ b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/views/mainwindow/library/LibraryView.java @@ -35,8 +35,8 @@ import javafx.scene.control.TabPane; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; -import jdk.nashorn.api.scripting.ScriptObjectMirror; import org.apache.commons.lang.StringUtils; +import org.graalvm.polyglot.Value; import org.phoenicis.javafx.collections.ConcatenatedList; import org.phoenicis.javafx.collections.MappedList; import org.phoenicis.javafx.components.common.control.DetailsPanel; @@ -350,15 +350,15 @@ private void createShortcut(ShortcutCreationDTO shortcutCreationDTO) { interactiveScriptSession.eval(scriptInclude, ignored -> interactiveScriptSession.eval("new " + engine + "Shortcut()", output -> { - final ScriptObjectMirror shortcutObject = (ScriptObjectMirror) output; - - shortcutObject.callMember("name", shortcutCreationDTO.getName()); - shortcutObject.callMember("category", shortcutCreationDTO.getCategory()); - shortcutObject.callMember("description", shortcutCreationDTO.getDescription()); - shortcutObject.callMember("miniature", shortcutCreationDTO.getMiniature()); - shortcutObject.callMember("search", shortcutCreationDTO.getExecutable().getName()); - shortcutObject.callMember("prefix", container); - shortcutObject.callMember("create"); + final Value shortcutObject = (Value) output; + + shortcutObject.invokeMember("name", shortcutCreationDTO.getName()); + shortcutObject.invokeMember("category", shortcutCreationDTO.getCategory()); + shortcutObject.invokeMember("description", shortcutCreationDTO.getDescription()); + shortcutObject.invokeMember("miniature", shortcutCreationDTO.getMiniature()); + shortcutObject.invokeMember("search", shortcutCreationDTO.getExecutable().getName()); + shortcutObject.invokeMember("prefix", container); + shortcutObject.invokeMember("create"); }, e -> Platform.runLater(() -> { final ErrorDialog errorDialog = ErrorDialog.builder() diff --git a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java index 6fca498d023..e13ea727bd7 100644 --- a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java +++ b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.FileUtils; +import org.graalvm.polyglot.Value; import org.phoenicis.configuration.security.Safe; import org.phoenicis.library.dto.ShortcutDTO; import org.phoenicis.library.dto.ShortcutInfoDTO; @@ -121,11 +122,9 @@ public void uninstallFromShortcut(ShortcutDTO shortcutDTO, Consumer e interactiveScriptSession.eval("include(\"engines.wine.shortcuts.reader\");", ignored -> interactiveScriptSession.eval("new ShortcutReader()", output -> { - /* - * final ScriptObjectMirror shortcutReader = (ScriptObjectMirror) output; - * shortcutReader.callMember("of", shortcutDTO); - * shortcutReader.callMember("uninstall"); - */ + final Value shortcutReader = (Value) output; + shortcutReader.invokeMember("of", shortcutDTO); + shortcutReader.invokeMember("uninstall"); }, errorCallback), errorCallback); } From 14def23a67f96c5281642512756accb61a64c58d Mon Sep 17 00:00:00 2001 From: plata Date: Tue, 5 Mar 2019 14:31:12 +0100 Subject: [PATCH 07/32] Fix usage of Java interfaces (#1884) --- .../main/java/org/phoenicis/engines/EngineSettingsManager.java | 3 ++- .../main/java/org/phoenicis/engines/EngineToolsManager.java | 3 ++- .../src/main/java/org/phoenicis/engines/EnginesManager.java | 3 ++- .../src/main/java/org/phoenicis/engines/VerbsManager.java | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java index 2fde483af29..bde6aa32851 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java @@ -18,6 +18,7 @@ package org.phoenicis.engines; +import org.graalvm.polyglot.Value; import org.phoenicis.repository.dto.*; import org.phoenicis.scripts.interpreter.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; @@ -55,7 +56,7 @@ public void getSetting(String engineId, String settingId, Consumer { - final EngineSetting setting = (EngineSetting) output; + final EngineSetting setting = ((Value) output).as(EngineSetting.class); doneCallback.accept(setting); }, errorCallback); } diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineToolsManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineToolsManager.java index 9afab634c28..07f6611a12f 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineToolsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineToolsManager.java @@ -18,6 +18,7 @@ package org.phoenicis.engines; +import org.graalvm.polyglot.Value; import org.phoenicis.repository.dto.ApplicationDTO; import org.phoenicis.repository.dto.CategoryDTO; import org.phoenicis.repository.dto.RepositoryDTO; @@ -60,7 +61,7 @@ public void runTool(String engineId, String container, String toolId, Runnable d interactiveScriptSession.eval( "include(\"engines." + engineId + ".tools." + toolId + "\");", ignored -> interactiveScriptSession.eval("new Tool()", output -> { - final EngineTool toolObject = (EngineTool) output; + final EngineTool toolObject = ((Value) output).as(EngineTool.class); toolObject.run(container); doneCallback.run(); }, errorCallback), errorCallback); diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java index cbb5e63bdd9..18144a2bc95 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.graalvm.polyglot.Value; import org.phoenicis.configuration.security.Safe; import org.phoenicis.engines.dto.EngineCategoryDTO; import org.phoenicis.engines.dto.EngineSubCategoryDTO; @@ -67,7 +68,7 @@ public void getEngine(String engineId, Consumer doneCallback, Consumer { - final Engine engine = (Engine) output; + final Engine engine = ((Value) output).as(Engine.class); doneCallback.accept(engine); }, errorCallback); } diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java index 9f9549f0336..670a095031e 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java @@ -18,6 +18,7 @@ package org.phoenicis.engines; +import org.graalvm.polyglot.Value; import org.phoenicis.repository.dto.ApplicationDTO; import org.phoenicis.repository.dto.CategoryDTO; import org.phoenicis.repository.dto.RepositoryDTO; @@ -62,7 +63,7 @@ public void installVerb(String engineId, String container, String verbId, Runnab interactiveScriptSession.eval( "include(\"" + verbId + "\");", ignored -> interactiveScriptSession.eval("new Verb()", output -> { - final Verb verbObject = (Verb) output; + final Verb verbObject = ((Value) output).as(Verb.class); verbObject.install(container); doneCallback.run(); }, errorCallback), errorCallback); From 9e5b26d16b75ad9192f5b865d5b2a8dfdecad888 Mon Sep 17 00:00:00 2001 From: madoar Date: Tue, 5 Mar 2019 17:47:06 +0100 Subject: [PATCH 08/32] Add interface communication approach to documentation (#1885) --- docs/_docs/Developers/script-interaction.md | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/_docs/Developers/script-interaction.md diff --git a/docs/_docs/Developers/script-interaction.md b/docs/_docs/Developers/script-interaction.md new file mode 100644 index 00000000000..b9da2f2021d --- /dev/null +++ b/docs/_docs/Developers/script-interaction.md @@ -0,0 +1,36 @@ +--- +title: "Interaction between Phoenicis and its Scripts" +category: Developers +order: 10 +toc: true +--- + +The interaction between Phoenicis and its scripts occurs through interfaces. + +### Accessing a JavaScript Script from Java +Every script type that Phoenicis uses has its own Java interface. +To access a JavaScript script, Phoenicis proceeds like followed: + +1) Execute the script using a `PhoenicisScriptEngine` +2) Cast the result object of the executed script into the desired interface type +3) Interact with the interface object + +### Existing interfaces +* [`Engine`](https://github.com/PhoenicisOrg/phoenicis/blob/master/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java) +* [`Verb`](https://github.com/PhoenicisOrg/phoenicis/blob/master/phoenicis-engines/src/main/java/org/phoenicis/engines/Verb.java) +* [`Installer`](https://github.com/PhoenicisOrg/phoenicis/blob/master/phoenicis-scripts/src/main/java/org/phoenicis/scripts/Installer.java) +* [`EngineTool`](https://github.com/PhoenicisOrg/phoenicis/blob/master/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineTool.java) + +### Easy casting via `PhoenicisScriptEngine` +To provide an easy method to perform all three previously mentioned step in a generic way, they could be implemented inside the `PhoenicisScriptEngine` implementations +Example method signatures: + +```java +public interface PhoenicisScriptEngine { + E evalAndReturn(String script, Class type); + + void eval(String script, Class type, Consumer onSuccess, Consumer onError); +} +``` + +Alternatively to the `String` script representation it could be a useful idea to pass `ScriptDTO` objects to the `PhoenicisScriptEngine`s. \ No newline at end of file From 52a81f3c125242271c9bbe98384791c41f526add Mon Sep 17 00:00:00 2001 From: plata Date: Wed, 6 Mar 2019 13:26:13 +0100 Subject: [PATCH 09/32] Fix retrieval of engine settings (#1886) --- .../java/org/phoenicis/engines/EngineSettingsManager.java | 4 +++- .../javafx/controller/containers/ContainersController.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java index bde6aa32851..c2db39a5539 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java @@ -24,6 +24,7 @@ import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Consumer; @@ -72,7 +73,8 @@ public void fetchAvailableEngineSettings(RepositoryDTO repositoryDTO, final InteractiveScriptSession interactiveScriptSession = scriptInterpreter.createInteractiveSession(); interactiveScriptSession.eval(this.createFetchScript(repositoryDTO), - output -> callback.accept((Map>) output), errorCallback); + output -> callback.accept(((Value) output).as(Map.class)), + errorCallback); } /** diff --git a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/containers/ContainersController.java b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/containers/ContainersController.java index ed4f70df0fc..0e8e2b778a4 100644 --- a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/containers/ContainersController.java +++ b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/containers/ContainersController.java @@ -195,7 +195,7 @@ private void updateEngineSettings(RepositoryDTO repositoryDTO) { }), e -> Platform.runLater(() -> { final ErrorDialog errorDialog = ErrorDialog.builder() - .withMessage(tr("Loading engine tools failed.")) + .withMessage(tr("Loading engine settings failed.")) .withException(e) .withOwner(this.containersView.getContent().getScene().getWindow()) .build(); From 7bead68da0c366767c756b6223f3b111cf77ddce Mon Sep 17 00:00:00 2001 From: plata Date: Wed, 6 Mar 2019 13:38:49 +0100 Subject: [PATCH 10/32] Remove unused import --- .../main/java/org/phoenicis/engines/EngineSettingsManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java index c2db39a5539..92049131864 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java @@ -24,7 +24,6 @@ import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Consumer; From 65b1f463469184f70562ace727e9840f6fb18125 Mon Sep 17 00:00:00 2001 From: plata Date: Wed, 6 Mar 2019 20:38:21 +0100 Subject: [PATCH 11/32] Docs: do not set nashorn compat on command line (#1890) it's set in Java --- docs/_docs/Developers/intellij-idea.md | 2 +- phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/_docs/Developers/intellij-idea.md b/docs/_docs/Developers/intellij-idea.md index 85edae35406..b0b4b0e6038 100644 --- a/docs/_docs/Developers/intellij-idea.md +++ b/docs/_docs/Developers/intellij-idea.md @@ -18,7 +18,7 @@ add: JavaFXApplication with: * main class: org.phoenicis.javafx.JavaFXApplication * VM options: ``` ---add-modules=ALL-MODULE-PATH --module-path=phoenicis-dist/target/lib -Dpolyglot.js.nashorn-compat=true -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath phoenicis-dist/target/lib --upgrade-module-path=phoenicis-dist/target/lib/compiler.jar +--add-modules=ALL-MODULE-PATH --module-path=phoenicis-dist/target/lib -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath phoenicis-dist/target/lib --upgrade-module-path=phoenicis-dist/target/lib/compiler.jar ``` * **With Java 11**, you may need to remove the = in --module-path ``` diff --git a/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml b/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml index ee77e028288..9dc274697f3 100644 --- a/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml +++ b/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml @@ -70,4 +70,4 @@ modules: - type: script dest-filename: phoenicis-playonlinux commands: - - /app/jre/bin/java --module-path /app/phoenicis/lib/ --add-modules=ALL-MODULE-PATH -Dpolyglot.js.nashorn-compat=true -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath /app/phoenicis/lib --upgrade-module-path=/app/phoenicis/lib/compiler.jar org.phoenicis.javafx.JavaFXApplication "$@" + - /app/jre/bin/java --module-path /app/phoenicis/lib/ --add-modules=ALL-MODULE-PATH -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath /app/phoenicis/lib --upgrade-module-path=/app/phoenicis/lib/compiler.jar org.phoenicis.javafx.JavaFXApplication "$@" From 07c1018a641d6e47d1594d6d78fd09285f789918 Mon Sep 17 00:00:00 2001 From: plata Date: Thu, 7 Mar 2019 10:12:05 +0100 Subject: [PATCH 12/32] Fix retrieval of engines (#1892) --- .../src/main/java/org/phoenicis/engines/EnginesManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java index 18144a2bc95..fed6d3d96a5 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java @@ -130,7 +130,7 @@ public void fetchAvailableEngines(RepositoryDTO repositoryDTO, final InteractiveScriptSession interactiveScriptSession = scriptInterpreter.createInteractiveSession(); interactiveScriptSession.eval(this.createFetchScript(repositoryDTO), - output -> callback.accept((Map) output), errorCallback); + output -> callback.accept(((Value) output).as(Map.class)), errorCallback); } /** From 2f28a88d1f742c2ec8b1d86e9668dee3b2fa7d4f Mon Sep 17 00:00:00 2001 From: madoar Date: Thu, 7 Mar 2019 10:26:47 +0100 Subject: [PATCH 13/32] Restructure phoenicis-scripts module (#1887) - restructure the phoenicis-scripts module --- .../containers/GenericContainersManager.java | 2 +- .../engines/EngineSettingsManager.java | 2 +- .../phoenicis/engines/EngineToolsManager.java | 2 +- .../org/phoenicis/engines/EnginesManager.java | 2 +- .../org/phoenicis/engines/VerbsManager.java | 2 +- .../library/control/LibraryFeaturePanel.java | 2 +- .../library/console/ConsoleController.java | 2 +- .../views/mainwindow/library/LibraryView.java | 2 +- .../phoenicis/library/ShortcutManager.java | 2 +- .../org/phoenicis/library/ShortcutRunner.java | 2 +- .../scripts/ScriptsConfiguration.java | 6 ++--- .../engine/PhoenicisScriptEngineFactory.java | 4 +-- .../scripts/engine/ScriptEngineType.java | 4 +++ .../{ => implementation}/JSAScriptEngine.java | 2 +- .../PhoenicisScriptEngine.java | 2 +- .../PolyglotScriptEngine.java | 2 +- .../{builtins => injectors}/BeanInjector.java | 4 +-- .../EngineInjector.java | 4 +-- .../IncludeInjector.java | 4 +-- .../LocalisationInjector.java | 4 +-- .../ScriptUtilitiesInjector.java | 4 +-- .../SetupWizardInjector.java | 4 +-- .../BackgroundScriptInterpreter.java | 2 ++ .../scripts/interpreter/CancelException.java | 25 ------------------- .../PhoenicisScriptInterpreter.java | 7 +++--- .../interpreter/ScriptInterpreter.java | 1 + .../InteractiveScriptSession.java | 2 +- .../PhoenicisInteractiveScriptSession.java | 5 ++-- .../engine/{builtins => injectors}/utils.js | 0 29 files changed, 45 insertions(+), 61 deletions(-) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{ => implementation}/JSAScriptEngine.java (97%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{ => implementation}/PhoenicisScriptEngine.java (96%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{ => implementation}/PolyglotScriptEngine.java (98%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{builtins => injectors}/BeanInjector.java (90%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{builtins => injectors}/EngineInjector.java (82%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{builtins => injectors}/IncludeInjector.java (90%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{builtins => injectors}/LocalisationInjector.java (75%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{builtins => injectors}/ScriptUtilitiesInjector.java (75%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/{builtins => injectors}/SetupWizardInjector.java (92%) delete mode 100644 phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/CancelException.java rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{engine => interpreter}/PhoenicisScriptInterpreter.java (86%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{interpreter => session}/InteractiveScriptSession.java (95%) rename phoenicis-scripts/src/main/java/org/phoenicis/scripts/{engine => session}/PhoenicisInteractiveScriptSession.java (88%) rename phoenicis-scripts/src/main/resources/org/phoenicis/scripts/engine/{builtins => injectors}/utils.js (100%) diff --git a/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java b/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java index aaf68e3a5a5..889d25229a6 100644 --- a/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java +++ b/phoenicis-containers/src/main/java/org/phoenicis/containers/GenericContainersManager.java @@ -28,7 +28,7 @@ import org.phoenicis.library.ShortcutManager; import org.phoenicis.library.dto.ShortcutCategoryDTO; import org.phoenicis.library.dto.ShortcutDTO; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import org.phoenicis.tools.config.CompatibleConfigFileFormatFactory; import org.phoenicis.tools.config.ConfigFile; diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java index 92049131864..2099e127ed0 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineSettingsManager.java @@ -20,7 +20,7 @@ import org.graalvm.polyglot.Value; import org.phoenicis.repository.dto.*; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.ArrayList; diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineToolsManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineToolsManager.java index 07f6611a12f..ed532d32808 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineToolsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EngineToolsManager.java @@ -23,7 +23,7 @@ import org.phoenicis.repository.dto.CategoryDTO; import org.phoenicis.repository.dto.RepositoryDTO; import org.phoenicis.repository.dto.TypeDTO; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.ArrayList; diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java index fed6d3d96a5..1227a312297 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesManager.java @@ -25,7 +25,7 @@ import org.phoenicis.engines.dto.EngineCategoryDTO; import org.phoenicis.engines.dto.EngineSubCategoryDTO; import org.phoenicis.repository.dto.*; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java index 670a095031e..1fe7ea436bf 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java @@ -23,7 +23,7 @@ import org.phoenicis.repository.dto.CategoryDTO; import org.phoenicis.repository.dto.RepositoryDTO; import org.phoenicis.repository.dto.TypeDTO; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.ArrayList; diff --git a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/library/control/LibraryFeaturePanel.java b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/library/control/LibraryFeaturePanel.java index bc16162e59c..b7098ed8555 100644 --- a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/library/control/LibraryFeaturePanel.java +++ b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/library/control/LibraryFeaturePanel.java @@ -24,7 +24,7 @@ import org.phoenicis.library.dto.ShortcutCategoryDTO; import org.phoenicis.library.dto.ShortcutCreationDTO; import org.phoenicis.library.dto.ShortcutDTO; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.Collections; diff --git a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/library/console/ConsoleController.java b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/library/console/ConsoleController.java index 44f2829e4bb..c154326db55 100644 --- a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/library/console/ConsoleController.java +++ b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/controller/library/console/ConsoleController.java @@ -21,7 +21,7 @@ import org.phoenicis.javafx.views.mainwindow.console.ConsoleTab; import org.phoenicis.javafx.views.mainwindow.console.ConsoleTabFactory; import org.phoenicis.javafx.views.mainwindow.console.ConsoleTextType; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import org.apache.commons.lang.exception.ExceptionUtils; diff --git a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/views/mainwindow/library/LibraryView.java b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/views/mainwindow/library/LibraryView.java index 78a97f2ed5b..4e8369706c2 100644 --- a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/views/mainwindow/library/LibraryView.java +++ b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/views/mainwindow/library/LibraryView.java @@ -60,7 +60,7 @@ import org.phoenicis.library.dto.ShortcutCategoryDTO; import org.phoenicis.library.dto.ShortcutCreationDTO; import org.phoenicis.library.dto.ShortcutDTO; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.Collections; diff --git a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java index e13ea727bd7..89dc8bf3839 100644 --- a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java +++ b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutManager.java @@ -24,7 +24,7 @@ import org.phoenicis.configuration.security.Safe; import org.phoenicis.library.dto.ShortcutDTO; import org.phoenicis.library.dto.ShortcutInfoDTO; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java index 682057d4b16..49e0bcae60d 100644 --- a/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java +++ b/phoenicis-library/src/main/java/org/phoenicis/library/ShortcutRunner.java @@ -20,7 +20,7 @@ import org.graalvm.polyglot.Value; import org.phoenicis.library.dto.ShortcutDTO; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.session.InteractiveScriptSession; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import java.util.List; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java index 8cd749ffe59..12c3b80b32d 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/ScriptsConfiguration.java @@ -20,13 +20,13 @@ import org.phoenicis.multithreading.MultithreadingConfiguration; import org.phoenicis.repository.RepositoryConfiguration; +import org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory; +import org.phoenicis.scripts.interpreter.PhoenicisScriptInterpreter; import org.phoenicis.scripts.engine.ScriptEngineType; +import org.phoenicis.scripts.engine.injectors.*; import org.phoenicis.scripts.interpreter.BackgroundScriptInterpreter; import org.phoenicis.scripts.interpreter.ScriptFetcher; import org.phoenicis.scripts.interpreter.ScriptInterpreter; -import org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory; -import org.phoenicis.scripts.engine.PhoenicisScriptInterpreter; -import org.phoenicis.scripts.engine.builtins.*; import org.phoenicis.scripts.wizard.WizardConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java index 8901d836c97..79c8b9952d4 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngineFactory.java @@ -18,9 +18,9 @@ package org.phoenicis.scripts.engine; -import org.phoenicis.scripts.engine.builtins.EngineInjector; +import org.phoenicis.scripts.engine.injectors.EngineInjector; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; -import javax.script.ScriptEngineManager; import java.util.List; public class PhoenicisScriptEngineFactory { diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java index a993adc272c..9918026c777 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/ScriptEngineType.java @@ -1,5 +1,9 @@ package org.phoenicis.scripts.engine; +import org.phoenicis.scripts.engine.implementation.JSAScriptEngine; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; +import org.phoenicis.scripts.engine.implementation.PolyglotScriptEngine; + import java.util.Map; /** diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/JSAScriptEngine.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/JSAScriptEngine.java similarity index 97% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/JSAScriptEngine.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/JSAScriptEngine.java index 19de9850bcc..a8f2214c99e 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/JSAScriptEngine.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/JSAScriptEngine.java @@ -1,4 +1,4 @@ -package org.phoenicis.scripts.engine; +package org.phoenicis.scripts.engine.implementation; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PhoenicisScriptEngine.java similarity index 96% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PhoenicisScriptEngine.java index bf65ac54142..400113e8f41 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptEngine.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PhoenicisScriptEngine.java @@ -16,7 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package org.phoenicis.scripts.engine; +package org.phoenicis.scripts.engine.implementation; import com.google.common.util.concurrent.Runnables; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PolyglotScriptEngine.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PolyglotScriptEngine.java similarity index 98% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PolyglotScriptEngine.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PolyglotScriptEngine.java index 48e8df05df6..318f4badda0 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PolyglotScriptEngine.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PolyglotScriptEngine.java @@ -1,4 +1,4 @@ -package org.phoenicis.scripts.engine; +package org.phoenicis.scripts.engine.implementation; import com.google.common.util.concurrent.Runnables; import org.apache.commons.io.IOUtils; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/BeanInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/BeanInjector.java similarity index 90% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/BeanInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/BeanInjector.java index 73122411846..00e23f9c3e2 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/BeanInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/BeanInjector.java @@ -1,7 +1,7 @@ -package org.phoenicis.scripts.engine.builtins; +package org.phoenicis.scripts.engine.injectors; import org.phoenicis.configuration.security.Safe; -import org.phoenicis.scripts.engine.PhoenicisScriptEngine; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; import org.springframework.context.ApplicationContext; import java.lang.annotation.Annotation; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/EngineInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/EngineInjector.java similarity index 82% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/EngineInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/EngineInjector.java index 430170ffb35..95ab829c883 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/EngineInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/EngineInjector.java @@ -1,6 +1,6 @@ -package org.phoenicis.scripts.engine.builtins; +package org.phoenicis.scripts.engine.injectors; -import org.phoenicis.scripts.engine.PhoenicisScriptEngine; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; /** * Injects some code into a Script Engine diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/IncludeInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/IncludeInjector.java similarity index 90% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/IncludeInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/IncludeInjector.java index ce89aaaa6bc..c7a0e508567 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/IncludeInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/IncludeInjector.java @@ -1,8 +1,8 @@ -package org.phoenicis.scripts.engine.builtins; +package org.phoenicis.scripts.engine.injectors; import org.phoenicis.scripts.interpreter.ScriptException; import org.phoenicis.scripts.interpreter.ScriptFetcher; -import org.phoenicis.scripts.engine.PhoenicisScriptEngine; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; import java.util.HashSet; import java.util.Set; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/LocalisationInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/LocalisationInjector.java similarity index 75% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/LocalisationInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/LocalisationInjector.java index 9934ee36970..04d2258a17a 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/LocalisationInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/LocalisationInjector.java @@ -1,6 +1,6 @@ -package org.phoenicis.scripts.engine.builtins; +package org.phoenicis.scripts.engine.injectors; -import org.phoenicis.scripts.engine.PhoenicisScriptEngine; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; /** * Injects tr() function into a Script Engine diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/ScriptUtilitiesInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/ScriptUtilitiesInjector.java similarity index 75% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/ScriptUtilitiesInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/ScriptUtilitiesInjector.java index 72e22c93578..da06a2b6a8f 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/ScriptUtilitiesInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/ScriptUtilitiesInjector.java @@ -1,6 +1,6 @@ -package org.phoenicis.scripts.engine.builtins; +package org.phoenicis.scripts.engine.injectors; -import org.phoenicis.scripts.engine.PhoenicisScriptEngine; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; import java.io.InputStreamReader; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/SetupWizardInjector.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/SetupWizardInjector.java similarity index 92% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/SetupWizardInjector.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/SetupWizardInjector.java index 885c16c77b4..1d229d6eb73 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/builtins/SetupWizardInjector.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/injectors/SetupWizardInjector.java @@ -1,7 +1,7 @@ -package org.phoenicis.scripts.engine.builtins; +package org.phoenicis.scripts.engine.injectors; import org.phoenicis.scripts.TriFunction; -import org.phoenicis.scripts.engine.PhoenicisScriptEngine; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; import org.phoenicis.scripts.ui.InstallationType; import org.phoenicis.scripts.wizard.UiSetupWizardFactory; import org.phoenicis.scripts.wizard.UiSetupWizardImplementation; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/BackgroundScriptInterpreter.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/BackgroundScriptInterpreter.java index ae3a6ebb0d7..5323466a40f 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/BackgroundScriptInterpreter.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/BackgroundScriptInterpreter.java @@ -18,6 +18,8 @@ package org.phoenicis.scripts.interpreter; +import org.phoenicis.scripts.session.InteractiveScriptSession; + import java.util.concurrent.ExecutorService; import java.util.function.Consumer; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/CancelException.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/CancelException.java deleted file mode 100644 index ec37435bd64..00000000000 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/CancelException.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2015-2017 PÂRIS Quentin - * - * 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 2 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, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -package org.phoenicis.scripts.interpreter; - -public class CancelException extends RuntimeException { - public CancelException(String s) { - super(s); - } -} diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptInterpreter.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/PhoenicisScriptInterpreter.java similarity index 86% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptInterpreter.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/PhoenicisScriptInterpreter.java index 1b81c6a2793..32f40b71ef2 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisScriptInterpreter.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/PhoenicisScriptInterpreter.java @@ -16,10 +16,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package org.phoenicis.scripts.engine; +package org.phoenicis.scripts.interpreter; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; -import org.phoenicis.scripts.interpreter.ScriptInterpreter; +import org.phoenicis.scripts.session.PhoenicisInteractiveScriptSession; +import org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory; +import org.phoenicis.scripts.session.InteractiveScriptSession; import java.util.function.Consumer; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/ScriptInterpreter.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/ScriptInterpreter.java index 3a2f837c8dd..7dececf9744 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/ScriptInterpreter.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/ScriptInterpreter.java @@ -19,6 +19,7 @@ package org.phoenicis.scripts.interpreter; import org.apache.commons.io.IOUtils; +import org.phoenicis.scripts.session.InteractiveScriptSession; import java.io.File; import java.io.FileInputStream; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/InteractiveScriptSession.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/session/InteractiveScriptSession.java similarity index 95% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/InteractiveScriptSession.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/session/InteractiveScriptSession.java index 7fa480db2e3..5c05f0cb883 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/interpreter/InteractiveScriptSession.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/session/InteractiveScriptSession.java @@ -16,7 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package org.phoenicis.scripts.interpreter; +package org.phoenicis.scripts.session; import java.util.function.Consumer; diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisInteractiveScriptSession.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/session/PhoenicisInteractiveScriptSession.java similarity index 88% rename from phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisInteractiveScriptSession.java rename to phoenicis-scripts/src/main/java/org/phoenicis/scripts/session/PhoenicisInteractiveScriptSession.java index ffaddd9fe6a..044457eee07 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/PhoenicisInteractiveScriptSession.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/session/PhoenicisInteractiveScriptSession.java @@ -16,9 +16,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package org.phoenicis.scripts.engine; +package org.phoenicis.scripts.session; -import org.phoenicis.scripts.interpreter.InteractiveScriptSession; +import org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; import java.util.function.Consumer; diff --git a/phoenicis-scripts/src/main/resources/org/phoenicis/scripts/engine/builtins/utils.js b/phoenicis-scripts/src/main/resources/org/phoenicis/scripts/engine/injectors/utils.js similarity index 100% rename from phoenicis-scripts/src/main/resources/org/phoenicis/scripts/engine/builtins/utils.js rename to phoenicis-scripts/src/main/resources/org/phoenicis/scripts/engine/injectors/utils.js From 6c5d7f1d0a13b1f046ba18c0e58f404f07f04604 Mon Sep 17 00:00:00 2001 From: plata Date: Thu, 7 Mar 2019 10:27:31 +0100 Subject: [PATCH 14/32] Fix shortcut creation (#1894) --- .../library/control/LibraryFeaturePanel.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/library/control/LibraryFeaturePanel.java b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/library/control/LibraryFeaturePanel.java index b7098ed8555..adb05648777 100644 --- a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/library/control/LibraryFeaturePanel.java +++ b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/library/control/LibraryFeaturePanel.java @@ -9,8 +9,8 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.control.Tab; -import jdk.nashorn.api.scripting.ScriptObjectMirror; import org.apache.commons.lang.StringUtils; +import org.graalvm.polyglot.Value; import org.phoenicis.javafx.components.common.control.FeaturePanel; import org.phoenicis.javafx.components.library.skin.LibraryFeaturePanelSkin; import org.phoenicis.javafx.controller.library.console.ConsoleController; @@ -153,15 +153,15 @@ public void createShortcut(ShortcutCreationDTO shortcutCreationDTO) { interactiveScriptSession.eval(scriptInclude, ignored -> interactiveScriptSession.eval("new " + engine + "Shortcut()", output -> { - final ScriptObjectMirror shortcutObject = (ScriptObjectMirror) output; - - shortcutObject.callMember("name", shortcutCreationDTO.getName()); - shortcutObject.callMember("category", shortcutCreationDTO.getCategory()); - shortcutObject.callMember("description", shortcutCreationDTO.getDescription()); - shortcutObject.callMember("miniature", shortcutCreationDTO.getMiniature()); - shortcutObject.callMember("search", shortcutCreationDTO.getExecutable().getName()); - shortcutObject.callMember("prefix", container); - shortcutObject.callMember("create"); + final Value shortcutObject = (Value) output; + + shortcutObject.invokeMember("name", shortcutCreationDTO.getName()); + shortcutObject.invokeMember("category", shortcutCreationDTO.getCategory()); + shortcutObject.invokeMember("description", shortcutCreationDTO.getDescription()); + shortcutObject.invokeMember("miniature", shortcutCreationDTO.getMiniature()); + shortcutObject.invokeMember("search", shortcutCreationDTO.getExecutable().getName()); + shortcutObject.invokeMember("prefix", container); + shortcutObject.invokeMember("create"); }, e -> Platform.runLater(() -> { final ErrorDialog errorDialog = ErrorDialog.builder() From bd3654ffb2580869bde0d183d5b45885405f261f Mon Sep 17 00:00:00 2001 From: plata Date: Wed, 15 May 2019 18:30:56 +0200 Subject: [PATCH 15/32] Travis: remove OpenJDK 10 --- .travis.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index bd00eb8bcbc..2f640b99d3d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,12 +24,6 @@ jobs: - if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then ./i18n/push_translations.sh; fi # build + test - - stage: Build + test - name: Linux OpenJDK 10 - os: linux - dist: trusty - jdk: openjdk10 - script: mvn clean package - stage: Build + test name: Linux OpenJDK 11 os: linux From f054b398eae53cd56b8c11edecfaa090e80ee0be Mon Sep 17 00:00:00 2001 From: plata Date: Wed, 15 May 2019 18:31:30 +0200 Subject: [PATCH 16/32] Update README (remove JDK 10 support) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bd30d19645b..fe4f502d40c 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Supported engines: ## Build and Run Dependencies: -* Java 10+ +* Java 11+ * Maven Build From f9784121ad598965156e0cb62d718e9d9e84d453 Mon Sep 17 00:00:00 2001 From: plata Date: Wed, 15 May 2019 18:32:48 +0200 Subject: [PATCH 17/32] Update docs (remove Java 11 support) --- docs/_docs/Developers/build.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/_docs/Developers/build.md b/docs/_docs/Developers/build.md index 7db9b751d55..f5f0d3710b0 100644 --- a/docs/_docs/Developers/build.md +++ b/docs/_docs/Developers/build.md @@ -13,7 +13,7 @@ sudo apt update sudo apt install git maven openjdk-11-jdk fakeroot ``` -* Optional: if your distribution does not support Java 10+ **or** if you need to create packages, grab the latest JDK +* Optional: if your distribution does not support Java 11+ **or** if you need to create packages, grab the latest JDK ``` wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz -O /tmp/openjdk-11+28_linux-x64_bin.tar.gz sudo tar xfvz /tmp/openjdk-11+28_linux-x64_bin.tar.gz --directory /usr/lib/jvm @@ -135,5 +135,4 @@ Problem: Exception in thread "main" java.lang.UnsupportedClassVersionError: org/phoenicis/javafx/JavaFXApplication : Unsupported major.minor version ``` Solution: -Switch to at least Java 10 for running locally (see: these [instructions](https://wiki.archlinux.org/index.php/java#Switching_between_JVM)) -Switch to at least Java 11 for creating packages +Switch to at least Java 11 for running locally (see: these [instructions](https://wiki.archlinux.org/index.php/java#Switching_between_JVM)) From 57c06221fd144f1ac3abe302c227a839ee9d6d5b Mon Sep 17 00:00:00 2001 From: plata Date: Sun, 19 May 2019 17:30:17 +0200 Subject: [PATCH 18/32] Use 19.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 37e12f7cb82..86b447763c4 100644 --- a/pom.xml +++ b/pom.xml @@ -55,7 +55,7 @@ 2.25.1 5.1.5.RELEASE 2.8.1 - 1.0.0-rc12 + 19.0.0 From adc83d3a49704dabe0315a6d2a457d76e818ae4e Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sat, 1 Jun 2019 12:54:32 +0200 Subject: [PATCH 19/32] Package creation fix --- .../src/scripts/phoenicis-create-package.sh | 104 ++++++++++++++++++ phoenicis-tools/pom.xml | 5 + 2 files changed, 109 insertions(+) create mode 100755 phoenicis-dist/src/scripts/phoenicis-create-package.sh diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package.sh b/phoenicis-dist/src/scripts/phoenicis-create-package.sh new file mode 100755 index 00000000000..6d3b149a579 --- /dev/null +++ b/phoenicis-dist/src/scripts/phoenicis-create-package.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +## Dependencies +# Linux: +# - fakeroot +# + +VERSION="$1" + +if [ "$VERSION" = "" ]; then + echo "Warning: Version not specified. Reading from pom.xml" + VERSION="$(cat ../../pom.xml|grep -4 ''|grep ''|awk -F'[<>]' '//{print $3}')" + echo "Using $VERSION" +fi + +SCRIPT_PATH="$(dirname "$0")" +cd "$SCRIPT_PATH" +SCRIPT_PATH="$PWD" + +[ "$JAVA_HOME" = "" ] && echo "Please set JAVA_HOME" && exit 0 + +PHOENICIS_OPERATING_SYSTEM="$(uname)" + +if [ "$PHOENICIS_OPERATING_SYSTEM" == "Darwin" ]; then + PHOENICIS_APPTITLE="Phoenicis PlayOnMac" + JPACKAGER_OS="osx" +fi + +if [ "$PHOENICIS_OPERATING_SYSTEM" == "Linux" ]; then + PHOENICIS_APPTITLE="Phoenicis PlayOnLinux" + JPACKAGER_OS="linux" +fi + +PHOENICIS_TARGET="$SCRIPT_PATH/../../target" +PHOENICIS_JPACKAGER="$SCRIPT_PATH/../../target/jpackager" +PHOENICIS_RESOURCES="$SCRIPT_PATH/../resources" +PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci" +PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=../Java/compiler.jar" +PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--version" "$VERSION" "--jvm-args" "$PHOENICIS_RUNTIME_OPTIONS") + +_download_jpackager() { + mkdir -p "$PHOENICIS_JPACKAGER" + cd "$PHOENICIS_JPACKAGER" + wget http://download2.gluonhq.com/jpackager/11/jdk.packager-$JPACKAGER_OS.zip + unzip jdk.packager-$JPACKAGER_OS.zip +} + + +jpackager() { + if [ ! -e "$PHOENICIS_JPACKAGER/jpackager" ]; then + _download_jpackager + fi + + "$PHOENICIS_JPACKAGER/jpackager" "$@" +} + +cd "$PHOENICIS_TARGET" + +if [ "$PHOENICIS_OPERATING_SYSTEM" == "Darwin" ]; then + jpackager create-image --icon "$PHOENICIS_RESOURCES/Phoenicis PlayOnMac.icns" "${PHOENICIS_JPACKAGER_ARGUMENTS[@]}" +fi + +if [ "$PHOENICIS_OPERATING_SYSTEM" == "Linux" ]; then + jpackager create-image "${PHOENICIS_JPACKAGER_ARGUMENTS[@]}" --linux-bundle-name "phoenicis-playonlinux" + + packageName="Phoenicis_$VERSION" + cd "$PHOENICIS_TARGET" + rmdir packages/PhoenicisPlayOnLinux/ + rm -rf "packages/phoenicis" 2> /dev/null + mv packages/Phoenicis\ PlayOnLinux/ packages/phoenicis + rm -rf "$packageName" 2> /dev/null + mkdir -p "$packageName/DEBIAN/" + + cat << EOF > "$packageName/DEBIAN/control" +Package: phoenicis-playonlinux +Version: $VERSION +Section: misc +Priority: optional +Architecture: all +Depends: unzip, wget, xterm | x-terminal-emulator, python, imagemagick, cabextract, icoutils, p7zip-full, curl +Maintainer: PlayOnLinux Packaging +Description: This program is a front-end for wine. + It permits you to install Windows Games and softwares + on Linux. It allows you to manage differents virtual hard drive, + and several wine versions. + Copyright 2011-2019 PlayOnLinux team +EOF + + mkdir -p $packageName/usr/share/applications + mkdir -p $packageName/usr/share/pixmaps + mkdir -p $packageName/usr/bin + + cp -a packages/phoenicis $packageName/usr/share/ + cp -a "$SCRIPT_PATH/../launchers/phoenicis" $packageName/usr/bin/phoenicis + chmod +x $packageName/usr/bin/phoenicis + + cp "$SCRIPT_PATH/../resources/Phoenicis.desktop" "$packageName/usr/share/applications" + cp "$SCRIPT_PATH/../resources/phoenicis.png" "$packageName/usr/share/pixmaps" + cp "$SCRIPT_PATH/../resources/phoenicis-16.png" "$packageName/usr/share/pixmaps" + cp "$SCRIPT_PATH/../resources/phoenicis-32.png" "$packageName/usr/share/pixmaps" + + fakeroot dpkg-deb --build "$packageName" + rm -rf deb +fi diff --git a/phoenicis-tools/pom.xml b/phoenicis-tools/pom.xml index b8cc0e2ddf7..69254741d17 100644 --- a/phoenicis-tools/pom.xml +++ b/phoenicis-tools/pom.xml @@ -111,6 +111,11 @@ bcprov-jdk15on org.bouncycastle + + + jackson-core + com.fasterxml.jackson.core + From fa14ad5ad58fbeff0db1a777ac80868ff80cf13f Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sat, 1 Jun 2019 13:48:46 +0200 Subject: [PATCH 20/32] Removed useless options --- phoenicis-dist/src/scripts/phoenicis-create-package.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package.sh b/phoenicis-dist/src/scripts/phoenicis-create-package.sh index 2493bdb1a30..973927ff70d 100755 --- a/phoenicis-dist/src/scripts/phoenicis-create-package.sh +++ b/phoenicis-dist/src/scripts/phoenicis-create-package.sh @@ -35,7 +35,7 @@ PHOENICIS_TARGET="$SCRIPT_PATH/../../target" PHOENICIS_JPACKAGER="$SCRIPT_PATH/../../target/jpackager" PHOENICIS_RESOURCES="$SCRIPT_PATH/../resources" PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,org.graalvm.truffle" -PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=../Java/compiler.jar" +PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI" PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--version" "$VERSION" "--jvm-args" "$PHOENICIS_RUNTIME_OPTIONS") _download_jpackager() { From 34fea355af622d7581f5372e5221cd3da37043d9 Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sat, 1 Jun 2019 13:49:17 +0200 Subject: [PATCH 21/32] Revert Removed useless options --- phoenicis-dist/src/scripts/phoenicis-create-package.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package.sh b/phoenicis-dist/src/scripts/phoenicis-create-package.sh index 973927ff70d..2493bdb1a30 100755 --- a/phoenicis-dist/src/scripts/phoenicis-create-package.sh +++ b/phoenicis-dist/src/scripts/phoenicis-create-package.sh @@ -35,7 +35,7 @@ PHOENICIS_TARGET="$SCRIPT_PATH/../../target" PHOENICIS_JPACKAGER="$SCRIPT_PATH/../../target/jpackager" PHOENICIS_RESOURCES="$SCRIPT_PATH/../resources" PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,org.graalvm.truffle" -PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI" +PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=../Java/compiler.jar" PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--version" "$VERSION" "--jvm-args" "$PHOENICIS_RUNTIME_OPTIONS") _download_jpackager() { From dadc27a7662064e0940388d04ffdba29b92377b2 Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sat, 1 Jun 2019 13:52:48 +0200 Subject: [PATCH 22/32] Fix linux build --- phoenicis-dist/src/scripts/phoenicis-create-package.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package.sh b/phoenicis-dist/src/scripts/phoenicis-create-package.sh index 2493bdb1a30..970a3499c0d 100755 --- a/phoenicis-dist/src/scripts/phoenicis-create-package.sh +++ b/phoenicis-dist/src/scripts/phoenicis-create-package.sh @@ -24,18 +24,20 @@ PHOENICIS_OPERATING_SYSTEM="$(uname)" if [ "$PHOENICIS_OPERATING_SYSTEM" == "Darwin" ]; then PHOENICIS_APPTITLE="Phoenicis PlayOnMac" JPACKAGER_OS="osx" + JAR_RELATIVE_PATH="../Java" fi if [ "$PHOENICIS_OPERATING_SYSTEM" == "Linux" ]; then PHOENICIS_APPTITLE="Phoenicis PlayOnLinux" JPACKAGER_OS="linux" + JAR_RELATIVE_PATH="./app" fi PHOENICIS_TARGET="$SCRIPT_PATH/../../target" PHOENICIS_JPACKAGER="$SCRIPT_PATH/../../target/jpackager" PHOENICIS_RESOURCES="$SCRIPT_PATH/../resources" PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,org.graalvm.truffle" -PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=../Java/compiler.jar" +PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=$JAR_RELATIVE_PATH/compiler.jar" PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--version" "$VERSION" "--jvm-args" "$PHOENICIS_RUNTIME_OPTIONS") _download_jpackager() { From 0e59dd35ad9dd14e5987f0bc5cae380ace16319e Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sat, 1 Jun 2019 18:20:07 +0200 Subject: [PATCH 23/32] Fix linux installation --- phoenicis-dist/src/scripts/phoenicis-create-package.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package.sh b/phoenicis-dist/src/scripts/phoenicis-create-package.sh index 970a3499c0d..debcff6699e 100755 --- a/phoenicis-dist/src/scripts/phoenicis-create-package.sh +++ b/phoenicis-dist/src/scripts/phoenicis-create-package.sh @@ -30,7 +30,7 @@ fi if [ "$PHOENICIS_OPERATING_SYSTEM" == "Linux" ]; then PHOENICIS_APPTITLE="Phoenicis PlayOnLinux" JPACKAGER_OS="linux" - JAR_RELATIVE_PATH="./app" + JAR_RELATIVE_PATH="/usr/share/phoenicis/app" fi PHOENICIS_TARGET="$SCRIPT_PATH/../../target" From 5853ca7c8d6c9039edde78edae6f8e2537a02b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Quentin=20P=C3=A2ris?= Date: Sat, 1 Jun 2019 21:03:40 +0200 Subject: [PATCH 24/32] Packaging with GraalVM support (#1957) * Package creation fix * Removed useless options * Revert Removed useless options * Fix linux build * Fix linux installation --- phoenicis-dist/src/scripts/phoenicis-create-package.sh | 8 +++++--- .../engine/implementation/PolyglotScriptEngine.java | 1 + phoenicis-tools/pom.xml | 5 +++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package.sh b/phoenicis-dist/src/scripts/phoenicis-create-package.sh index ceffe6df3f6..debcff6699e 100755 --- a/phoenicis-dist/src/scripts/phoenicis-create-package.sh +++ b/phoenicis-dist/src/scripts/phoenicis-create-package.sh @@ -24,19 +24,21 @@ PHOENICIS_OPERATING_SYSTEM="$(uname)" if [ "$PHOENICIS_OPERATING_SYSTEM" == "Darwin" ]; then PHOENICIS_APPTITLE="Phoenicis PlayOnMac" JPACKAGER_OS="osx" + JAR_RELATIVE_PATH="../Java" fi if [ "$PHOENICIS_OPERATING_SYSTEM" == "Linux" ]; then PHOENICIS_APPTITLE="Phoenicis PlayOnLinux" JPACKAGER_OS="linux" + JAR_RELATIVE_PATH="/usr/share/phoenicis/app" fi PHOENICIS_TARGET="$SCRIPT_PATH/../../target" PHOENICIS_JPACKAGER="$SCRIPT_PATH/../../target/jpackager" PHOENICIS_RESOURCES="$SCRIPT_PATH/../resources" -PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn" -PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--version" "$VERSION") - +PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,org.graalvm.truffle" +PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=$JAR_RELATIVE_PATH/compiler.jar" +PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--version" "$VERSION" "--jvm-args" "$PHOENICIS_RUNTIME_OPTIONS") _download_jpackager() { mkdir -p "$PHOENICIS_JPACKAGER" diff --git a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PolyglotScriptEngine.java b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PolyglotScriptEngine.java index 318f4badda0..69406983fca 100644 --- a/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PolyglotScriptEngine.java +++ b/phoenicis-scripts/src/main/java/org/phoenicis/scripts/engine/implementation/PolyglotScriptEngine.java @@ -42,6 +42,7 @@ public PolyglotScriptEngine(String language, Map options) { this.errorHandlers = new ArrayList<>(); this.language = language; this.context = Context.newBuilder(language) + .allowExperimentalOptions(true) .options(options).allowHostAccess(true).build(); } diff --git a/phoenicis-tools/pom.xml b/phoenicis-tools/pom.xml index 3fd03949128..c09c29b0eb4 100644 --- a/phoenicis-tools/pom.xml +++ b/phoenicis-tools/pom.xml @@ -115,6 +115,11 @@ bcprov-jdk15on org.bouncycastle + + + jackson-core + com.fasterxml.jackson.core + From bd28b7f74447ab2fa60b66aa3141580f6c7a28d4 Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sun, 9 Jun 2019 17:08:36 +0200 Subject: [PATCH 25/32] Fixed dependencies --- phoenicis-javafx/pom.xml | 2 +- phoenicis-repository/pom.xml | 14 ++++++++++++++ phoenicis-tools/pom.xml | 4 ++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/phoenicis-javafx/pom.xml b/phoenicis-javafx/pom.xml index 43b31afa75f..21a9654728a 100644 --- a/phoenicis-javafx/pom.xml +++ b/phoenicis-javafx/pom.xml @@ -127,7 +127,7 @@ com.github.PhoenicisOrg javafx-collections - 1.2.0 + 1.2.1 diff --git a/phoenicis-repository/pom.xml b/phoenicis-repository/pom.xml index 9bd17d0f011..1d1584df9fb 100644 --- a/phoenicis-repository/pom.xml +++ b/phoenicis-repository/pom.xml @@ -88,6 +88,20 @@ org.eclipse.jgit org.eclipse.jgit 5.3.1.201904271842-r + + + bcprov-jdk15on + org.bouncycastle + + + bcpg-jdk15on + org.bouncycastle + + + bcpkix-jdk15on + org.bouncycastle + + diff --git a/phoenicis-tools/pom.xml b/phoenicis-tools/pom.xml index c09c29b0eb4..f8868e396e2 100644 --- a/phoenicis-tools/pom.xml +++ b/phoenicis-tools/pom.xml @@ -115,6 +115,10 @@ bcprov-jdk15on org.bouncycastle + + bcpkix-jdk15on + org.bouncycastle + jackson-core From 6384354d0b825fa8eb1c375e2e7d16c57c4d2495 Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sun, 9 Jun 2019 17:10:07 +0200 Subject: [PATCH 26/32] Java12 packaging --- .../phoenicis-create-package-java12.sh | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100755 phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh b/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh new file mode 100755 index 00000000000..898f473a32d --- /dev/null +++ b/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +## Dependencies +# Linux: +# - fakeroot +# + +VERSION="$1" + +if [ "$VERSION" = "" ]; then + echo "Warning: Version not specified. Reading from pom.xml" + VERSION="$(cat ../../pom.xml|grep -4 ''|grep ''|awk -F'[<>]' '//{print $3}')" + echo "Using $VERSION" +fi + +SCRIPT_PATH="$(dirname "$0")" +cd "$SCRIPT_PATH" +SCRIPT_PATH="$PWD" + +[ "$JAVA_HOME" = "" ] && echo "Please set JAVA_HOME" && exit 0 + +PHOENICIS_OPERATING_SYSTEM="$(uname)" + +if [ "$PHOENICIS_OPERATING_SYSTEM" == "Darwin" ]; then + PHOENICIS_APPTITLE="Phoenicis PlayOnMac" + JPACKAGER_OS="osx" + JAR_RELATIVE_PATH="../Java" +fi + +if [ "$PHOENICIS_OPERATING_SYSTEM" == "Linux" ]; then + PHOENICIS_APPTITLE="Phoenicis PlayOnLinux" + JPACKAGER_OS="linux" + JAR_RELATIVE_PATH="/usr/share/phoenicis/app" +fi + +PHOENICIS_TARGET="$SCRIPT_PATH/../../target" +PHOENICIS_JPACKAGER="$SCRIPT_PATH/../../target/jpackager" +PHOENICIS_RESOURCES="$SCRIPT_PATH/../resources" +PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,java.desktop,java.prefs,java.xml" +PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=$JAR_RELATIVE_PATH/compiler.jar" +PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--app-version" "$VERSION" "--java-options" "$PHOENICIS_RUNTIME_OPTIONS") + + +_download_jpackager() { + mkdir -p "$PHOENICIS_JPACKAGER" + cd "$PHOENICIS_JPACKAGER" + wget https://download.java.net/java/early_access/jpackage/49/openjdk-13-jpackage+49_osx-x64_bin.tar.gz + tar -xvf openjdk-13-jpackage+49_osx-x64_bin.tar.gz +} + + +jpackager() { + if [ ! -e "$PHOENICIS_JPACKAGER/jdk-13.jdk/Contents/Home/bin" ]; then + _download_jpackager + fi + + "$PHOENICIS_JPACKAGER/jdk-13.jdk/Contents/Home/bin/jpackage" "$@" +} + +cd "$PHOENICIS_TARGET" + +if [ "$PHOENICIS_OPERATING_SYSTEM" == "Darwin" ]; then + rm -rf "$PHOENICIS_TARGET/packages/Phoenicis PlayOnMac.app" + jpackager create-app-image --icon "$PHOENICIS_RESOURCES/Phoenicis PlayOnMac.icns" "${PHOENICIS_JPACKAGER_ARGUMENTS[@]}" +fi + +if [ "$PHOENICIS_OPERATING_SYSTEM" == "Linux" ]; then + jpackager create-image "${PHOENICIS_JPACKAGER_ARGUMENTS[@]}" --linux-bundle-name "phoenicis-playonlinux" + + packageName="Phoenicis_$VERSION" + cd "$PHOENICIS_TARGET" + rmdir packages/PhoenicisPlayOnLinux/ + rm -rf "packages/phoenicis" 2> /dev/null + mv packages/Phoenicis\ PlayOnLinux/ packages/phoenicis + rm -rf "$packageName" 2> /dev/null + mkdir -p "$packageName/DEBIAN/" + + cat << EOF > "$packageName/DEBIAN/control" +Package: phoenicis-playonlinux +Version: $VERSION +Section: misc +Priority: optional +Architecture: all +Depends: unzip, wget, xterm | x-terminal-emulator, python, imagemagick, cabextract, icoutils, p7zip-full, curl +Maintainer: PlayOnLinux Packaging +Description: This program is a front-end for wine. + It permits you to install Windows Games and softwares + on Linux. It allows you to manage differents virtual hard drive, + and several wine versions. + Copyright 2011-2019 PlayOnLinux team +EOF + + mkdir -p $packageName/usr/share/applications + mkdir -p $packageName/usr/share/pixmaps + mkdir -p $packageName/usr/bin + + cp -a packages/phoenicis $packageName/usr/share/ + cp -a "$SCRIPT_PATH/../launchers/phoenicis" $packageName/usr/bin/phoenicis + chmod +x $packageName/usr/bin/phoenicis + + cp "$SCRIPT_PATH/../resources/Phoenicis.desktop" "$packageName/usr/share/applications" + cp "$SCRIPT_PATH/../resources/phoenicis.png" "$packageName/usr/share/pixmaps" + cp "$SCRIPT_PATH/../resources/phoenicis-16.png" "$packageName/usr/share/pixmaps" + cp "$SCRIPT_PATH/../resources/phoenicis-32.png" "$packageName/usr/share/pixmaps" + + fakeroot dpkg-deb --build "$packageName" + rm -rf deb +fi From f05d89016f05d40bf45ceb9cfb4b4a88bfb8e2c3 Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sun, 9 Jun 2019 17:13:05 +0200 Subject: [PATCH 27/32] Java12 packaging - Disclaimer --- phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh b/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh index 898f473a32d..06c2770138e 100755 --- a/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh +++ b/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh @@ -1,5 +1,7 @@ #!/bin/bash +## TODO: This script does not work yet + ## Dependencies # Linux: # - fakeroot From 087179e42cc9ee8cc9b6f741d7db196c4f08e3e0 Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sun, 9 Jun 2019 17:23:34 +0200 Subject: [PATCH 28/32] Jpackager: Java 12+ --- .../src/scripts/phoenicis-create-package-java12.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh b/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh index 06c2770138e..47c283574e5 100755 --- a/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh +++ b/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh @@ -1,6 +1,6 @@ #!/bin/bash -## TODO: This script does not work yet +## TODO: This script has not been adapted for Linux ## Dependencies # Linux: @@ -38,8 +38,8 @@ fi PHOENICIS_TARGET="$SCRIPT_PATH/../../target" PHOENICIS_JPACKAGER="$SCRIPT_PATH/../../target/jpackager" PHOENICIS_RESOURCES="$SCRIPT_PATH/../resources" -PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,java.desktop,java.prefs,java.xml" -PHOENICIS_RUNTIME_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=$JAR_RELATIVE_PATH/compiler.jar" +PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom" +PHOENICIS_RUNTIME_OPTIONS="-XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:-ShrinkHeapInSteps -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=$JAR_RELATIVE_PATH/compiler.jar --module-path=../Java --add-modules=$PHOENICIS_MODULES" PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--app-version" "$VERSION" "--java-options" "$PHOENICIS_RUNTIME_OPTIONS") From 2fd6be1dec88166aa285f9c53c81a4e224cfd12a Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sun, 9 Jun 2019 23:27:41 +0200 Subject: [PATCH 29/32] Jpackager: Memory switch --- phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh b/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh index 47c283574e5..3986d987ce9 100755 --- a/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh +++ b/phoenicis-dist/src/scripts/phoenicis-create-package-java12.sh @@ -39,7 +39,7 @@ PHOENICIS_TARGET="$SCRIPT_PATH/../../target" PHOENICIS_JPACKAGER="$SCRIPT_PATH/../../target/jpackager" PHOENICIS_RESOURCES="$SCRIPT_PATH/../resources" PHOENICIS_MODULES="jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom" -PHOENICIS_RUNTIME_OPTIONS="-XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:-ShrinkHeapInSteps -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=$JAR_RELATIVE_PATH/compiler.jar --module-path=../Java --add-modules=$PHOENICIS_MODULES" +PHOENICIS_RUNTIME_OPTIONS="-XX:G1PeriodicGCInterval=5000 -XX:G1PeriodicGCSystemLoadThreshold=0 -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:-ShrinkHeapInSteps -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=$JAR_RELATIVE_PATH/compiler.jar --module-path=../Java --add-modules=$PHOENICIS_MODULES" PHOENICIS_JPACKAGER_ARGUMENTS=("-i" "$PHOENICIS_TARGET/lib" "--main-jar" "phoenicis-javafx-$VERSION.jar" "-n" "$PHOENICIS_APPTITLE" "--output" "$PHOENICIS_TARGET/packages/" "--add-modules" "$PHOENICIS_MODULES" "-p" "$PHOENICIS_TARGET/lib/" "--app-version" "$VERSION" "--java-options" "$PHOENICIS_RUNTIME_OPTIONS") From 47be5f2f7b98f609c856344f9d76547f9130f300 Mon Sep 17 00:00:00 2001 From: Quentin PARIS Date: Sun, 9 Jun 2019 23:29:23 +0200 Subject: [PATCH 30/32] Fixed module path --- docs/_docs/Developers/intellij-idea.md | 4 ++-- phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_docs/Developers/intellij-idea.md b/docs/_docs/Developers/intellij-idea.md index b0b4b0e6038..c44f0a22dbc 100644 --- a/docs/_docs/Developers/intellij-idea.md +++ b/docs/_docs/Developers/intellij-idea.md @@ -18,11 +18,11 @@ add: JavaFXApplication with: * main class: org.phoenicis.javafx.JavaFXApplication * VM options: ``` ---add-modules=ALL-MODULE-PATH --module-path=phoenicis-dist/target/lib -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath phoenicis-dist/target/lib --upgrade-module-path=phoenicis-dist/target/lib/compiler.jar +--add-modules=jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom --module-path=phoenicis-dist/target/lib -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath phoenicis-dist/target/lib --upgrade-module-path=phoenicis-dist/target/lib/compiler.jar ``` * **With Java 11**, you may need to remove the = in --module-path ``` ---add-modules=ALL-MODULE-PATH --module-path phoenicis-dist/target/lib +--add-modules=jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom --module-path phoenicis-dist/target/lib ``` ![IntelliJ IDEA configuration](/images/intellij-idea-run.png) diff --git a/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml b/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml index 9dc274697f3..4a87211e748 100644 --- a/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml +++ b/phoenicis-dist/src/flatpak/org.phoenicis.playonlinux.yml @@ -70,4 +70,4 @@ modules: - type: script dest-filename: phoenicis-playonlinux commands: - - /app/jre/bin/java --module-path /app/phoenicis/lib/ --add-modules=ALL-MODULE-PATH -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath /app/phoenicis/lib --upgrade-module-path=/app/phoenicis/lib/compiler.jar org.phoenicis.javafx.JavaFXApplication "$@" + - /app/jre/bin/java --module-path /app/phoenicis/lib/ --add-modules=jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath /app/phoenicis/lib --upgrade-module-path=/app/phoenicis/lib/compiler.jar org.phoenicis.javafx.JavaFXApplication "$@" From aa3fb2aed1e150b093436c73d31679b60ff313b3 Mon Sep 17 00:00:00 2001 From: plata Date: Mon, 10 Jun 2019 11:18:00 +0200 Subject: [PATCH 31/32] Remove classpath parameter --- docs/_docs/Developers/intellij-idea.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/Developers/intellij-idea.md b/docs/_docs/Developers/intellij-idea.md index c44f0a22dbc..4d2cba9a9b3 100644 --- a/docs/_docs/Developers/intellij-idea.md +++ b/docs/_docs/Developers/intellij-idea.md @@ -18,7 +18,7 @@ add: JavaFXApplication with: * main class: org.phoenicis.javafx.JavaFXApplication * VM options: ``` ---add-modules=jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom --module-path=phoenicis-dist/target/lib -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -classpath phoenicis-dist/target/lib --upgrade-module-path=phoenicis-dist/target/lib/compiler.jar +--add-modules=jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom --module-path phoenicis-dist/target/lib -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=phoenicis-dist/target/lib/compiler.jar ``` * **With Java 11**, you may need to remove the = in --module-path ``` From f6073e6f88217017c4b463ce3a10cc7a65f23669 Mon Sep 17 00:00:00 2001 From: plata Date: Mon, 10 Jun 2019 11:22:03 +0200 Subject: [PATCH 32/32] Remove Java 10 support --- docs/_docs/Developers/intellij-idea.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/_docs/Developers/intellij-idea.md b/docs/_docs/Developers/intellij-idea.md index 7be5789943a..8436be98f5a 100644 --- a/docs/_docs/Developers/intellij-idea.md +++ b/docs/_docs/Developers/intellij-idea.md @@ -21,10 +21,6 @@ add: JavaFXApplication with: ``` --add-modules=jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom --module-path phoenicis-dist/target/lib -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=phoenicis-dist/target/lib/compiler.jar ``` -* **With Java 11**, you may need to remove the = in --module-path -``` ---add-modules=jdk.crypto.ec,java.base,javafx.base,javafx.web,javafx.media,javafx.graphics,javafx.controls,java.naming,java.sql,java.scripting,jdk.scripting.nashorn,jdk.internal.vm.ci,jdk.internal.vm.compiler,org.graalvm.truffle,jdk.jsobject,jdk.xml.dom --module-path phoenicis-dist/target/lib -``` * Program arguments: empty * Working directory: `/path/to/phoenicis` * Environment variables: empty