1 package javax.jdo.stub;
2
3 import java.util.Collection;
4 import java.util.Map;
5 import java.util.Properties;
6 import java.util.Set;
7
8 import javax.jdo.Constants;
9 import javax.jdo.FetchGroup;
10 import javax.jdo.PersistenceManager;
11 import javax.jdo.PersistenceManagerFactory;
12 import javax.jdo.datastore.DataStoreCache;
13 import javax.jdo.listener.InstanceLifecycleListener;
14 import javax.jdo.metadata.JDOMetadata;
15 import javax.jdo.metadata.TypeMetadata;
16
17 public class StubPMF implements PersistenceManagerFactory, Constants {
18
19 public static final String PROPERTY_TRANSACTION_TYPE = "javax.jdo.option.TransactionType";
20
21 public static PersistenceManagerFactory getPersistenceManagerFactory(
22 Map props) {
23
24 StubPMF pmf = new StubPMF();
25
26 pmf.setProperties(props);
27
28 for (Object key : props.keySet()) {
29 if (!(key instanceof String)) {
30 continue;
31 }
32 String prop = (String) key;
33 if (!prop.startsWith("javax.jdo.")) {
34 continue;
35 }
36 pmf.setProperty(prop, props.get(prop));
37 }
38
39 return pmf;
40 }
41
42 public static PersistenceManagerFactory getPersistenceManagerFactory(
43 Map overrides, Map props) {
44
45 StubPMF pmf = new StubPMF();
46
47 pmf.setProperties(props);
48 pmf.setProperties(overrides);
49
50 return pmf;
51 }
52
53 String name;
54 String persistenceManagerFactoryClassName;
55 String spiResourceName;
56 String optionConnectionUserName;
57 String optionConnectionPassword;
58 String optionConnectionURL;
59 String optionConnectionDriverName;
60 String optionConnectionFactoryName;
61 Object optionConnectionFactory;
62 String optionConnectionFactory2Name;
63 Object optionConnectionFactory2;
64 boolean optionMultithreaded;
65 String optionMapping;
66 boolean optionOptimistic;
67 boolean optionRetainValues;
68 boolean optionRestoreValues;
69 boolean optionNontransactionalRead;
70 boolean optionNontransactionalWrite;
71 boolean optionIgnoreCache;
72 boolean optionDetachAllOnCommit;
73 boolean optionCopyOnAttach;
74 String optionName;
75 String optionPersistenceUnitName;
76 String optionServerTimeZoneID;
77 String optionTransactionType;
78 boolean optionReadOnly;
79 String optionTransactionIsolationLevel;
80 Integer optionDatastoreReadTimeoutMillis;
81 Integer optionDatastoreWriteTimeoutMillis;
82
83 Properties properties = new Properties();
84
85 public String getConnectionUserName() {
86 return optionConnectionUserName;
87 }
88
89 public void setConnectionUserName(String connectionUserName) {
90 this.optionConnectionUserName = connectionUserName;
91 }
92
93 public void setConnectionPassword(String connectionPassword) {
94 this.optionConnectionPassword = connectionPassword;
95 }
96
97 public String getConnectionURL() {
98 return optionConnectionURL;
99 }
100
101 public void setConnectionURL(String connectionURL) {
102 this.optionConnectionURL = connectionURL;
103 }
104
105 public String getConnectionDriverName() {
106 return optionConnectionDriverName;
107 }
108
109 public void setConnectionDriverName(String connectionDriverName) {
110 this.optionConnectionDriverName = connectionDriverName;
111 }
112
113 public String getConnectionFactoryName() {
114 return optionConnectionFactoryName;
115 }
116
117 public void setConnectionFactoryName(String connectionFactoryName) {
118 this.optionConnectionFactoryName = connectionFactoryName;
119 }
120
121 public Object getConnectionFactory() {
122 return optionConnectionFactory;
123 }
124
125 public void setConnectionFactory(Object connectionFactory) {
126 this.optionConnectionFactory = connectionFactory;
127 }
128
129 public String getConnectionFactory2Name() {
130 return optionConnectionFactory2Name;
131 }
132
133 public void setConnectionFactory2Name(String connectionFactory2Name) {
134 this.optionConnectionFactory2Name = connectionFactory2Name;
135 }
136
137 public Object getConnectionFactory2() {
138 return optionConnectionFactory2;
139 }
140
141 public void setConnectionFactory2(Object connectionFactory2) {
142 this.optionConnectionFactory2 = connectionFactory2;
143 }
144
145 public boolean getMultithreaded() {
146 return optionMultithreaded;
147 }
148
149 public void setMultithreaded(boolean multithreaded) {
150 this.optionMultithreaded = multithreaded;
151 }
152
153 public String getMapping() {
154 return optionMapping;
155 }
156
157 public void setMapping(String mapping) {
158 this.optionMapping = mapping;
159 }
160
161 public boolean getOptimistic() {
162 return optionOptimistic;
163 }
164
165 public void setOptimistic(boolean optimistic) {
166 this.optionOptimistic = optimistic;
167 }
168
169 public boolean getRetainValues() {
170 return optionRetainValues;
171 }
172
173 public void setRetainValues(boolean retainValues) {
174 this.optionRetainValues = retainValues;
175 }
176
177 public boolean getRestoreValues() {
178 return optionRestoreValues;
179 }
180
181 public void setRestoreValues(boolean restoreValues) {
182 this.optionRestoreValues = restoreValues;
183 }
184
185 public boolean getNontransactionalRead() {
186 return optionNontransactionalRead;
187 }
188
189 public void setNontransactionalRead(boolean nontransactionalRead) {
190 this.optionNontransactionalRead = nontransactionalRead;
191 }
192
193 public boolean getNontransactionalWrite() {
194 return optionNontransactionalWrite;
195 }
196
197 public void setNontransactionalWrite(boolean nontransactionalWrite) {
198 this.optionNontransactionalWrite = nontransactionalWrite;
199 }
200
201 public boolean getIgnoreCache() {
202 return optionIgnoreCache;
203 }
204
205 public void setIgnoreCache(boolean ignoreCache) {
206 this.optionIgnoreCache = ignoreCache;
207 }
208
209 public boolean getDetachAllOnCommit() {
210 return optionDetachAllOnCommit;
211 }
212
213 public void setDetachAllOnCommit(boolean detachAllOnCommit) {
214 this.optionDetachAllOnCommit = detachAllOnCommit;
215 }
216
217 public boolean getCopyOnAttach() {
218 return optionCopyOnAttach;
219 }
220
221 public void setCopyOnAttach(boolean copyOnAttach) {
222 this.optionCopyOnAttach = copyOnAttach;
223 }
224
225 public String getName() {
226 return optionName;
227 }
228
229 public void setName(String name) {
230 this.optionName = name;
231 }
232
233 public String getPersistenceUnitName() {
234 return optionPersistenceUnitName;
235 }
236
237 public void setPersistenceUnitName(String persistenceUnitName) {
238 this.optionPersistenceUnitName = persistenceUnitName;
239 }
240
241 public String getServerTimeZoneID() {
242 return optionServerTimeZoneID;
243 }
244
245 public void setServerTimeZoneID(String serverTimeZoneID) {
246 this.optionServerTimeZoneID = serverTimeZoneID;
247 }
248
249 public String getTransactionType() {
250 return optionTransactionType;
251 }
252
253 public void setTransactionType(String transactionType) {
254 this.optionTransactionType = transactionType;
255 }
256
257 public boolean getReadOnly() {
258 return optionReadOnly;
259 }
260
261 public void setReadOnly(boolean readOnly) {
262 this.optionReadOnly = readOnly;
263 }
264
265 public String getTransactionIsolationLevel() {
266 return optionTransactionIsolationLevel;
267 }
268
269 public void setTransactionIsolationLevel(String transactionIsolationLevel) {
270 this.optionTransactionIsolationLevel = transactionIsolationLevel;
271 }
272
273 public Integer getDatastoreReadTimeoutMillis() {
274 return optionDatastoreReadTimeoutMillis;
275 }
276
277 public void setDatastoreReadTimeoutMillis(Integer datastoreReadTimeoutMillis) {
278 this.optionDatastoreReadTimeoutMillis = datastoreReadTimeoutMillis;
279 }
280
281 public Integer getDatastoreWriteTimeoutMillis() {
282 return optionDatastoreWriteTimeoutMillis;
283 }
284
285 public void setDatastoreWriteTimeoutMillis(
286 Integer datastoreWriteTimeoutMillis) {
287 this.optionDatastoreWriteTimeoutMillis = datastoreWriteTimeoutMillis;
288 }
289
290 public void close() {
291 throw new UnsupportedOperationException("not implemented");
292 }
293
294 public boolean isClosed() {
295 return true;
296 }
297
298 public PersistenceManager getPersistenceManager() {
299 throw new UnsupportedOperationException("not implemented");
300 }
301
302 public PersistenceManager getPersistenceManagerProxy() {
303 throw new UnsupportedOperationException("not implemented");
304 }
305
306 public PersistenceManager getPersistenceManager(String userid,
307 String password) {
308 throw new UnsupportedOperationException("not implemented");
309 }
310
311 public Properties getProperties() {
312 return properties;
313 }
314
315 public Collection<String> supportedOptions() {
316 throw new UnsupportedOperationException("not implemented");
317 }
318
319 public DataStoreCache getDataStoreCache() {
320 return new DataStoreCache() {
321
322 public void evict(Object oid) {
323 }
324
325 public void evictAll() {
326 }
327
328 public void evictAll(Object... oids) {
329 }
330
331 public void evictAll(Collection oids) {
332 }
333
334 public void evictAll(Class pcClass, boolean subclasses) {
335 }
336
337 public void evictAll(boolean subclasses, Class pcClass) {
338 }
339
340 public void pin(Object oid) {
341 }
342
343 public void pinAll(Collection oids) {
344 }
345
346 public void pinAll(Object... oids) {
347 }
348
349 public void pinAll(Class pcClass, boolean subclasses) {
350 }
351
352 public void pinAll(boolean subclasses, Class pcClass) {
353 }
354
355 public void unpin(Object oid) {
356 }
357
358 public void unpinAll(Collection oids) {
359 }
360
361 public void unpinAll(Object... oids) {
362 }
363
364 public void unpinAll(Class pcClass, boolean subclasses) {
365 }
366
367 public void unpinAll(boolean subclasses, Class pcClass) {
368 }
369 };
370 }
371
372 public void addInstanceLifecycleListener(
373 InstanceLifecycleListener listener, Class[] classes) {
374 throw new UnsupportedOperationException("not implemented");
375 }
376
377 public void removeInstanceLifecycleListener(
378 InstanceLifecycleListener listener) {
379 throw new UnsupportedOperationException("not implemented");
380 }
381
382 public void addFetchGroups(FetchGroup... groups) {
383 throw new UnsupportedOperationException("not implemented");
384 }
385
386 public void removeFetchGroups(FetchGroup... groups) {
387 throw new UnsupportedOperationException("not implemented");
388 }
389
390 public void removeAllFetchGroups() {
391 throw new UnsupportedOperationException("not implemented");
392 }
393
394 @SuppressWarnings("rawtypes")
395 public FetchGroup getFetchGroup(Class cls, String name) {
396 throw new UnsupportedOperationException("not implemented");
397 }
398
399 @SuppressWarnings("rawtypes")
400 public Set getFetchGroups() {
401 throw new UnsupportedOperationException("not implemented");
402 }
403
404 public void registerMetadata(JDOMetadata metadata) {
405 throw new UnsupportedOperationException("not implemented");
406 }
407
408 public JDOMetadata newMetadata() {
409 throw new UnsupportedOperationException("not implemented");
410 }
411
412 public TypeMetadata getMetadata(String className) {
413 throw new UnsupportedOperationException("not implemented");
414 }
415
416 void setSpiResourceName(String spiPropertiesResourceName) {
417 this.spiResourceName = spiPropertiesResourceName;
418 }
419
420 public String getSpiPropertiesResourceName() {
421 return spiResourceName;
422 }
423
424 void setPersistenceManagerFactoryClass(String className) {
425 this.persistenceManagerFactoryClassName = className;
426 }
427
428 public String getPersistenceManagerFactoryClass() {
429 return this.persistenceManagerFactoryClassName;
430 }
431
432 void setProperty(String name, Object value) {
433
434 String val = value.toString();
435
436 if (name.equals(PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS)) {
437 setPersistenceManagerFactoryClass(val);
438 return;
439 }
440 if (name.equals(PROPERTY_CONNECTION_DRIVER_NAME)) {
441 setConnectionDriverName(val);
442 return;
443 }
444 if (name.equals(PROPERTY_CONNECTION_FACTORY_NAME)) {
445 setConnectionFactoryName(val);
446 return;
447 }
448 if (name.equals(PROPERTY_CONNECTION_FACTORY2_NAME)) {
449 setConnectionFactory2Name(val);
450 return;
451 }
452 if (name.equals(PROPERTY_CONNECTION_PASSWORD)) {
453 setConnectionPassword(val);
454 return;
455 }
456 if (name.equals(PROPERTY_CONNECTION_URL)) {
457 setConnectionURL(val);
458 return;
459 }
460 if (name.equals(PROPERTY_CONNECTION_USER_NAME)) {
461 setConnectionUserName(val);
462 return;
463 }
464 if (name.equals(PROPERTY_IGNORE_CACHE)) {
465 setCopyOnAttach(Boolean.parseBoolean(val));
466 return;
467 }
468 if (name.equals(PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS)) {
469 setDatastoreReadTimeoutMillis(Integer.parseInt(val));
470 return;
471 }
472 if (name.equals(PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS)) {
473 setDatastoreWriteTimeoutMillis(Integer.parseInt(val));
474 return;
475 }
476 if (name.equals(PROPERTY_DETACH_ALL_ON_COMMIT)) {
477 setDetachAllOnCommit(Boolean.parseBoolean(val));
478 return;
479 }
480 if (name.equals(PROPERTY_IGNORE_CACHE)) {
481 setIgnoreCache(Boolean.parseBoolean(val));
482 return;
483 }
484 if (name.equals(PROPERTY_MAPPING)) {
485 setMapping(val);
486 return;
487 }
488 if (name.equals(PROPERTY_MULTITHREADED)) {
489 setMultithreaded(Boolean.parseBoolean(val));
490 return;
491 }
492 if (name.equals(PROPERTY_NAME)) {
493 setName(val);
494 return;
495 }
496 if (name.equals(PROPERTY_NONTRANSACTIONAL_READ)) {
497 setNontransactionalRead(Boolean.parseBoolean(val));
498 return;
499 }
500 if (name.equals(PROPERTY_NONTRANSACTIONAL_WRITE)) {
501 setNontransactionalWrite(Boolean.parseBoolean(val));
502 return;
503 }
504 if (name.equals(PROPERTY_OPTIMISTIC)) {
505 setOptimistic(Boolean.parseBoolean(val));
506 return;
507 }
508 if (name.equals(PROPERTY_PERSISTENCE_UNIT_NAME)) {
509 setPersistenceUnitName(val);
510 return;
511 }
512 if (name.equals(PROPERTY_READONLY)) {
513 setReadOnly(Boolean.parseBoolean(val));
514 return;
515 }
516 if (name.equals(PROPERTY_RESTORE_VALUES)) {
517 setRestoreValues(Boolean.parseBoolean(val));
518 return;
519 }
520 if (name.equals(PROPERTY_RETAIN_VALUES)) {
521 setRetainValues(Boolean.parseBoolean(val));
522 return;
523 }
524 if (name.equals(PROPERTY_SERVER_TIME_ZONE_ID)) {
525 setServerTimeZoneID(val);
526 return;
527 }
528 if (name.equals(PROPERTY_TRANSACTION_ISOLATION_LEVEL)) {
529 setTransactionIsolationLevel(val);
530 return;
531 }
532 if (name.equals(PROPERTY_TRANSACTION_TYPE)) {
533 setTransactionType(val);
534 return;
535 }
536 if (name.equals(PROPERTY_SPI_RESOURCE_NAME)) {
537 setSpiResourceName(val);
538 return;
539 }
540
541 throw new IllegalArgumentException("unhandled stub PMF property "
542 + name);
543 }
544
545 void setProperties(Map properties) {
546 for (Object key : properties.keySet()) {
547 String k = key.toString();
548 Object v = properties.get(key);
549
550 this.properties.put(k, v);
551 setProperty(k, v);
552 }
553
554 }
555 }