001 package com.bea.medrec.actions;
002
003 import com.bea.medrec.beans.CreateAdminBean;
004 import com.bea.medrec.utils.ClientException;
005 import com.bea.medrec.utils.MedRecLog4jFactory;
006 import org.apache.log4j.Logger;
007 import org.apache.struts.action.*;
008 import javax.management.MBeanServerConnection;
009 import javax.management.ObjectName;
010 import javax.management.MBeanAttributeInfo;
011 import javax.management.MBeanException;
012 import javax.servlet.http.HttpServletRequest;
013 import javax.servlet.http.HttpServletResponse;
014 import javax.naming.NameNotFoundException;
015 import java.util.HashMap;
016 import java.util.Map;
017
018 import weblogic.management.utils.AlreadyExistsException;
019
020 /**
021 * <p>Action class encapsulating creating new admin functionality.</p>
022 *
023 * @author Copyright (c) 2006 by BEA Systems. All Rights Reserved.
024 */
025 public class CreateNewAdminAction extends AdminBaseLookupDispatchAction {
026
027 private static Logger logger =
028 MedRecLog4jFactory.getLogger(CreateNewAdminAction.class.getName());
029
030 public ActionForward execute(ActionMapping mapping,
031 ActionForm form,
032 HttpServletRequest request,
033 HttpServletResponse response)
034 throws ClientException, Exception {
035 logger.debug("method mapping=" +
036 request.getParameter(mapping.getParameter()));
037 if (request.getParameter(mapping.getParameter()) == null) {
038 return defaultMethod(mapping, form, request, response);
039 } else
040 return super.execute(mapping, form, request, response);
041 }
042
043 /**
044 * <p>Determines method calling based on select submit button.</p>
045 */
046 protected Map getKeyMethodMap() {
047 Map<String, String> map = new HashMap<String, String>();
048 map.put("button.Create", "createNewAdmin");
049 map.put("button.Cancel", "cancel");
050 return map;
051 }
052
053 /**
054 * <p>Default action method.</p>
055 *
056 * @return ActionForward
057 */
058 public ActionForward defaultMethod(ActionMapping mapping,
059 ActionForm form,
060 HttpServletRequest request,
061 HttpServletResponse response)
062 throws Exception {
063 logger.debug("defaultMethod");
064 return loadCreateNewAdminPage(mapping, form, request, response);
065 }
066
067 public ActionForward loadCreateNewAdminPage(ActionMapping mapping,
068 ActionForm form,
069 HttpServletRequest request,
070 HttpServletResponse response)
071 throws ClientException, Exception {
072 logger.debug("loadCreateNewAdminPage");
073 // local variables
074 CreateAdminBean createAdminBean = (CreateAdminBean) form;
075 if (createAdminBean == null) createAdminBean = new CreateAdminBean();
076
077 // Redirect to home view.
078 return mapping.findForward("create.new.admin");
079 }
080
081
082 /**
083 * <p>User selected cancel button.</p>
084 *
085 * @return ActionForward
086 */
087 public ActionForward cancel(ActionMapping mapping,
088 ActionForm form,
089 HttpServletRequest request,
090 HttpServletResponse response)
091 throws Exception {
092 logger.info("Cancel create new admin.");
093 ActionForward forward = null;
094 try {
095 forward = mapping.findForward("home");
096 } catch (Exception e) {
097 return handleException(e, request, mapping);
098 }
099 return forward;
100 }
101
102 public ActionForward createNewAdmin(ActionMapping mapping,
103 ActionForm form,
104 HttpServletRequest request,
105 HttpServletResponse response)
106 throws ClientException, Exception {
107 logger.info("Create New Admin");
108 CreateAdminBean user = (CreateAdminBean) form;
109 logger.debug(user.toString());
110
111 MBeanServerConnection mBeanServerConnection = this.getDomainMBeanServerConnection(request);
112 ObjectName service = new ObjectName("com.bea:Name=DomainRuntimeService,"+
113 "Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
114 ObjectName domainMBean
115 = (ObjectName) mBeanServerConnection.getAttribute(service, "DomainConfiguration");
116 ObjectName securityConfiguration
117 = (ObjectName) mBeanServerConnection.getAttribute(domainMBean, "SecurityConfiguration");
118 ObjectName defaultRealm
119 = (ObjectName) mBeanServerConnection.getAttribute(securityConfiguration, "DefaultRealm");
120 ObjectName[] atnProviders
121 = (ObjectName[]) mBeanServerConnection.getAttribute(defaultRealm, "AuthenticationProviders");
122
123 ObjectName defaultAtnProvider = null;
124
125 for (int i = 0; i < atnProviders.length; i++) {
126 String name = (String) mBeanServerConnection.getAttribute(atnProviders[i], "Name");
127 if (name.equals("DefaultAuthenticator")) {
128 logger.debug("Found the Default authenticator");
129 defaultAtnProvider = atnProviders[i];
130 }
131 }
132
133 try {
134 mBeanServerConnection.invoke(
135 defaultAtnProvider,
136 "createUser",
137 new Object[] {user.getUsername(), user.getPassword(), "MedRec Admininistator"},
138 new String[] {"java.lang.String", "java.lang.String", "java.lang.String"}
139 );
140 } catch (MBeanException ex) {
141 Exception e = ex.getTargetException();
142 if (e instanceof AlreadyExistsException) {
143 logger.info("User, " + user.getUsername() + ", already exists.");
144 ActionErrors errors = new ActionErrors();
145 errors.add("invalidUserName",
146 new ActionError("invalid.username.already.exists"));
147 saveErrors(request, errors);
148 return mapping.findForward("create.new.admin");
149 } else {
150 logger.debug(e);
151 return mapping.findForward("create.new.admin");
152 }
153 }
154
155 try {
156 mBeanServerConnection.invoke(
157 defaultAtnProvider,
158 "addMemberToGroup",
159 new Object[] {"Administrators", user.getUsername()},
160 new String [] {"java.lang.String", "java.lang.String"}
161 );
162
163 mBeanServerConnection.invoke(
164 defaultAtnProvider,
165 "addMemberToGroup",
166 new Object[] {"MedRecAdmins", user.getUsername()},
167 new String [] {"java.lang.String", "java.lang.String"}
168 );
169 } catch (MBeanException ex) {
170 Exception e = ex.getTargetException();
171 if (e instanceof NameNotFoundException) {
172 logger.info("Invalid Group Name.");
173 ex.printStackTrace();
174 return mapping.findForward("create.new.admin");
175 } else {
176 logger.debug(e);
177 return mapping.findForward("create.new.admin");
178 }
179 }
180 logger.info("MedRec Administrator successfully created.");
181 return mapping.findForward("create.new.admin.successful");
182 }
183 }
|