CreateNewAdminAction.java
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 = (CreateAdminBeanform;
075     if (createAdminBean == nullcreateAdminBean = 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 = (CreateAdminBeanform;
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             (ObjectNamemBeanServerConnection.getAttribute(service, "DomainConfiguration");
116     ObjectName securityConfiguration
117             (ObjectNamemBeanServerConnection.getAttribute(domainMBean, "SecurityConfiguration");
118     ObjectName defaultRealm
119             (ObjectNamemBeanServerConnection.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 = (StringmBeanServerConnection.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 (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 (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 }