KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > setup > actions > ShowShutdownDispatchAction


1 /*
2  */

3 package com.sslexplorer.setup.actions;
4
5 import javax.servlet.http.HttpServletRequest JavaDoc;
6 import javax.servlet.http.HttpServletResponse JavaDoc;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.apache.struts.Globals;
11 import org.apache.struts.action.ActionForm;
12 import org.apache.struts.action.ActionForward;
13 import org.apache.struts.action.ActionMapping;
14 import org.apache.struts.action.ActionMessage;
15 import org.apache.struts.action.ActionMessages;
16
17 import com.sslexplorer.boot.ContextHolder;
18 import com.sslexplorer.core.CoreUtil;
19 import com.sslexplorer.core.actions.AuthenticatedDispatchAction;
20 import com.sslexplorer.policyframework.NoPermissionException;
21 import com.sslexplorer.policyframework.Permission;
22 import com.sslexplorer.policyframework.PolicyConstants;
23 import com.sslexplorer.policyframework.PolicyDatabase;
24 import com.sslexplorer.policyframework.PolicyDatabaseFactory;
25 import com.sslexplorer.security.LogonControllerFactory;
26 import com.sslexplorer.security.SessionInfo;
27 import com.sslexplorer.setup.forms.ShutdownForm;
28
29 /**
30  * Action to shut the server down.
31  *
32  * @author James D Robinson <a HREF="mailto:james@3sp.com">&lt;james@3sp.com&gt;</a>
33  *
34  */

35 public class ShowShutdownDispatchAction extends AuthenticatedDispatchAction {
36
37     final static Log log = LogFactory.getLog(ShowShutdownDispatchAction.class);
38
39     /**
40      * Constructor
41      */

42     public ShowShutdownDispatchAction() {
43         super(PolicyConstants.SERVICE_CONTROL_RESOURCE_TYPE, new Permission[] { PolicyConstants.PERM_SHUTDOWN,
44             PolicyConstants.PERM_RESTART });
45     }
46
47     /* (non-Javadoc)
48      * @see org.apache.struts.actions.DispatchAction#unspecified(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
49      */

50     public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request,
51                                      HttpServletResponse JavaDoc response) throws Exception JavaDoc {
52
53         CoreUtil.clearFlow(request);
54
55         ShutdownForm shutdownForm = (ShutdownForm) form;
56
57         PolicyDatabase policyDatabase = PolicyDatabaseFactory.getInstance();
58         if (shutdownForm.getAlreadyPerforming()) {
59             shutdownForm.setShutdownType(ShutdownForm.SHUTTING_DOWN);
60         } else if (policyDatabase.isPermitted(resourceType, new Permission[] { PolicyConstants.PERM_SHUTDOWN,
61             PolicyConstants.PERM_RESTART }, getSessionInfo(request).getUser(), true) && ContextHolder.getContext().isRestartAvailableMode()) {
62             // Both
63
shutdownForm.setShutdownType(ShutdownForm.BOTH);
64             shutdownForm.setShutdownOperation(ShutdownForm.RESTART);
65         } else if (policyDatabase.isPermitted(resourceType,
66             new Permission[] { PolicyConstants.PERM_SHUTDOWN },
67             getSessionInfo(request).getUser(),
68             true)) {
69             // Shutdown
70
shutdownForm.setShutdownType(ShutdownForm.SHUTDOWN);
71             shutdownForm.setShutdownOperation(ShutdownForm.SHUTDOWN);
72         } else if (policyDatabase.isPermitted(resourceType,
73             new Permission[] { PolicyConstants.PERM_RESTART },
74             getSessionInfo(request).getUser(),
75             true) && ContextHolder.getContext().isRestartAvailableMode()) {
76             // Restart
77
shutdownForm.setShutdownOperation(ShutdownForm.RESTART);
78             shutdownForm.setShutdownType(ShutdownForm.RESTART);
79         } else {
80             throw new NoPermissionException("Cannot shutdown or restart.");
81         }
82
83         /*
84          * Hack to prevent getting in a loop if sending and message then
85          * cancelling
86          */

87         String JavaDoc referer = CoreUtil.getReferer(request);
88         if (referer != null && referer.indexOf("/sendMessage.do") == -1) {
89             shutdownForm.setReferer(referer);
90         }
91
92         int users = LogonControllerFactory.getInstance().getActiveSessions().size();
93         if (users > 1) {
94             ActionMessages msgs = new ActionMessages();
95             msgs.add(Globals.MESSAGE_KEY, new ActionMessage("shutdown.userWarning", new Integer JavaDoc(users)));
96             saveMessages(request, msgs);
97         }
98
99         return mapping.findForward("display");
100     }
101
102     /* (non-Javadoc)
103      * @see com.sslexplorer.core.actions.CoreAction#getNavigationContext(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
104      */

105     public int getNavigationContext(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
106         return SessionInfo.MANAGEMENT_CONSOLE_CONTEXT | SessionInfo.SETUP_CONSOLE_CONTEXT;
107     }
108 }
109
Popular Tags