From b7872ecb379df94c30564c67a66f00eba1be848f Mon Sep 17 00:00:00 2001 From: Marc Arndt Date: Sat, 24 Aug 2019 15:30:24 +0200 Subject: [PATCH 1/3] - add registerVerb and isVerbRegistered method to the Engine interface - add a label that informs the user if a verb is already installed - add a method to the VerbsManager to check whether a verb has already been installed --- .../java/org/phoenicis/engines/Engine.java | 15 +++++++++++++ .../engines/EnginesConfiguration.java | 3 ++- .../org/phoenicis/engines/VerbsManager.java | 21 ++++++++++++++++++- .../skin/ContainerVerbsPanelSkin.java | 18 +++++++++++++--- 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java index b2c9049e57c..148966b0e94 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java @@ -115,4 +115,19 @@ String run(String executable, String[] args, String workingDir, boolean captureO * @param wizard setup wizard */ void setWizard(SetupWizard wizard); + + /** + * Registers as verb as being "installed" + * + * @param verbId The ID of the verb + */ + void registerVerb(String verbId); + + /** + * Checks whether a given verb has been registered as being "installed" + * + * @param verbId The ID of the verb + * @return True if the verb has been registered as being "installed", false otherwise + */ + boolean isVerbRegistered(String verbId); } diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesConfiguration.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesConfiguration.java index 28aca47d1f0..c33d1e3c1ff 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesConfiguration.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/EnginesConfiguration.java @@ -51,7 +51,8 @@ public EngineSettingsManager engineSettingsManager() { @Bean public VerbsManager verbsManager() { - return new VerbsManager(scriptsConfiguration.scriptInterpreter()); + return new VerbsManager(scriptsConfiguration.scriptInterpreter(), + scriptsConfiguration.graalScriptEngineFactory()); } @Bean 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 934b06d90a1..f634c12f0cd 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java @@ -23,6 +23,8 @@ import org.phoenicis.repository.dto.CategoryDTO; import org.phoenicis.repository.dto.RepositoryDTO; import org.phoenicis.repository.dto.TypeDTO; +import org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory; +import org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine; import org.phoenicis.scripts.interpreter.ScriptException; import org.phoenicis.scripts.interpreter.ScriptInterpreter; import org.phoenicis.scripts.session.InteractiveScriptSession; @@ -39,13 +41,17 @@ public class VerbsManager { private final ScriptInterpreter scriptInterpreter; + private final PhoenicisScriptEngineFactory scriptEngineFactory; + /** * Constructor * * @param scriptInterpreter The underlying script interpreter + * @param scriptEngineFactory */ - public VerbsManager(ScriptInterpreter scriptInterpreter) { + public VerbsManager(ScriptInterpreter scriptInterpreter, PhoenicisScriptEngineFactory scriptEngineFactory) { this.scriptInterpreter = scriptInterpreter; + this.scriptEngineFactory = scriptEngineFactory; } /** @@ -129,4 +135,17 @@ public void fetchAvailableVerbs(RepositoryDTO repositoryDTO, Consumer { + }); + + final Engine engine = engineClass.newInstance().as(Engine.class); + + return engine.isVerbRegistered(verbId); + } } diff --git a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/container/skin/ContainerVerbsPanelSkin.java b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/container/skin/ContainerVerbsPanelSkin.java index 0fd29475536..0b9a2f63816 100644 --- a/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/container/skin/ContainerVerbsPanelSkin.java +++ b/phoenicis-javafx/src/main/java/org/phoenicis/javafx/components/container/skin/ContainerVerbsPanelSkin.java @@ -146,18 +146,30 @@ private void updateVerbs(final GridPane verbs) { verbs.getChildren().clear(); for (ScriptDTO verb : getControl().getVerbScripts()) { + final boolean alreadyInstalled = getControl().getVerbsManager().isVerbInstalled( + getControl().getContainer().getEngine(), verb.getId()); + final int row = verbs.getRowCount(); final CheckBox verbCheck = new CheckBox(); - verbCheck.disableProperty().bind(getControl().lockVerbsProperty()); + if (alreadyInstalled) { + verbCheck.setDisable(true); + } else { + verbCheck.disableProperty().bind(getControl().lockVerbsProperty()); + } final Label verbName = new Label(verb.getScriptName()); // select the associated checkbox if the label has been clicked verbName.setOnMouseClicked(event -> verbCheck.fire()); - GridPane.setHgrow(verbName, Priority.ALWAYS); + final Label installedLabel = new Label(); + if (alreadyInstalled) { + installedLabel.setText(tr("Already Installed")); + } + + GridPane.setHgrow(installedLabel, Priority.ALWAYS); - verbs.addRow(row, verbCheck, verbName); + verbs.addRow(row, verbCheck, verbName, installedLabel); } } } From eae44ee4f40ecc7afd8c6f5089e40deffefb4deb Mon Sep 17 00:00:00 2001 From: Marc Arndt Date: Sat, 24 Aug 2019 15:41:19 +0200 Subject: [PATCH 2/3] - add container id to the isVerbRegistered method --- .../src/main/java/org/phoenicis/engines/Engine.java | 3 ++- .../src/main/java/org/phoenicis/engines/VerbsManager.java | 4 ++-- .../components/container/skin/ContainerVerbsPanelSkin.java | 7 +++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java index 148966b0e94..24444df6144 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java @@ -127,7 +127,8 @@ String run(String executable, String[] args, String workingDir, boolean captureO * Checks whether a given verb has been registered as being "installed" * * @param verbId The ID of the verb + * @param container The container where the verb has been installed * @return True if the verb has been registered as being "installed", false otherwise */ - boolean isVerbRegistered(String verbId); + boolean isVerbRegistered(String verbId, String container); } 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 f634c12f0cd..3f4261488d7 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/VerbsManager.java @@ -136,7 +136,7 @@ public void fetchAvailableVerbs(RepositoryDTO repositoryDTO, Consumer Date: Sat, 24 Aug 2019 15:42:04 +0200 Subject: [PATCH 3/3] - add the container id to the registerVerb method --- .../src/main/java/org/phoenicis/engines/Engine.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java b/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java index 24444df6144..1a44e1fb981 100644 --- a/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java +++ b/phoenicis-engines/src/main/java/org/phoenicis/engines/Engine.java @@ -120,8 +120,9 @@ String run(String executable, String[] args, String workingDir, boolean captureO * Registers as verb as being "installed" * * @param verbId The ID of the verb + * @param container The container where the verb has been installed */ - void registerVerb(String verbId); + void registerVerb(String verbId, String container); /** * Checks whether a given verb has been registered as being "installed"