X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Flibrary%2FDocumentsTreeUiProvider.java;fp=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Flibrary%2FDocumentsTreeUiProvider.java;h=1c82396df493730ffbcc15fb2e63fe0f5fbbcd35;hp=0000000000000000000000000000000000000000;hb=6e56ffa34cb02ab04d028423aea342e3dfed4358;hpb=c285180bece610b2c2921d44fe14b6dde2123efa diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/library/DocumentsTreeUiProvider.java b/org.argeo.app.ui/src/org/argeo/app/ui/library/DocumentsTreeUiProvider.java new file mode 100644 index 0000000..1c82396 --- /dev/null +++ b/org.argeo.app.ui/src/org/argeo/app/ui/library/DocumentsTreeUiProvider.java @@ -0,0 +1,80 @@ +package org.argeo.app.ui.library; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.spi.FileSystemProvider; + +import javax.jcr.Node; +import javax.jcr.Repository; +import javax.jcr.RepositoryException; + +import org.argeo.api.cms.CmsView; +import org.argeo.app.ui.SuiteEvent; +import org.argeo.api.cms.CmsConstants; +import org.argeo.cms.fs.CmsFsUtils; +import org.argeo.cms.jcr.CmsJcrUtils; +import org.argeo.cms.swt.CmsSwtUtils; +import org.argeo.cms.ui.CmsUiProvider; +import org.argeo.eclipse.ui.fs.FsTreeViewer; +import org.argeo.jcr.Jcr; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +/** Tree view of a user root folders. */ +public class DocumentsTreeUiProvider implements CmsUiProvider { + private FileSystemProvider nodeFileSystemProvider; + private Repository repository; + + @Override + public Control createUi(Composite parent, Node context) throws RepositoryException { + parent.setLayout(new GridLayout()); + FsTreeViewer fsTreeViewer = new FsTreeViewer(parent, SWT.NONE); + fsTreeViewer.configureDefaultSingleColumnTable(500); + CmsView cmsView = CmsSwtUtils.getCmsView(parent); + Node homeNode = CmsJcrUtils.getUserHome(cmsView.doAs(() -> Jcr.login(repository, CmsConstants.HOME_WORKSPACE))); + parent.addDisposeListener((e1) -> Jcr.logout(homeNode)); + Path homePath = CmsFsUtils.getPath(nodeFileSystemProvider, homeNode); + fsTreeViewer.addSelectionChangedListener((e) -> { + IStructuredSelection selection = (IStructuredSelection) fsTreeViewer.getSelection(); + if (selection.isEmpty()) + return; + else { + Path newSelected = (Path) selection.getFirstElement(); + if (Files.isDirectory(newSelected)) { + Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(repository, newSelected)); + parent.addDisposeListener((e1) -> Jcr.logout(folderNode)); + cmsView.sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(folderNode)); + } + } + }); + fsTreeViewer.addDoubleClickListener((e) -> { + IStructuredSelection selection = (IStructuredSelection) fsTreeViewer.getSelection(); + if (selection.isEmpty()) + return; + else { + Path newSelected = (Path) selection.getFirstElement(); + if (Files.isDirectory(newSelected)) { + Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(repository, newSelected)); + parent.addDisposeListener((e1) -> Jcr.logout(folderNode)); + cmsView.sendEvent(SuiteEvent.openNewPart.topic(), SuiteEvent.eventProperties(folderNode)); + } + } + }); + fsTreeViewer.setPathsInput(homePath); + fsTreeViewer.getControl().setLayoutData(CmsSwtUtils.fillAll()); + fsTreeViewer.getControl().getParent().layout(true, true); + return fsTreeViewer.getControl(); + } + + public void setNodeFileSystemProvider(FileSystemProvider nodeFileSystemProvider) { + this.nodeFileSystemProvider = nodeFileSystemProvider; + } + + public void setRepository(Repository repository) { + this.repository = repository; + } + +}