1
2
3
4 package org.asyrinx.joey.om.impl;
5
6 import java.io.Serializable;
7 import java.util.List;
8 import java.util.Map;
9
10 import org.asyrinx.joey.om.Entity;
11 import org.asyrinx.joey.om.EntityRuntimeException;
12 import org.asyrinx.joey.om.EntityService;
13 import org.asyrinx.joey.om.EntityServiceManager;
14 import org.asyrinx.joey.om.SearchCondition;
15 import org.seasar.framework.container.S2Container;
16
17 /***
18 * @author akima
19 */
20 public abstract class AbstractEntityServiceManager
21 implements EntityServiceManager {
22 /***
23 *
24 */
25 public AbstractEntityServiceManager() {
26 super();
27 this.serviceMap = initServiceMap();
28 }
29
30 private final Map serviceMap;
31
32 protected abstract Map initServiceMap();
33
34
35
36
37
38
39 public Entity newEntity(Class entityClass) {
40 final EntityService entityService = getEntityService(entityClass);
41 return entityService.newEntity();
42 }
43
44
45
46
47
48
49 public void restoreBeforeSave(Entity entity) {
50 final EntityService entityService = getEntityService(entity.getClass());
51 entityService.restoreBeforeSave(entity);
52 }
53
54
55
56
57
58
59
60 public Entity loadEntity(Class entityClass, Serializable key) {
61 final EntityService entityService = getEntityService(entityClass);
62 return entityService.loadEntity(key);
63 }
64
65
66
67
68
69
70
71 public List select(Class entityClass, SearchCondition condition) {
72 final EntityService entityService = getEntityService(entityClass);
73 return entityService.select(condition);
74 }
75
76
77
78
79
80
81
82 public void deleteEntity(Class entityClass, Serializable key) {
83 final EntityService entityService = getEntityService(entityClass);
84 entityService.deleteEntity(key);
85 }
86
87
88
89
90
91
92
93 public void saveEntity(Class entityClass, Object entity) {
94 final EntityService entityService = getEntityService(entityClass);
95 entityService.saveEntity(entity);
96 }
97
98 /***
99 * @param entityClass
100 * @param viewMap
101 * @return
102 */
103 private Class getClassFromMap(
104 Class entityClass,
105 Map viewMap,
106 Class baseClass) {
107 final Object object = viewMap.get(entityClass);
108 if (!(object instanceof Class)) {
109 throw new EntityRuntimeException("Illegal class");
110 }
111 final Class class1 = (Class) object;
112 if (!baseClass.isAssignableFrom(class1))
113 throw new EntityRuntimeException(
114 "Illegal class - "
115 + class1.getName()
116 + " must extends "
117 + baseClass);
118 return class1;
119 }
120
121 public EntityService getEntityService(Class entityClass) {
122 final Class finderClass =
123 getClassFromMap(entityClass, serviceMap, EntityService.class);
124 final Object object = container.getComponent(finderClass);
125 if (finderClass.isInstance(object)) {
126 return (EntityService) object;
127 } else {
128 throw new EntityRuntimeException(
129 object + " doesn't extend " + EntityService.class.getName());
130 }
131 }
132 private S2Container container = null;
133
134 /***
135 * @return Returns the container.
136 */
137 public S2Container getContainer() {
138 return container;
139 }
140
141 /***
142 * @param container
143 * The container to set.
144 */
145 public void setContainer(S2Container container) {
146 this.container = container;
147 }
148 }