KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > opencms > workplace > tools > modules > CmsModulesDependenciesList


1 /*
2  * File : $Source: /usr/local/cvs/opencms/src-modules/org/opencms/workplace/tools/modules/CmsModulesDependenciesList.java,v $
3  * Date : $Date: 2006/03/27 14:52:53 $
4  * Version: $Revision: 1.15 $
5  *
6  * This library is part of OpenCms -
7  * the Open Source Content Mananagement System
8  *
9  * Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * For further information about Alkacon Software GmbH, please see the
22  * company website: http://www.alkacon.com
23  *
24  * For further information about OpenCms, please see the
25  * project website: http://www.opencms.org
26  *
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */

31
32 package org.opencms.workplace.tools.modules;
33
34 import org.opencms.configuration.CmsConfigurationException;
35 import org.opencms.jsp.CmsJspActionElement;
36 import org.opencms.main.CmsRuntimeException;
37 import org.opencms.main.OpenCms;
38 import org.opencms.module.CmsModule;
39 import org.opencms.module.CmsModuleDependency;
40 import org.opencms.security.CmsRoleViolationException;
41 import org.opencms.workplace.list.A_CmsListDialog;
42 import org.opencms.workplace.list.CmsListColumnAlignEnum;
43 import org.opencms.workplace.list.CmsListColumnDefinition;
44 import org.opencms.workplace.list.CmsListDefaultAction;
45 import org.opencms.workplace.list.CmsListDirectAction;
46 import org.opencms.workplace.list.CmsListItem;
47 import org.opencms.workplace.list.CmsListMetadata;
48 import org.opencms.workplace.list.CmsListMultiAction;
49 import org.opencms.workplace.list.CmsListOrderEnum;
50
51 import java.io.IOException JavaDoc;
52 import java.util.ArrayList JavaDoc;
53 import java.util.HashMap JavaDoc;
54 import java.util.Iterator JavaDoc;
55 import java.util.List JavaDoc;
56 import java.util.Map JavaDoc;
57
58 import javax.servlet.ServletException JavaDoc;
59 import javax.servlet.http.HttpServletRequest JavaDoc;
60 import javax.servlet.http.HttpServletResponse JavaDoc;
61 import javax.servlet.jsp.PageContext JavaDoc;
62
63 /**
64  * Module dependencies view.<p>
65  *
66  * @author Michael Emmerich
67  *
68  * @version $Revision: 1.15 $
69  *
70  * @since 6.0.0
71  */

72 public class CmsModulesDependenciesList extends A_CmsListDialog {
73
74     /** List action delete. */
75     public static final String JavaDoc LIST_ACTION_DELETE = "ad";
76
77     /** list action id constant. */
78     public static final String JavaDoc LIST_ACTION_EDIT = "ae";
79
80     /** List column delete. */
81     public static final String JavaDoc LIST_COLUMN_DELETE = "cd";
82
83     /** List column edit. */
84     public static final String JavaDoc LIST_COLUMN_EDIT = "ce";
85
86     /** List column name. */
87     public static final String JavaDoc LIST_COLUMN_NAME = "cn";
88
89     /** List column version. */
90     public static final String JavaDoc LIST_COLUMN_VERSION = "cv";
91
92     /** list action id constant. */
93     public static final String JavaDoc LIST_DEFACTION_EDIT = "de";
94
95     /** list id constant. */
96     public static final String JavaDoc LIST_ID = "lmd";
97
98     /** List action multi delete. */
99     public static final String JavaDoc LIST_MACTION_DELETE = "md";
100
101     /** Dependency parameter. */
102     public static final String JavaDoc PARAM_DEPENDENCY = "dependency";
103
104     /** Module parameter. */
105     public static final String JavaDoc PARAM_MODULE = "module";
106
107     /** Path to the list buttons. */
108     public static final String JavaDoc PATH_BUTTONS = "tools/modules/buttons/";
109
110     /** Modulename. */
111     private String JavaDoc m_paramModule;
112
113     /**
114      * Public constructor.<p>
115      *
116      * @param jsp an initialized JSP action element
117      */

118     public CmsModulesDependenciesList(CmsJspActionElement jsp) {
119
120         super(
121             jsp,
122             LIST_ID,
123             Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_NAME_0),
124             LIST_COLUMN_NAME,
125             CmsListOrderEnum.ORDER_ASCENDING,
126             null);
127     }
128
129     /**
130      * Public constructor with JSP variables.<p>
131      *
132      * @param context the JSP page context
133      * @param req the JSP request
134      * @param res the JSP response
135      */

