/* * This library is part of OpenCms - * the Open Source Content Management System * * Copyright (c) Alkacon Software GmbH (http://www.alkacon.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * For further information about Alkacon Software GmbH, please see the * company website: http://www.alkacon.com * * For further information about OpenCms, please see the * project website: http://www.opencms.org * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.opencms.workplace.tools.accounts; import org.opencms.i18n.CmsMessageContainer; import org.opencms.jsp.CmsJspActionElement; import org.opencms.main.CmsException; import org.opencms.main.OpenCms; import org.opencms.security.CmsOrganizationalUnit; import org.opencms.workplace.CmsDialog; import org.opencms.workplace.list.CmsListColumnAlignEnum; import org.opencms.workplace.list.CmsListColumnDefinition; import org.opencms.workplace.list.CmsListDefaultAction; import org.opencms.workplace.list.CmsListDirectAction; import org.opencms.workplace.list.CmsListMetadata; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.PageContext; /** * Admin organization unit management view.<p> * * @since 6.5.6 */ public class CmsOrgUnitsAdminList extends A_CmsOrgUnitsList { /** list id constant. */ public static final String LIST_ID = "lsoua"; /** list action id constant. */ protected static final String LIST_ACTION_OVERVIEW = "ao"; /** list column id constant. */ protected static final String LIST_COLUMN_OVERVIEW = "co"; /** * Public constructor.<p> * * @param jsp an initialized JSP action element */ public CmsOrgUnitsAdminList(CmsJspActionElement jsp) { super(jsp, LIST_ID, Messages.get().container(Messages.GUI_ADMINORGUNITS_LIST_NAME_0)); } /** * Public constructor with JSP variables.<p> * * @param context the JSP page context * @param req the JSP request * @param res the JSP response */ public CmsOrgUnitsAdminList(PageContext context, HttpServletRequest req, HttpServletResponse res) { this(new CmsJspActionElement(context, req, res)); } /** * * @see org.opencms.workplace.list.A_CmsListDialog#defaultActionHtml() */ public String defaultActionHtml() { if ((getList() != null) && getList().getAllContent().isEmpty()) { // TODO: check the need for this refreshList(); } StringBuffer result = new StringBuffer(2048); result.append(defaultActionHtmlStart()); result.append(customHtmlStart()); try { if (hasMoreAdminOUs()) { result.append(defaultActionHtmlContent()); } } catch (CmsException e) { // noop } result.append(customHtmlEnd()); result.append(defaultActionHtmlEnd()); return result.toString(); } /** * @see org.opencms.workplace.list.A_CmsListDialog#executeListSingleActions() */ public void executeListSingleActions() throws IOException, ServletException { String ouFqn = getSelectedItem().get(LIST_COLUMN_NAME).toString(); if (ouFqn == null) { ouFqn = ""; } Map params = new HashMap(); params.put(A_CmsOrgUnitDialog.PARAM_OUFQN, ouFqn.substring(1)); params.put(CmsDialog.PARAM_ACTION, CmsDialog.DIALOG_INITIAL); if (getParamListAction().equals(LIST_ACTION_OVERVIEW)) { // forward to the edit user screen getToolManager().jspForwardTool(this, getCurrentToolPath() + "/orgunit", params); } else if (getParamListAction().equals(LIST_ACTION_USER)) { // forward to the edit user screen getToolManager().jspForwardTool(this, getUsersToolPath(), params); } else if (getParamListAction().equals(LIST_ACTION_GROUP)) { // forward to the edit user screen getToolManager().jspForwardTool(this, getGroupsToolPath(), params); } else if (getParamListAction().equals(LIST_DEFACTION_OVERVIEW)) { // forward to the edit user screen getToolManager().jspForwardTool(this, getCurrentToolPath() + "/orgunit", params); } else { throwListUnsupportedActionException(); } listSave(); } /** * Performs a forward to the overview of the single organizational unit the current user * is allowed to administrate.<p> * * @throws ServletException in case of errors during forwarding * @throws IOException in case of errors during forwarding * @throws CmsException in case of errors during getting orgunits */ public void forwardToSingleAdminOU() throws ServletException, IOException, CmsException { List orgUnits = getOrgUnits(); if (orgUnits.isEmpty()) { OpenCms.getWorkplaceManager().getToolManager().jspForwardTool(this, "/", null); return; } Map params = new HashMap(); params.put(A_CmsOrgUnitDialog.PARAM_OUFQN, ((CmsOrganizationalUnit)orgUnits.get(0)).getName()); params.put(CmsDialog.PARAM_ACTION, CmsDialog.DIALOG_INITIAL); OpenCms.getWorkplaceManager().getToolManager().jspForwardTool(this, getForwardToolPath(), params); } /** * Returns the path of the overview icon.<p> * * @return the path of the overview icon */ public String getOverviewIcon() { return PATH_BUTTONS + "orgunit.png"; } /** * Checks if the user has more then one organizational unit to administrate.<p> * * @return true if the user has more then then one organizational unit to administrate * otherwise false * @throws CmsException if the organizational units can not be read */ public boolean hasMoreAdminOUs() throws CmsException { List orgUnits = getOrgUnits(); if (orgUnits == null) { return false; } if (orgUnits.size() <= 1) { return false; } return true; } /** * Returns the tool path to forward if there is only one single organizational unit.<p> * * @return the tool path to forward */ protected String getForwardToolPath() { return "/accounts/orgunit"; } /** * Returns the tool path of the groups management tool.<p> * * @return the tool path of the groups management tool */ protected String getGroupsToolPath() { return getCurrentToolPath() + "/orgunit/groups"; } /** * Returns the tool path of the users management tool.<p> * * @return the tool path of the users management tool */ protected String getUsersToolPath() { return getCurrentToolPath() + "/orgunit/users"; } /** * @see org.opencms.workplace.list.A_CmsListDialog#setColumns(org.opencms.workplace.list.CmsListMetadata) */ protected void setColumns(CmsListMetadata metadata) { // create column for overview CmsListColumnDefinition overviewCol = new CmsListColumnDefinition(LIST_COLUMN_OVERVIEW); overviewCol.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_OVERVIEW_0)); overviewCol.setHelpText(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_OVERVIEW_HELP_0)); overviewCol.setWidth("20"); overviewCol.setAlign(CmsListColumnAlignEnum.ALIGN_CENTER); overviewCol.setSorteable(false); // add overview action CmsListDirectAction overviewAction = new CmsListDirectAction(LIST_ACTION_OVERVIEW) { /** * @see org.opencms.workplace.tools.A_CmsHtmlIconButton#getIconPath() */ public String getIconPath() { if (getItem() != null) { if (((Boolean)getItem().get(LIST_COLUMN_WEBUSER)).booleanValue()) { return PATH_BUTTONS + "webuser_ou.png"; } } return super.getIconPath(); } /** * @see org.opencms.workplace.tools.A_CmsHtmlIconButton#getName() */ public CmsMessageContainer getName() { if (getItem() != null) { if (((Boolean)getItem().get(LIST_COLUMN_WEBUSER)).booleanValue()) { return Messages.get().container(Messages.GUI_WEBOUS_LIST_ACTION_OVERVIEW_NAME_0); } } return super.getName(); } }; overviewAction.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_ACTION_OVERVIEW_NAME_0)); overviewAction.setHelpText(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_OVERVIEW_HELP_0)); overviewAction.setIconPath(getOverviewIcon()); overviewCol.addDirectAction(overviewAction); // add it to the list definition metadata.addColumn(overviewCol); // create column for user CmsListColumnDefinition userCol = new CmsListColumnDefinition(LIST_COLUMN_USER); userCol.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_USER_0)); userCol.setHelpText(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_USER_HELP_0)); userCol.setWidth("20"); userCol.setAlign(CmsListColumnAlignEnum.ALIGN_CENTER); userCol.setSorteable(false); // add user action CmsListDirectAction userAction = new CmsListDirectAction(LIST_ACTION_USER); userAction.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_ACTION_USER_NAME_0)); userAction.setHelpText(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_USER_HELP_0)); userAction.setIconPath(getUserIcon()); userCol.addDirectAction(userAction); // add it to the list definition metadata.addColumn(userCol); // create column for group CmsListColumnDefinition groupCol = new CmsListColumnDefinition(LIST_COLUMN_GROUP); groupCol.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_GROUP_0)); groupCol.setHelpText(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_GROUP_HELP_0)); groupCol.setWidth("20"); groupCol.setAlign(CmsListColumnAlignEnum.ALIGN_CENTER); groupCol.setSorteable(false); // add group action CmsListDirectAction groupAction = new CmsListDirectAction(LIST_ACTION_GROUP); groupAction.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_ACTION_GROUP_NAME_0)); groupAction.setHelpText(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_GROUP_HELP_0)); groupAction.setIconPath(getGroupIcon()); groupCol.addDirectAction(groupAction); // add it to the list definition metadata.addColumn(groupCol); // create column for description CmsListColumnDefinition descCol = new CmsListColumnDefinition(LIST_COLUMN_DESCRIPTION); descCol.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_DESCRIPTION_0)); descCol.setWidth("60%"); descCol.setSorteable(true); // create default overview action CmsListDefaultAction defOverviewAction = new CmsListDefaultAction(LIST_DEFACTION_OVERVIEW); defOverviewAction.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_DEFACTION_OVERVIEW_NAME_0)); defOverviewAction.setHelpText(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_OVERVIEW_HELP_0)); descCol.addDefaultAction(defOverviewAction); // add it to the list definition metadata.addColumn(descCol); // create column for name / path CmsListColumnDefinition nameCol = new CmsListColumnDefinition(LIST_COLUMN_NAME); nameCol.setName(Messages.get().container(Messages.GUI_ORGUNITS_LIST_COLS_NAME_0)); nameCol.setWidth("40%"); nameCol.setSorteable(true); // add it to the list definition metadata.addColumn(nameCol); // create column for manageable flag CmsListColumnDefinition adminCol = new CmsListColumnDefinition(LIST_COLUMN_ADMIN); adminCol.setVisible(false); metadata.addColumn(adminCol); // create column for webuser flag CmsListColumnDefinition webuserCol = new CmsListColumnDefinition(LIST_COLUMN_WEBUSER); webuserCol.setVisible(false); metadata.addColumn(webuserCol); } /** * @see org.opencms.workplace.list.A_CmsListDialog#validateParamaters() */ @Override protected void validateParamaters() throws Exception { if (Boolean.parseBoolean(getParamForce())) { if (!hasMoreAdminOUs()) { // jump one level higher throw new Exception(); } } } }