1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.builder;
17
18 import java.util.Arrays;
19 import java.util.HashSet;
20 import java.util.Set;
21 import java.util.regex.Pattern;
22
23 import org.apache.ibatis.mapping.ParameterMode;
24 import org.apache.ibatis.mapping.ResultSetType;
25 import org.apache.ibatis.session.Configuration;
26 import org.apache.ibatis.type.JdbcType;
27 import org.apache.ibatis.type.TypeAliasRegistry;
28 import org.apache.ibatis.type.TypeHandler;
29 import org.apache.ibatis.type.TypeHandlerRegistry;
30
31
32
33
34 public abstract class BaseBuilder {
35 protected final Configuration configuration;
36 protected final TypeAliasRegistry typeAliasRegistry;
37 protected final TypeHandlerRegistry typeHandlerRegistry;
38
39 public BaseBuilder(Configuration configuration) {
40 this.configuration = configuration;
41 this.typeAliasRegistry = this.configuration.getTypeAliasRegistry();
42 this.typeHandlerRegistry = this.configuration.getTypeHandlerRegistry();
43 }
44
45 public Configuration getConfiguration() {
46 return configuration;
47 }
48
49 protected Pattern parseExpression(String regex, String defaultValue) {
50 return Pattern.compile(regex == null ? defaultValue : regex);
51 }
52
53 protected Boolean booleanValueOf(String value, Boolean defaultValue) {
54 return value == null ? defaultValue : Boolean.valueOf(value);
55 }
56
57 protected Integer integerValueOf(String value, Integer defaultValue) {
58 return value == null ? defaultValue : Integer.valueOf(value);
59 }
60
61 protected Set<String> stringSetValueOf(String value, String defaultValue) {
62 value = value == null ? defaultValue : value;
63 return new HashSet<>(Arrays.asList(value.split(",")));
64 }
65
66 protected JdbcType resolveJdbcType(String alias) {
67 if (alias == null) {
68 return null;
69 }
70 try {
71 return JdbcType.valueOf(alias);
72 } catch (IllegalArgumentException e) {
73 throw new BuilderException("Error resolving JdbcType. Cause: " + e, e);
74 }
75 }
76
77 protected ResultSetType resolveResultSetType(String alias) {
78 if (alias == null) {
79 return null;
80 }
81 try {
82 return ResultSetType.valueOf(alias);
83 } catch (IllegalArgumentException e) {
84 throw new BuilderException("Error resolving ResultSetType. Cause: " + e, e);
85 }
86 }
87
88 protected ParameterMode resolveParameterMode(String alias) {
89 if (alias == null) {
90 return null;
91 }
92 try {
93 return ParameterMode.valueOf(alias);
94 } catch (IllegalArgumentException e) {
95 throw new BuilderException("Error resolving ParameterMode. Cause: " + e, e);
96 }
97 }
98
99 protected Object createInstance(String alias) {
100 Class<?> clazz = resolveClass(alias);
101 if (clazz == null) {
102 return null;
103 }
104 try {
105 return clazz.getDeclaredConstructor().newInstance();
106 } catch (Exception e) {
107 throw new BuilderException("Error creating instance. Cause: " + e, e);
108 }
109 }
110
111 protected <T> Class<? extends T> resolveClass(String alias) {
112 if (alias == null) {
113 return null;
114 }
115 try {
116 return resolveAlias(alias);
117 } catch (Exception e) {
118 throw new BuilderException("Error resolving class. Cause: " + e, e);
119 }
120 }
121
122 protected TypeHandler<?> resolveTypeHandler(Class<?> javaType, String typeHandlerAlias) {
123 if (typeHandlerAlias == null) {
124 return null;
125 }
126 Class<?> type = resolveClass(typeHandlerAlias);
127 if (type != null && !TypeHandler.class.isAssignableFrom(type)) {
128 throw new BuilderException("Type " + type.getName() + " is not a valid TypeHandler because it does not implement TypeHandler interface");
129 }
130 @SuppressWarnings("unchecked")
131 Class<? extends TypeHandler<?>> typeHandlerType = (Class<? extends TypeHandler<?>>) type;
132 return resolveTypeHandler(javaType, typeHandlerType);
133 }
134
135 protected TypeHandler<?> resolveTypeHandler(Class<?> javaType, Class<? extends TypeHandler<?>> typeHandlerType) {
136 if (typeHandlerType == null) {
137 return null;
138 }
139
140 TypeHandler<?> handler = typeHandlerRegistry.getMappingTypeHandler(typeHandlerType);
141 if (handler == null) {
142
143 handler = typeHandlerRegistry.getInstance(javaType, typeHandlerType);
144 }
145 return handler;
146 }
147
148 protected <T> Class<? extends T> resolveAlias(String alias) {
149 return typeAliasRegistry.resolveAlias(alias);
150 }
151 }