136     public CmsModulesDependenciesList(PageContext JavaDoc context, HttpServletRequest JavaDoc req, HttpServletResponse JavaDoc res) {
137
138         this(new CmsJspActionElement(context, req, res));
139     }
140
141     /**
142      * This method should handle every defined list multi action,
143      * by comparing <code>{@link #getParamListAction()}</code> with the id
144      * of the action to execute.<p>
145      */

146     public void executeListMultiActions() {
147
148         if (getParamListAction().equals(LIST_MACTION_DELETE)) {
149             String JavaDoc moduleName = getParamModule();
150             // execute the delete multiaction
151
Iterator JavaDoc itItems = getSelectedItems().iterator();
152
153             while (itItems.hasNext()) {
154                 CmsModule module = (CmsModule)OpenCms.getModuleManager().getModule(moduleName).clone();
155                 CmsListItem listItem = (CmsListItem)itItems.next();
156                 String JavaDoc dependencyName = listItem.getId();
157                 deleteDependency(module, dependencyName);
158             }
159         }
160         // refresh the list
161
Map JavaDoc objects = (Map JavaDoc)getSettings().getListObject();
162         if (objects != null) {
163             objects.remove(CmsModulesList.class.getName());
164         }
165         listSave();
166
167     }
168
169     /**
170      * @see org.opencms.workplace.list.A_CmsListDialog#executeListSingleActions()
171      */

172     public void executeListSingleActions() throws IOException JavaDoc, ServletException JavaDoc {
173
174         String JavaDoc moduleName = getParamModule();
175         String JavaDoc dependencyName = getSelectedItem().getId();
176
177         Map JavaDoc params = new HashMap JavaDoc();
178         params.put(PARAM_MODULE, moduleName);
179         params.put(PARAM_DEPENDENCY, dependencyName);
180
181         if (getParamListAction().equals(LIST_ACTION_DELETE)) {
182             // delete a dependency
183
CmsModule module = (CmsModule)OpenCms.getModuleManager().getModule(moduleName).clone();
184             deleteDependency(module, dependencyName);
185         } else if (getParamListAction().equals(LIST_ACTION_EDIT) || getParamListAction().equals(LIST_DEFACTION_EDIT)) {
186             // edit a dependency from the list
187
params.put(PARAM_ACTION, DIALOG_INITIAL);
188             getToolManager().jspForwardTool(this, "/modules/edit/dependencies/edit", params);
189         }
190         // refresh the list
191
Map JavaDoc objects = (Map JavaDoc)getSettings().getListObject();
192         if (objects != null) {
193             objects.remove(CmsModulesList.class.getName());
194         }
195         listSave();
196     }
197
198     /**
199      * Gets the module parameter.<p>
200      *
201      * @return the module parameter
202      */

203     public String JavaDoc getParamModule() {
204
205         return m_paramModule;
206     }
207
208     /**
209      * Sets the module parameter.<p>
210      * @param paramModule the module parameter
211      */

212     public void setParamModule(String JavaDoc paramModule) {
213
214         m_paramModule = paramModule;
215     }
216
217     /**
218      * @see org.opencms.workplace.list.A_CmsListDialog#fillDetails(java.lang.String)
219      */

