/*
* Copyright (C) 2017 LibreCCM Foundation.
*
* 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.
*
* 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., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.ItemCollapseAllowedProvider;
import com.vaadin.ui.Tree;
import org.librecms.contentsection.Folder;
/**
*
* @author Jens Pelzetter
*/
public class BrowseDocuments extends CustomComponent {
private static final long serialVersionUID = -7241214812224026430L;
private static final String COL_DOCUMENT_CREATED = "created";
private static final String COL_DOCUMENT_LAST_MODIFIED = "lastmodified";
private static final String COL_DOCUMENT_NAME = "name";
private static final String COL_DOCUMENT_TITLE = "title";
private static final String COL_DOCUMENT_TYPE = "ttype";
private final ContentSectionViewController controller;
private final Tree folderTree;
private final Grid documentsGrid;
private final BrowseDocumentsDataProvider documentsDataProvider;
private final BrowseDocumentsFolderTreeDataProvider folderTreeDataProvider;
public BrowseDocuments(final ContentSectionViewController controller) {
super();
this.controller = controller;
folderTreeDataProvider = controller.getFolderTreeDataProvider();
folderTree = new Tree<>(folderTreeDataProvider);
folderTree.setItemCaptionGenerator(folder -> {
return controller
.getGlobalizationHelper()
.getValueFromLocalizedString(folder.getTitle());
});
documentsGrid = new Grid<>();
documentsGrid
.addColumn(BrowseDocumentsItem::getName)
.setCaption("Name")
.setId(COL_DOCUMENT_NAME);
documentsGrid
.addColumn(BrowseDocumentsItem::getTitle)
.setCaption("Title")
.setId(COL_DOCUMENT_TITLE);
documentsGrid
.addColumn(BrowseDocumentsItem::getType)
.setCaption("Type")
.setId(COL_DOCUMENT_TYPE);
documentsGrid
.addColumn(BrowseDocumentsItem::getCreationDate)
.setCaption("Created")
.setId(COL_DOCUMENT_CREATED);
documentsGrid
.addColumn(BrowseDocumentsItem::getLastModified)
.setCaption("Last modified")
.setId(COL_DOCUMENT_LAST_MODIFIED);
documentsDataProvider = controller.getBrowseDocumentsDataProvider();
documentsGrid.setDataProvider(documentsDataProvider);
documentsGrid.setWidth("100%");
documentsGrid.setHeight("100%");
folderTree.addItemClickListener(event -> {
documentsDataProvider.setCurrentFolder(event.getItem());
documentsDataProvider.refreshAll();
});
folderTree.setItemCollapseAllowedProvider(folder -> {
return folder.getParentCategory() != null;
});
final HorizontalSplitPanel splitPanel = new HorizontalSplitPanel(
folderTree, documentsGrid);
splitPanel.setSplitPosition(17.5f, Unit.PERCENTAGE);
splitPanel.setHeight("100%");
super.setCompositionRoot(splitPanel);
}
public Tree getFolderTree() {
return folderTree;
}
public Grid getDocumentsGrid() {
return documentsGrid;
}
}