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
jensp 2017-09-27 05:57:38 +00:00
parent 6393741280
commit 2bcf8737af
8 changed files with 365 additions and 166 deletions

View File

@ -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;
}
}

View File

@ -21,12 +21,12 @@ package org.librecms.ui;
import com.vaadin.cdi.CDIView; import com.vaadin.cdi.CDIView;
import com.vaadin.navigator.View; import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener; import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent; import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.Panel; import com.vaadin.ui.Panel;
import com.vaadin.ui.TabSheet; import com.vaadin.ui.TabSheet;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionRepository; import org.librecms.contentsection.ContentSectionRepository;
@ -46,6 +46,14 @@ class ContentSectionView extends CustomComponent implements View {
public static final String VIEWNAME = "ContentSection"; 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 final ContentSectionViewController controller;
private ContentSection selectedSection; private ContentSection selectedSection;
@ -53,6 +61,8 @@ class ContentSectionView extends CustomComponent implements View {
private final TabSheet tabSheet; private final TabSheet tabSheet;
private final Panel noSectionPanel; private final Panel noSectionPanel;
private final FolderBrowser folderBrowser;
@Inject @Inject
ContentSectionView(final ContentSectionViewController controller) { ContentSectionView(final ContentSectionViewController controller) {
@ -60,26 +70,63 @@ class ContentSectionView extends CustomComponent implements View {
this.controller = controller; 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 = new TabSheet();
tabSheet.addTab(browseDocuments, "Documents"); tabSheet
tabSheet.addTab(new Label("Search placeholder"), "Search"); .addTab(folderBrowser, "Documents")
tabSheet.addTab(new Label("Media & Records placeholder"), .setId(TAB_DOCUMENTS);
"Media & Records"); tabSheet
tabSheet.addTab(new Label("Roles placeholder"), "Roles"); .addTab(new Label("Search placeholder"), "Search")
tabSheet.addTab(new Label("Workflows Placeholder"), "Workflows"); .setId(TAB_SEARCH);
tabSheet.addTab(new Label("Lifecycles placeholder"), "Lifecycles"); tabSheet
tabSheet.addTab(new Label("Document types placeholder"), .addTab(new Label("Media & Records placeholder"), "Media & Records")
"Documents types"); .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 = new Panel();
noSectionPanel.setVisible(false); noSectionPanel.setVisible(false);
final VerticalLayout layout = new VerticalLayout(tabSheet, final VerticalLayout layout = new VerticalLayout();
noSectionPanel); layout.addComponentsAndExpand(tabSheet, noSectionPanel);
layout.setHeight("100%");
layout.addStyleName("content-section-view-layout");
super.setCompositionRoot(layout); super.setCompositionRoot(layout);
super.setHeight("100%");
} }
@Override @Override
@ -104,6 +151,13 @@ class ContentSectionView extends CustomComponent implements View {
controller controller
.getContentSectionViewState() .getContentSectionViewState()
.setSelectedContentSection(selectedSection); .setSelectedContentSection(selectedSection);
folderBrowser
.getFolderTree()
.expand(controller
.getContentSectionViewState()
.getSelectedContentSection()
.getRootDocumentsFolder());
} else { } else {
tabSheet.setVisible(false); tabSheet.setVisible(false);
noSectionPanel.setCaption(String noSectionPanel.setCaption(String

View File

@ -36,10 +36,10 @@ import javax.inject.Inject;
public class ContentSectionViewController { public class ContentSectionViewController {
@Inject @Inject
private BrowseDocumentsDataProvider browseDocumentsDataProvider; private FolderBrowserDataProvider browseDocumentsDataProvider;
@Inject @Inject
private BrowseDocumentsFolderTreeDataProvider folderTreeDataProvider; private FolderBrowserFolderTreeDataProvider folderTreeDataProvider;
@Inject @Inject
private ContentTypesManager contentTypesManager; private ContentTypesManager contentTypesManager;
@ -59,11 +59,11 @@ public class ContentSectionViewController {
@Inject @Inject
private ContentSectionViewState contentSectionViewState; private ContentSectionViewState contentSectionViewState;
protected BrowseDocumentsDataProvider getBrowseDocumentsDataProvider() { protected FolderBrowserDataProvider getBrowseDocumentsDataProvider() {
return browseDocumentsDataProvider; return browseDocumentsDataProvider;
} }
protected BrowseDocumentsFolderTreeDataProvider getFolderTreeDataProvider() { protected FolderBrowserFolderTreeDataProvider getFolderTreeDataProvider() {
return folderTreeDataProvider; return folderTreeDataProvider;
} }

View File

@ -19,17 +19,20 @@
package org.librecms.ui; package org.librecms.ui;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.navigator.Navigator;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.Grid; import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label; 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.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.security.PermissionChecker; import org.libreccm.security.PermissionChecker;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.Folder;
import org.librecms.contentsection.privileges.AdminPrivileges; import org.librecms.contentsection.privileges.AdminPrivileges;
import org.librecms.contentsection.privileges.ItemPrivileges; import org.librecms.contentsection.privileges.ItemPrivileges;
@ -55,9 +58,6 @@ class ContentSectionsGrid extends Grid<ContentSection> {
this.controller = controller; this.controller = controller;
final PermissionChecker permissionChecker = controller
.getPermissionChecker();
addComponentColumn(this::buildSectionLink) addComponentColumn(this::buildSectionLink)
.setId(COL_LABEL) .setId(COL_LABEL)
.setCaption("Content Section"); .setCaption("Content Section");
@ -68,6 +68,8 @@ class ContentSectionsGrid extends Grid<ContentSection> {
.setId(COL_DELETE) .setId(COL_DELETE)
.setCaption("Delete"); .setCaption("Delete");
setSelectionMode(SelectionMode.NONE);
setDataProvider(controller.getSectionsDataProvider()); setDataProvider(controller.getSectionsDataProvider());
if (controller.getPermissionChecker().isPermitted("admin")) { if (controller.getPermissionChecker().isPermitted("admin")) {

View File

@ -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();
}
}
}

View File

@ -47,8 +47,8 @@ import javax.transaction.Transactional;
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
@ViewScoped @ViewScoped
class BrowseDocumentsDataProvider class FolderBrowserDataProvider
extends AbstractBackEndDataProvider<BrowseDocumentsItem, String> { extends AbstractBackEndDataProvider<FolderBrowserItem, String> {
private static final long serialVersionUID = 7693820518000376630L; private static final long serialVersionUID = 7693820518000376630L;
@ -77,8 +77,8 @@ class BrowseDocumentsDataProvider
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@Override @Override
protected Stream<BrowseDocumentsItem> fetchFromBackEnd( protected Stream<FolderBrowserItem> fetchFromBackEnd(
final Query<BrowseDocumentsItem, String> query) { final Query<FolderBrowserItem, String> query) {
final Folder folder; final Folder folder;
if (currentFolder == null) { if (currentFolder == null) {
@ -157,9 +157,9 @@ class BrowseDocumentsDataProvider
.map(this::buildRow); .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) { if (object instanceof Folder) {
final Folder folder = (Folder) object; final Folder folder = (Folder) object;
@ -198,7 +198,7 @@ class BrowseDocumentsDataProvider
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@Override @Override
protected int sizeInBackEnd( protected int sizeInBackEnd(
final Query<BrowseDocumentsItem, String> query) { final Query<FolderBrowserItem, String> query) {
final Folder folder; final Folder folder;
if (currentFolder == null) { if (currentFolder == null) {
@ -382,10 +382,10 @@ class BrowseDocumentsDataProvider
// .getResultList(); // .getResultList();
// } // }
// //
// private BrowseDocumentsItem createBrowseDocumentsItem( // private FolderBrowserItem createBrowseDocumentsItem(
// final Folder fromFolder) { // final Folder fromFolder) {
// //
// final BrowseDocumentsItem item = new BrowseDocumentsItem(); // final FolderBrowserItem item = new FolderBrowserItem();
// item.setItemId(fromFolder.getObjectId()); // item.setItemId(fromFolder.getObjectId());
// item.setName(fromFolder.getName()); // item.setName(fromFolder.getName());
// item.setTitle(fromFolder // item.setTitle(fromFolder
@ -396,10 +396,10 @@ class BrowseDocumentsDataProvider
// return item; // return item;
// } // }
// //
// private BrowseDocumentsItem createBrowseDocumentsItem( // private FolderBrowserItem createBrowseDocumentsItem(
// final ContentItem fromItem) { // final ContentItem fromItem) {
// //
// final BrowseDocumentsItem item = new BrowseDocumentsItem(); // final FolderBrowserItem item = new FolderBrowserItem();
// item.setCreationDate(fromItem.getCreationDate()); // item.setCreationDate(fromItem.getCreationDate());
// item.setFolder(false); // item.setFolder(false);
// item.setItemId(fromItem.getObjectId()); // item.setItemId(fromItem.getObjectId());

View File

@ -42,7 +42,7 @@ import javax.transaction.Transactional;
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
@ViewScoped @ViewScoped
public class BrowseDocumentsFolderTreeDataProvider public class FolderBrowserFolderTreeDataProvider
extends AbstractBackEndHierarchicalDataProvider<Folder, String> { extends AbstractBackEndHierarchicalDataProvider<Folder, String> {
private static final long serialVersionUID = 5330319780008907163L; private static final long serialVersionUID = 5330319780008907163L;
@ -69,7 +69,7 @@ public class BrowseDocumentsFolderTreeDataProvider
.orElseThrow(() -> new IllegalArgumentException(String .orElseThrow(() -> new IllegalArgumentException(String
.format("No folder with ID %d in the database.", .format("No folder with ID %d in the database.",
selectedParent.get().getObjectId()))); selectedParent.get().getObjectId())));
return folderRepo.findSubFolders(parent).stream(); return folderRepo.findSubFolders(parent).stream();
} else { } else {
final ContentSection section = sectionRepo final ContentSection section = sectionRepo
@ -87,6 +87,7 @@ public class BrowseDocumentsFolderTreeDataProvider
return result.stream(); return result.stream();
} }
// return folderRepo.findSubFolders(parent).stream();
} }
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@ -103,22 +104,24 @@ public class BrowseDocumentsFolderTreeDataProvider
.orElseThrow(() -> new IllegalArgumentException(String .orElseThrow(() -> new IllegalArgumentException(String
.format("No folder with ID %d in the database.", .format("No folder with ID %d in the database.",
selectedParent.get().getObjectId()))); 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); // return (int) folderRepo.countSubFolders(parent);
} }
@Override @Override

View File

@ -25,8 +25,8 @@ import java.util.Objects;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public final class BrowseDocumentsItem implements public final class FolderBrowserItem implements
Comparable<BrowseDocumentsItem> { Comparable<FolderBrowserItem> {
private long itemId; private long itemId;
@ -111,7 +111,7 @@ public final class BrowseDocumentsItem implements
} }
@Override @Override
public int compareTo(final BrowseDocumentsItem other) { public int compareTo(final FolderBrowserItem other) {
int result = title.compareTo(other.getTitle()); int result = title.compareTo(other.getTitle());
if (result != 0) { if (result != 0) {
@ -157,10 +157,10 @@ public final class BrowseDocumentsItem implements
if (obj == null) { if (obj == null) {
return false; return false;
} }
if (!(obj instanceof BrowseDocumentsItem)) { if (!(obj instanceof FolderBrowserItem)) {
return false; return false;
} }
final BrowseDocumentsItem other = (BrowseDocumentsItem) obj; final FolderBrowserItem other = (FolderBrowserItem) obj;
if (itemId != other.getItemId()) { if (itemId != other.getItemId()) {
return false; return false;
} }