33import com .instancify .scriptify .api .script .function .ScriptFunction ;
44import com .instancify .scriptify .api .script .function .ScriptFunctionManager ;
55import 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 ;
78import org .jetbrains .annotations .UnmodifiableView ;
89
910import java .util .Collections ;
1011import java .util .HashMap ;
1112import java .util .Map ;
13+ import java .util .Objects ;
1214
1315public 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 }
0 commit comments