KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > httpconnector > handlers > UserHandler


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.httpconnector.handlers;
17
18 import org.mortbay.http.HttpRequest;
19 import org.mortbay.http.HttpResponse;
20 import org.outerj.daisy.repository.Repository;
21 import org.outerj.daisy.repository.RepositoryException;
22 import org.outerj.daisy.repository.user.UserManager;
23 import org.outerj.daisy.repository.user.User;
24 import org.outerj.daisy.repository.user.Role;
25 import org.outerj.daisy.httpconnector.RequestHandler;
26 import org.outerj.daisy.xmlutil.LocalSAXParserFactory;
27 import org.outerx.daisy.x10.UserDocument;
28 import org.outerx.daisy.x10.RoleDocument;
29 import org.apache.xmlbeans.XmlOptions;
30
31 import java.util.Map JavaDoc;
32 import java.io.IOException JavaDoc;
33
34 public class UserHandler implements RequestHandler {
35     public String JavaDoc getPathPattern() {
36         return "/user/*";
37     }
38
39     public void handleRequest(Map JavaDoc matchMap, HttpRequest request, HttpResponse response, Repository repository) throws Exception JavaDoc {
40         long userId = Long.parseLong((String JavaDoc)matchMap.get("1"));
41         UserManager userMan = repository.getUserManager();
42
43         if (request.getMethod().equals(HttpRequest.__GET)) {
44             User user = userMan.getUser(userId, true);
45             user.getXml().save(response.getOutputStream());
46             response.commit();
47         } else if (request.getMethod().equals(HttpRequest.__POST)) {
48             XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader());
49             UserDocument userDocument = UserDocument.Factory.parse(request.getInputStream(), xmlOptions);
50             UserDocument.User userXml = userDocument.getUser();
51             User user = userMan.getUser(userId, true);
52             updateUserFromXml(response, userMan, userXml, user);
53         } else if (request.getMethod().equals(HttpRequest.__DELETE)) {
54             userMan.deleteUser(userId);
55             response.commit();
56             return;
57         } else {
58             response.sendError(HttpResponse.__405_Method_Not_Allowed);
59         }
60     }
61
62     private void updateUserFromXml(HttpResponse response, UserManager userMan, UserDocument.User userXml, User user) throws RepositoryException, IOException JavaDoc {
63         // check for concurrent modifications
64
if (user.getUpdateCount() != userXml.getUpdateCount())
65             throw new RepositoryException("The role was updated by someone else concurrently.");
66
67         // update object
68
user.setEmail(userXml.getEmail());
69         user.setFirstName(userXml.getFirstName());
70         user.setLastName(userXml.getLastName());
71         if (userXml.getPassword() != null)
72             user.setPassword(userXml.getPassword());
73         user.setUpdateableByUser(userXml.getUpdateableByUser());
74         user.setConfirmed(userXml.getConfirmed());
75         user.setConfirmKey(userXml.getConfirmKey());
76         user.setLogin(userXml.getLogin());
77         user.setAuthenticationScheme(userXml.getAuthenticationScheme());
78
79         // update roles: first check there are any changes to the roles
80
RoleDocument.Role[] rolesXml = userXml.getRoles().getRoleArray();
81         boolean roleChanges = false;
82         Role[] currentRoles = user.getAllRoles().getArray();
83         if (rolesXml.length != currentRoles.length) {
84             roleChanges = true;
85         } else {
86             rolesXmlLoop: for (int i = 0; i < rolesXml.length; i++) {
87                 for (int k = 0; k < currentRoles.length; k++) {
88                     if (currentRoles[k].getId() == rolesXml[i].getId())
89                         continue rolesXmlLoop;
90                 }
91                 // role was not found -- thus there were role changes
92
roleChanges = true;
93                 break;
94             }
95         }
96
97         // update roles if necessary
98
if (roleChanges) {
99             user.clearRoles();
100             for (int i = 0; i < rolesXml.length; i++) {
101                 RoleDocument.Role role = rolesXml[i];
102                 Role r = userMan.getRole(role.getId(), false);
103                 user.addToRole(r);
104             }
105         }
106
107         RoleDocument.Role defaultRoleXml = userXml.getRole();
108         if (defaultRoleXml != null) {
109             Role defaultRole = userMan.getRole(defaultRoleXml.getId(), false);
110             user.setDefaultRole(defaultRole);
111         } else {
112             user.setDefaultRole(null);
113         }
114         user.save();
115
116         user.getXml().save(response.getOutputStream());
117         response.commit();
118     }
119 }
120
Popular Tags