diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptException.java new file mode 100644 index 0000000..be11d99 --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptException.java @@ -0,0 +1,35 @@ +package com.instancify.scriptify.api.exception; + +/** + * Custom exception for errors in script functions. + */ +public class ScriptException extends Exception { + + /** + * Creates a new ScriptException with the specified message. + * + * @param message the detail message + */ + public ScriptException(String message) { + super(message); + } + + /** + * Creates a new ScriptException with the specified message and cause. + * + * @param message the detail message + * @param cause the cause of the exception + */ + public ScriptException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Creates a new ScriptException with the specified cause. + * + * @param cause the cause of the exception + */ + public ScriptException(Throwable cause) { + super(cause); + } +} diff --git a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionException.java b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionException.java index 6084628..7d1c5ca 100644 --- a/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionException.java +++ b/api/src/main/java/com/instancify/scriptify/api/exception/ScriptFunctionException.java @@ -3,7 +3,7 @@ /** * Custom exception for errors in script functions. */ -public class ScriptFunctionException extends Exception { +public class ScriptFunctionException extends ScriptException { /** * Creates a new ScriptFunctionException with the specified message. 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 cf0333d..0240a0b 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 @@ -1,12 +1,16 @@ package com.instancify.scriptify.api.script; +import com.instancify.scriptify.api.exception.ScriptException; +import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.constant.ScriptConstantManager; import com.instancify.scriptify.api.script.function.ScriptFunctionManager; /** * Defines the structure of a script that can be executed. + * + * @param Type of value returned by the script after evaluation */ -public interface Script { +public interface Script { /** * Retrieves the function manager associated with this script. @@ -42,6 +46,8 @@ public interface Script { /** * Evaluates and executes this script. + * + * @throws ScriptFunctionException If there's an error during script evaluation */ - void eval(String script); + T eval(String script) throws ScriptException; } diff --git a/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstant.java b/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstant.java index c1aeaf4..08cab7c 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstant.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstant.java @@ -1,5 +1,8 @@ package com.instancify.scriptify.api.script.constant; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + /** * Represents a constant that can be used within scripts. */ @@ -10,14 +13,14 @@ public interface ScriptConstant { * * @return The name of the constant */ - String getName(); + @NotNull String getName(); /** * Gets the value of the constant. * * @return The value of the constant */ - Object getValue(); + @Nullable Object getValue(); /** * Creates a new ScriptConstant instance with the given name and value. @@ -29,7 +32,7 @@ public interface ScriptConstant { static ScriptConstant of(String name, Object value) { return new ScriptConstant() { @Override - public String getName() { + public @NotNull String getName() { return name; } diff --git a/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstantManager.java b/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstantManager.java index d7fc9fb..0141ba1 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstantManager.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/constant/ScriptConstantManager.java @@ -1,5 +1,7 @@ package com.instancify.scriptify.api.script.constant; +import org.jetbrains.annotations.Nullable; + import java.util.Map; /** @@ -20,7 +22,7 @@ public interface ScriptConstantManager { * @param name The name of the constant to retrieve * @return The ScriptConstant associated with the name, or null if not found */ - default ScriptConstant getConstant(String name) { + default @Nullable ScriptConstant getConstant(String name) { return this.getConstants().get(name); } @@ -30,4 +32,11 @@ default ScriptConstant getConstant(String name) { * @param constant The constant to be registered */ void register(ScriptConstant constant); + + /** + * Removes an existing constant in the manager. + * + * @param name The name of the constant to remove + */ + void remove(String name); } 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 cb746c0..a6c86b3 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 @@ -2,6 +2,9 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Represents a function that can be used within scripts. @@ -13,7 +16,7 @@ public interface ScriptFunction { * * @return The function's name */ - String getName(); + @NotNull String getName(); /** * Invokes the function with the provided arguments. @@ -23,5 +26,5 @@ public interface ScriptFunction { * @return The result of the function execution * @throws ScriptFunctionException If there's an error during invocation */ - Object invoke(Script script, Object[] args) throws ScriptFunctionException; + @Nullable Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException; } diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java index 2150a64..62cc0f9 100644 --- a/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java @@ -1,5 +1,7 @@ package com.instancify.scriptify.api.script.function; +import org.jetbrains.annotations.Nullable; + import java.util.Map; /** @@ -20,7 +22,7 @@ public interface ScriptFunctionManager { * @param name The name of the function to retrieve * @return The ScriptFunction associated with the name, or null if not found */ - default ScriptFunction getFunction(String name) { + default @Nullable ScriptFunction getFunction(String name) { return this.getFunctions().get(name); } @@ -30,4 +32,11 @@ default ScriptFunction getFunction(String name) { * @param function The function to be registered */ void register(ScriptFunction function); + + /** + * Removes an existing function in the manager. + * + * @param name The name of the function to remove + */ + void remove(String name); } diff --git a/api/src/main/java/com/instancify/scriptify/api/script/function/argument/ScriptFunctionArgument.java b/api/src/main/java/com/instancify/scriptify/api/script/function/argument/ScriptFunctionArgument.java new file mode 100644 index 0000000..43ed30f --- /dev/null +++ b/api/src/main/java/com/instancify/scriptify/api/script/function/argument/ScriptFunctionArgument.java @@ -0,0 +1,55 @@ +package com.instancify.scriptify.api.script.function.argument; + +/** + * Represents an argument that can be passed to a script function. + */ +public interface ScriptFunctionArgument { + + /** + * Retrieves the value of this argument. + * + * @return The value of the argument + */ + Object getValue(); + + /** + * Retrieves type the of value of this argument. + * + * @return Type the value of the argument + */ + default Class getType() { + return this.getValue().getClass(); + } + + /** + * Checks if the value of this argument is an instance of the specified class. + * + * @param classOf The class to check against + * @return true if the value is an instance of the given class, false otherwise + */ + default boolean is(Class classOf) { + return classOf.isInstance(getValue()); + } + + /** + * Casts the value of this argument to the specified class type. + * + * @param The type to cast to + * @param classOf The class representing the type to cast to + * @return The value cast to the specified type + * @throws ClassCastException if the value cannot be cast to the specified type + */ + default T as(Class classOf) { + return classOf.cast(getValue()); + } + + /** + * Creates a new ScriptFunctionArgument with the given value. + * + * @param value The value to be wrapped as an argument + * @return A new ScriptFunctionArgument instance + */ + static ScriptFunctionArgument of(Object value) { + return () -> value; + } +} 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 f3356b9..e889c42 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 @@ -24,6 +24,19 @@ public Map getConstants() { @Override public void register(ScriptConstant constant) { - constants.put(constant.getName(), constant); + if (!constants.containsKey(constant.getName())) { + constants.put(constant.getName(), constant); + } else { + throw new IllegalStateException("The constant with this name already exists"); + } + } + + @Override + public void remove(String name) { + if (constants.containsKey(name)) { + constants.remove(name); + } else { + throw new IllegalArgumentException("The constant with this name does not exist"); + } } } \ No newline at end of file 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 index c43d6d3..f300d65 100644 --- 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 @@ -1,6 +1,7 @@ package com.instancify.scriptify.core.script.constant.impl; import com.instancify.scriptify.api.script.constant.ScriptConstant; +import org.jetbrains.annotations.NotNull; import java.nio.file.Paths; @@ -10,7 +11,7 @@ public class ScriptConstantBaseDir implements ScriptConstant { @Override - public String getName() { + public @NotNull String getName() { return "baseDir"; } 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 index 1786fc8..63c659d 100644 --- 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 @@ -1,6 +1,7 @@ package com.instancify.scriptify.core.script.constant.impl; import com.instancify.scriptify.api.script.constant.ScriptConstant; +import org.jetbrains.annotations.NotNull; /** * Represents a constant with os name @@ -8,7 +9,7 @@ public class ScriptConstantOsName implements ScriptConstant { @Override - public String getName() { + public @NotNull String getName() { return "osName"; } 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 93db8ea..a241662 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 @@ -60,6 +60,19 @@ public Map getFunctions() { @Override public void register(ScriptFunction function) { - functions.put(function.getName(), function); + if (!functions.containsKey(function.getName())) { + functions.put(function.getName(), function); + } else { + throw new IllegalStateException("The function with this name already exists"); + } + } + + @Override + public void remove(String name) { + if (functions.containsKey(name)) { + functions.remove(name); + } else { + throw new IllegalArgumentException("The function with this name does not exist"); + } } } \ No newline at end of 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 d9c7888..7da002e 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 @@ -2,6 +2,8 @@ import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.util.Arrays; import java.util.stream.Collectors; @@ -12,13 +14,13 @@ public class ScriptFunctionPrint implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "print"; } @Override - public Object invoke(Script script, Object[] args) { - System.out.println(Arrays.stream(args).map(String::valueOf).collect(Collectors.joining(" "))); + public Object invoke(Script script, ScriptFunctionArgument[] args) { + System.out.println(Arrays.stream(args).map(arg -> arg.getValue().toString()).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 a33ffc1..9a86472 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 @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collections; @@ -16,18 +18,18 @@ public class ScriptFunctionShuffleArray implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "shuffleArray"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } - if (!(args[0] instanceof List array)) { - throw new ScriptFunctionArgTypeException(List.class, args[0].getClass()); + if (!(args[0].getValue() instanceof List array)) { + throw new ScriptFunctionArgTypeException(List.class, args[0].getType()); } List list = new ArrayList(array); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java index 670a32e..274c166 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Decode.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -14,17 +16,17 @@ */ public class ScriptFunctionBase64Decode implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "base64decode"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } - if (!(args[0] instanceof String str)) { + if (!(args[0].getValue() instanceof String str)) { throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java index 425d431..7c30e0c 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionBase64Encode.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.util.Base64; @@ -13,18 +15,18 @@ */ public class ScriptFunctionBase64Encode implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "base64encode"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } - if (!(args[0] instanceof String str)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String str)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } return Base64.getEncoder().encodeToString(str.getBytes()); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java index 5a1dd0e..824f3b7 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionMD5.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.math.BigInteger; import java.nio.charset.StandardCharsets; @@ -16,18 +18,18 @@ */ public class ScriptFunctionMD5 implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "md5"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } - if (!(args[0] instanceof String input)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String input)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } try { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java index ce14e97..08ac8b0 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/crypto/ScriptFunctionSHA256.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.math.BigInteger; import java.nio.charset.StandardCharsets; @@ -16,18 +18,18 @@ */ public class ScriptFunctionSHA256 implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "sha256"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } - if (!(args[0] instanceof String input)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String input)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } try { 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 index 33418c4..0ded336 100644 --- 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 @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.File; @@ -14,25 +16,25 @@ public class ScriptFunctionDeleteFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "deleteFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] 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[0].getValue() instanceof String filePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } if (args.length == 1) { return new File(filePath).delete(); } - if (!(args[1] instanceof Boolean recursive)) { - throw new ScriptFunctionArgTypeException(Boolean.class, args[1].getClass()); + if (!(args[1].getValue() instanceof Boolean recursive)) { + throw new ScriptFunctionArgTypeException(Boolean.class, args[1].getType()); } File file = new File(filePath); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java index 8f1e226..d659cf1 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionDownloadFromUrl.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; @@ -18,21 +20,21 @@ public class ScriptFunctionDownloadFromUrl implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "downloadFromUrl"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 2) { throw new ScriptFunctionArgsCountException(2, args.length); } - if (!(args[0] instanceof String url)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String url)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } - if (!(args[1] instanceof String filePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getClass()); + if (!(args[1].getValue() instanceof String filePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); } try (InputStream in = new URL(url).openStream()) { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java index d6b55fe..41f5726 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionExistsFile.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.nio.file.Files; import java.nio.file.Path; @@ -15,17 +17,17 @@ public class ScriptFunctionExistsFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "existsFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length == 1) { - if (args[0] instanceof String filePath) { + if (args[0].getValue() instanceof String filePath) { return Files.exists(Path.of(filePath)); } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } } else { throw new ScriptFunctionArgsCountException(1, args.length); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java index abb45a8..55ee2f8 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionJoinPath.java @@ -4,6 +4,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; /** * Represents a function to join path @@ -11,22 +13,22 @@ public class ScriptFunctionJoinPath implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "joinPath"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { String path = ""; - for (Object arg : args) { - if (arg instanceof String segment) { + for (ScriptFunctionArgument arg : args) { + if (arg.getValue() instanceof String segment) { if (path.isEmpty()) { path += segment; } else { path += '/' + segment; } } else { - throw new ScriptFunctionArgTypeException(String.class, args[1].getClass()); + throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); } } return path; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java index f87119c..14ceb6e 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionListFiles.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.nio.file.Paths; @@ -16,14 +18,14 @@ public class ScriptFunctionListFiles implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "listFiles"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length == 1) { - if (args[0] instanceof String filePath) { + if (args[0].getValue() instanceof String filePath) { File folder = Paths.get(filePath).toAbsolutePath().toFile(); if (folder.isDirectory()) { return Arrays.stream(folder.listFiles()).map(File::getAbsolutePath).toList(); @@ -31,7 +33,7 @@ public Object invoke(Script script, Object[] args) throws ScriptFunctionExceptio throw new ScriptFunctionException("File is not a folder"); } } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } } else { throw new ScriptFunctionArgsCountException(1, args.length); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java index c6c4149..3174c48 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionMoveFile.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.File; @@ -14,21 +16,21 @@ public class ScriptFunctionMoveFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "moveFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 2) { throw new ScriptFunctionArgsCountException(2, args.length); } - if (!(args[0] instanceof String originalFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String originalFilePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } - if (!(args[1] instanceof String targetFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getClass()); + if (!(args[1].getValue() instanceof String targetFilePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); } File fileToMove = new File(originalFilePath); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java index 0aa0a56..890cd1c 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionNormalizePath.java @@ -5,22 +5,24 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; public class ScriptFunctionNormalizePath implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "normalizePath"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } - if (!(args[0] instanceof String path)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String path)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } return path.replace('\\', '/'); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java index 73d4d25..7bc6261 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionReadFile.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.file.Files; @@ -16,21 +18,21 @@ public class ScriptFunctionReadFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "readFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length == 1) { - if (args[0] instanceof String filePath) { + if (args[0].getValue() instanceof String filePath) { try { return Files.readString(Path.of(filePath)); } catch (IOException e) { throw new ScriptFunctionException(e); } } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } } else { throw new ScriptFunctionArgsCountException(1, args.length); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java index 7f479b9..69c881d 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/file/ScriptFunctionWriteFile.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.file.Files; @@ -16,21 +18,21 @@ public class ScriptFunctionWriteFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "writeFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length == 2) { - if (args[0] instanceof String filePath && args[1] instanceof String fileContent) { + if (args[0].getValue() instanceof String filePath && args[1].getValue() instanceof String fileContent) { try { return Files.writeString(Path.of(filePath), fileContent); } catch (IOException e) { throw new ScriptFunctionException(e); } } else { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } } else { throw new ScriptFunctionArgsCountException(2, args.length); 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 index c33334b..2d11365 100644 --- 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 @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; /** * Represents a function to get environment variable value @@ -12,18 +14,18 @@ public class ScriptFunctionEnv implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "env"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] 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()); + if (!(args[0].getValue() instanceof String name)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } return System.getenv(name); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java index 039942f..1a8c884 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/os/ScriptFunctionExecCommand.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.BufferedReader; import java.io.IOException; @@ -16,18 +18,18 @@ public class ScriptFunctionExecCommand implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "execCommand"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 1) { throw new ScriptFunctionArgsCountException(1, args.length); } - if (!(args[0] instanceof String input)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String input)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } try { Process process = Runtime.getRuntime().exec(input); diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java index e478c62..3c7d8bc 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomDouble.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -14,31 +16,31 @@ public class ScriptFunctionRandomDouble implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "randomDouble"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { Random random = new Random(); if (args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); if (args.length == 1) { - if (args[0] instanceof Number max) { + if (args[0].getValue() instanceof Number max) { return random.nextDouble(max.doubleValue()); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); } } - if (args[0] instanceof Number min) { - if (args[1] instanceof Number max) { + if (args[0].getValue() instanceof Number min) { + if (args[1].getValue() instanceof Number max) { return random.nextDouble(max.doubleValue() - min.doubleValue()) + min.doubleValue(); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[1].getType()); } } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java index 631fa32..7201231 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomFloat.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -14,31 +16,31 @@ public class ScriptFunctionRandomFloat implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "randomFloat"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { Random random = new Random(); if (args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); if (args.length == 1) { - if (args[0] instanceof Number max) { + if (args[0].getValue() instanceof Number max) { return random.nextFloat(max.floatValue()); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); } } - if (args[0] instanceof Number min) { - if (args[1] instanceof Number max) { + if (args[0].getValue() instanceof Number min) { + if (args[1].getValue() instanceof Number max) { return random.nextFloat(max.floatValue() - min.floatValue()) + min.floatValue(); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[1].getType()); } } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java index 0ee82de..a7c4ab8 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomInteger.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -14,31 +16,31 @@ public class ScriptFunctionRandomInteger implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "randomInt"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { Random random = new Random(); if (args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); if (args.length == 1) { - if (args[0] instanceof Number max) { + if (args[0].getValue() instanceof Number max) { return random.nextInt(max.intValue()); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); } } - if (args[0] instanceof Number min) { - if (args[1] instanceof Number max) { + if (args[0].getValue() instanceof Number min) { + if (args[1].getValue() instanceof Number max) { return random.nextInt(max.intValue() - min.intValue()) + min.intValue(); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[1].getType()); } } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java index 7823c14..123555f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomLong.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.util.Random; @@ -14,31 +16,31 @@ public class ScriptFunctionRandomLong implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "randomLong"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { Random random = new Random(); if (args.length > 2 || args.length < 1) throw new ScriptFunctionArgsCountException(1, args.length); if (args.length == 1) { - if (args[0] instanceof Number max) { + if (args[0].getValue() instanceof Number max) { return random.nextLong(max.longValue()); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); } } - if (args[0] instanceof Number min) { - if (args[1] instanceof Number max) { + if (args[0].getValue() instanceof Number min) { + if (args[1].getValue() instanceof Number max) { return random.nextLong(max.longValue() - min.longValue()) + min.longValue(); } else { - throw new ScriptFunctionArgTypeException(Number.class, args[1].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[1].getType()); } } else { - throw new ScriptFunctionArgTypeException(Number.class, args[0].getClass()); + throw new ScriptFunctionArgTypeException(Number.class, args[0].getType()); } } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java index 8329e12..34762b9 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/random/ScriptFunctionRandomUUID.java @@ -3,6 +3,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.util.UUID; @@ -12,12 +14,12 @@ public class ScriptFunctionRandomUUID implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "randomUUID"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { return UUID.randomUUID().toString(); } } diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java index 8c275aa..a3fc5f2 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartUnzipFile.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.FileInputStream; @@ -21,24 +23,24 @@ public class ScriptFunctionSmartUnzipFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "smartUnzipFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 3) { throw new ScriptFunctionArgsCountException(3, args.length); } - if (!(args[0] instanceof String compressedFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String compressedFilePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } - if (!(args[1] instanceof String decompressedPath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getClass()); + if (!(args[1].getValue() instanceof String decompressedPath)) { + throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); } - if (!(args[2] instanceof List patterns)) { - throw new ScriptFunctionArgTypeException(List.class, args[2].getClass()); + if (!(args[2].getValue() instanceof List patterns)) { + throw new ScriptFunctionArgTypeException(List.class, args[2].getType()); } try { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java index d88781e..c658a6f 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionSmartZipFile.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.FileInputStream; @@ -21,24 +23,24 @@ public class ScriptFunctionSmartZipFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "smartZipFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 3) { throw new ScriptFunctionArgsCountException(3, args.length); } - if (!(args[0] instanceof String filesPath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String filesPath)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } - if (!(args[1] instanceof String compressedFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getClass()); + if (!(args[1].getValue() instanceof String compressedFilePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); } - if (!(args[2] instanceof List patterns)) { - throw new ScriptFunctionArgTypeException(List.class, args[2].getClass()); + if (!(args[2].getValue() instanceof List patterns)) { + throw new ScriptFunctionArgTypeException(List.class, args[2].getType()); } try { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java index 65333f7..60f6580 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionUnzipFile.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.FileInputStream; @@ -19,21 +21,21 @@ public class ScriptFunctionUnzipFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "unzipFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 2) { throw new ScriptFunctionArgsCountException(2, args.length); } - if (!(args[0] instanceof String compressedFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String compressedFilePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } - if (!(args[1] instanceof String decompressedPath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getClass()); + if (!(args[1].getValue() instanceof String decompressedPath)) { + throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); } try { diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java index c41026e..f93cb86 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/zip/ScriptFunctionZipFile.java @@ -5,6 +5,8 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.FileInputStream; @@ -19,21 +21,21 @@ public class ScriptFunctionZipFile implements ScriptFunction { @Override - public String getName() { + public @NotNull String getName() { return "zipFile"; } @Override - public Object invoke(Script script, Object[] args) throws ScriptFunctionException { + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { if (args.length != 2) { throw new ScriptFunctionArgsCountException(2, args.length); } - if (!(args[0] instanceof String filePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[0].getClass()); + if (!(args[0].getValue() instanceof String filePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[0].getType()); } - if (!(args[1] instanceof String compressedFilePath)) { - throw new ScriptFunctionArgTypeException(String.class, args[1].getClass()); + if (!(args[1].getValue() instanceof String compressedFilePath)) { + throw new ScriptFunctionArgTypeException(String.class, args[1].getType()); } try { diff --git a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsFunction.java b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsFunction.java index 7646ed7..5e344e4 100644 --- a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsFunction.java +++ b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsFunction.java @@ -3,24 +3,25 @@ import com.instancify.scriptify.api.exception.ScriptFunctionException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; import org.graalvm.polyglot.proxy.ProxyExecutable; import org.graalvm.polyglot.Value; public class JsFunction implements ProxyExecutable { - private final Script script; + private final Script script; private final ScriptFunction function; - public JsFunction(Script script, ScriptFunction function) { + public JsFunction(Script script, ScriptFunction function) { this.script = script; this.function = function; } @Override public Object execute(Value... arguments) { - Object[] args = new Object[arguments.length]; + ScriptFunctionArgument[] args = new ScriptFunctionArgument[arguments.length]; for (int i = 0; i < arguments.length; i++) { - args[i] = arguments[i].as(Object.class); + args[i] = ScriptFunctionArgument.of(arguments[i].as(Object.class)); } try { return function.invoke(script, args); diff --git a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java index 9f3b06a..8801278 100644 --- a/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java +++ b/script-js-graalvm/src/main/java/com/instancify/scriptify/script/JsScript.java @@ -1,5 +1,6 @@ package com.instancify.scriptify.script; +import com.instancify.scriptify.api.exception.ScriptException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.constant.ScriptConstant; import com.instancify.scriptify.api.script.constant.ScriptConstantManager; @@ -7,7 +8,7 @@ import com.instancify.scriptify.api.script.function.ScriptFunctionManager; import org.graalvm.polyglot.*; -public class JsScript implements Script { +public class JsScript implements Script { private final Context context = Context.create(); private ScriptFunctionManager functionManager; @@ -34,7 +35,7 @@ public void setConstantManager(ScriptConstantManager constantManager) { } @Override - public void eval(String script) { + public Value eval(String script) throws ScriptException { Value bindings = context.getBindings("js"); if (functionManager != null) { @@ -49,6 +50,10 @@ public void eval(String script) { } } - context.eval("js", script); + try { + return context.eval("js", script); + } catch (Exception e) { + throw new ScriptException(e); + } } } diff --git a/script-js-rhino/build.gradle.kts b/script-js-rhino/build.gradle.kts index 9b9455c..0e1519b 100644 --- a/script-js-rhino/build.gradle.kts +++ b/script-js-rhino/build.gradle.kts @@ -8,5 +8,5 @@ repositories { dependencies { api(project(":core")) - api("org.mozilla:rhino:1.7.15") + api("org.mozilla:rhino:1.8.0") } \ No newline at end of file diff --git a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsFunction.java b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsFunction.java index 899537a..2fc0c75 100644 --- a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsFunction.java +++ b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsFunction.java @@ -2,6 +2,7 @@ import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; import org.mozilla.javascript.Context; import org.mozilla.javascript.Function; import org.mozilla.javascript.Scriptable; @@ -17,7 +18,11 @@ public JsFunction(Script script, ScriptFunction function) { } @Override - public Object call(Context context, Scriptable scriptable, Scriptable scriptable1, Object[] args) { + public Object call(Context context, Scriptable scriptable, Scriptable scriptable1, Object[] arguments) { + ScriptFunctionArgument[] args = new ScriptFunctionArgument[arguments.length]; + for (int i = 0; i < arguments.length; i++) { + args[i] = ScriptFunctionArgument.of(arguments[i]); + } try { return function.invoke(script, args); } catch (Exception e) { diff --git a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java index 3ef0c9e..5175383 100644 --- a/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java +++ b/script-js-rhino/src/main/java/com/instancify/scriptify/script/JsScript.java @@ -1,5 +1,6 @@ package com.instancify.scriptify.script; +import com.instancify.scriptify.api.exception.ScriptException; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.constant.ScriptConstant; import com.instancify.scriptify.api.script.constant.ScriptConstantManager; @@ -8,7 +9,7 @@ import org.mozilla.javascript.Context; import org.mozilla.javascript.ScriptableObject; -public class JsScript implements Script { +public class JsScript implements Script { private final Context context = Context.enter(); private final ScriptableObject scope = context.initStandardObjects(); @@ -36,7 +37,7 @@ public void setConstantManager(ScriptConstantManager constantManager) { } @Override - public void eval(String script) { + public Object eval(String script) throws ScriptException { if (functionManager != null) { for (ScriptFunction function : functionManager.getFunctions().values()) { scope.put(function.getName(), scope, new JsFunction(this, function)); @@ -49,6 +50,10 @@ public void eval(String script) { } } - context.evaluateString(scope, script, null, 1, null); + try { + return context.evaluateString(scope, script, null, 1, null); + } catch (Exception e) { + throw new ScriptException(e); + } } }