KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > webapp > admin > users > SaveUserAction


1 /*
2  * Copyright 2002,2004 The Apache Software Foundation.
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
17
18 package org.apache.webapp.admin.users;
19
20
21 import java.io.IOException JavaDoc;
22 import java.net.URLDecoder JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.Iterator JavaDoc;
25 import java.util.Locale JavaDoc;
26 import javax.servlet.ServletException JavaDoc;
27 import javax.servlet.http.HttpServletRequest JavaDoc;
28 import javax.servlet.http.HttpServletResponse JavaDoc;
29 import javax.servlet.http.HttpSession JavaDoc;
30 import org.apache.struts.action.Action;
31 import org.apache.struts.action.ActionErrors;
32 import org.apache.struts.action.ActionForm;
33 import org.apache.struts.action.ActionForward;
34 import org.apache.struts.action.ActionMapping;
35 import javax.management.Attribute JavaDoc;
36 import javax.management.MBeanServer JavaDoc;
37 import javax.management.MBeanServerFactory JavaDoc;
38 import javax.management.QueryExp JavaDoc;
39 import javax.management.Query JavaDoc;
40 import javax.management.ObjectInstance JavaDoc;
41 import javax.management.ObjectName JavaDoc;
42 import javax.management.JMException JavaDoc;
43 import javax.management.MBeanAttributeInfo JavaDoc;
44 import javax.management.MBeanOperationInfo JavaDoc;
45 import javax.management.MBeanInfo JavaDoc;
46 import org.apache.struts.util.MessageResources;
47 import org.apache.webapp.admin.ApplicationServlet;
48 import org.apache.webapp.admin.TomcatTreeBuilder;
49
50 /**
51  * <p>Implementation of <strong>Action</strong> that saves a new or
52  * updated User back to the underlying database.</p>
53  *
54  * @author Craig R. McClanahan
55  * @version $Revision: 1.4 $ $Date: 2004/10/18 06:37:55 $
56  * @since 4.1
57  */

