1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package edu.internet2.middleware.shibboleth.common.config.attribute.resolver.dataConnector;
18
19 import java.util.List;
20 import java.util.Map;
21
22 import javax.sql.DataSource;
23
24 import net.sf.ehcache.Cache;
25 import net.sf.ehcache.CacheManager;
26
27 import org.opensaml.xml.util.DatatypeHelper;
28
29 import edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.RDBMSColumnDescriptor;
30 import edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.RDBMSDataConnector;
31 import edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.TemplateEngine;
32
33
34
35
36 public class RDBMSDataConnectorFactoryBean extends BaseDataConnectorFactoryBean {
37
38
39 private DataSource connectionDataSource;
40
41
42 private TemplateEngine templateEngine;
43
44
45 private String queryTemplate;
46
47
48 private long queryTimeout;
49
50
51 private boolean readOnlyConnections;
52
53
54 private boolean queryUsesStoredProcedures;
55
56
57 private boolean noResultsIsError;
58
59
60 private List<RDBMSColumnDescriptor> columnDescriptors;
61
62
63 private CacheManager cacheManager;
64
65
66 private int maximumCachedElements;
67
68
69 private long cacheElementTtl;
70
71
72
73 public Class getObjectType() {
74 return RDBMSDataConnector.class;
75 }
76
77
78
79
80
81
82 public boolean isNoResultIsError() {
83 return noResultsIsError;
84 }
85
86
87
88
89
90
91 public void setNoResultIsError(boolean b) {
92 noResultsIsError = b;
93 }
94
95
96
97
98
99
100 public List<RDBMSColumnDescriptor> getColumnDescriptors() {
101 return columnDescriptors;
102 }
103
104
105
106
107
108
109 public void setColumnDescriptors(List<RDBMSColumnDescriptor> descriptors) {
110 columnDescriptors = descriptors;
111 }
112
113
114
115
116
117
118 public DataSource getConnectionDataSource() {
119 return connectionDataSource;
120 }
121
122
123
124
125
126
127 public void setConnectionDataSource(DataSource source) {
128 connectionDataSource = source;
129 }
130
131
132
133
134
135
136 public TemplateEngine getTemplateEngine() {
137 return templateEngine;
138 }
139
140
141
142
143
144
145 public void setTemplateEngine(TemplateEngine engine) {
146 templateEngine = engine;
147 }
148
149
150
151
152
153
154 public String getQueryTemplate() {
155 return queryTemplate;
156 }
157
158
159
160
161
162
163 public void setQueryTemplate(String template) {
164 queryTemplate = DatatypeHelper.safeTrimOrNullString(template);
165 }
166
167
168
169
170
171
172 public long getQueryTimeout() {
173 return queryTimeout;
174 }
175
176
177
178
179
180
181 public void setQueryTimeout(long timeout) {
182 queryTimeout = timeout;
183 }
184
185
186
187
188
189
190 public boolean getQueryUsesStoredProcedures() {
191 return queryUsesStoredProcedures;
192 }
193
194
195
196
197
198
199 public void setQueryUsesStoredProcedures(boolean storedProcedures) {
200 queryUsesStoredProcedures = storedProcedures;
201 }
202
203
204
205
206
207
208 public CacheManager getCacheManager() {
209 return cacheManager;
210 }
211
212
213
214
215
216
217 public void setCacheManager(CacheManager manager) {
218 cacheManager = manager;
219 }
220
221
222
223
224
225
226 public long getCacheElementTimeToLive() {
227 return cacheElementTtl;
228 }
229
230
231
232
233
234
235 public void setCacheElementTimeToLive(long ttl) {
236 cacheElementTtl = ttl;
237 }
238
239
240
241
242
243
244 public int getMaximumCachedElements() {
245 return maximumCachedElements;
246 }
247
248
249
250
251
252
253 public void setMaximumCachedElements(int max) {
254 maximumCachedElements = max;
255 }
256
257
258
259
260
261
262 public boolean isReadOnlyConnections() {
263 return readOnlyConnections;
264 }
265
266
267
268
269
270
271 public void setReadOnlyConnections(boolean readOnly) {
272 readOnlyConnections = readOnly;
273 }
274
275
276 protected Object createInstance() throws Exception {
277 Cache resultsCache = null;
278 if (cacheManager != null) {
279 resultsCache = cacheManager.getCache(getPluginId());
280 if (resultsCache == null) {
281 long ttlInSeconds = cacheElementTtl / 1000;
282 resultsCache = new Cache(
283 getPluginId(), maximumCachedElements, false, false, ttlInSeconds, ttlInSeconds);
284 cacheManager.addCache(resultsCache);
285 }
286 }
287
288 RDBMSDataConnector connector = new RDBMSDataConnector(getConnectionDataSource(), resultsCache);
289 populateDataConnector(connector);
290 connector.registerTemplate(templateEngine, queryTemplate);
291
292 connector.setQueryTimeout((int) (queryTimeout/1000));
293 connector.setUsesStoredProcedure(getQueryUsesStoredProcedures());
294 connector.setConnectionReadOnly(isReadOnlyConnections());
295 connector.setNoResultIsError(isNoResultIsError());
296
297 if (getColumnDescriptors() != null) {
298 Map<String, RDBMSColumnDescriptor> columnDecriptors = connector.getColumnDescriptor();
299 for (RDBMSColumnDescriptor descriptor : getColumnDescriptors()) {
300 columnDecriptors.put(descriptor.getColumnName(), descriptor);
301 }
302 }
303
304 return connector;
305 }
306 }