All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.ui.apps.user.CmsOUTable Maven / Gradle / Ivy

/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (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, 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.ui.apps.user;

import org.opencms.file.CmsObject;
import org.opencms.file.CmsResource;
import org.opencms.main.CmsException;
import org.opencms.main.CmsLog;
import org.opencms.main.OpenCms;
import org.opencms.security.CmsOrganizationalUnit;
import org.opencms.security.CmsRole;
import org.opencms.security.CmsRoleViolationException;
import org.opencms.ui.A_CmsUI;
import org.opencms.ui.CmsCssIcon;
import org.opencms.ui.CmsVaadinUtils;
import org.opencms.ui.apps.Messages;
import org.opencms.ui.components.CmsBasicDialog;
import org.opencms.ui.components.CmsBasicDialog.DialogWidth;
import org.opencms.ui.components.OpenCmsTheme;
import org.opencms.ui.contextmenu.CmsContextMenu;
import org.opencms.ui.contextmenu.CmsMenuItemVisibilityMode;
import org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry;
import org.opencms.util.CmsStringUtil;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Set;

import org.apache.commons.logging.Log;

import com.vaadin.server.Resource;
import com.vaadin.shared.MouseEventDetails.MouseButton;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.ValoTheme;
import com.vaadin.v7.data.Item;
import com.vaadin.v7.data.util.IndexedContainer;
import com.vaadin.v7.data.util.filter.Or;
import com.vaadin.v7.data.util.filter.SimpleStringFilter;
import com.vaadin.v7.event.ItemClickEvent;
import com.vaadin.v7.event.ItemClickEvent.ItemClickListener;
import com.vaadin.v7.ui.Table;
import com.vaadin.v7.ui.VerticalLayout;

/**
 * Class to show ous in table for account management.

*/ public class CmsOUTable extends Table implements I_CmsFilterableTable { /** * Menu Entry for Delete option.

*/ class EntryDelete implements I_CmsSimpleContextMenuEntry> { /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#executeAction(java.lang.Object) */ public void executeAction(final Set context) { Window window = CmsBasicDialog.prepareWindow(); CmsDeleteOUDialog dialog = new CmsDeleteOUDialog(m_cms, context.iterator().next(), window, m_app); window.setContent(dialog); window.setCaption(CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_OU_DELETE_0)); A_CmsUI.get().addWindow(window); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getTitle(java.util.Locale) */ public String getTitle(Locale locale) { return CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_OU_DELETE_0); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getVisibility(java.lang.Object) */ public CmsMenuItemVisibilityMode getVisibility(Set context) { if (getItem(context.iterator().next()).getItemProperty(TableProperty.Type).getValue().equals( CmsOuTreeType.OU)) { if (isAdmin()) { return CmsMenuItemVisibilityMode.VISIBILITY_ACTIVE; } return CmsMenuItemVisibilityMode.VISIBILITY_INACTIVE; } return CmsMenuItemVisibilityMode.VISIBILITY_INVISIBLE; } } /** * Edit menu entry.

*/ class EntryEdit implements I_CmsSimpleContextMenuEntry> { /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#executeAction(java.lang.Object) */ public void executeAction(Set context) { Window window = CmsBasicDialog.prepareWindow(); window.setCaption(CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_OU_EDIT_WINDOW_CAPTION_0)); window.setContent(new CmsOUEditDialog(m_cms, context.iterator().next(), window, m_app)); A_CmsUI.get().addWindow(window); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getTitle(java.util.Locale) */ public String getTitle(Locale locale) { return CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_OU_EDIT_0); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getVisibility(java.lang.Object) */ public CmsMenuItemVisibilityMode getVisibility(Set context) { if (getItem(context.iterator().next()).getItemProperty(TableProperty.Type).getValue().equals( CmsOuTreeType.OU)) { if (isAdmin()) { return CmsMenuItemVisibilityMode.VISIBILITY_ACTIVE; } return CmsMenuItemVisibilityMode.VISIBILITY_INACTIVE; } return CmsMenuItemVisibilityMode.VISIBILITY_INVISIBLE; } } /** * Entry for new user in the context menu.

*/ class EntryImportExportUser implements I_CmsSimpleContextMenuEntry> { /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#executeAction(java.lang.Object) */ public void executeAction(Set context) { boolean includeTechnicalFields = false; try { OpenCms.getRoleManager().checkRole(m_cms, CmsRole.ADMINISTRATOR); includeTechnicalFields = true; } catch (CmsRoleViolationException e) { // ok } Window window = CmsBasicDialog.prepareWindow(DialogWidth.wide); window.setCaption(CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_USER_IMEXPORT_DIALOGNAME_0)); window.setContent( CmsImportExportUserDialog.getExportUserDialogForOU( context.iterator().next(), window, includeTechnicalFields)); A_CmsUI.get().addWindow(window); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getTitle(java.util.Locale) */ public String getTitle(Locale locale) { return CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_USER_IMEXPORT_CONTEXTMENUNAME_0); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getVisibility(java.lang.Object) */ public CmsMenuItemVisibilityMode getVisibility(Set context) { if (getItem(context.iterator().next()).getItemProperty(TableProperty.Type).getValue().equals( CmsOuTreeType.OU)) { return CmsMenuItemVisibilityMode.VISIBILITY_ACTIVE; } return CmsMenuItemVisibilityMode.VISIBILITY_INVISIBLE; } } /** * New ou menu entry.

*/ class EntryNewGroup implements I_CmsSimpleContextMenuEntry> { /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#executeAction(java.lang.Object) */ public void executeAction(Set context) { Window window = CmsBasicDialog.prepareWindow(); window.setCaption(CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_ADD_GROUP_0)); window.setContent(new CmsGroupEditDialog(m_cms, window, m_parentOu, m_app)); A_CmsUI.get().addWindow(window); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getTitle(java.util.Locale) */ public String getTitle(Locale locale) { return CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_ADD_GROUP_0); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getVisibility(java.lang.Object) */ public CmsMenuItemVisibilityMode getVisibility(Set context) { Object typeObj = getItem(context.iterator().next()).getItemProperty(TableProperty.Type).getValue(); if (((I_CmsOuTreeType)typeObj).isGroup()) { return CmsMenuItemVisibilityMode.VISIBILITY_ACTIVE; } return CmsMenuItemVisibilityMode.VISIBILITY_INVISIBLE; } } /** * Entry for new user in the context menu.

*/ class EntryNewUser implements I_CmsSimpleContextMenuEntry> { /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#executeAction(java.lang.Object) */ public void executeAction(Set context) { Window window = CmsBasicDialog.prepareWindow(); window.setCaption(CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_ADD_USER_0)); window.setContent(new CmsUserEditDialog(m_cms, window, m_parentOu, m_app)); A_CmsUI.get().addWindow(window); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getTitle(java.util.Locale) */ public String getTitle(Locale locale) { return CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_ADD_USER_0); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getVisibility(java.lang.Object) */ public CmsMenuItemVisibilityMode getVisibility(Set context) { Object typeObj = getItem(context.iterator().next()).getItemProperty(TableProperty.Type).getValue(); if (((I_CmsOuTreeType)typeObj).isUser()) { return CmsMenuItemVisibilityMode.VISIBILITY_ACTIVE; } return CmsMenuItemVisibilityMode.VISIBILITY_INVISIBLE; } } /** * Entry to open item in context menu.

*/ class EntryOpen implements I_CmsSimpleContextMenuEntry>, I_CmsSimpleContextMenuEntry.I_HasCssStyles { /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#executeAction(java.lang.Object) */ public void executeAction(Set context) { String itemId = context.iterator().next(); updateApp(itemId); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry.I_HasCssStyles#getStyles() */ public String getStyles() { return ValoTheme.LABEL_BOLD; } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getTitle(java.util.Locale) */ public String getTitle(Locale locale) { return CmsVaadinUtils.getMessageText(Messages.GUI_USERMANAGEMENT_OPEN_0); } /** * @see org.opencms.ui.contextmenu.I_CmsSimpleContextMenuEntry#getVisibility(java.lang.Object) */ public CmsMenuItemVisibilityMode getVisibility(Set context) { if (m_app != null) { return CmsMenuItemVisibilityMode.VISIBILITY_ACTIVE; } else { return CmsMenuItemVisibilityMode.VISIBILITY_INVISIBLE; } } } /** * Table properties.

*/ enum TableProperty { /** Description property.*/ Description(Messages.GUI_USERMANAGEMENT_OU_DESCRIPTION_0, String.class, ""), /**Icon property. */ Icon(null, Resource.class, new CmsCssIcon(OpenCmsTheme.ICON_OU)), /** Name property. */ Name(Messages.GUI_USERMANAGEMENT_OU_NAME_0, String.class, ""), /** Resources property.*/ Ressources(Messages.GUI_USERMANAGEMENT_OU_EDIT_PANEL2_0, String.class, ""), /** Type property. */ Type(null, I_CmsOuTreeType.class, CmsOuTreeType.OU); /**Default value for column.*/ private Object m_defaultValue; /**Header Message key.*/ private String m_headerMessage; /**Type of column property.*/ private Class m_type; /** * constructor.

* * @param name Name * @param type type * @param defaultValue value */ TableProperty(String name, Class type, Object defaultValue) { m_headerMessage = name; m_type = type; m_defaultValue = defaultValue; } /** * The default value.

* * @return the default value object */ Object getDefault() { return m_defaultValue; } /** * Gets the name of the property.

* * @return a name */ String getName() { return m_headerMessage == null ? "" : CmsVaadinUtils.getMessageText(m_headerMessage); } /** * Gets the type of property.

* * @return the type */ Class getType() { return m_type; } } /** Log instance for this class. */ static final Log LOG = CmsLog.getLog(CmsOUTable.class); /**vaadin serial id. */ private static final long serialVersionUID = -1080519790145391678L; /**Calling app. */ protected CmsAccountsApp m_app; /**Parent ou. */ protected String m_parentOu; /**CmsObject. */ CmsObject m_cms; /** The context menu. */ CmsContextMenu m_menu; /**Indexed container. */ private IndexedContainer m_container; /** The available menu entries. */ private List>> m_menuEntries; /** * public constructor.

* * @param ou ou * @param app calling app */ public CmsOUTable(String ou, CmsAccountsApp app) { m_app = app; init(ou); } /** * @see org.opencms.ui.apps.user.I_CmsFilterableTable#filter(java.lang.String) */ public void filter(String data) { m_container.removeAllContainerFilters(); if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(data)) { m_container.addContainerFilter( new Or( new SimpleStringFilter(TableProperty.Name, data, true, false), new SimpleStringFilter(TableProperty.Description, data, true, false))); } } /** * @see org.opencms.ui.apps.user.I_CmsFilterableTable#getEmptyLayout() */ public VerticalLayout getEmptyLayout() { VerticalLayout layout = new VerticalLayout(); layout.setVisible(false); return layout; } /** * Checks if user has role to edit ou.

* * @return true if admin */ protected boolean isAdmin() { return OpenCms.getRoleManager().hasRole(m_cms, CmsRole.ADMINISTRATOR.forOrgUnit(m_parentOu)); } /** * Updates app.

* * @param itemId of current item */ protected void updateApp(String itemId) { I_CmsOuTreeType foundType = null; for (I_CmsOuTreeType type : m_app.getTreeTypeProvider().getTreeTypes()) { if (itemId.equals(type.getId())) { foundType = type; break; } } if (foundType != null) { m_app.update(m_parentOu, foundType, null); return; } m_app.update(itemId, CmsOuTreeType.OU, null, ""); } /** * Returns the available menu entries.

* * @return the menu entries */ List>> getMenuEntries() { if (m_menuEntries == null) { m_menuEntries = new ArrayList>>(); m_menuEntries.add(new EntryOpen()); m_menuEntries.add(new EntryEdit()); m_menuEntries.add(new EntryNewGroup()); m_menuEntries.add(new EntryNewUser()); m_menuEntries.add(new EntryImportExportUser()); m_menuEntries.add(new EntryDelete()); } return m_menuEntries; } /** * Adds ou to table.

* * @param ou to be added */ private void addOuToTable(CmsOrganizationalUnit ou) { if (m_app.isParentOfManagableOU(ou.getName())) { Item item = m_container.addItem(ou.getName()); if (item != null) { item.getItemProperty(TableProperty.Name).setValue(ou.getName()); item.getItemProperty(TableProperty.Description).setValue(ou.getDisplayName(A_CmsUI.get().getLocale())); if (ou.hasFlagWebuser()) { item.getItemProperty(TableProperty.Icon).setValue(new CmsCssIcon(OpenCmsTheme.ICON_OU_WEB)); } } } } /** * initializes table.

* * @param parentOu ou name */ private void init(String parentOu) { m_parentOu = parentOu; m_menu = new CmsContextMenu(); m_menu.setAsTableContextMenu(this); m_container = new IndexedContainer(); setContainerDataSource(m_container); for (TableProperty prop : TableProperty.values()) { m_container.addContainerProperty(prop, prop.getType(), prop.getDefault()); setColumnHeader(prop, prop.getName()); } setContainerDataSource(m_container); setItemIconPropertyId(TableProperty.Icon); setRowHeaderMode(RowHeaderMode.ICON_ONLY); setColumnWidth(null, 40); setSelectable(true); addGeneratedColumn(TableProperty.Ressources, new ColumnGenerator() { private static final long serialVersionUID = 4624734503799549261L; public Object generateCell(Table source, Object itemId, Object columnId) { String out = ""; try { boolean isOu = true; for (I_CmsOuTreeType type : m_app.getTreeTypeProvider().getTreeTypes()) { if (type.getId().equals(itemId)) { isOu = false; } } if (isOu) { List resources = OpenCms.getOrgUnitManager().getResourcesForOrganizationalUnit( m_cms, (String)itemId); if (!resources.isEmpty()) { out = resources.get(0).getRootPath(); int i = 1; while ((resources.size() > i) & (out.length() < 50)) { out += ", " + resources.get(i).getRootPath(); } if (resources.size() > i) { out += " ..."; } } } } catch (CmsException e) { LOG.error("unable to read resources.", e); } return out; } }); setVisibleColumns(TableProperty.Name, TableProperty.Description, TableProperty.Ressources); try { m_cms = OpenCms.initCmsObject(A_CmsUI.getCmsObject()); m_cms.getRequestContext().setSiteRoot(""); } catch (CmsException e) { m_cms = A_CmsUI.getCmsObject(); } try { if (m_app.isOUManagable(m_parentOu)) { for (I_CmsOuTreeType treeType : m_app.getTreeTypeProvider().getTreeTypes()) { if (treeType.showInOuTable() && treeType.isValidForOu(m_cms, m_parentOu)) { Item item = m_container.addItem(treeType.getId()); item.getItemProperty(TableProperty.Name).setValue(treeType.getName()); item.getItemProperty(TableProperty.Icon).setValue(treeType.getIcon()); item.getItemProperty(TableProperty.Type).setValue(treeType); } } } List webOus = new ArrayList(); for (CmsOrganizationalUnit ou : OpenCms.getOrgUnitManager().getOrganizationalUnits( m_cms, parentOu, false)) { if (ou.hasFlagWebuser()) { webOus.add(ou); } else { addOuToTable(ou); } } for (CmsOrganizationalUnit ou : webOus) { addOuToTable(ou); } } catch (CmsException e) { LOG.error("Unable to read ous", e); } addItemClickListener(new ItemClickListener() { private static final long serialVersionUID = 4807195510202231174L; public void itemClick(ItemClickEvent event) { setValue(null); select(event.getItemId()); if (event.getButton().equals(MouseButton.RIGHT) || (event.getPropertyId() == null)) { m_menu.setEntries(getMenuEntries(), Collections.singleton((String)getValue())); m_menu.openForTable(event, event.getItemId(), event.getPropertyId(), CmsOUTable.this); return; } if (event.getButton().equals(MouseButton.LEFT) && event.getPropertyId().equals(TableProperty.Name)) { updateApp((String)getValue()); } } }); setCellStyleGenerator(new CellStyleGenerator() { private static final long serialVersionUID = 1L; public String getStyle(Table source, Object itemId, Object propertyId) { if (TableProperty.Name.equals(propertyId)) { return " " + OpenCmsTheme.HOVER_COLUMN; } return ""; } }); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy