KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * File : $Source: /usr/local/cvs/opencms/src-modules/org/opencms/workplace/tools/accounts/CmsUserDependenciesList.java,v $
3  * Date : $Date: 2006/03/28 10:13:29 $
4  * Version: $Revision: 1.4 $
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.CmsResource;
35 import org.opencms.file.CmsUser;
36 import org.opencms.i18n.CmsMessageContainer;
37 import org.opencms.jsp.CmsJspActionElement;
38 import org.opencms.main.CmsException;
39 import org.opencms.main.CmsRuntimeException;
40 import org.opencms.security.CmsAccessControlEntry;
41 import org.opencms.util.CmsIdentifiableObjectContainer;
42 import org.opencms.util.CmsStringUtil;
43 import org.opencms.util.CmsUUID;
44 import org.opencms.workplace.CmsDialog;
45 import org.opencms.workplace.CmsWorkplaceSettings;
46 import org.opencms.workplace.list.A_CmsListDialog;
47 import org.opencms.workplace.list.CmsHtmlList;
48 import org.opencms.workplace.list.CmsListColumnAlignEnum;
49 import org.opencms.workplace.list.CmsListColumnDefinition;
50 import org.opencms.workplace.list.CmsListDirectAction;
51 import org.opencms.workplace.list.CmsListItem;
52 import org.opencms.workplace.list.CmsListItemActionIconComparator;
53 import org.opencms.workplace.list.CmsListMetadata;
54 import org.opencms.workplace.list.CmsListOrderEnum;
55
56 import java.io.IOException JavaDoc;
57 import java.util.HashMap JavaDoc;
58 import java.util.Iterator JavaDoc;
59 import java.util.List JavaDoc;
60 import java.util.Map 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.JspException JavaDoc;
66 import javax.servlet.jsp.PageContext JavaDoc;
67
68 /**
69  * User dependencies list view. <p>
70  *
71  * displays the dependencies of a user or a list of user.<p>
72  *
73  * @author Michael Moossen
74  *
75  * @version $Revision: 1.4 $
76  *
77  * @since 6.0.0
78  */

79 public class CmsUserDependenciesList extends A_CmsListDialog {
80
81     /** Value for the delete action. */
82     public static final int ACTION_DELETE = 121;
83
84     /** Value for the transfer action. */
85     public static final int ACTION_TRANSFER = 122;
86
87     /** Request parameter value for the delete action. */
88     public static final String JavaDoc DELETE_ACTION = "delete";
89
90     /** list action id constant. */
91     public static final String JavaDoc LIST_ACTION_ICON = "ai";
92
93     /** list column id constant. */
94     public static final String JavaDoc LIST_COLUMN_CREATED = "cc";
95
96     /** list column id constant. */
97     public static final String JavaDoc LIST_COLUMN_ICON = "ci";
98
99     /** list column id constant. */
100     public static final String JavaDoc LIST_COLUMN_LASTMODIFIED = "cl";
101
102     /** list column id constant. */
103     public static final String JavaDoc LIST_COLUMN_NAME = "cn";
104
105     /** list column id constant. */
106     public static final String JavaDoc LIST_COLUMN_TYPE = "ct";
107
108     /** list column id constant. */
109     public static final String JavaDoc LIST_COLUMN_PERMISSIONS = "cp";
110
111     /** List id constant. */
112     public static final String JavaDoc LIST_ID = "lud";
113
114     /** Request parameter name for the user id, could be a list of ids. */
115     public static final String JavaDoc PARAM_USERID = "userid";
116
117     /** Path to the list buttons. */
118     public static final String JavaDoc PATH_BUTTONS = "tools/accounts/buttons/";
119
120     /** Request parameter value for the transfer action. */
121     public static final String JavaDoc TRANSFER_ACTION = "transfer";
122
123     /** Stores the value of the request parameter for the user id, could be a list of ids. */
124     private String JavaDoc m_paramUserid;
125
126     /** Stores the value of the user name, could be a list of names. */
127     private String JavaDoc m_userName;
128
129     /**
130      * Public constructor.<p>
131      *
132      * @param jsp an initialized JSP action element
133      */

134     public CmsUserDependenciesList(CmsJspActionElement jsp) {
135
136         this(LIST_ID, jsp);
137     }
138
139     /**
140      * Public constructor with JSP variables.<p>
141      *
142      * @param context the JSP page context
143      * @param req the JSP request
144      * @param res the JSP response
145      */

146     public CmsUserDependenciesList(PageContext JavaDoc context, HttpServletRequest JavaDoc req, HttpServletResponse JavaDoc res) {
147
148         this(new CmsJspActionElement(context, req, res));
149     }
150
151     /**
152      * Protected constructor.<p>
153      *
154      * @param listId the id of the specialized list
155      * @param jsp an initialized JSP action element
156      */

157     protected CmsUserDependenciesList(String JavaDoc listId, CmsJspActionElement jsp) {
158
159         super(
160             jsp,
161             listId,
162             Messages.get().container(Messages.GUI_USER_DEPENDENCIES_LIST_NAME_0),
163             LIST_COLUMN_NAME,
164             CmsListOrderEnum.ORDER_ASCENDING,
165             LIST_COLUMN_NAME);
166     }
167
168     /**
169      * @see org.opencms.workplace.list.A_CmsListDialog#actionDialog()
170      */

171     public void actionDialog() throws JspException JavaDoc, ServletException JavaDoc, IOException JavaDoc {
172
173         switch (getAction()) {
174             case ACTION_DELETE:
175                 Iterator JavaDoc it = CmsStringUtil.splitAsList(getUserName(), CmsHtmlList.ITEM_SEPARATOR, true).iterator();
176                 while (it.hasNext()) {
177                     String JavaDoc name = (String JavaDoc)it.next();
178                     try {
179                         getCms().deleteUser(name);
180                     } catch (CmsException e) {
181                         throw new CmsRuntimeException(e.getMessageContainer(), e);
182                     }
183                 }
184                 setAction(ACTION_CANCEL);
185                 actionCloseDialog();
186                 break;
187             case ACTION_TRANSFER:
188                 Map JavaDoc params = new HashMap JavaDoc();
189                 // set action parameter to initial dialog call
190
params.put(CmsDialog.PARAM_ACTION, CmsDialog.DIALOG_INITIAL);
191                 // forward to the select replacement screen
192
params.put(PARAM_USERID, getParamUserid());
193                 getToolManager().jspForwardPage(
194                     this,
195                     getJsp().getRequestContext().getFolderUri() + "user_transfer.jsp",
196                     params);
197                 break;
198
199             default:
200                 super.actionDialog();
201         }
202     }
203
204     /**
205      * @see org.opencms.workplace.list.A_CmsListDialog#defaultActionHtmlContent()
206      */

207     public String JavaDoc defaultActionHtmlContent() {
208
209         if (getList().getTotalSize() > 0) {
210             return super.defaultActionHtmlContent();
211         }
212         return "";
213     }
214
215     /**
216      * @see org.opencms.workplace.list.A_CmsListDialog#executeListMultiActions()
217      */

218     public void executeListMultiActions() {
219
220         throwListUnsupportedActionException();
221     }
222
223     /**
224      * @see org.opencms.workplace.list.A_CmsListDialog#executeListSingleActions()
225      */

226     public void executeListSingleActions() {
227
228         throwListUnsupportedActionException();
229     }
230
231     /**
232      * Returns the user id parameter value.<p>
233      *
234      * @return the user id parameter value
235      */

236     public String JavaDoc getParamUserid() {
237
238         return m_paramUserid;
239     }
240
241     /**
242      * Returns the user Name.<p>
243      *
244      * @return the user Name
245      */

246     public String JavaDoc getUserName() {
247
248         return m_userName;
249     }
250
251     /**
252      * Sets the user id parameter value.<p>
253      *
254      * @param userId the user id parameter value
255      */

256     public void setParamUserid(String JavaDoc userId) {
257
258         m_paramUserid = userId;
259     }
260
261     /**
262      * @see org.opencms.workplace.list.A_CmsListDialog#customHtmlEnd()
263      */

264     protected String JavaDoc customHtmlEnd() {
265
266         StringBuffer JavaDoc result = new StringBuffer JavaDoc(512);
267         result.append(super.customHtmlEnd());
268         result.append("<form name='actions' method='post' action='");
269         result.append(getDialogRealUri());
270         result.append("' class='nomargin' onsubmit=\"return submitAction('ok', null, 'actions');\">\n");
271         result.append(allParamsAsHidden());
272         result.append(dialogButtonRow(HTML_START));
273         result.append("<input name='");
274         result.append(DELETE_ACTION);
275         result.append("' type='button' value='");
276         result.append(Messages.get().container(Messages.GUI_DEPENDENCIES_BUTTON_DELETE_0).key(getLocale()));
277         result.append("' onclick=\"submitAction('");
278         result.append(DELETE_ACTION);
279         result.append("', form);\" class='dialogbutton'>\n");
280         if (getList().getTotalSize() > 0) {
281             result.append("<input name='");
282             result.append(TRANSFER_ACTION);
283             result.append("' type='button' value='");
284             result.append(Messages.get().container(Messages.GUI_DEPENDENCIES_BUTTON_TRANSFER_0).key(getLocale()));
285             result.append("' onclick=\"submitAction('");
286             result.append(TRANSFER_ACTION);
287             result.append("', form);\" class='dialogbutton'>\n");
288         }
289         dialogButtonsHtml(result, BUTTON_CANCEL, "");
290         result.append(dialogButtonRow(HTML_END));
291         result.append("</form>\n");
292         return result.toString();
293     }
294
295     /**
296      * @see org.opencms.workplace.list.A_CmsListDialog#customHtmlStart()
297      */

298     protected String JavaDoc customHtmlStart() {
299
300         StringBuffer JavaDoc result = new StringBuffer JavaDoc(512);
301         result.append(dialogBlockStart(Messages.get().container(Messages.GUI_USER_DEPENDENCIES_NOTICE_0).key(
302             getLocale())));
303         result.append("\n");
304         if (getCurrentToolPath().indexOf("/edit/") < 0) {
305             result.append(key(Messages.GUI_USER_DEPENDENCIES_SELECTED_USERS_0));
306             result.append(":<br>\n");
307             List users = CmsStringUtil.splitAsList(getUserName(), CmsHtmlList.ITEM_SEPARATOR, true);
308             result.append("<ul>\n");
309             Iterator JavaDoc it = users.iterator();
310             while (it.hasNext()) {
311                 String JavaDoc name = (String JavaDoc)it.next();
312                 result.append("<li>");
313                 result.append(name);
314                 result.append("</li>\n");
315             }
316             result.append("</ul>\n");
317         }
318         if (getList().getTotalSize() > 0) {
319             result.append(key(Messages.GUI_USER_DEPENDENCIES_NOTICE_TEXT_0));
320         } else {
321             result.append(key(Messages.GUI_USER_DEPENDENCIES_DELETE_0));
322         }
323         result.append(dialogBlockEnd());
324         return result.toString();
325     }
326
327     /**
328      * @see org.opencms.workplace.list.A_CmsListDialog#fillDetails(java.lang.String)
329      */

330     protected void fillDetails(String JavaDoc detailId) {
331
332         // no-op
333
}
334
335     /**
336      * @see org.opencms.workplace.list.A_CmsListDialog#getListItems()
337      */

338     protected List getListItems() throws CmsException {
339
340         CmsIdentifiableObjectContainer ret = new CmsIdentifiableObjectContainer(true, false);
341         Iterator JavaDoc itUsers = CmsStringUtil.splitAsList(getParamUserid(), CmsHtmlList.ITEM_SEPARATOR, true).iterator();
342         getCms().getRequestContext().saveSiteRoot();
343         getCms().getRequestContext().setSiteRoot("/");
344         while (itUsers.hasNext()) {
345             CmsUser user = getCms().readUser(new CmsUUID(itUsers.next().toString()));
346             // get content
347
List resources = getCms().getResourcesForPrincipal(user.getId(), null, true);
348             Iterator JavaDoc itRes = resources.iterator();
349             while (itRes.hasNext()) {
350                 CmsResource resource = (CmsResource)itRes.next();
351                 CmsListItem item = (CmsListItem)ret.getObject(resource.getResourceId().toString());
352                 if (item == null) {
353                     item = getList().newItem(resource.getResourceId().toString());
354                     item.set(LIST_COLUMN_NAME, resource.getRootPath());
355                     item.set(LIST_COLUMN_TYPE, new Integer JavaDoc(resource.getTypeId()));
356                     item.set(LIST_COLUMN_CREATED, getCms().readUser(resource.getUserCreated()).getFullName());
357                     item.set(LIST_COLUMN_LASTMODIFIED, getCms().readUser(resource.getUserLastModified()).getFullName());
358                     Iterator JavaDoc itAces = getCms().getAccessControlEntries(resource.getRootPath(), false).iterator();
359                     while (itAces.hasNext()) {
360                         CmsAccessControlEntry ace = (CmsAccessControlEntry)itAces.next();
361                         if (ace.getPrincipal().equals(user.getId())) {
362                             if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(ace.getPermissions().getPermissionString())) {
363                                 item.set(LIST_COLUMN_PERMISSIONS, user.getName()
364                                     + ": "
365                                     + ace.getPermissions().getPermissionString());
366                             }
367                             break;
368                         }
369                     }
370                     ret.addIdentifiableObject(item.getId(), item);
371                 } else {
372                     String JavaDoc oldData = (String JavaDoc)item.get(LIST_COLUMN_PERMISSIONS);
373                     Iterator JavaDoc itAces = getCms().getAccessControlEntries(resource.getRootPath(), false).iterator();
374                     while (itAces.hasNext()) {
375                         CmsAccessControlEntry ace = (CmsAccessControlEntry)itAces.next();
376                         if (ace.getPrincipal().equals(user.getId())) {
377                             if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(ace.getPermissions().getPermissionString())) {
378                                 String JavaDoc data = user.getName() + ": " + ace.getPermissions().getPermissionString();
379                                 if (oldData != null) {
380                                     data = oldData + ", " + data;
381                                 }
382                                 item.set(LIST_COLUMN_PERMISSIONS, data);
383                             }
384                             break;
385                         }
386                     }
387                 }
388             }
389         }
390         getCms().getRequestContext().restoreSiteRoot();
391         return ret.elementList();
392     }
393
394     /**
395      * @see org.opencms.workplace.CmsWorkplace#initMessages()
396      */

397     protected void initMessages() {
398
399         // add specific dialog resource bundle
400
addMessages(Messages.get().getBundleName());
401         // add cms dialog resource bundle
402
addMessages(org.opencms.workplace.Messages.get().getBundleName());
403         // add default resource bundles
404
super.initMessages();
405     }
406
407     /**
408      * @see org.opencms.workplace.list.A_CmsListDialog#initWorkplaceRequestValues(org.opencms.workplace.CmsWorkplaceSettings, javax.servlet.http.HttpServletRequest)
409      */

410     protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest JavaDoc request) {
411
412         super.initWorkplaceRequestValues(settings, request);
413         if (DELETE_ACTION.equals(getParamAction())) {
414             setAction(ACTION_DELETE);
415         } else if (TRANSFER_ACTION.equals(getParamAction())) {
416             setAction(ACTION_TRANSFER);
417         }
418     }
419
420     /**
421      * @see org.opencms.workplace.list.A_CmsListDialog#setColumns(org.opencms.workplace.list.CmsListMetadata)
422      */

423     protected void setColumns(CmsListMetadata metadata) {
424
425         // create column for icon
426
CmsListColumnDefinition iconCol = new CmsListColumnDefinition(LIST_COLUMN_ICON);
427         iconCol.setName(Messages.get().container(Messages.GUI_USER_DEPENDENCIES_LIST_COLS_ICON_0));
428         iconCol.setWidth("20");
429         iconCol.setAlign(CmsListColumnAlignEnum.ALIGN_CENTER);
430         iconCol.setListItemComparator(new CmsListItemActionIconComparator());
431
432         // add icon action
433
CmsListDirectAction iconAction = new CmsDependencyIconAction(
434             LIST_ACTION_ICON,
435             CmsDependencyIconActionType.RESOURCE,
436             getCms());
437         iconAction.setName(Messages.get().container(Messages.GUI_USER_DEPENDENCIES_LIST_ACTION_ICON_NAME_0));
438         iconAction.setHelpText(Messages.get().container(Messages.GUI_USER_DEPENDENCIES_LIST_ACTION_ICON_HELP_0));
439         iconAction.setEnabled(false);
440         iconCol.addDirectAction(iconAction);
441
442         // add it to the list definition
443
metadata.addColumn(iconCol);
444
445         // add column for name
446
CmsListColumnDefinition nameCol = new CmsListColumnDefinition(LIST_COLUMN_NAME);
447         nameCol.setName(Messages.get().container(Messages.GUI_USER_DEPENDENCIES_LIST_COLS_NAME_0));
448         nameCol.setWidth("50%");
449         metadata.addColumn(nameCol);
450
451         // add column for created by
452
CmsListColumnDefinition createdCol = new CmsListColumnDefinition(LIST_COLUMN_CREATED);
453         createdCol.setName(Messages.get().container(Messages.GUI_USER_DEPENDENCIES_LIST_COLS_CREATED_0));
454         createdCol.setWidth("20%");
455         metadata.addColumn(createdCol);
456
457         // add column for last modified by
458
CmsListColumnDefinition lastModifiedCol = new CmsListColumnDefinition(LIST_COLUMN_LASTMODIFIED);
459         lastModifiedCol.setName(Messages.get().container(Messages.GUI_USER_DEPENDENCIES_LIST_COLS_LASTMODIFIED_0));
460         lastModifiedCol.setWidth("20%");
461         metadata.addColumn(lastModifiedCol);
462
463         // add column for permissions
464
CmsListColumnDefinition permissionsCol = new CmsListColumnDefinition(LIST_COLUMN_PERMISSIONS);
465         permissionsCol.setName(Messages.get().container(Messages.GUI_USER_DEPENDENCIES_LIST_COLS_PERMISSIONS_0));
466         permissionsCol.setWidth("20%");
467         metadata.addColumn(permissionsCol);
468
469         // add column for type
470
CmsListColumnDefinition typeCol = new CmsListColumnDefinition(LIST_COLUMN_TYPE);
471         typeCol.setName(new CmsMessageContainer(null, "type"));
472         typeCol.setVisible(false);
473         metadata.addColumn(typeCol);
474     }
475
476     /**
477      * @see org.opencms.workplace.list.A_CmsListDialog#setIndependentActions(org.opencms.workplace.list.CmsListMetadata)
478      */

479     protected void setIndependentActions(CmsListMetadata metadata) {
480
481         // no-op
482
}
483
484     /**
485      * @see org.opencms.workplace.list.A_CmsListDialog#setMultiActions(org.opencms.workplace.list.CmsListMetadata)
486      */

487     protected void setMultiActions(CmsListMetadata metadata) {
488
489         // no-op
490
}
491
492     /**
493      * @see org.opencms.workplace.list.A_CmsListDialog#validateParamaters()
494      */

495     protected void validateParamaters() throws Exception JavaDoc {
496
497         // test the needed parameters
498
m_userName = "";
499         Iterator JavaDoc itUsers = CmsStringUtil.splitAsList(getParamUserid(), CmsHtmlList.ITEM_SEPARATOR, true).iterator();
500         while (itUsers.hasNext()) {
501             CmsUUID id = new CmsUUID(itUsers.next().toString());
502             m_userName += getCms().readUser(id).getName();
503             if (itUsers.hasNext()) {
504                 m_userName += CmsHtmlList.ITEM_SEPARATOR;
505             }
506         }
507     }
508 }
Popular Tags