KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > webforwards > WebForwardPlugin


1 /*
2  * SSL-Explorer
3  *
4  * Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */

19             
20 package com.sslexplorer.webforwards;
21
22 import javax.servlet.http.HttpServletRequest JavaDoc;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26
27 import com.sslexplorer.agent.DefaultAgentManager;
28 import com.sslexplorer.boot.ContextHolder;
29 import com.sslexplorer.core.CoreMenuTree;
30 import com.sslexplorer.core.CoreServlet;
31 import com.sslexplorer.core.CoreUtil;
32 import com.sslexplorer.core.MenuItem;
33 import com.sslexplorer.core.PageTaskMenuTree;
34 import com.sslexplorer.extensions.ExtensionException;
35 import com.sslexplorer.extensions.types.DefaultPlugin;
36 import com.sslexplorer.navigation.MenuTree;
37 import com.sslexplorer.navigation.NavigationManager;
38 import com.sslexplorer.policyframework.Permission;
39 import com.sslexplorer.policyframework.PolicyConstants;
40 import com.sslexplorer.policyframework.PolicyDatabase;
41 import com.sslexplorer.policyframework.PolicyDatabaseFactory;
42 import com.sslexplorer.policyframework.PolicyUtil;
43 import com.sslexplorer.policyframework.ResourceType;
44 import com.sslexplorer.policyframework.itemactions.AddToFavoritesAction;
45 import com.sslexplorer.policyframework.itemactions.CloneResourceAction;
46 import com.sslexplorer.policyframework.itemactions.EditResourceAction;
47 import com.sslexplorer.policyframework.itemactions.RemoveFromFavoritesAction;
48 import com.sslexplorer.policyframework.itemactions.RemoveResourceAction;
49 import com.sslexplorer.replacementproxy.ReplacementProxyMethodHandler;
50 import com.sslexplorer.reverseproxy.ReverseProxyMethodHandler;
51 import com.sslexplorer.security.SessionInfo;
52 import com.sslexplorer.table.TableItemActionMenuTree;
53
54 /**
55  * Plugin implementation thats the <i>Network Places</i> feature.
56  *
57  * @author James D Robinson <a HREF="mailto:james@3sp.com">&lt;james@3sp.com&gt;</a>
58  */

