diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/script/validator/ScriptValidator.java b/liteflow-core/src/main/java/com/yomahub/liteflow/script/validator/ScriptValidator.java index dd1c7b72c..a05ce0606 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/script/validator/ScriptValidator.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/script/validator/ScriptValidator.java @@ -31,49 +31,71 @@ public class ScriptValidator { } /** - * 只引入一种脚本语言时,使用该语言验证 + * 验证脚本逻辑的公共部分 * - * @param script 脚本 + * @param script 脚本 + * @param scriptType 脚本类型 * @return boolean */ - public static boolean validate(String script){ + private static boolean validateScript(String script, ScriptTypeEnum scriptType){ + // 未加载任何脚本模块 if(scriptExecutors.isEmpty()){ LOG.error("The loaded script modules not found."); return false; } - // 使用多脚本语言需要指定验证语言 - if(scriptExecutors.size() > 1){ + + // 指定脚本语言未加载 + if (scriptType != null && !scriptExecutors.containsKey(scriptType)) { + LOG.error(StrUtil.format("Specified script language {} was not found.", scriptType)); + return false; + } + + // 加载多个脚本语言需要指定语言验证 + if (scriptExecutors.size() > 1 && scriptType == null) { LOG.error("The loaded script modules more than 1. Please specify the script language."); return false; } - ScriptExecutor scriptExecutor = scriptExecutors.values().iterator().next(); + ScriptExecutor scriptExecutor = (scriptType != null) ? scriptExecutors.get(scriptType) : scriptExecutors.values().iterator().next(); try { scriptExecutor.compile(script); } catch (Exception e) { - LOG.error("script component validate failure. " + e.getMessage()); + LOG.error(StrUtil.format("{} Script component validate failure. ", scriptExecutor.scriptType()) + e.getMessage()); return false; } return true; } /** - * 多语言脚本验证 + * 只引入一种脚本语言时,可以不指定语言验证 + * + * @param script 脚本 + * @return boolean + */ + public static boolean validate(String script){ + return validateScript(script, null); + } + + /** + * 指定脚本语言验证 + * + * @param script 脚本 + * @param scriptType 脚本类型 + * @return boolean + */ + public static boolean validate(String script, ScriptTypeEnum scriptType){ + return validateScript(script, scriptType); + } + + /** + * 多语言脚本批量验证 * * @param scripts 脚本 * @return boolean */ - public static boolean validate(Map scripts){ - for(Map.Entry script : scripts.entrySet()){ - ScriptExecutor scriptExecutor = scriptExecutors.getOrDefault(script.getValue(), null); - if(scriptExecutor == null){ - LOG.error(StrUtil.format("Specified script language {} was not found.", script.getValue())); - return false; - } - try { - scriptExecutor.compile(script.getKey()); - } catch (Exception e) { - LOG.error(StrUtil.format("{} script component validate failure. ", script.getValue()) + e.getMessage()); + public static boolean validate(Map scripts){ + for(Map.Entry script : scripts.entrySet()){ + if(!validate(script.getValue(), script.getKey())){ return false; } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/script/aviator/validate/ValidateAviatorScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/script/aviator/validate/ValidateAviatorScriptComponentTest.java index 9a6b5553e..6f43ed8f5 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/script/aviator/validate/ValidateAviatorScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/script/aviator/validate/ValidateAviatorScriptComponentTest.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.test.script.aviator.validate; +import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.script.aviator.AviatorScriptExecutor; import com.yomahub.liteflow.script.validator.ScriptValidator; import org.junit.jupiter.api.Assertions; @@ -37,5 +38,10 @@ public class ValidateAviatorScriptComponentTest { " setData(defaultContext, \"s1\", a*b);"; Assertions.assertTrue(ScriptValidator.validate(correctScript)); Assertions.assertFalse(ScriptValidator.validate(wrongScript)); + + Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.AVIATOR)); + Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.PYTHON)); + + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/validate/ValidateGraaljsScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/validate/ValidateGraaljsScriptComponentTest.java index 7a01031f6..7cea4b72b 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/validate/ValidateGraaljsScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/script/graaljs/validate/ValidateGraaljsScriptComponentTest.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.test.script.graaljs.validate; +import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.script.graaljs.GraalJavaScriptExecutor; import com.yomahub.liteflow.script.validator.ScriptValidator; import org.junit.jupiter.api.Assertions; @@ -47,5 +48,8 @@ public class ValidateGraaljsScriptComponentTest { " defaultContext.setData(\"s1\",parseInt(result));"; Assertions.assertTrue(ScriptValidator.validate(correctScript)); Assertions.assertFalse(ScriptValidator.validate(wrongScript)); + + Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.JS)); + Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.AVIATOR)); } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/validate/ValidateGroovyScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/validate/ValidateGroovyScriptComponentTest.java index 912590029..ff3a705f5 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/validate/ValidateGroovyScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/validate/ValidateGroovyScriptComponentTest.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.test.script.groovy.validate; +import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.script.groovy.GroovyScriptExecutor; import com.yomahub.liteflow.script.validator.ScriptValidator; import org.junit.jupiter.api.Assertions; @@ -75,5 +76,8 @@ public class ValidateGroovyScriptComponentTest { " defaultContext.setData(\"s1\", a * b)"; Assertions.assertTrue(ScriptValidator.validate(correctScript)); Assertions.assertFalse(ScriptValidator.validate(wrongScript)); + + Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.GROOVY)); + Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.JS)); } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/script/java/validate/ValidateJavaScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/script/java/validate/ValidateJavaScriptComponentTest.java index 548d6d023..033ac15fa 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/script/java/validate/ValidateJavaScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/script/java/validate/ValidateJavaScriptComponentTest.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.test.script.java.validate; +import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.script.java.JavaExecutor; import com.yomahub.liteflow.script.validator.ScriptValidator; import org.junit.jupiter.api.Assertions; @@ -59,5 +60,8 @@ public class ValidateJavaScriptComponentTest { " }"; Assertions.assertTrue(ScriptValidator.validate(correctScript)); Assertions.assertFalse(ScriptValidator.validate(wrongScript)); + + Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.JAVA)); + Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.GROOVY)); } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/validate/ValidateJavaScriptScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/validate/ValidateJavaScriptScriptComponentTest.java index 6c923ad34..29ef33af4 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/validate/ValidateJavaScriptScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/script/javascript/validate/ValidateJavaScriptScriptComponentTest.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.test.script.javascript.validate; +import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.script.javascript.JavaScriptExecutor; import com.yomahub.liteflow.script.validator.ScriptValidator; import org.junit.jupiter.api.Assertions; @@ -47,5 +48,8 @@ public class ValidateJavaScriptScriptComponentTest { " defaultContext.setData(\"s1\",parseInt(result));"; Assertions.assertTrue(ScriptValidator.validate(correctScript)); Assertions.assertFalse(ScriptValidator.validate(wrongScript)); + + Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.JS)); + Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.JAVA)); } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/validate/ValidateLuaScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/validate/ValidateLuaScriptComponentTest.java index f5983e785..01bd73487 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/validate/ValidateLuaScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/script/lua/validate/ValidateLuaScriptComponentTest.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.test.script.lua.validate; +import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.script.lua.LuaScriptExecutor; import com.yomahub.liteflow.script.validator.ScriptValidator; import org.junit.jupiter.api.Assertions; @@ -33,5 +34,8 @@ public class ValidateLuaScriptComponentTest { " defaultContext:setData(\"s2\",_meta:get(\"nodeId\"))"; Assertions.assertTrue(ScriptValidator.validate(correctScript)); Assertions.assertFalse(ScriptValidator.validate(wrongScript)); + + Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.LUA)); + Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.JS)); } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/script/multi/language/validate/ValidateMultiLanguageScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/script/multi/language/validate/ValidateMultiLanguageScriptComponentTest.java index 31a9792ba..2bbee5dc0 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/script/multi/language/validate/ValidateMultiLanguageScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/script/multi/language/validate/ValidateMultiLanguageScriptComponentTest.java @@ -46,17 +46,17 @@ public class ValidateMultiLanguageScriptComponentTest { Assertions.assertFalse(ScriptValidator.validate(correctGroovyScript)); // 多语言脚本验证 正确样例 - Map correctData = new HashMap<>(); - correctData.put(correctGroovyScript, ScriptTypeEnum.GROOVY); - correctData.put(correctJavascriptScript, ScriptTypeEnum.JS); - correctData.put(correctPythonScript, ScriptTypeEnum.PYTHON); + Map correctData = new HashMap<>(); + correctData.put(ScriptTypeEnum.GROOVY, correctGroovyScript); + correctData.put(ScriptTypeEnum.JS, correctJavascriptScript); + correctData.put(ScriptTypeEnum.PYTHON, correctPythonScript); Assertions.assertTrue(ScriptValidator.validate(correctData)); // 多语言脚本验证 错误样例 - Map wrongData = new HashMap<>(); - wrongData.put(correctGroovyScript, ScriptTypeEnum.GROOVY); - wrongData.put(correctJavascriptScript, ScriptTypeEnum.JS); - wrongData.put(wrongPythonScript, ScriptTypeEnum.PYTHON); + Map wrongData = new HashMap<>(); + wrongData.put(ScriptTypeEnum.GROOVY, correctGroovyScript); + wrongData.put(ScriptTypeEnum.JS, correctJavascriptScript); + wrongData.put(ScriptTypeEnum.PYTHON, wrongPythonScript); Assertions.assertFalse(ScriptValidator.validate(wrongData)); } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/validate/ValidatePythonScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/validate/ValidatePythonScriptComponentTest.java index 27eb00eb2..77601e4f3 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/validate/ValidatePythonScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/script/python/validate/ValidatePythonScriptComponentTest.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.test.script.python.validate; +import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.script.python.PythonScriptExecutor; import com.yomahub.liteflow.script.validator.ScriptValidator; import org.junit.jupiter.api.Assertions; @@ -49,5 +50,8 @@ public class ValidatePythonScriptComponentTest { " defaultContext.setData(\"td\", td.sayHi(\"jack\"))"; Assertions.assertTrue(ScriptValidator.validate(correctScript)); Assertions.assertFalse(ScriptValidator.validate(wrongScript)); + + Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.PYTHON)); + Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.LUA)); } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/validate/ValidateQLExpressScriptComponentTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/validate/ValidateQLExpressScriptComponentTest.java index 44a5f63ab..34f449357 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/validate/ValidateQLExpressScriptComponentTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/script/qlexpress/validate/ValidateQLExpressScriptComponentTest.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.test.script.qlexpress.validate; +import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.script.qlexpress.QLExpressScriptExecutor; import com.yomahub.liteflow.script.validator.ScriptValidator; import org.junit.jupiter.api.Assertions; @@ -27,5 +28,8 @@ public class ValidateQLExpressScriptComponentTest { " }"; Assertions.assertTrue(ScriptValidator.validate(correctScript)); Assertions.assertFalse(ScriptValidator.validate(wrongScript)); + + Assertions.assertTrue(ScriptValidator.validate(correctScript, ScriptTypeEnum.QLEXPRESS)); + Assertions.assertFalse(ScriptValidator.validate(correctScript, ScriptTypeEnum.PYTHON)); } }