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 org.slf4j.Logger;
8   import org.slf4j.LoggerFactory;
9   
10  import guru.mikelue.jdut.operation.DefaultOperators;
11  import guru.mikelue.jdut.yaml.LoadingYamlException;
12  
13  /**
14   * As the "config" property for a YAML document.
15   */
16  public class ConfigNode {
17  	private Logger logger = LoggerFactory.getLogger(ConfigNode.class);
18  
19  	private Optional<Boolean> transactional = Optional.of(false);
20  	private Optional<Integer> transactionIsolation = Optional.empty();
21  	private String nameOfBuildOperator = DefaultOperators.INSERT;
22  	private String nameOfCleanOperator = DefaultOperators.DELETE;
23  	private Optional<String> decorator = Optional.empty();
24  
25  	/**
26  	 * Default configuration for the YAML document.
27  	 */
28  	public ConfigNode() {}
29  
30  	@SuppressWarnings("unchecked")
31  	public ConfigNode(Object configNode)
32  	{
33  		Map<String, Map<String, ?>> mapOfConfig = (Map<String, Map<String, ?>>)configNode;
34  
35  		mapOfConfig.get("config").forEach(
36  			(key, value) -> {
37  				switch (key) {
38  					case "transaction":
39  						logger.trace("With transaction: [{}]", value);
40  						transactional = Optional.of((Boolean)value);
41  						break;
42  					case "transaction_isolation":
43  						logger.trace("With transaction isolation: [{}]", value);
44  						transactionIsolation = Optional.of(getTransactionIsolation((String)value));
45  						break;
46  					case "build_operation":
47  						nameOfBuildOperator = (String)value;
48  						break;
49  					case "clean_operation":
50  						nameOfCleanOperator = (String)value;
51  						break;
52  					case "decorator":
53                          decorator = Optional.of((String)value);
54  						break;
55  					default:
56  						throw new LoadingYamlException("Unknown property for \"config\": \"%s\"", key);
57  				}
58  			}
59  		);
60  	}
61  
62  	public boolean getTransactionl()
63  	{
64  		return transactional.get();
65  	}
66  	public Optional<Integer> getTransactionIsolation()
67  	{
68  		return transactionIsolation;
69  	}
70  	public String getNameOfBuildOperator()
71  	{
72  		return nameOfBuildOperator;
73  	}
74  	public String getNameOfCleanOperator()
75  	{
76  		return nameOfCleanOperator;
77  	}
78  	public Optional<String> getDecorator()
79  	{
80  		return decorator;
81  	}
82  
83  	private int getTransactionIsolation(String isolation)
84  	{
85  		switch (isolation.toUpperCase()) {
86  			case "READ_COMMITTED":
87  				return Connection.TRANSACTION_READ_COMMITTED;
88  			case "READ_UNCOMMITTED":
89  				return Connection.TRANSACTION_READ_UNCOMMITTED;
90  			case "REPEATABLE_READ":
91  				return Connection.TRANSACTION_REPEATABLE_READ;
92  			case "SERIALIZABLE":
93  				return Connection.TRANSACTION_SERIALIZABLE;
94  			default:
95  				throw new LoadingYamlException("Unknown transaction isolation: [%s]", isolation);
96  		}
97  	}
98  }