View Javadoc
1   package guru.mikelue.jdut.yaml.node;
2   
3   import java.sql.Connection;
4   import java.util.Map;
5   import java.util.Optional;
6   
7   import guru.mikelue.jdut.DuetFunctions;
8   import guru.mikelue.jdut.jdbc.JdbcFunction;
9   import guru.mikelue.jdut.yaml.LoadingYamlException;
10  
11  /**
12   * Represents the node of code.
13   */
14  public class CodeNode implements NodeBase {
15  	private Optional<JdbcFunction<Connection, ?>> buildFunction = Optional.empty();
16  	private Optional<JdbcFunction<Connection, ?>> cleanFunction = Optional.empty();
17  
18  	@SuppressWarnings("unchecked")
19  	public CodeNode(Object codeNode)
20  	{
21  		Map<String, JdbcFunction<Connection, ?>> sqlCode = (Map<String, JdbcFunction<Connection, ?>>)codeNode;
22  
23  		sqlCode.forEach(
24  			(key, value) -> {
25  				switch (key) {
26  					case "build_operation":
27  						buildFunction = Optional.of(value);
28  						break;
29  					case "clean_operation":
30  						cleanFunction = Optional.of(value);
31  						break;
32  					default:
33  						throw new LoadingYamlException("Unknown property of !sql!code: \"%s\"", key);
34  				}
35  			}
36  		);
37  	}
38  
39  	@Override
40  	public NodeType getNodeType()
41  	{
42  		return NodeType.Code;
43  	}
44  
45  	public DuetFunctions toDuetFunctions()
46  	{
47  		return new DuetFunctions() {
48  			@Override
49  			public JdbcFunction<Connection, ?> getBuildFunction()
50  			{
51  				return buildFunction.orElse(conn -> null);
52  			}
53  			@Override
54  			public JdbcFunction<Connection, ?> getCleanFunction()
55  			{
56  				return cleanFunction.orElse(conn -> null);
57  			}
58  		};
59  	}
60  }