220     protected void fillDetails(String JavaDoc detailId) {
221
222         // noop
223
}
224
225     /**
226      * @see org.opencms.workplace.list.A_CmsListDialog#getListItems()
227      */

228     protected List JavaDoc getListItems() {
229
230         List JavaDoc ret = new ArrayList JavaDoc();
231
232         String JavaDoc moduleName = getParamModule();
233         CmsModule module = OpenCms.getModuleManager().getModule(moduleName);
234         // get dependencies
235
List JavaDoc dependencies = module.getDependencies();
236         Iterator JavaDoc i = dependencies.iterator();
237         while (i.hasNext()) {
238             CmsModuleDependency dependency = (CmsModuleDependency)i.next();
239             CmsListItem item = getList().newItem(dependency.getName());
240             // name
241
item.set(LIST_COLUMN_NAME, dependency.getName());
242             // version
243
item.set(LIST_COLUMN_VERSION, dependency.getVersion());
244
245             ret.add(item);
246         }
247         return ret;
248     }
249
250     /**
251      * @see org.opencms.workplace.CmsWorkplace#initMessages()
252      */

253     protected void initMessages() {
254
255         // add specific dialog resource bundle
256
addMessages(Messages.get().getBundleName());
257         // add default resource bundles
258
super.initMessages();
259     }
260
261     /**
262      * @see org.opencms.workplace.list.A_CmsListDialog#setColumns(org.opencms.workplace.list.CmsListMetadata)
263      */

264     protected void setColumns(CmsListMetadata metadata) {
265
266         //add column for edit action
267
CmsListColumnDefinition editCol = new CmsListColumnDefinition(LIST_COLUMN_EDIT);
268         editCol.setName(Messages.get().container(Messages.GUI_MODULES_LIST_COLS_EDIT_0));
269         editCol.setWidth("20");
270         editCol.setSorteable(false);
271         editCol.setAlign(CmsListColumnAlignEnum.ALIGN_CENTER);
272         // add the edit action
273
CmsListDirectAction editColAction = new CmsListDirectAction(LIST_ACTION_EDIT);
274         editColAction.setName(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_ACTION_EDIT_NAME_0));
275         editColAction.setHelpText(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_ACTION_EDIT_HELP_0));
276         editColAction.setIconPath(PATH_BUTTONS + "module_dependencies.png");
277         editColAction.setEnabled(true);
278         editColAction.setConfirmationMessage(null);
279         editCol.addDirectAction(editColAction);
280         metadata.addColumn(editCol);
281
282         // add column for delete action
283
CmsListColumnDefinition delCol = new CmsListColumnDefinition(LIST_COLUMN_DELETE);
284         delCol.setName(Messages.get().container(Messages.GUI_MODULES_LIST_COLS_DELETE_0));
285         delCol.setWidth("20");
286         delCol.setSorteable(false);
287         delCol.setAlign(CmsListColumnAlignEnum.ALIGN_CENTER);
288         // direct action: delete module
289
CmsListDirectAction delDependency = new CmsListDirectAction(LIST_ACTION_DELETE);
290         delDependency.setName(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_ACTION_DELETE_NAME_0));
291         delDependency.setConfirmationMessage(Messages.get().container(
292             Messages.GUI_DEPENDENCIES_LIST_ACTION_DELETE_CONF_0));
293         delDependency.setIconPath(ICON_DELETE);
294         delDependency.setEnabled(true);
295         delDependency.setHelpText(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_ACTION_DELETE_HELP_0));
296         delCol.addDirectAction(delDependency);
297         metadata.addColumn(delCol);
298
299         // add column for name
300
CmsListColumnDefinition nameCol = new CmsListColumnDefinition(LIST_COLUMN_NAME);
301         nameCol.setName(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_COLS_NAME_0));
302         nameCol.setWidth("80%");
303         nameCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT);
304         // create default edit action for name column: edit dependency
305
CmsListDefaultAction nameColAction = new CmsListDefaultAction(LIST_DEFACTION_EDIT);
306         nameColAction.setName(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_ACTION_OVERVIEW_NAME_0));
307         nameColAction.setIconPath(null);
308         nameColAction.setHelpText(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_ACTION_OVERVIEW_HELP_0));
309         nameColAction.setEnabled(true);
310         nameColAction.setConfirmationMessage(null);
311         // set action for the name column
312
nameCol.addDefaultAction(nameColAction);
313         metadata.addColumn(nameCol);
314
315         // add column for version
316
CmsListColumnDefinition versionCol = new CmsListColumnDefinition(LIST_COLUMN_VERSION);
317         versionCol.setName(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_COLS_VERSION_0));
318         versionCol.setWidth("20%");
319         versionCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT);
320         metadata.addColumn(versionCol);
321     }
322
323     /**
324      * @see org.opencms.workplace.list.A_CmsListDialog#setIndependentActions(org.opencms.workplace.list.CmsListMetadata)
325      */

