1 16 package org.outerj.daisy.repository.clientimpl.user; 17 18 import java.util.ArrayList ; 19 20 import org.apache.commons.httpclient.HttpMethod; 21 import org.apache.commons.httpclient.methods.DeleteMethod; 22 import org.apache.commons.httpclient.methods.GetMethod; 23 import org.apache.commons.httpclient.methods.PostMethod; 24 import org.outerj.daisy.repository.RepositoryException; 25 import org.outerj.daisy.repository.RepositoryEventType; 26 import org.outerj.daisy.repository.commonimpl.user.*; 27 import org.outerj.daisy.repository.commonimpl.AuthenticatedUser; 28 import org.outerj.daisy.repository.clientimpl.infrastructure.AbstractRemoteStrategy; 29 import org.outerj.daisy.repository.clientimpl.infrastructure.DaisyHttpClient; 30 import org.outerj.daisy.repository.clientimpl.RemoteRepositoryManager.Context; 31 import org.outerj.daisy.repository.user.*; 32 import org.outerx.daisy.x10.*; 33 34 38 public class RemoteUserManagementStrategy 39 extends AbstractRemoteStrategy 40 implements UserManagementStrategy { 41 42 public RemoteUserManagementStrategy(Context context) { 43 super(context); 44 } 45 46 public Users loadUsers(AuthenticatedUser requestingUser) throws RepositoryException { 47 DaisyHttpClient httpClient = getClient(requestingUser); 48 HttpMethod method = new GetMethod("/repository/user"); 49 50 UsersDocument usersDocument = (UsersDocument)httpClient.executeMethod(method, UsersDocument.class, true); 51 return instantiateUsersFromXml(usersDocument.getUsers(), requestingUser); 52 } 53 54 public long[] getUserIds(AuthenticatedUser requestingUser) throws RepositoryException { 55 DaisyHttpClient httpClient = getClient(requestingUser); 56 HttpMethod method = new GetMethod("/repository/userIds"); 57 58 IdsDocument idsDocument = (IdsDocument)httpClient.executeMethod(method, IdsDocument.class, true); 59 return idsDocument.getIds().getIdArray(); 60 } 61 62 private UserImpl instantiateUserFromXml(UserDocument.User userXml, AuthenticatedUser requestingUser) { 63 String login = userXml.getLogin(); 64 65 UserImpl user = new UserImpl(this, login, requestingUser); 66 UserImpl.IntimateAccess userInt = user.getIntimateAccess(this); 67 68 RolesDocument.Roles roles = userXml.getRoles(); 69 RoleDocument.Role[] roleArr = roles.getRoleArray(); 70 for (int i = 0; i < roleArr.length; i++) { 71 RoleDocument.Role role = roleArr[i]; 72 userInt.addToRole(instantiateRoleFromXml(role, requestingUser)); 73 } 74 75 userInt.saved(userXml.getId(), userXml.getFirstName(), userXml.getLastName(), userXml.getEmail(), 76 userXml.getLastModified().getTime(), userXml.getLastModifier(), userXml.getUpdateCount()); 77 if (userXml.getRole() != null) 78 user.setDefaultRole(instantiateRoleFromXml(userXml.getRole(), requestingUser)); 79 else 80 user.setDefaultRole(null); 81 user.setUpdateableByUser(userXml.getUpdateableByUser()); 82 user.setConfirmed(userXml.getConfirmed()); 83 if (userXml.isSetConfirmKey()) 84 user.setConfirmKey(userXml.getConfirmKey()); 85 user.setAuthenticationScheme(userXml.getAuthenticationScheme()); 86 87 return user; 88 } 89 90 public Roles loadRoles(AuthenticatedUser requestingUser) throws RepositoryException { 91 DaisyHttpClient httpClient = getClient(requestingUser); 92 HttpMethod method = new GetMethod("/repository/role"); 93 94 RolesDocument rolesDocument = (RolesDocument)httpClient.executeMethod(method, RolesDocument.class, true); 95 RolesDocument.Roles roles = rolesDocument.getRoles(); 96 RoleDocument.Role[] rolesXml = roles.getRoleArray(); 97 ArrayList rolesList = new ArrayList (rolesXml.length); 98 for (int i = 0; i < rolesXml.length; i++) { 99 RoleImpl role = instantiateRoleFromXml(rolesXml[i], requestingUser); 100 rolesList.add(role); 101 } 102 Role[] roleArr = (Role[]) rolesList.toArray(new Role[rolesList.size()]); 103 return new RolesImpl(roleArr); 104 } 105 106 private RoleImpl instantiateRoleFromXml(RoleDocument.Role roleXml, AuthenticatedUser requestingUser) { 107 if (roleXml == null) 108 throw new RuntimeException ("roleXml was null!"); 109 110 String roleName = roleXml.getName(); 111 112 RoleImpl role = new RoleImpl(this, roleName, requestingUser); 113 RoleImpl.IntimateAccess roleInt = role.getIntimateAccess(this); 114 roleInt.setLastModified(roleXml.getLastModified().getTime()); 115 roleInt.setLastModifier(roleXml.getLastModifier()); 116 roleInt.saved(roleXml.getId(), roleName, roleXml.getDescription(), roleXml.getUpdateCount()); 117 118 return role; 119 } 120 121 public void deleteUser(long userId, AuthenticatedUser requestingUser) throws RepositoryException { 122 DaisyHttpClient httpClient = getClient(requestingUser); 123 DeleteMethod method = new DeleteMethod("/repository/user/" + userId); 124 125 httpClient.executeMethod(method, null, true); 126 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.USER_DELETED, userId, -1); 128 } 129 130 public void deleteRole(long roleId, AuthenticatedUser requestingUser) throws RepositoryException { 131 DaisyHttpClient httpClient = getClient(requestingUser); 132 DeleteMethod method = new DeleteMethod("/repository/role/" + roleId); 133 134 httpClient.executeMethod(method, null, true); 135 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.ROLE_DELETED, roleId, -1); 137 } 138 139 public UserImpl getUser(String login, AuthenticatedUser requestingUser) throws RepositoryException { 140 DaisyHttpClient httpClient = getClient(requestingUser); 141 String encodedLogin = encodeNameForUseInPath("login", login); 142 HttpMethod method = new GetMethod("/repository/userByLogin/" + encodedLogin); 143 return getUserXmlFromServer(requestingUser, httpClient, method); 144 } 145 146 public RoleImpl getRole(String name, AuthenticatedUser requestingUser) throws RepositoryException { 147 DaisyHttpClient httpClient = getClient(requestingUser); 148 String encodedName = encodeNameForUseInPath("role", name); 149 HttpMethod method = new GetMethod("/repository/roleByName/" + encodedName); 150 return getRoleXmlFromServer(requestingUser, httpClient, method); 151 } 152 153 public void store(UserImpl user) throws RepositoryException { 154 if (user == null) 155 throw new RuntimeException ("UserImpl expected - instead received null!"); 156 157 UserImpl.IntimateAccess collInt = user.getIntimateAccess(this); 158 159 DaisyHttpClient httpClient = getClient(collInt.getCurrentUser()); 160 161 String url = "/repository"; 162 boolean isNew = user.getId() == -1; 163 if (isNew) 164 url += "/user"; 165 else 166 url += "/user/" + user.getId(); 167 168 PostMethod method = new PostMethod(url); 169 170 UserDocument userDocument = user.getXml(); 171 172 method.setRequestBody(userDocument.newInputStream()); 173 174 UserDocument responseUserDocument = (UserDocument)httpClient.executeMethod(method, UserDocument.class, true); 175 UserDocument.User userXml = responseUserDocument.getUser(); 176 UserImpl.IntimateAccess userInt = user.getIntimateAccess(this); 177 userInt.saved(userXml.getId(), userXml.getFirstName(), userXml.getLastName(), userXml.getEmail(), 178 userXml.getLastModified().getTime(), userXml.getLastModifier(), userXml.getUpdateCount()); 179 180 if (isNew) 182 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.USER_CREATED, user.getId(), user.getUpdateCount()); 183 else 184 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.USER_UPDATED, user.getId(), user.getUpdateCount()); 185 } 186 187 public void store(RoleImpl role) throws RepositoryException { 188 if (role == null) 189 throw new RuntimeException ("RoleImpl expected - instead received null!"); 190 191 RoleImpl.IntimateAccess collInt = role.getIntimateAccess(this); 192 193 DaisyHttpClient httpClient = getClient(collInt.getCurrentUser()); 194 195 String url = "/repository"; 196 boolean isNew = role.getId() == -1; 197 if (isNew) 198 url += "/role"; 199 else 200 url += "/role/" + role.getId(); 201 202 PostMethod method = new PostMethod(url); 203 204 RoleDocument roleDocument = role.getXml(); 205 method.setRequestBody(roleDocument.newInputStream()); 206 207 RoleDocument responseRoleDocument = (RoleDocument)httpClient.executeMethod(method, RoleDocument.class, true); 208 RoleDocument.Role roleXml = responseRoleDocument.getRole(); 209 RoleImpl.IntimateAccess roleInt = role.getIntimateAccess(this); 210 roleInt.saved( 211 roleXml.getId(), 212 roleXml.getName(), 213 roleXml.getDescription(), 214 roleXml.getUpdateCount()); 215 roleInt.setLastModified(roleXml.getLastModified().getTime()); 216 roleInt.setLastModifier(roleXml.getLastModifier()); 217 218 if (isNew) 220 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.ROLE_CREATED, role.getId(), role.getUpdateCount()); 221 else 222 context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.ROLE_UPDATED, role.getId(), role.getUpdateCount()); 223 } 224 225 226 public UserImpl getUser(long userId, AuthenticatedUser requestingUser) throws RepositoryException { 227 DaisyHttpClient httpClient = getClient(requestingUser); 228 HttpMethod method = new GetMethod("/repository/user/" + userId); 229 return getUserXmlFromServer(requestingUser, httpClient, method); 230 } 231 232 233 234 public RoleImpl getRole(long roleId, AuthenticatedUser requestingUser) throws RepositoryException { 235 DaisyHttpClient httpClient = getClient(requestingUser); 236 HttpMethod method = new GetMethod("/repository/role/" + roleId); 237 return getRoleXmlFromServer(requestingUser, httpClient, method); 238 } 239 240 private UserImpl getUserXmlFromServer(AuthenticatedUser requestingUser, DaisyHttpClient httpClient, HttpMethod method) throws RepositoryException { 241 UserDocument userDocument = (UserDocument)httpClient.executeMethod(method, UserDocument.class, true); 242 UserDocument.User userXml = userDocument.getUser(); 243 UserImpl document = instantiateUserFromXml(userXml, requestingUser); 244 return document; 245 } 246 247 private RoleImpl getRoleXmlFromServer(AuthenticatedUser requestingUser, DaisyHttpClient httpClient, HttpMethod method) throws RepositoryException { 248 RoleDocument roleDocument = (RoleDocument)httpClient.executeMethod(method, RoleDocument.class, true); 249 RoleDocument.Role roleXml = roleDocument.getRole(); 250 RoleImpl document = instantiateRoleFromXml(roleXml, requestingUser); 251 return document; 252 } 253 254 public UsersImpl getUsersByEmail(String email, AuthenticatedUser requestingUser) throws RepositoryException { 255 DaisyHttpClient httpClient = getClient(requestingUser); 256 String encodedEmail = encodeNameForUseInPath("email", email); 257 HttpMethod method = new GetMethod("/repository/usersByEmail/" + encodedEmail); 258 259 UsersDocument usersDocument = (UsersDocument)httpClient.executeMethod(method, UsersDocument.class, true); 260 return instantiateUsersFromXml(usersDocument.getUsers(), requestingUser); 261 } 262 263 private UsersImpl instantiateUsersFromXml(UsersDocument.Users users, AuthenticatedUser requestingUser) { 264 UserDocument.User[] usersXml = users.getUserArray(); 265 ArrayList usersList = new ArrayList (usersXml.length); 266 for (int i = 0; i < usersXml.length; i++) { 267 UserImpl user = instantiateUserFromXml(usersXml[i], requestingUser); 268 usersList.add(user); 269 } 270 User[] userArr = (User[]) usersList.toArray(new User[usersList.size()]); 271 return new UsersImpl(userArr); 272 } 273 274 public AuthenticationSchemeInfos getAuthenticationSchemes(AuthenticatedUser requestingUser) throws RepositoryException { 275 DaisyHttpClient httpClient = getClient(requestingUser); 276 HttpMethod method = new GetMethod("/repository/authenticationSchemes"); 277 278 AuthenticationSchemesDocument schemesDocument = (AuthenticationSchemesDocument)httpClient.executeMethod(method, AuthenticationSchemesDocument.class, true); 279 280 AuthenticationSchemeDocument.AuthenticationScheme[] schemesXml = schemesDocument.getAuthenticationSchemes().getAuthenticationSchemeArray(); 281 AuthenticationSchemeInfo[] schemes = new AuthenticationSchemeInfo[schemesXml.length]; 282 for (int i = 0; i < schemesXml.length; i++) { 283 schemes[i] = new AuthenticationSchemeInfoImpl(schemesXml[i].getName(), schemesXml[i].getDescription()); 284 } 285 286 return new AuthenticationSchemeInfosImpl(schemes); 287 } 288 } 289 | Popular Tags |