59 public class WebForwardPlugin extends DefaultPlugin {
60
61     /**
62      * Web Forward resource type ID
63      */

64     public final static int WEBFORWARD_RESOURCE_TYPE_ID = 0;
65
66     /**
67      * Web Forward resource type
68      */

69     public final static ResourceType WEBFORWARD_RESOURCE_TYPE = new WebForwardResourceType();
70
71     /**
72      * Extension bundle ID
73      */

74     public static final String JavaDoc BUNDLE_ID = "sslexplorer-community-web-forwards";
75
76     final static Log log = LogFactory.getLog(WebForwardPlugin.class);
77
78     /**
79      * Message resources key (resource bundle id)
80      */

81     public static final String JavaDoc MESSAGE_RESOURCES_KEY = "webForwards";
82
83     /**
84      * Constructor.
85      */

86     public WebForwardPlugin() {
87         super("/WEB-INF/sslexplorer-community-web-forwards-tiles-defs.xml", true);
88     }
89
90     /*
91      * (non-Javadoc)
92      *
93      * @see com.sslexplorer.plugin.DefaultPlugin#startPlugin()
94      */

95     public void activatePlugin() throws ExtensionException {
96         super.activatePlugin();
97         try {
98             initDatabase();
99             initPolicyFramework();
100             initTableItemActions();
101             initMainMenu();
102             initPageTasks();
103             initService();
104             initTagLib();
105             CoreUtil.updateEventsTable(WebForwardPlugin.MESSAGE_RESOURCES_KEY, WebForwardEventConstants.class);
106         } catch (Exception JavaDoc e) {
107             throw new ExtensionException(ExtensionException.INTERNAL_ERROR, e);
108         }
109     }
110
111     void initDatabase() throws Exception JavaDoc {
112         WebForwardDatabaseFactory.getInstance().open(CoreServlet.getServlet(), this.getPluginDefinition());
113     }
114
115     void initPolicyFramework() throws Exception JavaDoc {
116         PolicyDatabase pdb = PolicyDatabaseFactory.getInstance();
117         // Web Forward
118
pdb.registerResourceType(WEBFORWARD_RESOURCE_TYPE);
119         WEBFORWARD_RESOURCE_TYPE.addPermission(PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN);
120         WEBFORWARD_RESOURCE_TYPE.addPermission(PolicyConstants.PERM_EDIT_AND_ASSIGN);
121         WEBFORWARD_RESOURCE_TYPE.addPermission(PolicyConstants.PERM_DELETE);
122         WEBFORWARD_RESOURCE_TYPE.addPermission(PolicyConstants.PERM_ASSIGN);
123     }
124
125     void initTableItemActions() throws Exception JavaDoc {
126         MenuTree tree = NavigationManager.getMenuTree(TableItemActionMenuTree.MENU_TABLE_ITEM_ACTION_MENU_TREE);
127         // Web Forwards
128
tree.addMenuItem(null, new MenuItem("webForward", "webForwards", null, 100, false, SessionInfo.ALL_CONTEXTS));
129         tree.addMenuItem("webForward", new AddToFavoritesAction("webForwards"));
130         tree.addMenuItem("webForward", new RemoveFromFavoritesAction("webForwards"));
131         tree.addMenuItem("webForward", new RemoveResourceAction(SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, "webForwards"));
132         tree.addMenuItem("webForward", new EditResourceAction(SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, "webForwards"));
133         tree.addMenuItem("webForward", new CloneResourceAction(SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, "webForwards"));
134     }
135
136     void initMainMenu() throws Exception JavaDoc {
137         MenuTree tree = NavigationManager.getMenuTree(CoreMenuTree.MENU_ITEM_MENU_TREE);
138
139         tree.addMenuItem("resources", new MenuItem("userWebForwards",
140                         "webForwards",
141                         "/showUserWebForwards.do",
142                         50,
143                         true,
144                         null,
145                         SessionInfo.USER_CONSOLE_CONTEXT,
146                         null,
147                         null,
148                         WEBFORWARD_RESOURCE_TYPE));
149
150         tree.addMenuItem("globalResources", new MenuItem("managementWebForwards",
151                         "webForwards",
152                         "/showWebForwards.do",
153                         100,
154                         true,
155                         null,
156                         SessionInfo.MANAGEMENT_CONSOLE_CONTEXT,
157                         WEBFORWARD_RESOURCE_TYPE,
158                         new Permission[] { PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN,
159                             PolicyConstants.PERM_EDIT_AND_ASSIGN,
160                             PolicyConstants.PERM_DELETE,
161                             PolicyConstants.PERM_ASSIGN }) {
162             public boolean isAvailable(int checkNavigationContext, SessionInfo info, HttpServletRequest JavaDoc request) {
163                 boolean available = super.isAvailable(checkNavigationContext, info, request);
164                 if (available) {
165                     try {
166                         PolicyUtil.checkPermissions(WEBFORWARD_RESOURCE_TYPE,
167                             new Permission[] { PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN,
168                                 PolicyConstants.PERM_EDIT_AND_ASSIGN,
169                                 PolicyConstants.PERM_DELETE,
170                                 PolicyConstants.PERM_ASSIGN },
171                             request);
172                         available = true;
173                     } catch (Exception JavaDoc e1) {
174                         available = false;
175                     }
176                 }
177                 return available;
178             }
179         });
180     }
181     
182     void initTagLib() {
183         ContextHolder.getContext().setResourceAlias("/sslexplorer/taglibs/webforwards", "/WEB-INF/webforwards.tld");
184     }
185
186     void initPageTasks() throws Exception JavaDoc {
187         MenuTree tree = NavigationManager.getMenuTree(PageTaskMenuTree.PAGE_TASK_MENU_TREE);
188         tree.addMenuItem(null, new MenuItem("showWebForwards", null, null, 100, false, SessionInfo.MANAGEMENT_CONSOLE_CONTEXT));
189         Permission[] permissions = new Permission[] { PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN };
190         MenuItem menuItem = new MenuItem("createWebForward", "webForwards", "/webForwardTypeSelection.do", 100, true, "_self",
191                         SessionInfo.MANAGEMENT_CONSOLE_CONTEXT, WEBFORWARD_RESOURCE_TYPE, permissions, null);
192         tree.addMenuItem("showWebForwards", menuItem);
193         tree.addMenuItem("showWebForwards", new MenuItem("replacements",
194             "webForwards",
195             "/showReplacements.do",
196             600,
197             true,
198             null,
199             SessionInfo.MANAGEMENT_CONSOLE_CONTEXT,
200             PolicyConstants.REPLACEMENTS_RESOURCE_TYPE,
201             new Permission[] { PolicyConstants.PERM_CHANGE },
202             null));
203     }
204
205     void initService() throws InstantiationException JavaDoc, IllegalAccessException JavaDoc {
206         // Register CONNECT handler
207
if (!ContextHolder.getContext().isSetupMode()) {
208             ContextHolder.getContext().registerRequestHandler(new ReverseProxyMethodHandler());
209             ContextHolder.getContext().registerRequestHandler(new ReplacementProxyMethodHandler());
210         }
211         DefaultAgentManager.getInstance().registerService(WebForwardService.class);
212     }
213
214     @Override JavaDoc
215     public void stopPlugin() throws ExtensionException {
216         super.stopPlugin();
217         try {
218             stopDatabase();
219             stopPolicyFramework();
220             removeTableItemActions();
221             removeMainMenu();
222             removePageTasks();
223             stopService();
224         } catch (Exception JavaDoc e) {
225             throw new ExtensionException(ExtensionException.INTERNAL_ERROR, e, "Failed to start.");
226         }
227     }
228
229     private void stopService() {
230         // Register CONNECT handler
231
if (!ContextHolder.getContext().isSetupMode()) {
232             ContextHolder.getContext().deregisterRequestHandler(new ReverseProxyMethodHandler());
233             ContextHolder.getContext().deregisterRequestHandler(new ReplacementProxyMethodHandler());
234         }
235     }
236
237     private void removePageTasks() {
238         MenuTree tree = NavigationManager.getMenuTree(PageTaskMenuTree.PAGE_TASK_MENU_TREE);
239         tree.removeMenuItem("showWebForwards", "createTunneledWebForward");
240         tree.removeMenuItem("showWebForwards", "createReplacementWebForward");
241         tree.removeMenuItem("showWebForwards", "createReverseProxyWebForward");
242     }
243
244     private void removeMainMenu() {
245         MenuTree tree = NavigationManager.getMenuTree(CoreMenuTree.MENU_ITEM_MENU_TREE);
246         tree.removeMenuItem("resources", "userWebForwards");
247         tree.removeMenuItem("globalResources", "managementWebForwards");
248         tree.removeMenuItem("configuration", "replacements");
249     }
250
251     private void removeTableItemActions() {
252         MenuTree tree = NavigationManager.getMenuTree(TableItemActionMenuTree.MENU_TABLE_ITEM_ACTION_MENU_TREE);
253         tree.removeMenuItem("webForward", AddToFavoritesAction.TABLE_ITEM_ACTION_ID);
254         tree.removeMenuItem("webForward", RemoveFromFavoritesAction.TABLE_ITEM_ACTION_ID);
255         tree.removeMenuItem("webForward", RemoveResourceAction.TABLE_ITEM_ACTION_ID);
256         tree.removeMenuItem("webForward", EditResourceAction.TABLE_ITEM_ACTION_ID);
257     }
258
259     private void stopPolicyFramework() throws Exception JavaDoc {
260         PolicyDatabase pdb = PolicyDatabaseFactory.getInstance();
261         pdb.deregisterResourceType(WEBFORWARD_RESOURCE_TYPE);
262     }
263
264     private void stopDatabase() throws Exception JavaDoc {
265         WebForwardDatabaseFactory.getInstance().close();
266     }
267 }
Popular Tags