326     protected void setIndependentActions(CmsListMetadata metadata) {
327
328         // noop
329
}
330
331     /**
332      * @see org.opencms.workplace.list.A_CmsListDialog#setMultiActions(org.opencms.workplace.list.CmsListMetadata)
333      */

334     protected void setMultiActions(CmsListMetadata metadata) {
335
336         // add the delete dependencies multi action
337
CmsListMultiAction deleteDependencies = new CmsListMultiAction(LIST_MACTION_DELETE);
338         deleteDependencies.setName(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_ACTION_MDELETE_NAME_0));
339         deleteDependencies.setConfirmationMessage(Messages.get().container(
340             Messages.GUI_DEPENDENCIES_LIST_ACTION_MDELETE_CONF_0));
341         deleteDependencies.setIconPath(ICON_MULTI_DELETE);
342         deleteDependencies.setEnabled(true);
343         deleteDependencies.setHelpText(Messages.get().container(Messages.GUI_DEPENDENCIES_LIST_ACTION_MDELETE_HELP_0));
344         metadata.addMultiAction(deleteDependencies);
345     }
346
347     /**
348      * @see org.opencms.workplace.list.A_CmsListDialog#validateParamaters()
349      */

350     protected void validateParamaters() throws Exception JavaDoc {
351
352         if (OpenCms.getModuleManager().getModule(getParamModule()) == null) {
353             // just throw a dummy exception here since getModule does not produce an exception when a
354
// module is not found
355
throw new Exception JavaDoc();
356         }
357     }
358
359     /**
360      * Deletes a module dependency from a module.<p>
361      *
362      * @param module the module to delete the dependency from
363      * @param dependencyName the name of the dependcency to delete
364      */

365     private void deleteDependency(CmsModule module, String JavaDoc dependencyName) {
366
367         List JavaDoc oldDependencies = module.getDependencies();
368         List JavaDoc newDependencies = new ArrayList JavaDoc();
369         Iterator JavaDoc i = oldDependencies.iterator();
370         while (i.hasNext()) {
371             CmsModuleDependency dep = (CmsModuleDependency)i.next();
372             if (!dep.getName().equals(dependencyName)) {
373                 newDependencies.add(dep);
374             }
375         }
376         module.setDependencies(newDependencies);
377         // update the module information
378
try {
379             OpenCms.getModuleManager().updateModule(getCms(), module);
380         } catch (CmsConfigurationException ce) {
381             // should never happen
382
throw new CmsRuntimeException(Messages.get().container(
383                 Messages.ERR_ACTION_DEPENDENCIES_DELETE_2,
384                 dependencyName,
385                 module.getName()), ce);
386
387         } catch (CmsRoleViolationException re) {
388             throw new CmsRuntimeException(Messages.get().container(
389                 Messages.ERR_ACTION_DEPENDENCIES_DELETE_2,
390                 dependencyName,
391                 module.getName()), re);
392         }
393         getList().removeItem(dependencyName, getLocale());
394     }
395 }
Popular Tags