01: //$Id: DynamicMapInstantiator.java 7674 2005-07-29 06:14:16Z oneovthafew $
02: package org.hibernate.tuple;
03:
04: import java.io.Serializable;
05: import java.util.HashMap;
06: import java.util.HashSet;
07: import java.util.Iterator;
08: import java.util.Map;
09: import java.util.Set;
10:
11: import org.hibernate.mapping.PersistentClass;
12:
13: public class DynamicMapInstantiator implements Instantiator {
14: public static final String KEY = "$type$";
15:
16: private String entityName;
17: private Set isInstanceEntityNames = new HashSet();
18:
19: public DynamicMapInstantiator() {
20: this .entityName = null;
21: }
22:
23: public DynamicMapInstantiator(PersistentClass mappingInfo) {
24: this .entityName = mappingInfo.getEntityName();
25: isInstanceEntityNames.add(entityName);
26: if (mappingInfo.hasSubclasses()) {
27: Iterator itr = mappingInfo.getSubclassClosureIterator();
28: while (itr.hasNext()) {
29: final PersistentClass subclassInfo = (PersistentClass) itr
30: .next();
31: isInstanceEntityNames.add(subclassInfo.getEntityName());
32: }
33: }
34: }
35:
36: public final Object instantiate(Serializable id) {
37: return instantiate();
38: }
39:
40: public final Object instantiate() {
41: Map map = generateMap();
42: if (entityName != null) {
43: map.put(KEY, entityName);
44: }
45: return map;
46: }
47:
48: public final boolean isInstance(Object object) {
49: if (object instanceof Map) {
50: if (entityName == null) {
51: return true;
52: }
53: String type = (String) ((Map) object).get(KEY);
54: return type == null || isInstanceEntityNames.contains(type);
55: } else {
56: return false;
57: }
58: }
59:
60: protected Map generateMap() {
61: return new HashMap();
62: }
63: }
|