CCM NG/ccm-cms: Vaadion prototype of folder browser
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5010 8810af33-2d31-482b-a856-94f89814c4df
parent
6393741280
commit
2bcf8737af
|
|
@ -1,112 +0,0 @@
|
|||
/*
|
||||
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
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<Folder> folderTree;
|
||||
private final Grid<BrowseDocumentsItem> 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<Folder> getFolderTree() {
|
||||
return folderTree;
|
||||
}
|
||||
|
||||
public Grid<BrowseDocumentsItem> getDocumentsGrid() {
|
||||
return documentsGrid;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -21,12 +21,12 @@ package org.librecms.ui;
|
|||
import com.vaadin.cdi.CDIView;
|
||||
import com.vaadin.navigator.View;
|
||||
import com.vaadin.navigator.ViewChangeListener;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.CustomComponent;
|
||||
import com.vaadin.ui.Label;
|
||||
import com.vaadin.ui.Panel;
|
||||
import com.vaadin.ui.TabSheet;
|
||||
import com.vaadin.ui.VerticalLayout;
|
||||
import com.vaadin.ui.themes.ValoTheme;
|
||||
import org.librecms.contentsection.ContentSection;
|
||||
import org.librecms.contentsection.ContentSectionRepository;
|
||||
|
||||
|
|
@ -46,6 +46,14 @@ class ContentSectionView extends CustomComponent implements View {
|
|||
|
||||
public static final String VIEWNAME = "ContentSection";
|
||||
|
||||
private static final String TAB_DOCUMENTS = "tab_documents";
|
||||
private static final String TAB_SEARCH = "tab_search";
|
||||
private static final String TAB_MEDIA = "tab_media";
|
||||
private static final String TAB_ROLES = "tab_roles";
|
||||
private static final String TAB_WORKFLOWS = "tab_workflows";
|
||||
private static final String TAB_LIFECYCLES = "tab_lifecycles";
|
||||
private static final String TAB_DOCUMENT_TYPES = "tab_document_types";
|
||||
|
||||
private final ContentSectionViewController controller;
|
||||
|
||||
private ContentSection selectedSection;
|
||||
|
|
@ -53,6 +61,8 @@ class ContentSectionView extends CustomComponent implements View {
|
|||
private final TabSheet tabSheet;
|
||||
private final Panel noSectionPanel;
|
||||
|
||||
private final FolderBrowser folderBrowser;
|
||||
|
||||
@Inject
|
||||
ContentSectionView(final ContentSectionViewController controller) {
|
||||
|
||||
|
|
@ -60,26 +70,63 @@ class ContentSectionView extends CustomComponent implements View {
|
|||
|
||||
this.controller = controller;
|
||||
|
||||
final BrowseDocuments browseDocuments = new BrowseDocuments(controller);
|
||||
folderBrowser = new FolderBrowser(controller);
|
||||
final VerticalLayout folderBrowserLayout = new VerticalLayout();
|
||||
folderBrowserLayout.setHeight("100%");
|
||||
folderBrowserLayout.addComponentsAndExpand(folderBrowser);
|
||||
|
||||
tabSheet = new TabSheet();
|
||||
tabSheet.addTab(browseDocuments, "Documents");
|
||||
tabSheet.addTab(new Label("Search placeholder"), "Search");
|
||||
tabSheet.addTab(new Label("Media & Records placeholder"),
|
||||
"Media & Records");
|
||||
tabSheet.addTab(new Label("Roles placeholder"), "Roles");
|
||||
tabSheet.addTab(new Label("Workflows Placeholder"), "Workflows");
|
||||
tabSheet.addTab(new Label("Lifecycles placeholder"), "Lifecycles");
|
||||
tabSheet.addTab(new Label("Document types placeholder"),
|
||||
"Documents types");
|
||||
tabSheet
|
||||
.addTab(folderBrowser, "Documents")
|
||||
.setId(TAB_DOCUMENTS);
|
||||
tabSheet
|
||||
.addTab(new Label("Search placeholder"), "Search")
|
||||
.setId(TAB_SEARCH);
|
||||
tabSheet
|
||||
.addTab(new Label("Media & Records placeholder"), "Media & Records")
|
||||
.setId(TAB_MEDIA);
|
||||
tabSheet
|
||||
.addTab(new Label("Roles placeholder"), "Roles")
|
||||
.setId(TAB_ROLES);
|
||||
tabSheet
|
||||
.addTab(new Label("Workflows Placeholder"), "Workflows")
|
||||
.setId(TAB_WORKFLOWS);
|
||||
tabSheet
|
||||
.addTab(new Label("Lifecycles placeholder"), "Lifecycles")
|
||||
.setId(TAB_LIFECYCLES);
|
||||
tabSheet
|
||||
.addTab(new Label("Document types placeholder"), "Documents types")
|
||||
.setId(TAB_DOCUMENT_TYPES);
|
||||
|
||||
tabSheet.addSelectedTabChangeListener(event -> {
|
||||
|
||||
final Component selectedTab = event.getTabSheet().getSelectedTab();
|
||||
|
||||
if (TAB_DOCUMENTS.equals(selectedTab.getId())) {
|
||||
|
||||
final FolderBrowser browser = (FolderBrowser) selectedTab;
|
||||
|
||||
browser
|
||||
.getFolderTree()
|
||||
.expand(controller
|
||||
.getContentSectionViewState()
|
||||
.getSelectedContentSection()
|
||||
.getRootDocumentsFolder());
|
||||
}
|
||||
});
|
||||
|
||||
tabSheet.setHeight("100%");
|
||||
|
||||
noSectionPanel = new Panel();
|
||||
noSectionPanel.setVisible(false);
|
||||
|
||||
final VerticalLayout layout = new VerticalLayout(tabSheet,
|
||||
noSectionPanel);
|
||||
final VerticalLayout layout = new VerticalLayout();
|
||||
layout.addComponentsAndExpand(tabSheet, noSectionPanel);
|
||||
layout.setHeight("100%");
|
||||
layout.addStyleName("content-section-view-layout");
|
||||
|
||||
super.setCompositionRoot(layout);
|
||||
super.setHeight("100%");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -104,6 +151,13 @@ class ContentSectionView extends CustomComponent implements View {
|
|||
controller
|
||||
.getContentSectionViewState()
|
||||
.setSelectedContentSection(selectedSection);
|
||||
|
||||
folderBrowser
|
||||
.getFolderTree()
|
||||
.expand(controller
|
||||
.getContentSectionViewState()
|
||||
.getSelectedContentSection()
|
||||
.getRootDocumentsFolder());
|
||||
} else {
|
||||
tabSheet.setVisible(false);
|
||||
noSectionPanel.setCaption(String
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ import javax.inject.Inject;
|
|||
public class ContentSectionViewController {
|
||||
|
||||
@Inject
|
||||
private BrowseDocumentsDataProvider browseDocumentsDataProvider;
|
||||
private FolderBrowserDataProvider browseDocumentsDataProvider;
|
||||
|
||||
@Inject
|
||||
private BrowseDocumentsFolderTreeDataProvider folderTreeDataProvider;
|
||||
private FolderBrowserFolderTreeDataProvider folderTreeDataProvider;
|
||||
|
||||
@Inject
|
||||
private ContentTypesManager contentTypesManager;
|
||||
|
|
@ -59,11 +59,11 @@ public class ContentSectionViewController {
|
|||
@Inject
|
||||
private ContentSectionViewState contentSectionViewState;
|
||||
|
||||
protected BrowseDocumentsDataProvider getBrowseDocumentsDataProvider() {
|
||||
protected FolderBrowserDataProvider getBrowseDocumentsDataProvider() {
|
||||
return browseDocumentsDataProvider;
|
||||
}
|
||||
|
||||
protected BrowseDocumentsFolderTreeDataProvider getFolderTreeDataProvider() {
|
||||
protected FolderBrowserFolderTreeDataProvider getFolderTreeDataProvider() {
|
||||
return folderTreeDataProvider;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,17 +19,20 @@
|
|||
package org.librecms.ui;
|
||||
|
||||
import com.vaadin.icons.VaadinIcons;
|
||||
import com.vaadin.navigator.Navigator;
|
||||
import com.vaadin.ui.Button;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
import com.vaadin.ui.Grid;
|
||||
import com.vaadin.ui.HorizontalLayout;
|
||||
import com.vaadin.ui.Label;
|
||||
import com.vaadin.ui.TextField;
|
||||
import com.vaadin.ui.Window;
|
||||
import com.vaadin.ui.components.grid.HeaderCell;
|
||||
import com.vaadin.ui.components.grid.HeaderRow;
|
||||
import com.vaadin.ui.themes.ValoTheme;
|
||||
import org.libreccm.security.PermissionChecker;
|
||||
import org.librecms.contentsection.ContentSection;
|
||||
import org.librecms.contentsection.Folder;
|
||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||
import org.librecms.contentsection.privileges.ItemPrivileges;
|
||||
|
||||
|
|
@ -55,9 +58,6 @@ class ContentSectionsGrid extends Grid<ContentSection> {
|
|||
|
||||
this.controller = controller;
|
||||
|
||||
final PermissionChecker permissionChecker = controller
|
||||
.getPermissionChecker();
|
||||
|
||||
addComponentColumn(this::buildSectionLink)
|
||||
.setId(COL_LABEL)
|
||||
.setCaption("Content Section");
|
||||
|
|
@ -68,6 +68,8 @@ class ContentSectionsGrid extends Grid<ContentSection> {
|
|||
.setId(COL_DELETE)
|
||||
.setCaption("Delete");
|
||||
|
||||
setSelectionMode(SelectionMode.NONE);
|
||||
|
||||
setDataProvider(controller.getSectionsDataProvider());
|
||||
|
||||
if (controller.getPermissionChecker().isPermitted("admin")) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,252 @@
|
|||
/*
|
||||
* 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.icons.VaadinIcons;
|
||||
import com.vaadin.ui.Button;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.CustomComponent;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
import com.vaadin.ui.Grid;
|
||||
import com.vaadin.ui.HorizontalLayout;
|
||||
import com.vaadin.ui.HorizontalSplitPanel;
|
||||
import com.vaadin.ui.TextField;
|
||||
import com.vaadin.ui.Tree;
|
||||
import com.vaadin.ui.VerticalLayout;
|
||||
import com.vaadin.ui.Window;
|
||||
import com.vaadin.ui.components.grid.HeaderCell;
|
||||
import com.vaadin.ui.components.grid.HeaderRow;
|
||||
import com.vaadin.ui.renderers.DateRenderer;
|
||||
import com.vaadin.ui.themes.ValoTheme;
|
||||
import org.librecms.contentsection.Folder;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class FolderBrowser 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<Folder> folderTree;
|
||||
private final Grid<FolderBrowserItem> documentsGrid;
|
||||
|
||||
private final Button renameCurrentFolderButton;
|
||||
|
||||
private final FolderBrowserDataProvider documentsDataProvider;
|
||||
private final FolderBrowserFolderTreeDataProvider folderTreeDataProvider;
|
||||
|
||||
public FolderBrowser(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
|
||||
.addComponentColumn(item -> buildFolderItemLink(item))
|
||||
.setCaption("Name")
|
||||
.setId(COL_DOCUMENT_NAME);
|
||||
documentsGrid
|
||||
.addColumn(FolderBrowserItem::getTitle)
|
||||
.setCaption("Title")
|
||||
.setId(COL_DOCUMENT_TITLE);
|
||||
documentsGrid
|
||||
.addColumn(FolderBrowserItem::getType)
|
||||
.setCaption("Type")
|
||||
.setId(COL_DOCUMENT_TYPE);
|
||||
documentsGrid
|
||||
.addColumn(FolderBrowserItem::getCreationDate,
|
||||
new DateRenderer("%tF"))
|
||||
.setCaption("Created")
|
||||
.setId(COL_DOCUMENT_CREATED);
|
||||
documentsGrid
|
||||
.addColumn(FolderBrowserItem::getLastModified,
|
||||
new DateRenderer("%tF"))
|
||||
.setCaption("Last modified")
|
||||
.setId(COL_DOCUMENT_LAST_MODIFIED);
|
||||
documentsDataProvider = controller.getBrowseDocumentsDataProvider();
|
||||
documentsGrid.setDataProvider(documentsDataProvider);
|
||||
documentsGrid.setSelectionMode(Grid.SelectionMode.MULTI);
|
||||
documentsGrid.setWidth("100%");
|
||||
documentsGrid.setHeight("100%");
|
||||
|
||||
final Button createSubFolderButton = new Button("New subfolder",
|
||||
VaadinIcons.PLUS_CIRCLE_O);
|
||||
createSubFolderButton.addStyleName(ValoTheme.BUTTON_TINY);
|
||||
renameCurrentFolderButton = new Button("Rename current folder",
|
||||
VaadinIcons.EDIT);
|
||||
renameCurrentFolderButton.addStyleName(ValoTheme.BUTTON_TINY);
|
||||
renameCurrentFolderButton.setEnabled(false);
|
||||
renameCurrentFolderButton.setVisible(false);
|
||||
final HeaderRow headerRow = documentsGrid.prependHeaderRow();
|
||||
final HeaderCell actionsCell = headerRow.join(COL_DOCUMENT_NAME,
|
||||
COL_DOCUMENT_TITLE,
|
||||
COL_DOCUMENT_TYPE,
|
||||
COL_DOCUMENT_CREATED,
|
||||
COL_DOCUMENT_LAST_MODIFIED);
|
||||
actionsCell.setComponent(new HorizontalLayout(createSubFolderButton,
|
||||
renameCurrentFolderButton));
|
||||
|
||||
folderTree.addItemClickListener(event -> {
|
||||
// documentsDataProvider.setCurrentFolder(event.getItem());
|
||||
// documentsDataProvider.refreshAll();
|
||||
setCurrentFolder(event.getItem());
|
||||
});
|
||||
folderTree.setItemCollapseAllowedProvider(folder -> {
|
||||
return folder.getParentCategory() != null;
|
||||
});
|
||||
|
||||
// final Button root = new Button("/ ");
|
||||
// root.addStyleName(ValoTheme.BUTTON_LINK);
|
||||
// root.addClickListener(event -> {
|
||||
// folderTree.getSelectionModel().deselectAll();
|
||||
// documentsDataProvider.setCurrentFolder(null);
|
||||
// documentsDataProvider.refreshAll();
|
||||
// });
|
||||
// final VerticalLayout folders = new VerticalLayout(root, folderTree);
|
||||
final VerticalLayout folderTreeLayout = new VerticalLayout(folderTree);
|
||||
|
||||
final VerticalLayout documentsGridLayout = new VerticalLayout();
|
||||
documentsGridLayout.addComponentsAndExpand(documentsGrid);
|
||||
|
||||
final HorizontalSplitPanel splitPanel = new HorizontalSplitPanel(
|
||||
folderTreeLayout, documentsGridLayout);
|
||||
splitPanel.setSplitPosition(17.5f, Unit.PERCENTAGE);
|
||||
splitPanel.setHeight("100%");
|
||||
final VerticalLayout layout = new VerticalLayout();
|
||||
layout.addComponentsAndExpand(splitPanel);
|
||||
super.setCompositionRoot(layout);
|
||||
}
|
||||
|
||||
private Component buildFolderItemLink(final FolderBrowserItem item) {
|
||||
|
||||
final Button itemLink = new Button();
|
||||
itemLink.setCaption(item.getName());
|
||||
itemLink.setStyleName(ValoTheme.BUTTON_LINK);
|
||||
itemLink.addClickListener(event -> folderBrowserItemClicked(event,
|
||||
item));
|
||||
if (item.isFolder()) {
|
||||
itemLink.setIcon(VaadinIcons.FOLDER);
|
||||
}
|
||||
|
||||
return itemLink;
|
||||
}
|
||||
|
||||
private void folderBrowserItemClicked(final Button.ClickEvent event,
|
||||
final FolderBrowserItem item) {
|
||||
|
||||
if (item.isFolder()) {
|
||||
final Folder folder = controller
|
||||
.getFolderRepository()
|
||||
.findById(item.getItemId())
|
||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||
"No Folder with ID %d in the database.",
|
||||
item.getItemId())));
|
||||
// folderTree.expand(folder);
|
||||
// documentsDataProvider.setCurrentFolder(folder);
|
||||
// documentsDataProvider.refreshAll();
|
||||
setCurrentFolder(folder);
|
||||
}
|
||||
}
|
||||
|
||||
private void setCurrentFolder(final Folder folder) {
|
||||
folderTree.expand(folder);
|
||||
documentsDataProvider.setCurrentFolder(folder);
|
||||
documentsDataProvider.refreshAll();
|
||||
|
||||
renameCurrentFolderButton.setEnabled(folder.getParentCategory() != null);
|
||||
renameCurrentFolderButton.setVisible(folder.getParentCategory() != null);
|
||||
}
|
||||
|
||||
public Tree<Folder> getFolderTree() {
|
||||
return folderTree;
|
||||
}
|
||||
|
||||
public Grid<FolderBrowserItem> getDocumentsGrid() {
|
||||
return documentsGrid;
|
||||
}
|
||||
|
||||
private class FolderDialog extends Window {
|
||||
|
||||
private static final long serialVersionUID = -6767403288966354533L;
|
||||
|
||||
private final TextField nameField;
|
||||
private final TextField titleField;
|
||||
private final Button submitButton;
|
||||
|
||||
private Folder currentFolder;
|
||||
|
||||
public FolderDialog() {
|
||||
super();
|
||||
|
||||
nameField = new TextField("Name");
|
||||
nameField.setDescription("The name (URL-Fragment) of the folder.");
|
||||
nameField.setRequiredIndicatorVisible(true);
|
||||
nameField.setMaxLength(256);
|
||||
|
||||
titleField = new TextField("Title");
|
||||
titleField.setDescription("The title of the folder.");
|
||||
titleField.setRequiredIndicatorVisible(true);
|
||||
titleField.setMaxLength(256);
|
||||
|
||||
final Button cancelButton = new Button("Cancel");
|
||||
cancelButton.addClickListener(event -> close());
|
||||
|
||||
submitButton = new Button("Submit");
|
||||
submitButton.addClickListener(event -> save());
|
||||
|
||||
final FormLayout layout = new FormLayout(nameField,
|
||||
titleField,
|
||||
cancelButton,
|
||||
submitButton);
|
||||
|
||||
super.setContent(layout);
|
||||
}
|
||||
|
||||
public FolderDialog(final Folder folder) {
|
||||
this();
|
||||
|
||||
currentFolder = folder;
|
||||
nameField.setValue(currentFolder.getName());
|
||||
|
||||
}
|
||||
|
||||
private void save() {
|
||||
this.close();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -47,8 +47,8 @@ import javax.transaction.Transactional;
|
|||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@ViewScoped
|
||||
class BrowseDocumentsDataProvider
|
||||
extends AbstractBackEndDataProvider<BrowseDocumentsItem, String> {
|
||||
class FolderBrowserDataProvider
|
||||
extends AbstractBackEndDataProvider<FolderBrowserItem, String> {
|
||||
|
||||
private static final long serialVersionUID = 7693820518000376630L;
|
||||
|
||||
|
|
@ -77,8 +77,8 @@ class BrowseDocumentsDataProvider
|
|||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
@Override
|
||||
protected Stream<BrowseDocumentsItem> fetchFromBackEnd(
|
||||
final Query<BrowseDocumentsItem, String> query) {
|
||||
protected Stream<FolderBrowserItem> fetchFromBackEnd(
|
||||
final Query<FolderBrowserItem, String> query) {
|
||||
|
||||
final Folder folder;
|
||||
if (currentFolder == null) {
|
||||
|
|
@ -157,9 +157,9 @@ class BrowseDocumentsDataProvider
|
|||
.map(this::buildRow);
|
||||
}
|
||||
|
||||
private BrowseDocumentsItem buildRow(final CcmObject object) {
|
||||
private FolderBrowserItem buildRow(final CcmObject object) {
|
||||
|
||||
final BrowseDocumentsItem row = new BrowseDocumentsItem();
|
||||
final FolderBrowserItem row = new FolderBrowserItem();
|
||||
if (object instanceof Folder) {
|
||||
|
||||
final Folder folder = (Folder) object;
|
||||
|
|
@ -198,7 +198,7 @@ class BrowseDocumentsDataProvider
|
|||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
@Override
|
||||
protected int sizeInBackEnd(
|
||||
final Query<BrowseDocumentsItem, String> query) {
|
||||
final Query<FolderBrowserItem, String> query) {
|
||||
|
||||
final Folder folder;
|
||||
if (currentFolder == null) {
|
||||
|
|
@ -382,10 +382,10 @@ class BrowseDocumentsDataProvider
|
|||
// .getResultList();
|
||||
// }
|
||||
//
|
||||
// private BrowseDocumentsItem createBrowseDocumentsItem(
|
||||
// private FolderBrowserItem createBrowseDocumentsItem(
|
||||
// final Folder fromFolder) {
|
||||
//
|
||||
// final BrowseDocumentsItem item = new BrowseDocumentsItem();
|
||||
// final FolderBrowserItem item = new FolderBrowserItem();
|
||||
// item.setItemId(fromFolder.getObjectId());
|
||||
// item.setName(fromFolder.getName());
|
||||
// item.setTitle(fromFolder
|
||||
|
|
@ -396,10 +396,10 @@ class BrowseDocumentsDataProvider
|
|||
// return item;
|
||||
// }
|
||||
//
|
||||
// private BrowseDocumentsItem createBrowseDocumentsItem(
|
||||
// private FolderBrowserItem createBrowseDocumentsItem(
|
||||
// final ContentItem fromItem) {
|
||||
//
|
||||
// final BrowseDocumentsItem item = new BrowseDocumentsItem();
|
||||
// final FolderBrowserItem item = new FolderBrowserItem();
|
||||
// item.setCreationDate(fromItem.getCreationDate());
|
||||
// item.setFolder(false);
|
||||
// item.setItemId(fromItem.getObjectId());
|
||||
|
|
@ -42,7 +42,7 @@ import javax.transaction.Transactional;
|
|||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@ViewScoped
|
||||
public class BrowseDocumentsFolderTreeDataProvider
|
||||
public class FolderBrowserFolderTreeDataProvider
|
||||
extends AbstractBackEndHierarchicalDataProvider<Folder, String> {
|
||||
|
||||
private static final long serialVersionUID = 5330319780008907163L;
|
||||
|
|
@ -87,6 +87,7 @@ public class BrowseDocumentsFolderTreeDataProvider
|
|||
return result.stream();
|
||||
}
|
||||
|
||||
// return folderRepo.findSubFolders(parent).stream();
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
|
|
@ -103,22 +104,24 @@ public class BrowseDocumentsFolderTreeDataProvider
|
|||
.orElseThrow(() -> new IllegalArgumentException(String
|
||||
.format("No folder with ID %d in the database.",
|
||||
selectedParent.get().getObjectId())));
|
||||
} else {
|
||||
final ContentSection section = sectionRepo
|
||||
.findById(contentSectionViewState
|
||||
.getSelectedContentSection()
|
||||
.getObjectId())
|
||||
.orElseThrow(() -> new UnexpectedErrorException(String
|
||||
.format("No ContentSection with ID %d in the database.",
|
||||
contentSectionViewState
|
||||
.getSelectedContentSection()
|
||||
.getObjectId())));
|
||||
|
||||
parent = section.getRootDocumentsFolder();
|
||||
}
|
||||
|
||||
return (int) folderRepo.countSubFolders(parent);
|
||||
} else {
|
||||
// final ContentSection section = sectionRepo
|
||||
// .findById(contentSectionViewState
|
||||
// .getSelectedContentSection()
|
||||
// .getObjectId())
|
||||
// .orElseThrow(() -> new UnexpectedErrorException(String
|
||||
// .format("No ContentSection with ID %d in the database.",
|
||||
// contentSectionViewState
|
||||
// .getSelectedContentSection()
|
||||
// .getObjectId())));
|
||||
//
|
||||
// parent = section.getRootDocumentsFolder();
|
||||
return 1;
|
||||
}
|
||||
|
||||
// return (int) folderRepo.countSubFolders(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -25,8 +25,8 @@ import java.util.Objects;
|
|||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public final class BrowseDocumentsItem implements
|
||||
Comparable<BrowseDocumentsItem> {
|
||||
public final class FolderBrowserItem implements
|
||||
Comparable<FolderBrowserItem> {
|
||||
|
||||
private long itemId;
|
||||
|
||||
|
|
@ -111,7 +111,7 @@ public final class BrowseDocumentsItem implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(final BrowseDocumentsItem other) {
|
||||
public int compareTo(final FolderBrowserItem other) {
|
||||
|
||||
int result = title.compareTo(other.getTitle());
|
||||
if (result != 0) {
|
||||
|
|
@ -157,10 +157,10 @@ public final class BrowseDocumentsItem implements
|
|||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (!(obj instanceof BrowseDocumentsItem)) {
|
||||
if (!(obj instanceof FolderBrowserItem)) {
|
||||
return false;
|
||||
}
|
||||
final BrowseDocumentsItem other = (BrowseDocumentsItem) obj;
|
||||
final FolderBrowserItem other = (FolderBrowserItem) obj;
|
||||
if (itemId != other.getItemId()) {
|
||||
return false;
|
||||
}
|
||||
Loading…
Reference in New Issue