1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.domain.service;
17
18 import java.io.Serializable;
19 import java.util.Collection;
20 import java.util.List;
21
22 import org.acegisecurity.domain.PersistableEntity;
23 import org.acegisecurity.domain.dao.Dao;
24 import org.acegisecurity.domain.dao.PaginatedList;
25 import org.acegisecurity.domain.util.GenericsUtils;
26
27 import org.springframework.beans.factory.InitializingBean;
28 import org.springframework.context.support.ApplicationObjectSupport;
29 import org.springframework.util.Assert;
30
31 /***
32 * Base {@link ImmutableManager} implementation.
33 *
34 * @author Ben Alex
35 * @version $Id: ImmutableManagerImpl.java,v 1.2 2005/11/17 00:55:51 benalex Exp $
36 */
37 public class ImmutableManagerImpl<E extends PersistableEntity> extends ApplicationObjectSupport implements ImmutableManager<E>, InitializingBean {
38
39
40 /*** The class that this instance provides services for */
41 private Class supportsClass;
42 private String beanName;
43
44 protected Dao<E> dao;
45
46
47
48 public ImmutableManagerImpl() {
49 this.supportsClass = GenericsUtils.getGeneric(getClass());
50 if (supportsClass == null) {
51 if (logger.isWarnEnabled()) {
52 logger.warn("Could not determine the generics type - you will need to set manually");
53 }
54 }
55 }
56
57 public void setSupportsClass(Class supportClass) {
58 this.supportsClass = supportClass;
59 }
60
61 public Class getSupportsClass() {
62 return supportsClass;
63 }
64
65 public Dao<E> getDao() {
66 return dao;
67 }
68
69 public void setDao(Dao<E> dao) {
70 this.dao = dao;
71 }
72
73 /***
74 * @return the sort order column to be used by default by the scroll methods
75 */
76 protected String getDefaultSortOrder() {
77 return "id";
78 }
79
80 /***
81 * Provides hook for custom subclasses to provide initialization behaviour
82 *
83 * @throws Exception
84 */
85 protected void doInitManager() throws Exception {}
86
87 public final void afterPropertiesSet() throws Exception {
88 Assert.notNull(supportsClass, "supportClass is required");
89 Assert.isTrue(PersistableEntity.class.isAssignableFrom(supportsClass),
90 "supportClass is not an implementation of PersistableEntity");
91 Assert.notNull(dao, "Dao is null");
92 Assert.isTrue(dao.supports(supportsClass), "Dao '" + dao + "' does not support '" + supportsClass + "'");
93 doInitManager();
94 }
95
96 public List<E> findAll() {
97 return dao.findAll();
98 }
99
100 public List<E> findId(Collection<Serializable> ids) {
101 Assert.notNull(ids, "Collection of IDs cannot be null");
102 Assert.notEmpty(ids, "There must be some values in the Collection list");
103 return dao.findId(ids);
104 }
105
106 public E readId(Serializable id) {
107 Assert.notNull(id);
108 return dao.readId(id);
109 }
110
111 public E readPopulatedId(Serializable id) {
112 Assert.notNull(id);
113 return dao.readPopulatedId(id);
114 }
115
116 public PaginatedList<E> scroll(E value, int firstElement,
117 int maxElements) {
118 Assert.notNull(value);
119 Assert.isInstanceOf(this.supportsClass, value, "Can only scroll with values this manager supports");
120
121 return dao.scroll(value, firstElement, maxElements, getDefaultSortOrder());
122 }
123
124 public PaginatedList<E> scrollPopulated(E value, int firstElement, int maxElements) {
125 Assert.notNull(value);
126 Assert.isInstanceOf(this.supportsClass, value, "Can only scroll with values this manager supports");
127
128 return dao.scrollPopulated(value, firstElement, maxElements, getDefaultSortOrder());
129 }
130
131 public PaginatedList<E> scrollWithSubclasses(E value, int firstElement,
132 int maxElements) {
133 Assert.notNull(value);
134 Assert.isInstanceOf(this.supportsClass, value, "Can only scroll with values this manager supports");
135
136 return dao.scrollWithSubclasses(value, firstElement, maxElements, getDefaultSortOrder());
137 }
138
139 public PaginatedList<E> scrollPopulatedWithSubclasses(E value, int firstElement, int maxElements) {
140 Assert.notNull(value);
141 Assert.isInstanceOf(this.supportsClass, value, "Can only scroll with values this manager supports");
142
143 return dao.scrollPopulatedWithSubclasses(value, firstElement, maxElements, getDefaultSortOrder());
144 }
145
146 public boolean supports(Class clazz) {
147 Assert.notNull(clazz);
148
149 return this.supportsClass.equals(clazz);
150 }
151
152 public void setBeanName(String beanName) {
153 this.beanName = beanName;
154 }
155 }