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