Skip to content

Commit dd75a16

Browse files
authored
Merge pull request #21 from Instancify/feat/function-definition-factory
feat: script function definition factory
2 parents 2320ed3 + d6fb7f2 commit dd75a16

File tree

7 files changed

+89
-3
lines changed

7 files changed

+89
-3
lines changed

api/src/main/java/com/instancify/scriptify/api/script/function/ScriptFunctionManager.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.instancify.scriptify.api.script.function;
22

33
import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition;
4+
import com.instancify.scriptify.api.script.function.definition.factory.ScriptFunctionDefinitionFactory;
45
import org.jetbrains.annotations.Nullable;
56
import org.jetbrains.annotations.UnmodifiableView;
67

@@ -11,6 +12,20 @@
1112
*/
1213
public interface ScriptFunctionManager {
1314

15+
/**
16+
* Retrieves function definition factory.
17+
*
18+
* @return ScriptFunctionDefinitionFactory
19+
*/
20+
ScriptFunctionDefinitionFactory getFunctionDefinitionFactory();
21+
22+
/**
23+
* Set the function definition factory.
24+
*
25+
* @param factory ScriptFunctionDefinitionFactory
26+
*/
27+
void setFunctionDefinitionFactory(ScriptFunctionDefinitionFactory factory);
28+
1429
/**
1530
* Retrieves all registered functions.
1631
*
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.instancify.scriptify.api.script.function.definition.factory;
2+
3+
import com.instancify.scriptify.api.script.function.ScriptFunction;
4+
import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition;
5+
6+
/**
7+
* Script function definition factory.
8+
* Allows to create custom factory for creating specific definitions.
9+
*/
10+
public interface ScriptFunctionDefinitionFactory {
11+
12+
/**
13+
* Creates a function definition.
14+
*
15+
* @param function ScriptFunction
16+
* @return ScriptFunctionDefinition
17+
*/
18+
ScriptFunctionDefinition create(ScriptFunction function);
19+
}

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ java {
1212

1313
allprojects {
1414
group = "com.instancify.scriptify"
15-
version = "1.4.2-SNAPSHOT"
15+
version = "1.4.3-SNAPSHOT"
1616
}
1717

1818
subprojects {

common/src/main/java/com/instancify/scriptify/common/script/function/CommonFunctionManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.instancify.scriptify.common.script.function;
22

3+
import com.instancify.scriptify.api.script.function.definition.factory.ScriptFunctionDefinitionFactory;
34
import com.instancify.scriptify.common.script.function.impl.crypto.ScriptFunctionBase64Decode;
45
import com.instancify.scriptify.common.script.function.impl.crypto.ScriptFunctionBase64Encode;
56
import com.instancify.scriptify.common.script.function.impl.crypto.ScriptFunctionMD5;
@@ -18,6 +19,15 @@
1819
public class CommonFunctionManager extends StandardFunctionManager {
1920

2021
public CommonFunctionManager() {
22+
this.init();
23+
}
24+
25+
public CommonFunctionManager(ScriptFunctionDefinitionFactory functionDefinitionFactory) {
26+
super(functionDefinitionFactory);
27+
this.init();
28+
}
29+
30+
private void init() {
2131
this.register(new ScriptFunctionPrint());
2232
this.register(new ScriptFunctionExistsFile());
2333
this.register(new ScriptFunctionDeleteFile());

core/src/main/java/com/instancify/scriptify/core/script/constant/StandardConstantManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Collections;
88
import java.util.HashMap;
99
import java.util.Map;
10+
import java.util.Objects;
1011

1112
public class StandardConstantManager implements ScriptConstantManager {
1213

@@ -19,6 +20,7 @@ public class StandardConstantManager implements ScriptConstantManager {
1920

2021
@Override
2122
public void register(ScriptConstant constant) {
23+
Objects.requireNonNull(constant, "constant cannot be null");
2224
if (!constants.containsKey(constant.getName())) {
2325
constants.put(constant.getName(), constant);
2426
} else {

core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,37 @@
33
import com.instancify.scriptify.api.script.function.ScriptFunction;
44
import com.instancify.scriptify.api.script.function.ScriptFunctionManager;
55
import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition;
6-
import com.instancify.scriptify.core.script.function.definition.ScriptFunctionDefinitionImpl;
6+
import com.instancify.scriptify.api.script.function.definition.factory.ScriptFunctionDefinitionFactory;
7+
import com.instancify.scriptify.core.script.function.definition.factory.StandardFunctionDefinitionFactory;
78
import org.jetbrains.annotations.UnmodifiableView;
89

910
import java.util.Collections;
1011
import java.util.HashMap;
1112
import java.util.Map;
13+
import java.util.Objects;
1214

1315
public class StandardFunctionManager implements ScriptFunctionManager {
1416

1517
private final Map<String, ScriptFunctionDefinition> functions = new HashMap<>();
18+
private ScriptFunctionDefinitionFactory functionDefinitionFactory;
19+
20+
public StandardFunctionManager() {
21+
this(new StandardFunctionDefinitionFactory());
22+
}
23+
24+
public StandardFunctionManager(ScriptFunctionDefinitionFactory functionDefinitionFactory) {
25+
this.setFunctionDefinitionFactory(functionDefinitionFactory);
26+
}
27+
28+
@Override
29+
public ScriptFunctionDefinitionFactory getFunctionDefinitionFactory() {
30+
return functionDefinitionFactory;
31+
}
32+
33+
@Override
34+
public void setFunctionDefinitionFactory(ScriptFunctionDefinitionFactory functionDefinitionFactory) {
35+
this.functionDefinitionFactory = Objects.requireNonNull(functionDefinitionFactory, "functionDefinitionFactory cannot be null");
36+
}
1637

1738
@Override
1839
public @UnmodifiableView Map<String, ScriptFunctionDefinition> getFunctions() {
@@ -21,8 +42,13 @@ public class StandardFunctionManager implements ScriptFunctionManager {
2142

2243
@Override
2344
public void register(ScriptFunction function) {
45+
Objects.requireNonNull(function, "function cannot be null");
2446
if (!functions.containsKey(function.getName())) {
25-
functions.put(function.getName(), new ScriptFunctionDefinitionImpl(function));
47+
ScriptFunctionDefinition definition = functionDefinitionFactory.create(function);
48+
if (definition == null) {
49+
throw new UnsupportedOperationException("Function definition factory has not created definition");
50+
}
51+
functions.put(function.getName(), definition);
2652
} else {
2753
throw new IllegalStateException("The function with name '" + function.getName() + "' already exists");
2854
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.instancify.scriptify.core.script.function.definition.factory;
2+
3+
import com.instancify.scriptify.api.script.function.ScriptFunction;
4+
import com.instancify.scriptify.api.script.function.definition.ScriptFunctionDefinition;
5+
import com.instancify.scriptify.api.script.function.definition.factory.ScriptFunctionDefinitionFactory;
6+
import com.instancify.scriptify.core.script.function.definition.ScriptFunctionDefinitionImpl;
7+
8+
public class StandardFunctionDefinitionFactory implements ScriptFunctionDefinitionFactory {
9+
10+
@Override
11+
public ScriptFunctionDefinition create(ScriptFunction function) {
12+
return new ScriptFunctionDefinitionImpl(function);
13+
}
14+
}

0 commit comments

Comments
 (0)