KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > opencms > workplace > tools > accounts > CmsGroupTransferList


1 /*
2  * File : $Source: /usr/local/cvs/opencms/src-modules/org/opencms/workplace/tools/accounts/CmsGroupTransferList.java,v $
3  * Date : $Date: 2006/03/27 14:52:49 $
4  * Version: $Revision: 1.3 $
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.accounts;
33
34 import org.opencms.file.CmsGroup;
35 import org.opencms.file.CmsUser;
36 import org.opencms.jsp.CmsJspActionElement;
37 import org.opencms.main.CmsException;
38 import org.opencms.main.CmsRuntimeException;
39 import org.opencms.security.CmsPrincipal;
40 import org.opencms.util.CmsRequestUtil;
41 import org.opencms.util.CmsStringUtil;
42 import org.opencms.util.CmsUUID;
43 import org.opencms.workplace.list.A_CmsListDialog;
44 import org.opencms.workplace.list.CmsHtmlList;
45 import org.opencms.workplace.list.CmsListColumnAlignEnum;
46 import org.opencms.workplace.list.CmsListColumnDefinition;
47 import org.opencms.workplace.list.CmsListDefaultAction;
48 import org.opencms.workplace.list.CmsListDirectAction;
49 import org.opencms.workplace.list.CmsListItem;
50 import org.opencms.workplace.list.CmsListItemDetails;
51 import org.opencms.workplace.list.CmsListItemDetailsFormatter;
52 import org.opencms.workplace.list.CmsListMetadata;
53 import org.opencms.workplace.list.CmsListOrderEnum;
54
55 import java.io.IOException JavaDoc;
56 import java.util.ArrayList JavaDoc;
57 import java.util.HashSet JavaDoc;
58 import java.util.Iterator JavaDoc;
59 import java.util.List JavaDoc;
60 import java.util.Set JavaDoc;
61
62 import javax.servlet.ServletException JavaDoc;
63 import javax.servlet.http.HttpServletRequest JavaDoc;
64 import javax.servlet.http.HttpServletResponse JavaDoc;
65 import javax.servlet.jsp.PageContext JavaDoc;
66
67 /**
68  * Allows to select a group to transfer the permissions and attributes from another one.<p>
69  *
70  * @author Michael Moossen
71  *
72  * @version $Revision: 1.3 $
73  *
74  * @since 6.0.0
75  */

