
org.opencms.ui.components.fileselect.CmsResourceTree Maven / Gradle / Ivy
/*
* 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, 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.components.fileselect;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.main.CmsLog;
import org.opencms.ui.components.CmsFileTable;
import org.opencms.ui.components.CmsResourceTableProperty;
import org.opencms.util.CmsUUID;
import java.util.List;
import org.apache.commons.logging.Log;
import com.google.common.collect.Lists;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.ui.Tree;
/**
* Tree subclass used to display VFS resource trees.
*/
public class CmsResourceTree extends Tree {
/** Serial version id. */
private static final long serialVersionUID = 1L;
/** The logger instance for this class. */
private static final Log LOG = CmsLog.getLog(CmsResourceTree.class);
/** The CMS context. */
private CmsObject m_cms;
/** The root resource. */
private CmsResource m_root;
/** The resource filter. */
private CmsResourceFilter m_filter;
/** The data container for the tree. */
private CmsResourceTreeContainer m_container = new CmsResourceTreeContainer();
/** The list of selection handlers. */
private List> m_resourceSelectionHandlers = Lists.newArrayList();
/**
* Creates a new instance.
*
* @param cms the CMS context
* @param root the root resource
* @param filter the resource filter
*/
public CmsResourceTree(CmsObject cms, CmsResource root, CmsResourceFilter filter) {
m_cms = cms;
m_root = root;
m_filter = filter;
setContainerDataSource(m_container);
setItemIconPropertyId(CmsResourceTableProperty.PROPERTY_TYPE_ICON);
setItemCaptionPropertyId(CmsResourceTableProperty.PROPERTY_RESOURCE_NAME);
addExpandListener(new ExpandListener() {
private static final long serialVersionUID = 1L;
@SuppressWarnings("synthetic-access")
public void nodeExpand(ExpandEvent event) {
m_container.readTreeLevel(m_cms, (CmsUUID)event.getItemId(), m_filter);
markAsDirtyRecursive(); // required so open / close arrows on folders without contents are rendered correctly
}
});
addCollapseListener(new CollapseListener() {
private static final long serialVersionUID = 1L;
@SuppressWarnings("synthetic-access")
public void nodeCollapse(CollapseEvent event) {
m_container.removeChildren((CmsUUID)event.getItemId());
}
});
addItemClickListener(new ItemClickListener() {
private static final long serialVersionUID = 1L;
public void itemClick(ItemClickEvent event) {
CmsResource resource = CmsResourceTreeContainer.getResource(event.getItem());
handleSelection(resource);
}
});
setItemStyleGenerator(new ItemStyleGenerator() {
private static final long serialVersionUID = 1L;
public String getStyle(Tree source, Object itemId) {
return CmsFileTable.getStateStyle(source.getContainerDataSource().getItem(itemId));
}
});
m_container.addTreeItem(cms, m_root, null);
try {
expandItem(m_root.getStructureId());
markAsDirtyRecursive();
} catch (Exception e) {
LOG.error(e.getLocalizedMessage(), e);
}
}
/**
* Adds a resoure selection handler.
*
* @param handler the resource selection handler
*/
public void addResourceSelectionHandler(I_CmsSelectionHandler handler) {
m_resourceSelectionHandlers.add(handler);
}
/**
* Gets the tree container.
*
* @return the tree container
*/
public CmsResourceTreeContainer getTreeContainer() {
return m_container;
}
/**
* Removes the given resource selection handler.
*
* @param handler the resource selection handler
*/
public void removeResourceSelectionHandler(I_CmsSelectionHandler handler) {
m_resourceSelectionHandlers.remove(handler);
}
/**
* Handles resource selection.
*
* @param resource the selected resource
*/
void handleSelection(CmsResource resource) {
for (I_CmsSelectionHandler handler : m_resourceSelectionHandlers) {
handler.onSelection(resource);
}
}
}