From d1fcd103e7e94bab8147cb94a115268fb9295cdc Mon Sep 17 00:00:00 2001 From: Christian Kramp Date: Wed, 15 May 2024 12:33:57 +0200 Subject: [PATCH] Fixes parsing of engine names in auto-script contexts for languages other than default js. --- .../java/org/structr/core/api/AbstractMethod.java | 3 +-- .../java/org/structr/core/api/ScriptMethod.java | 13 +++++++++---- .../java/org/structr/core/script/Scripting.java | 2 +- .../main/java/org/structr/core/script/Snippet.java | 9 +++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/structr-base/src/main/java/org/structr/core/api/AbstractMethod.java b/structr-base/src/main/java/org/structr/core/api/AbstractMethod.java index 9133695d06..4bcde4ecbf 100644 --- a/structr-base/src/main/java/org/structr/core/api/AbstractMethod.java +++ b/structr-base/src/main/java/org/structr/core/api/AbstractMethod.java @@ -91,8 +91,7 @@ public ProxyExecutable getProxyExecutable(final ActionContext actionContext, fin final Snippet snippet = getSnippet(); if (snippet != null && !snippet.getSource().isEmpty()) { - final String[] splitSnippet = Scripting.splitSnippetIntoEngineAndScript(snippet.getSource()); - final String engineName = splitSnippet[0]; + final String engineName = snippet.getEngineName(); if (!engineName.isEmpty()) { final SecurityContext securityContext = actionContext.getSecurityContext(); diff --git a/structr-base/src/main/java/org/structr/core/api/ScriptMethod.java b/structr-base/src/main/java/org/structr/core/api/ScriptMethod.java index 45fabf9c14..50f8dbde86 100644 --- a/structr-base/src/main/java/org/structr/core/api/ScriptMethod.java +++ b/structr-base/src/main/java/org/structr/core/api/ScriptMethod.java @@ -84,19 +84,24 @@ public boolean isStatic() { @Override public Snippet getSnippet() { + Snippet snippet = null; + if (source != null) { final String[] splitSource = Scripting.splitSnippetIntoEngineAndScript(source); if ("js".equals(splitSource[0])) { - return new Snippet(name, source); + snippet = new Snippet(name, splitSource[1]); } else { - return new Snippet(name, source, false); + snippet = new Snippet(name, splitSource[1], false); } - } - return null; + + snippet.setEngineName(splitSource[0]); + } + + return snippet; } @Override diff --git a/structr-base/src/main/java/org/structr/core/script/Scripting.java b/structr-base/src/main/java/org/structr/core/script/Scripting.java index 28655f28be..0eb987bb86 100644 --- a/structr-base/src/main/java/org/structr/core/script/Scripting.java +++ b/structr-base/src/main/java/org/structr/core/script/Scripting.java @@ -357,7 +357,7 @@ public static String[] splitSnippetIntoEngineAndScript(final String snippet) { script = snippet.substring(isAutoScriptingEnv ? 1 : 3, snippet.length() - (isAutoScriptingEnv ? 1 : 2)); } else { - final Matcher matcher = ScriptEngineExpression.matcher(isAutoScriptingEnv ? String.format("${%s!}", snippet) : snippet); + final Matcher matcher = ScriptEngineExpression.matcher(isAutoScriptingEnv ? String.format("${%s}", snippet) : snippet); if (matcher.matches()) { engine = matcher.group(1); diff --git a/structr-base/src/main/java/org/structr/core/script/Snippet.java b/structr-base/src/main/java/org/structr/core/script/Snippet.java index 731d7e2d23..b207fd70aa 100644 --- a/structr-base/src/main/java/org/structr/core/script/Snippet.java +++ b/structr-base/src/main/java/org/structr/core/script/Snippet.java @@ -29,6 +29,7 @@ public class Snippet { private String source = null; private String transcribedSource = null; private String mimeType = "application/javascript"; + private String engineName = null; private boolean embed = true; private int startRow = 0; @@ -89,4 +90,12 @@ public String getTranscribedSource() { public void setTranscribedSource(final String transcribedSource) { this.transcribedSource = transcribedSource; } + + public String getEngineName() { + return this.engineName; + } + + public void setEngineName(final String engineName) { + this.engineName = engineName; + } }