View Javadoc

1   /*
2    * Created on 2004/06/14
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  	 * (non-Javadoc)
36  	 * 
37  	 * @see org.asyrinx.joey.om.EntityServiceManager#newEntity(java.lang.Class)
38  	 */
39  	public Entity newEntity(Class entityClass) {
40  		final EntityService entityService = getEntityService(entityClass);
41  		return entityService.newEntity();
42  	}
43  
44  	/*
45  	 * (non-Javadoc)
46  	 * 
47  	 * @see org.asyrinx.joey.om.EntityServiceManager#restoreBeforeSave(org.asyrinx.joey.om.Entity)
48  	 */
49  	public void restoreBeforeSave(Entity entity) {
50  		final EntityService entityService = getEntityService(entity.getClass());
51  		entityService.restoreBeforeSave(entity);
52  	}
53  
54  	/*
55  	 * (non-Javadoc)
56  	 * 
57  	 * @see org.asyrinx.joey.om.EntityServiceManager#loadEntity(java.lang.Class,
58  	 *      java.io.Serializable)
59  	 */
60  	public Entity loadEntity(Class entityClass, Serializable key) {
61  		final EntityService entityService = getEntityService(entityClass);
62  		return entityService.loadEntity(key);
63  	}
64  
65  	/*
66  	 * (non-Javadoc)
67  	 * 
68  	 * @see org.asyrinx.joey.om.EntityServiceManager#select(java.lang.Class,
69  	 *      org.asyrinx.joey.om.SearchCondition)
70  	 */
71  	public List select(Class entityClass, SearchCondition condition) {
72  		final EntityService entityService = getEntityService(entityClass);
73  		return entityService.select(condition);
74  	}
75  
76  	/*
77  	 * (non-Javadoc)
78  	 * 
79  	 * @see org.asyrinx.joey.om.EntityServiceManager#deleteEntity(java.lang.Class,
80  	 *      java.io.Serializable)
81  	 */
82  	public void deleteEntity(Class entityClass, Serializable key) {
83  		final EntityService entityService = getEntityService(entityClass);
84  		entityService.deleteEntity(key);
85  	}
86  
87  	/*
88  	 * (non-Javadoc)
89  	 * 
90  	 * @see org.asyrinx.joey.om.EntityServiceManager#saveEntity(java.lang.Class,
91  	 *      java.lang.Object)
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 }