001: /*
002: *
003: * @version: $Id: RoleManagerServiceImpl.java 6407 2008-01-16 15:20:21Z wehrens $
004: */
005: package org.gridsphere.services.core.security.role.impl;
006:
007: import org.apache.commons.logging.Log;
008: import org.apache.commons.logging.LogFactory;
009: import org.gridsphere.portlet.service.PortletServiceUnavailableException;
010: import org.gridsphere.portlet.service.spi.PortletServiceConfig;
011: import org.gridsphere.portlet.service.spi.PortletServiceFactory;
012: import org.gridsphere.portlet.service.spi.PortletServiceProvider;
013: import org.gridsphere.services.core.persistence.PersistenceManagerRdbms;
014: import org.gridsphere.services.core.persistence.PersistenceManagerService;
015: import org.gridsphere.services.core.persistence.QueryFilter;
016: import org.gridsphere.services.core.security.role.PortletRole;
017: import org.gridsphere.services.core.security.role.RoleManagerService;
018: import org.gridsphere.services.core.user.User;
019: import org.gridsphere.services.core.user.impl.UserImpl;
020:
021: import java.util.ArrayList;
022: import java.util.List;
023:
024: public class RoleManagerServiceImpl implements PortletServiceProvider,
025: RoleManagerService {
026:
027: private Log log = LogFactory.getLog(RoleManagerServiceImpl.class);
028:
029: private PersistenceManagerRdbms pm = null;
030:
031: private String jdoUserRoles = UserRole.class.getName();
032: private String jdoUser = UserImpl.class.getName();
033:
034: public RoleManagerServiceImpl() {
035: }
036:
037: public void init(PortletServiceConfig config)
038: throws PortletServiceUnavailableException {
039: PersistenceManagerService pmservice = (PersistenceManagerService) PortletServiceFactory
040: .createPortletService(PersistenceManagerService.class,
041: true);
042: pm = pmservice.createGridSphereRdbms();
043:
044: // create user role if none exists
045: PortletRole userRole = getRole("USER");
046: if (userRole == null) {
047: userRole = new PortletRole();
048: userRole.setName("USER");
049: userRole.setIsDefault(1);
050: userRole.setDescription("portal user");
051: saveRole(userRole);
052: }
053:
054: // create admin role if none exists
055: PortletRole adminRole = getRole("ADMIN");
056: if (adminRole == null) {
057: adminRole = new PortletRole();
058: adminRole.setName("ADMIN");
059: adminRole.setDescription("portal administrator");
060: adminRole.setIsDefault(0);
061: saveRole(adminRole);
062: }
063: }
064:
065: public void destroy() {
066: log.info("Calling destroy()");
067: }
068:
069: public boolean isUserInRole(User user, PortletRole role) {
070: return (getUserRole(user, role) != null);
071: }
072:
073: public int getNumUsersInRole(PortletRole role) {
074: if (role == null)
075: throw new IllegalArgumentException("role cannot be null!");
076: String oql = "select count(*) from " + this .jdoUserRoles;
077: return pm.count(oql);
078:
079: }
080:
081: public List<PortletRole> getRolesForUser(User user) {
082: if (user == null)
083: throw new IllegalArgumentException("user can't be null");
084: List<PortletRole> roles = null;
085: String oql = "select userRole.role from " + jdoUserRoles
086: + " userRole where userRole.user.oid='" + user.getID()
087: + "'";
088: roles = pm.restoreList(oql);
089: return (roles != null) ? roles : new ArrayList<PortletRole>();
090: }
091:
092: public List<User> getUsersInRole(PortletRole role) {
093: if (role == null)
094: throw new IllegalArgumentException("role cannot be null!");
095: List<User> users = null;
096: String oql = "select userRole.user from " + jdoUserRoles
097: + " userRole where userRole.role.Name='"
098: + role.getName() + "'";
099: users = pm.restoreList(oql);
100: System.err.println(oql);
101: return (users != null) ? users : new ArrayList<User>();
102: }
103:
104: public List<User> getUsersInRole(PortletRole role,
105: QueryFilter filter) {
106: if (role == null)
107: throw new IllegalArgumentException("role cannot be null!");
108: if (filter == null)
109: throw new IllegalArgumentException(
110: "query filter cannot be null!");
111: List<User> users = null;
112: String oql = "select userRole.user from " + jdoUserRoles
113: + " userRole where userRole.role.Name='"
114: + role.getName() + "'";
115:
116: users = (List<User>) pm.restoreList(oql, filter);
117: return (users != null) ? users : new ArrayList<User>();
118: }
119:
120: public List<User> getUsersNotInRole(PortletRole role,
121: QueryFilter filter) {
122: if (role == null)
123: throw new IllegalArgumentException("role cannot be null!");
124: if (filter == null)
125: throw new IllegalArgumentException(
126: "query filter cannot be null!");
127: List<User> users = null;
128:
129: String oql = "select uzer from "
130: + this .jdoUser
131: + " uzer left join fetch userRole.user where userRole.role.Name!='"
132: + role.getName() + "'";
133: users = (List<User>) pm.restoreList(oql, filter);
134: return (users != null) ? users : new ArrayList<User>();
135: }
136:
137: public void addUserToRole(User user, PortletRole role) {
138: if (user == null)
139: throw new IllegalArgumentException("user cannot be null!");
140: if (role == null)
141: throw new IllegalArgumentException("role cannot be null!");
142: UserRole userRole = new UserRole();
143: if (role.getOid() == null)
144: role = getRole(role.getName());
145: if (!isUserInRole(user, role)) {
146: userRole.setRole(role);
147: userRole.setUser(user);
148: pm.saveOrUpdate(userRole);
149: }
150: }
151:
152: public void deleteUserInRole(User user, PortletRole role) {
153: UserRole userRole = getUserRole(user, role);
154: if (userRole != null)
155: pm.delete(userRole);
156: }
157:
158: private UserRole getUserRole(User user, PortletRole role) {
159: if (user == null)
160: throw new IllegalArgumentException("user cannot be null!");
161: if (role == null)
162: throw new IllegalArgumentException("role cannot be null!");
163: UserRole userRole = null;
164: String oql = "select userRole from " + jdoUserRoles
165: + " userRole where userRole.user.oid='" + user.getID()
166: + "'" + " and userRole.role.Name='" + role.getName()
167: + "'";
168: userRole = (UserRole) pm.restore(oql);
169: return userRole;
170: }
171:
172: public List<PortletRole> getRoles() {
173: List<PortletRole> roles = null;
174: roles = pm.restoreList("select prole from "
175: + PortletRole.class.getName() + " prole");
176: return (roles != null) ? roles : new ArrayList<PortletRole>();
177: }
178:
179: public void deleteRole(PortletRole role) {
180: if (role == null)
181: throw new IllegalArgumentException("role cannot be null!");
182: pm.delete(role);
183: }
184:
185: public PortletRole getRole(String roleName) {
186: if (roleName == null)
187: throw new IllegalArgumentException(
188: "role name cannot be null!");
189: return (PortletRole) pm.restore("select prole from "
190: + PortletRole.class.getName()
191: + " prole where prole.Name='" + roleName + "'");
192: }
193:
194: public void saveRole(PortletRole role) {
195: if (role == null)
196: throw new IllegalArgumentException("role cannot be null!");
197: pm.saveOrUpdate(role);
198: }
199:
200: public List<PortletRole> getDefaultRoles() {
201: List<PortletRole> roles = null;
202: roles = pm.restoreList("select prole from "
203: + PortletRole.class.getName()
204: + " prole where prole.IsDefault=1");
205: return (roles != null) ? roles : new ArrayList<PortletRole>();
206: }
207:
208: public void addDefaultRole(PortletRole role) {
209: PortletRole myrole = getRole(role.getName());
210: if (myrole != null) {
211: myrole.setIsDefault(1);
212: saveRole(myrole);
213: }
214: }
215:
216: public void removeDefaultRole(PortletRole role) {
217: PortletRole myrole = getRole(role.getName());
218: if (myrole != null) {
219: myrole.setIsDefault(0);
220: saveRole(myrole);
221: }
222: }
223: }
|