76 public class CmsGroupTransferList extends A_CmsListDialog {
77
78     /** list action id constant. */
79     public static final String JavaDoc LIST_ACTION_TRANSFER = "at";
80
81     /** list column id constant. */
82     public static final String JavaDoc LIST_COLUMN_DESCRIPTION = "cc";
83
84     /** list column id constant. */
85     public static final String JavaDoc LIST_COLUMN_NAME = "cn";
86
87     /** list column id constant. */
88     public static final String JavaDoc LIST_COLUMN_PARENT = "cp";
89
90     /** list column id constant. */
91     public static final String JavaDoc LIST_COLUMN_TRANSFER = "ct";
92
93     /** list column id constant. */
94     public static final String JavaDoc LIST_COLUMN_USERS = "cu";
95
96     /** list action id constant. */
97     public static final String JavaDoc LIST_DEFACTION_TRANSFER = "dt";
98
99     /** list item detail id constant. */
100     public static final String JavaDoc LIST_DETAIL_CHILDS = "dc";
101
102     /** list item detail id constant. */
103     public static final String JavaDoc LIST_DETAIL_USERS = "du";
104
105     /** List id constant. */
106     public static final String JavaDoc LIST_ID = "lgt";
107
108     /** Stores the value of the group name, could be a list of names. */
109     private String JavaDoc m_groupName;
110
111     /** Stores the value of the request parameter for the group id, could be a list of ids. */
112     private String JavaDoc m_paramGroupid;
113
114     /**
115      * Public constructor.<p>
116      *
117      * @param jsp an initialized JSP action element
118      */

119     public CmsGroupTransferList(CmsJspActionElement jsp) {
120
121         this(LIST_ID, jsp);
122     }
123
124     /**
125      * Public constructor with JSP variables.<p>
126      *
127      * @param context the JSP page context
128      * @param req the JSP request
129      * @param res the JSP response
130      */

131     public CmsGroupTransferList(PageContext JavaDoc context, HttpServletRequest JavaDoc req, HttpServletResponse JavaDoc res) {
132
133         this(new CmsJspActionElement(context, req, res));
134     }
135
136     /**
137      * Protected constructor.<p>
138      *
139      * @param listId the id of the specialized list
140      * @param jsp an initialized JSP action element
141      */

142     protected CmsGroupTransferList(String JavaDoc listId, CmsJspActionElement jsp) {
143
144         super(
145             jsp,
146             listId,
147             Messages.get().container(Messages.GUI_GROUPS_TRANSFER_LIST_NAME_0),
148             LIST_COLUMN_NAME,
149             CmsListOrderEnum.ORDER_ASCENDING,
150             LIST_COLUMN_NAME);
151     }
152
153     /**
154      * This method should handle every defined list multi action,
155      * by comparing <code>{@link #getParamListAction()}</code> with the id
156      * of the action to execute.<p>
157      *
158      * @throws CmsRuntimeException to signal that an action is not supported
159      *
160      */

161     public void executeListMultiActions() throws CmsRuntimeException {
162
163         throwListUnsupportedActionException();
164     }
165
166     /**
167      * @see org.opencms.workplace.list.A_CmsListDialog#executeListSingleActions()
168      */

169     public void executeListSingleActions() throws IOException JavaDoc, ServletException JavaDoc, CmsRuntimeException {
170
171         if (getParamListAction().equals(LIST_DEFACTION_TRANSFER) || getParamListAction().equals(LIST_ACTION_TRANSFER)) {
172             try {
173                 getCms().deleteGroup(new CmsUUID(getParamGroupid()), new CmsUUID(getSelectedItem().getId()));
174                 CmsRequestUtil.forwardRequest(getParamCloseLink(), getJsp().getRequest(), getJsp().getResponse());
175                 setForwarded(true);
176             } catch (CmsException e) {
177                 throw new CmsRuntimeException(Messages.get().container(
178                     Messages.ERR_TRANSFER_GROUP_1,
179                     getSelectedItem().get(LIST_COLUMN_NAME)), e);
180             }
181         } else {
182             throwListUnsupportedActionException();
183         }
184         listSave();
185     }
186
187     /**
188      * Returns the group Name.<p>
189      *
190      * @return the group Name
191      */

192     public String JavaDoc getGroupName() {
193
194         return m_groupName;
195     }
196
197     /**
198      * Returns the group id parameter value.<p>
199      *
200      * @return the group id parameter value
201      */

202     public String JavaDoc getParamGroupid() {
203
204         return m_paramGroupid;
205     }
206
207     /**
208      * Sets the group id parameter value.<p>
209      *
210      * @param groupId the group id parameter value
211      */

212     public void setParamGroupid(String JavaDoc groupId) {
213
214         m_paramGroupid = groupId;
215     }
216
217     /**
218      * @see org.opencms.workplace.list.A_CmsListDialog#customHtmlStart()
219      */

220     protected String JavaDoc customHtmlStart() {
221
222         StringBuffer JavaDoc result = new StringBuffer JavaDoc(2048);
223         result.append(dialogBlockStart(Messages.get().container(Messages.GUI_GROUPS_TRANSFER_NOTICE_0).key(getLocale())));
224         result.append("\n");
225         if (getCurrentToolPath().indexOf("/edit/") < 0) {
226             result.append(key(Messages.GUI_GROUP_DEPENDENCIES_SELECTED_GROUPS_0));
227             result.append(":<br>\n");
228             List users = CmsStringUtil.splitAsList(getGroupName(), CmsHtmlList.ITEM_SEPARATOR, true);
229             result.append("<ul>\n");
230             Iterator JavaDoc it = users.iterator();
231             while (it.hasNext()) {
232                 String JavaDoc name = (String JavaDoc)it.next();
233                 result.append("<li>");
234                 result.append(name);
235                 result.append("</li>\n");
236             }
237             result.append("</ul>\n");
238         }
239         result.append(key(Messages.GUI_GROUPS_TRANSFER_NOTICE_TEXT_0));
240         result.append(dialogBlockEnd());
241         return result.toString();
242     }
243
244     /**
245      * @see org.opencms.workplace.list.A_CmsListDialog#fillDetails(java.lang.String)
246      */

247     protected void fillDetails(String JavaDoc detailId) {
248
249         // get content
250
List groups = getList().getAllContent();
251         Iterator JavaDoc itGroups = groups.iterator();
252         while (itGroups.hasNext()) {
253             CmsListItem item = (CmsListItem)itGroups.next();
254             String JavaDoc groupName = item.get(LIST_COLUMN_NAME).toString();
255             StringBuffer JavaDoc html = new StringBuffer JavaDoc(512);
256             try {
257                 if (detailId.equals(LIST_DETAIL_USERS)) {
258                     // users
259
Iterator JavaDoc itUsers = getCms().getUsersOfGroup(groupName).iterator();
260                     while (itUsers.hasNext()) {
261                         html.append(((CmsUser)itUsers.next()).getFullName());
262                         if (itUsers.hasNext()) {
263                             html.append("<br>");
264                         }
265                         html.append("\n");
266                     }
267                 } else if (detailId.equals(LIST_DETAIL_CHILDS)) {
268                     // childs
269
Iterator JavaDoc itChilds = getCms().getChild(groupName).iterator();
270                     while (itChilds.hasNext()) {
271                         html.append(((CmsGroup)itChilds.next()).getName());
272                         if (itChilds.hasNext()) {
273                             html.append("<br>");
274                         }
275                         html.append("\n");
276                     }
277                 } else {
278                     continue;
279                 }
280             } catch (Exception JavaDoc e) {
281                 // ignore
282
}
283             item.set(detailId, html.toString());
284         }
285     }
286
287     /**
288      * Returns the list of groups to display.<p>
289      *
290      * @return the list of groups to display
291      *
292      * @throws CmsException if something goes wrong
293      */

294     protected List getGroups() throws CmsException {
295
296         return CmsPrincipal.filterCore(getCms().getGroups());
297     }
298
299     /**
300      * @see org.opencms.workplace.list.A_CmsListDialog#getListItems()
301      */

302     protected List getListItems() throws CmsException {
303
304         List ret = new ArrayList JavaDoc();
305         // get content
306
List groups = getGroups();
307         Set JavaDoc selGroups = new HashSet JavaDoc(CmsStringUtil.splitAsList(getParamGroupid(), CmsHtmlList.ITEM_SEPARATOR, true));
308         Iterator JavaDoc itGroups = groups.iterator();
309         while (itGroups.hasNext()) {
310             CmsGroup group = (CmsGroup)itGroups.next();
311             if (selGroups.contains(group.getId().toString())) {
312                 continue;
313             }
314             CmsListItem item = getList().newItem(group.getId().toString());
315             item.set(LIST_COLUMN_NAME, group.getName());
316             item.set(LIST_COLUMN_DESCRIPTION, group.getDescription());
317             try {
318                 item.set(LIST_COLUMN_PARENT, getCms().readGroup(group.getParentId()).getName());
319             } catch (Exception JavaDoc e) {
320                 // ignore
321
}
322             ret.add(item);
323         }
324
325         return ret;
326     }
327
328     /**
329      * @see org.opencms.workplace.CmsWorkplace#initMessages()
330      */

331     protected void initMessages() {
332
333         // add specific dialog resource bundle
334
addMessages(Messages.get().getBundleName());
335         // add default resource bundles
336
super.initMessages();
337     }
338
339     /**
340      * @see org.opencms.workplace.list.A_CmsListDialog#setColumns(org.opencms.workplace.list.CmsListMetadata)
341      */

342     protected void setColumns(CmsListMetadata metadata) {
343
344         // create column for transfer
345
CmsListColumnDefinition transferCol = new CmsListColumnDefinition(LIST_COLUMN_TRANSFER);
346         transferCol.setName(Messages.get().container(Messages.GUI_GROUPS_TRANSFER_LIST_COLS_TRANSFER_0));
347         transferCol.setHelpText(Messages.get().container(Messages.GUI_GROUPS_TRANSFER_LIST_COLS_TRANSFER_HELP_0));
348         transferCol.setWidth("20");
349         transferCol.setAlign(CmsListColumnAlignEnum.ALIGN_CENTER);
350         transferCol.setSorteable(false);
351
352         // add transfer action
353
setTransferAction(transferCol);
354         // add it to the list definition
355
metadata.addColumn(transferCol);
356
357         // create column for name
358
CmsListColumnDefinition nameCol = new CmsListColumnDefinition(LIST_COLUMN_NAME);
359         nameCol.setName(Messages.get().container(Messages.GUI_GROUPS_LIST_COLS_NAME_0));
360         nameCol.setWidth("20%");
361
362         // create default transfer action
363
CmsListDefaultAction defTransferAction = new CmsListDefaultAction(LIST_DEFACTION_TRANSFER);
364         defTransferAction.setName(Messages.get().container(Messages.GUI_GROUPS_TRANSFER_LIST_DEFACTION_TRANSFER_NAME_0));
365         defTransferAction.setHelpText(Messages.get().container(
366             Messages.GUI_GROUPS_TRANSFER_LIST_DEFACTION_TRANSFER_HELP_0));
367         nameCol.addDefaultAction(defTransferAction);
368
369         // add it to the list definition
370
metadata.addColumn(nameCol);
371
372         // add column for description
373
CmsListColumnDefinition descriptionCol = new CmsListColumnDefinition(LIST_COLUMN_DESCRIPTION);
374         descriptionCol.setName(Messages.get().container(Messages.GUI_GROUPS_LIST_COLS_DESCRIPTION_0));
375         descriptionCol.setWidth("60%");
376         metadata.addColumn(descriptionCol);
377
378         // add column for parent
379
CmsListColumnDefinition parentCol = new CmsListColumnDefinition(LIST_COLUMN_PARENT);
380         parentCol.setName(Messages.get().container(Messages.GUI_GROUPS_LIST_COLS_PARENT_0));
381         parentCol.setWidth("20%");
382         metadata.addColumn(parentCol);
383     }
384
385     /**
386      * Sets the icon actions for the transfer list.<p>
387      *
388      * @param transferCol the column to set the action
389      */

390     protected void setTransferAction(CmsListColumnDefinition transferCol) {
391
392         CmsListDirectAction transferAction = new CmsListDirectAction(LIST_ACTION_TRANSFER);
393         transferAction.setName(Messages.get().container(Messages.GUI_GROUPS_TRANSFER_LIST_ACTION_TRANSFER_NAME_0));
394         transferAction.setHelpText(Messages.get().container(Messages.GUI_GROUPS_TRANSFER_LIST_ACTION_TRANSFER_HELP_0));
395         transferAction.setIconPath(A_CmsUsersList.PATH_BUTTONS + "group.png");
396         transferCol.addDirectAction(transferAction);
397     }
398
399     /**
400      * @see org.opencms.workplace.list.A_CmsListDialog#setIndependentActions(org.opencms.workplace.list.CmsListMetadata)
401      */

402     protected void setIndependentActions(CmsListMetadata metadata) {
403
404         // add user users details
405
CmsListItemDetails usersDetails = new CmsListItemDetails(LIST_DETAIL_USERS);
406         usersDetails.setAtColumn(LIST_COLUMN_NAME);
407         usersDetails.setVisible(false);
408         usersDetails.setShowActionName(Messages.get().container(Messages.GUI_GROUPS_DETAIL_SHOW_USERS_NAME_0));
409         usersDetails.setShowActionHelpText(Messages.get().container(Messages.GUI_GROUPS_DETAIL_SHOW_USERS_HELP_0));
410         usersDetails.setHideActionName(Messages.get().container(Messages.GUI_GROUPS_DETAIL_HIDE_USERS_NAME_0));
411         usersDetails.setHideActionHelpText(Messages.get().container(Messages.GUI_GROUPS_DETAIL_HIDE_USERS_HELP_0));
412         usersDetails.setName(Messages.get().container(Messages.GUI_GROUPS_DETAIL_USERS_NAME_0));
413         usersDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container(
414             Messages.GUI_GROUPS_DETAIL_USERS_NAME_0)));
415         metadata.addItemDetails(usersDetails);
416
417         // add user childs details
418
CmsListItemDetails childDetails = new CmsListItemDetails(LIST_DETAIL_CHILDS);
419         childDetails.setAtColumn(LIST_COLUMN_NAME);
420         childDetails.setVisible(false);
421         childDetails.setShowActionName(Messages.get().container(Messages.GUI_GROUPS_DETAIL_SHOW_CHILDS_NAME_0));
422         childDetails.setShowActionHelpText(Messages.get().container(Messages.GUI_GROUPS_DETAIL_SHOW_CHILDS_HELP_0));
423         childDetails.setHideActionName(Messages.get().container(Messages.GUI_GROUPS_DETAIL_HIDE_CHILDS_NAME_0));
424         childDetails.setHideActionHelpText(Messages.get().container(Messages.GUI_GROUPS_DETAIL_HIDE_CHILDS_HELP_0));
425         childDetails.setName(Messages.get().container(Messages.GUI_GROUPS_DETAIL_CHILDS_NAME_0));
426         childDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container(
427             Messages.GUI_GROUPS_DETAIL_CHILDS_NAME_0)));
428         metadata.addItemDetails(childDetails);
429     }
430
431     /**
432      * @see org.opencms.workplace.list.A_CmsListDialog#setMultiActions(org.opencms.workplace.list.CmsListMetadata)
433      */

434     protected void setMultiActions(CmsListMetadata metadata) {
435
436         // no-op
437
}
438
439     /**
440      * @see org.opencms.workplace.list.A_CmsListDialog#validateParamaters()
441      */

442     protected void validateParamaters() throws Exception JavaDoc {
443
444         // test the needed parameters
445
m_groupName = "";
446         Iterator JavaDoc itGroups = CmsStringUtil.splitAsList(getParamGroupid(), CmsHtmlList.ITEM_SEPARATOR, true).iterator();
447         while (itGroups.hasNext()) {
448             CmsUUID id = new CmsUUID(itGroups.next().toString());
449             m_groupName += getCms().readGroup(id).getName();
450             if (itGroups.hasNext()) {
451                 m_groupName += CmsHtmlList.ITEM_SEPARATOR;
452             }
453         }
454     }
455 }
Popular Tags