KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > repository > clientimpl > user > RemoteUserManagementStrategy


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.outerj.daisy.repository.clientimpl.user;
17
18 import java.util.ArrayList JavaDoc;
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 /**
35  * User management strategy that connects to the repository server, communicating through
36  * HTTP/XML.
37  */

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 JavaDoc 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 JavaDoc rolesList = new ArrayList JavaDoc(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 JavaDoc("roleXml was null!");
109         
110         String JavaDoc 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         // fire synchronous events
127
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         // fire synchronous events
136
context.getCommonRepository().fireRepositoryEvent(RepositoryEventType.ROLE_DELETED, roleId, -1);
137     }
138
139     public UserImpl getUser(String JavaDoc login, AuthenticatedUser requestingUser) throws RepositoryException {
140         DaisyHttpClient httpClient = getClient(requestingUser);
141         String JavaDoc 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 JavaDoc name, AuthenticatedUser requestingUser) throws RepositoryException {
147         DaisyHttpClient httpClient = getClient(requestingUser);
148         String JavaDoc 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 JavaDoc("UserImpl expected - instead received null!");
156
157         UserImpl.IntimateAccess collInt = user.getIntimateAccess(this);
158
159         DaisyHttpClient httpClient = getClient(collInt.getCurrentUser());
160
161         String JavaDoc 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         // fire synchronous events
181
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 JavaDoc("RoleImpl expected - instead received null!");
190
191         RoleImpl.IntimateAccess collInt = role.getIntimateAccess(this);
192
193         DaisyHttpClient httpClient = getClient(collInt.getCurrentUser());
194
195         String JavaDoc 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         // fire synchronous events
219
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 JavaDoc email, AuthenticatedUser requestingUser) throws RepositoryException {
255         DaisyHttpClient httpClient = getClient(requestingUser);
256         String JavaDoc 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 JavaDoc usersList = new ArrayList JavaDoc(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