diff --git a/api/src/main/java/com/instancify/scriptify/api/script/Script.java b/api/src/main/java/com/instancify/scriptify/api/script/Script.java index 507acd2..cf0333d 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/Script.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/Script.java @@ -43,5 +43,5 @@ public interface Script { /** * Evaluates and executes this script. */ - void eval(); + void eval(String script); } diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java index dbddcc5..cb746c0 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunction.java @@ -1,6 +1,7 @@ package com.instancify.scriptify.api.script.function; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; /** * Represents a function that can be used within scripts. @@ -17,9 +18,10 @@ public interface ScriptFunction { /** * Invokes the function with the provided arguments. * + * @param script The script in which the function will be invoked * @param args The arguments to pass to the function * @return The result of the function execution * @throws ScriptFunctionException If there's an error during invocation */ - Object invoke(Object[] args) throws ScriptFunctionException; + Object invoke(Script script, Object[] args) throws ScriptFunctionException; } diff --git a/build.gradle.kts b/build.gradle.kts index bc86f42..84f8e5a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ java { allprojects { group = "com.instancify.scriptify" - version = "1.0.3-SNAPSHOT" + version = "1.1.3-SNAPSHOT" } subprojects { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java b/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java index a2fd6b0..f3356b9 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java @@ -2,6 +2,8 @@ import com.instancify.scriptify.api.script.constant.ScriptConstant; import com.instancify.scriptify.api.script.constant.ScriptConstantManager; +import com.instancify.scriptify.core.script.constant.impl.ScriptConstantBaseDir; +import com.instancify.scriptify.core.script.constant.impl.ScriptConstantOsName; import java.util.HashMap; import java.util.Map; @@ -10,6 +12,11 @@ public class StandardConstantManager implements ScriptConstantManager { private final Map constants = new HashMap<>(); + public StandardConstantManager() { + this.register(new ScriptConstantOsName()); + this.register(new ScriptConstantBaseDir()); + } + @Override public Map getConstants() { return constants; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/constant/impl/ScriptConstantBaseDir.java b/core/src/main/java/com/instancify/scriptify/core/script/constant/impl/ScriptConstantBaseDir.java new file mode 100644 index 0000000..c43d6d3 --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/constant/impl/ScriptConstantBaseDir.java @@ -0,0 +1,21 @@ +package com.instancify.scriptify.core.script.constant.impl; + +import com.instancify.scriptify.api.script.constant.ScriptConstant; + +import java.nio.file.Paths; + +/** + * Represents a constant with base dir + */ +public class ScriptConstantBaseDir implements ScriptConstant { + + @Override + public String getName() { + return "baseDir"; + } + + @Override + public Object getValue() { + return Paths.get("").toAbsolutePath().toString(); + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/constant/impl/ScriptConstantOsName.java b/core/src/main/java/com/instancify/scriptify/core/script/constant/impl/ScriptConstantOsName.java new file mode 100644 index 0000000..1786fc8 --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/constant/impl/ScriptConstantOsName.java @@ -0,0 +1,19 @@ +package com.instancify.scriptify.core.script.constant.impl; + +import com.instancify.scriptify.api.script.constant.ScriptConstant; + +/** + * Represents a constant with os name + */ +public class ScriptConstantOsName implements ScriptConstant { + + @Override + public String getName() { + return "osName"; + } + + @Override + public Object getValue() { + return System.getProperty("os.name"); + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java index 79db3dc..b2bd71a 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java @@ -3,6 +3,11 @@ import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.ScriptFunctionManager; import com.instancify.scriptify.core.script.function.impl.*; +import com.instancify.scriptify.core.script.function.impl.crypto.*; +import com.instancify.scriptify.core.script.function.impl.file.*; +import com.instancify.scriptify.core.script.function.impl.os.*; +import com.instancify.scriptify.core.script.function.impl.random.*; +import com.instancify.scriptify.core.script.function.impl.zip.*; import java.util.HashMap; import java.util.Map; @@ -35,6 +40,7 @@ public StandardFunctionManager() { this.register(new ScriptFunctionMD5()); this.register(new ScriptFunctionSHA256()); this.register(new ScriptFunctionExecCommand()); + this.register(new ScriptFunctionEnv()); this.register(new ScriptFunctionShuffleArray()); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionDeleteFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionDeleteFile.java deleted file mode 100644 index 28db796..0000000 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionDeleteFile.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.instancify.scriptify.core.script.function.impl; - -import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; -import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; -import com.instancify.scriptify.api.exception.ScriptFunctionException; -import com.instancify.scriptify.api.script.function.ScriptFunction; - -import java.io.File; - -/** - * Represents a function to delete a file in the normal or recursive way - */ -public class ScriptFunctionDeleteFile implements ScriptFunction { - - @Override - public String getName() { - return "deleteFile"; - } - - // TODO refactor it - @Override - public Object invoke(Object[] args) throws ScriptFunctionException { - if (args.length == 1) { - if (args[0] instanceof String filePath) { - try { - return new File(filePath).delete(); - } catch (Exception e) { - return null; - } - } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); - } - } else if (args.length == 2) { - if (args[0] instanceof String filePath) { - if (args[1] instanceof Boolean recursive) { - try { - File file = new File(filePath); - if (recursive) { - deleteDirectoryRecursively(file); - return null; - } else { - return file.delete(); - } - } catch (Exception e) { - return null; - } - } else { - throw new ScriptFunctionArgTypeException(Boolean.class, args[1].getClass()); - } - } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); - } - } else { - throw new ScriptFunctionArgsCountException(1, args.length); - } - } - - private void deleteDirectoryRecursively(File file) throws ScriptFunctionException { - if (file.isDirectory()) { - File[] entries = file.listFiles(); - if (entries != null) { - for (File entry : entries) { - deleteDirectoryRecursively(entry); - } - } - } - if (!file.delete()) { - throw new ScriptFunctionException("Failed to delete " + file); - } - } -} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionPrint.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionPrint.java index 907425c..d9c7888 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionPrint.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionPrint.java @@ -1,5 +1,6 @@ package com.instancify.scriptify.core.script.function.impl; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.util.Arrays; @@ -16,7 +17,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) { + public Object invoke(Script script, Object[] args) { System.out.println(Arrays.stream(args).map(String::valueOf).collect(Collectors.joining(" "))); return null; } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionShuffleArray.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionShuffleArray.java index dd56a6a..f00770d 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionShuffleArray.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionShuffleArray.java @@ -3,6 +3,7 @@ import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import org.mozilla.javascript.NativeArray; @@ -21,7 +22,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionBase64Decode.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java similarity index 82% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionBase64Decode.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java index 274854d..670a32e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionBase64Decode.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.crypto; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.nio.charset.StandardCharsets; @@ -18,7 +19,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionBase64Encode.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java similarity index 81% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionBase64Encode.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java index c8fa827..425d431 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionBase64Encode.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.crypto; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.util.Base64; @@ -17,7 +18,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionMD5.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java similarity index 87% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionMD5.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java index 2a708b3..5a1dd0e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionMD5.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.crypto; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.math.BigInteger; @@ -20,7 +21,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSHA256.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java similarity index 87% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSHA256.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java index 12573eb..ce14e97 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSHA256.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.crypto; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.math.BigInteger; @@ -20,7 +21,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java new file mode 100644 index 0000000..456559b --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDeleteFile.java @@ -0,0 +1,69 @@ +package com.instancify.scriptify.core.script.function.impl.file; + +import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; +import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; +import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; +import com.instancify.scriptify.api.script.function.ScriptFunction; + +import java.io.File; +import java.util.List; + +/** + * Represents a function to delete a file in the normal or recursive way + */ +public class ScriptFunctionDeleteFile implements ScriptFunction { + + @Override + public String getName() { + return "deleteFile"; + } + + @Override + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + if (args.length > 2 || args.length < 1) { + throw new ScriptFunctionArgsCountException(1, args.length); + } + if (!(args[0] instanceof String filePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + } + + if (args.length == 1) { + try { + return new File(filePath).delete(); + } catch (Exception e) { + return null; + } + } + + if (!(args[1] instanceof Boolean recursive)) { + throw new ScriptFunctionArgTypeException(Boolean.class, args[1].getClass()); + } + + try { + File file = new File(filePath); + if (recursive) { + deleteDirectoryRecursively(file); + return null; + } else { + return file.delete(); + } + } catch (Exception e) { + return null; + } + } + + private void deleteDirectoryRecursively(File file) throws ScriptFunctionException { + if (file.isDirectory()) { + File[] entries = file.listFiles(); + if (entries != null) { + for (File entry : entries) { + deleteDirectoryRecursively(entry); + } + } + } + if (!file.delete()) { + throw new ScriptFunctionException("Failed to delete " + file); + } + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionDownloadFromUrl.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java similarity index 86% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionDownloadFromUrl.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java index 6fd1d7d..8f1e226 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionDownloadFromUrl.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.file; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.File; @@ -22,7 +23,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 2) { throw new ScriptFunctionArgsCountException(2, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionExistsFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java similarity index 82% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionExistsFile.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java index bb89641..d6b55fe 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionExistsFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.file; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.nio.file.Files; @@ -19,7 +20,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length == 1) { if (args[0] instanceof String filePath) { return Files.exists(Path.of(filePath)); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionJoinPath.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java similarity index 69% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionJoinPath.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java index 1b6c267..abb45a8 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionJoinPath.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java @@ -1,7 +1,8 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.file; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; /** @@ -15,11 +16,11 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { String path = ""; - for(int i = 0; i < args.length; i++) { - if(args[i] instanceof String segment) { - if(path.isEmpty()) { + for (Object arg : args) { + if (arg instanceof String segment) { + if (path.isEmpty()) { path += segment; } else { path += '/' + segment; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionListFiles.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java similarity index 78% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionListFiles.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java index 34da5a9..f87119c 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionListFiles.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java @@ -1,11 +1,13 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.file; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.File; +import java.nio.file.Paths; import java.util.Arrays; /** @@ -19,10 +21,10 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length == 1) { if (args[0] instanceof String filePath) { - File folder = new File(filePath); + File folder = Paths.get(filePath).toAbsolutePath().toFile(); if (folder.isDirectory()) { return Arrays.stream(folder.listFiles()).map(File::getAbsolutePath).toList(); } else { @@ -35,4 +37,4 @@ public Object invoke(Object[] args) throws ScriptFunctionException { throw new ScriptFunctionArgsCountException(1, args.length); } } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionMoveFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java similarity index 79% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionMoveFile.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java index 0c2c96d..c6c4149 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionMoveFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.file; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.File; @@ -18,7 +19,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 2) { throw new ScriptFunctionArgsCountException(2, args.length); } @@ -31,8 +32,6 @@ public Object invoke(Object[] args) throws ScriptFunctionException { } File fileToMove = new File(originalFilePath); - fileToMove.renameTo(new File(targetFilePath)); - - return null; + return fileToMove.renameTo(new File(targetFilePath)); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionReadFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java similarity index 84% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionReadFile.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java index 0a9e649..73d4d25 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionReadFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.file; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.IOException; @@ -20,7 +21,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length == 1) { if (args[0] instanceof String filePath) { try { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionWriteFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java similarity index 85% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionWriteFile.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java index 1d4e017..7f479b9 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionWriteFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.file; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.IOException; @@ -20,7 +21,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length == 2) { if (args[0] instanceof String filePath && args[1] instanceof String fileContent) { try { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java new file mode 100644 index 0000000..c33334b --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionEnv.java @@ -0,0 +1,31 @@ +package com.instancify.scriptify.core.script.function.impl.os; + +import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; +import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; +import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; +import com.instancify.scriptify.api.script.function.ScriptFunction; + +/** + * Represents a function to get environment variable value + */ +public class ScriptFunctionEnv implements ScriptFunction { + + @Override + public String getName() { + return "env"; + } + + @Override + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + if (args.length != 1) { + throw new ScriptFunctionArgsCountException(1, args.length); + } + + if (!(args[0] instanceof String name)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + } + + return System.getenv(name); + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionExecCommand.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java similarity index 88% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionExecCommand.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java index d4778d1..039942f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionExecCommand.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.os; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.BufferedReader; @@ -20,7 +21,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomDouble.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java similarity index 66% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomDouble.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java index 7f66c88..1d83bac 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomDouble.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.random; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.util.Random; @@ -18,7 +19,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { Random random = new Random(); if(args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); @@ -30,17 +31,14 @@ public Object invoke(Object[] args) throws ScriptFunctionException { } } - if(args.length == 2) { - if(args[0] instanceof Number min) { - if(args[1] instanceof Number max) { - return random.nextDouble(max.doubleValue() - min.doubleValue()) + min.doubleValue(); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); - } + if (args[0] instanceof Number min) { + if (args[1] instanceof Number max) { + return random.nextDouble(max.doubleValue() - min.doubleValue()) + min.doubleValue(); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); } + } else { + throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); } - return null; } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomFloat.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java similarity index 66% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomFloat.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java index 9eea3d1..67ac516 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomFloat.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.random; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.util.Random; @@ -18,7 +19,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { Random random = new Random(); if(args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); @@ -30,17 +31,14 @@ public Object invoke(Object[] args) throws ScriptFunctionException { } } - if(args.length == 2) { - if(args[0] instanceof Number min) { - if(args[1] instanceof Number max) { - return random.nextFloat(max.floatValue() - min.floatValue()) + min.floatValue(); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); - } + if (args[0] instanceof Number min) { + if (args[1] instanceof Number max) { + return random.nextFloat(max.floatValue() - min.floatValue()) + min.floatValue(); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); } + } else { + throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); } - return null; } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomInteger.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java similarity index 66% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomInteger.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java index 2d612b0..bfec849 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomInteger.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.random; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.util.Random; @@ -18,7 +19,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { Random random = new Random(); if(args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); @@ -30,17 +31,14 @@ public Object invoke(Object[] args) throws ScriptFunctionException { } } - if(args.length == 2) { - if(args[0] instanceof Number min) { - if(args[1] instanceof Number max) { - return random.nextInt(max.intValue() - min.intValue()) + min.intValue(); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); - } + if (args[0] instanceof Number min) { + if (args[1] instanceof Number max) { + return random.nextInt(max.intValue() - min.intValue()) + min.intValue(); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); } + } else { + throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); } - return null; } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomLong.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java similarity index 66% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomLong.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java index 865616c..9fc8d88 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomLong.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.random; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.util.Random; @@ -18,7 +19,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { Random random = new Random(); if(args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); @@ -30,17 +31,14 @@ public Object invoke(Object[] args) throws ScriptFunctionException { } } - if(args.length == 2) { - if(args[0] instanceof Number min) { - if(args[1] instanceof Number max) { - return random.nextLong(max.longValue() - min.longValue()) + min.longValue(); - } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); - } + if (args[0] instanceof Number min) { + if (args[1] instanceof Number max) { + return random.nextLong(max.longValue() - min.longValue()) + min.longValue(); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); } + } else { + throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); } - return null; } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomUUID.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java similarity index 67% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomUUID.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java index 399964e..8329e12 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionRandomUUID.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java @@ -1,6 +1,7 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.random; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.util.UUID; @@ -16,7 +17,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { return UUID.randomUUID().toString(); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSmartUnzipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java similarity index 95% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSmartUnzipFile.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java index ba4d219..8c275aa 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSmartUnzipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.zip; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.File; @@ -25,7 +26,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 3) { throw new ScriptFunctionArgsCountException(3, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSmartZipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java similarity index 94% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSmartZipFile.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java index 29c70be..6576949 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionSmartZipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.zip; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.File; @@ -25,7 +26,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 3) { throw new ScriptFunctionArgsCountException(3, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionUnzipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java similarity index 93% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionUnzipFile.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java index 42c85c9..65333f7 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionUnzipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.zip; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.File; @@ -23,7 +24,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 2) { throw new ScriptFunctionArgsCountException(2, args.length); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionZipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java similarity index 93% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionZipFile.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java index 8c8209d..c41026e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionZipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java @@ -1,8 +1,9 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.zip; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import java.io.File; @@ -23,7 +24,7 @@ public String getName() { } @Override - public Object invoke(Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, Object[] args) throws ScriptFunctionException { if (args.length != 2) { throw new ScriptFunctionArgsCountException(2, args.length); } diff --git a/script-js/src/main/java/com/instancify/scriptify/Test.java b/script-js/src/main/java/com/instancify/scriptify/Test.java index 2b3e221..78c941f 100644 --- a/script-js/src/main/java/com/instancify/scriptify/Test.java +++ b/script-js/src/main/java/com/instancify/scriptify/Test.java @@ -7,9 +7,7 @@ public class Test { public static void main(String[] args) { - JsScript script = new JsScript(""" - print(shuffleArray(["a", "b", "c"])) - """); + JsScript script = new JsScript(); StandardFunctionManager functionManager = new StandardFunctionManager(); StandardConstantManager constantManager = new StandardConstantManager(); @@ -17,6 +15,8 @@ public static void main(String[] args) { script.setFunctionManager(functionManager); script.setConstantManager(constantManager); - script.eval(); + script.eval(""" + print(env("JAVA_HOME")) + """); } } diff --git a/script-js/src/main/java/com/instancify/scriptify/script/JsFunction.java b/script-js/src/main/java/com/instancify/scriptify/script/JsFunction.java index b63e67f..991dc38 100644 --- a/script-js/src/main/java/com/instancify/scriptify/script/JsFunction.java +++ b/script-js/src/main/java/com/instancify/scriptify/script/JsFunction.java @@ -1,24 +1,26 @@ package com.instancify.scriptify.script; import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; import org.mozilla.javascript.Context; import org.mozilla.javascript.Function; import org.mozilla.javascript.Scriptable; -import org.mozilla.javascript.Undefined; public class JsFunction implements Function { + private final Script script; private final ScriptFunction function; - public JsFunction(final ScriptFunction function) { + public JsFunction(Script script, final ScriptFunction function) { + this.script = script; this.function = function; } @Override public Object call(Context context, Scriptable scriptable, Scriptable scriptable1, Object[] objects) { try { - return function.invoke(objects); + return function.invoke(script, objects); } catch (ScriptFunctionException e) { throw new RuntimeException(e); } diff --git a/script-js/src/main/java/com/instancify/scriptify/script/JsScript.java b/script-js/src/main/java/com/instancify/scriptify/script/JsScript.java index 56e30a4..a967b16 100644 --- a/script-js/src/main/java/com/instancify/scriptify/script/JsScript.java +++ b/script-js/src/main/java/com/instancify/scriptify/script/JsScript.java @@ -9,16 +9,11 @@ public class JsScript implements Script { - private final String scriptString; private final Context context = Context.enter(); private final ScriptableObject scope = context.initStandardObjects(); private ScriptFunctionManager functionManager; private ScriptConstantManager constantManager; - public JsScript(String scriptString) { - this.scriptString = scriptString; - } - @Override public ScriptFunctionManager getFunctionManager() { return functionManager; @@ -40,13 +35,13 @@ public void setConstantManager(ScriptConstantManager constantManager) { } @Override - public void eval() { + public void eval(String script) { for(ScriptFunction function : functionManager.getFunctions().values()) { - scope.put(function.getName(), scope, new JsFunction(function)); + scope.put(function.getName(), scope, new JsFunction(this, function)); } for(ScriptConstant constant : constantManager.getConstants().values()) { ScriptableObject.putConstProperty(scope, constant.getName(), constant.getValue()); } - context.evaluateString(scope, scriptString, null, 1, null); + context.evaluateString(scope, script, null, 1, null); } }