58
59 public final class SaveUserAction extends Action {
60
61
62     // ----------------------------------------------------- Instance Variables
63

64
65     /**
66      * The MBeanServer we will be interacting with.
67      */

68     private MBeanServer JavaDoc mserver = null;
69
70
71     // --------------------------------------------------------- Public Methods
72

73
74     /**
75      * Process the specified HTTP request, and create the corresponding HTTP
76      * response (or forward to another web component that will create it).
77      * Return an <code>ActionForward</code> instance describing where and how
78      * control should be forwarded, or <code>null</code> if the response has
79      * already been completed.
80      *
81      * @param mapping The ActionMapping used to select this instance
82      * @param actionForm The optional ActionForm bean for this request (if any)
83      * @param request The HTTP request we are processing
84      * @param response The HTTP response we are creating
85      *
86      * @exception IOException if an input/output error occurs
87      * @exception ServletException if a servlet exception occurs
88      */

89     public ActionForward execute(ActionMapping mapping,
90                                  ActionForm form,
91                                  HttpServletRequest JavaDoc request,
92                                  HttpServletResponse JavaDoc response)
93         throws IOException JavaDoc, ServletException JavaDoc {
94
95         // Look up the components we will be using as needed
96
if (mserver == null) {
97             mserver = ((ApplicationServlet) getServlet()).getServer();
98         }
99         MessageResources resources = getResources(request);
100         HttpSession JavaDoc session = request.getSession();
101         Locale JavaDoc locale = getLocale(request);
102
103         // Has this transaction been cancelled?
104
if (isCancelled(request)) {
105             return (mapping.findForward("List Users Setup"));
106         }
107
108         // Check the transaction token
109
if (!isTokenValid(request)) {
110             response.sendError
111                 (HttpServletResponse.SC_BAD_REQUEST,
112                  resources.getMessage(locale, "users.error.token"));
113             return (null);
114         }
115
116         // Perform any extra validation that is required
117
UserForm userForm = (UserForm) form;
118         String JavaDoc databaseName =
119             URLDecoder.decode(userForm.getDatabaseName(),TomcatTreeBuilder.URL_ENCODING);
120         String JavaDoc objectName = userForm.getObjectName();
121
122         // Perform an "Add User" transaction
123
if (objectName == null) {
124
125             String JavaDoc signature[] = new String JavaDoc[3];
126             signature[0] = "java.lang.String";
127             signature[1] = "java.lang.String";
128             signature[2] = "java.lang.String";
129
130             Object JavaDoc params[] = new Object JavaDoc[3];
131             params[0] = userForm.getUsername();
132             params[1] = userForm.getPassword();
133             params[2] = userForm.getFullName();
134
135             ObjectName JavaDoc oname = null;
136
137             try {
138
139                 // Construct the MBean Name for our UserDatabase
140
oname = new ObjectName JavaDoc(databaseName);
141
142                 // Create the new object and associated MBean
143
objectName = (String JavaDoc) mserver.invoke(oname, "createUser",
144                                                      params, signature);
145
146             } catch (Exception JavaDoc e) {
147
148                 getServlet().log
149                     (resources.getMessage(locale, "users.error.invoke",
150                                           "createUser"), e);
151                 response.sendError
152                     (HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
153                      resources.getMessage(locale, "users.error.invoke",
154                                           "createUser"));
155                 return (null);
156             }
157
158         }
159
160         // Perform an "Update User" transaction
161
else {
162
163             ObjectName JavaDoc oname = null;
164             String JavaDoc attribute = null;
165
166             try {
167
168                 // Construct an object name for this object
169
oname = new ObjectName JavaDoc(objectName);
170
171                 // Update the specified user
172
attribute = "fullName";
173                 mserver.setAttribute
174                     (oname,
175                      new Attribute JavaDoc(attribute, userForm.getFullName()));
176                 attribute = "password";
177                 mserver.setAttribute
178                     (oname,
179                      new Attribute JavaDoc(attribute, userForm.getPassword()));
180
181             } catch (Exception JavaDoc e) {
182
183                 getServlet().log
184                     (resources.getMessage(locale, "users.error.set.attribute",
185                                           attribute), e);
186                 response.sendError
187                     (HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
188                      resources.getMessage(locale, "users.error.set.attribute",
189                                           attribute));
190                 return (null);
191
192             }
193
194         }
195
196         // Reset the groups this user is a member of
197
try {
198
199             ObjectName JavaDoc oname = new ObjectName JavaDoc(objectName);
200             mserver.invoke(oname, "removeGroups",
201                            new Object JavaDoc[0], new String JavaDoc[0]);
202             String JavaDoc groups[] = userForm.getGroups();
203             if (groups == null) {
204                 groups = new String JavaDoc[0];
205             }
206             String JavaDoc addsig[] = new String JavaDoc[1];
207             addsig[0] = "java.lang.String";
208             Object JavaDoc addpar[] = new Object JavaDoc[1];
209             for (int i = 0; i < groups.length; i++) {
210                 addpar[0] =
211                     (new ObjectName JavaDoc(groups[i])).getKeyProperty("groupname");
212                 mserver.invoke(oname, "addGroup",
213                                addpar, addsig);
214             }
215
216         } catch (Exception JavaDoc e) {
217
218             getServlet().log
219                 (resources.getMessage(locale, "users.error.invoke",
220                                       "addGroup"), e);
221             response.sendError
222                 (HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
223                  resources.getMessage(locale, "users.error.invoke",
224                                       "addGroup"));
225             return (null);
226
227         }
228
229         // Reset the roles associated with this user
230
try {
231
232             ObjectName JavaDoc oname = new ObjectName JavaDoc(objectName);
233             mserver.invoke(oname, "removeRoles",
234                            new Object JavaDoc[0], new String JavaDoc[0]);
235             String JavaDoc roles[] = userForm.getRoles();
236             if (roles == null) {
237                 roles = new String JavaDoc[0];
238             }
239             String JavaDoc addsig[] = new String JavaDoc[1];
240             addsig[0] = "java.lang.String";
241             Object JavaDoc addpar[] = new Object JavaDoc[1];
242             for (int i = 0; i < roles.length; i++) {
243                 addpar[0] =
244                     (new ObjectName JavaDoc(roles[i])).getKeyProperty("rolename");
245                 mserver.invoke(oname, "addRole",
246                                addpar, addsig);
247             }
248
249         } catch (Exception JavaDoc e) {
250
251             getServlet().log
252                 (resources.getMessage(locale, "users.error.invoke",
253                                       "addRole"), e);
254             response.sendError
255                 (HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
256                  resources.getMessage(locale, "users.error.invoke",
257                                       "addRole"));
258             return (null);
259
260         }
261
262         // Save the updated database information
263
try {
264
265             ObjectName JavaDoc dname = new ObjectName JavaDoc(databaseName);
266             mserver.invoke(dname, "save",
267                            new Object JavaDoc[0], new String JavaDoc[0]);
268
269         } catch (Exception JavaDoc e) {
270
271             getServlet().log
272                 (resources.getMessage(locale, "users.error.invoke",
273                                       "save"), e);
274             response.sendError
275                 (HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
276                  resources.getMessage(locale, "users.error.invoke",
277                                       "save"));
278             return (null);
279
280         }
281
282         // Proceed to the list roles screen
283
return (mapping.findForward("Users List Setup"));
284
285     }
286
287
288 }
289
Popular Tags