]> git.argeo.org Git - gpl/argeo-suite.git/blob - library/DocumentsTreeUiProvider.java
Prepare next development cycle
[gpl/argeo-suite.git] / library / DocumentsTreeUiProvider.java
1 package org.argeo.app.ui.library;
2
3 import java.nio.file.Files;
4 import java.nio.file.Path;
5 import java.nio.file.spi.FileSystemProvider;
6
7 import javax.jcr.Node;
8 import javax.jcr.Repository;
9 import javax.jcr.RepositoryException;
10
11 import org.argeo.app.ui.SuiteUiUtils;
12 import org.argeo.app.ux.SuiteUxEvent;
13 import org.argeo.api.cms.CmsConstants;
14 import org.argeo.api.cms.ux.CmsView;
15 import org.argeo.cms.fs.CmsFsUtils;
16 import org.argeo.cms.jcr.CmsJcrUtils;
17 import org.argeo.cms.swt.CmsSwtUtils;
18 import org.argeo.cms.ui.CmsUiProvider;
19 import org.argeo.eclipse.ui.fs.FsTreeViewer;
20 import org.argeo.jcr.Jcr;
21 import org.eclipse.jface.viewers.IStructuredSelection;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.layout.GridLayout;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Control;
26
27 /** Tree view of a user root folders. */
28 public class DocumentsTreeUiProvider implements CmsUiProvider {
29 private FileSystemProvider nodeFileSystemProvider;
30 private Repository repository;
31
32 @Override
33 public Control createUi(Composite parent, Node context) throws RepositoryException {
34 parent.setLayout(new GridLayout());
35 FsTreeViewer fsTreeViewer = new FsTreeViewer(parent, SWT.NONE);
36 fsTreeViewer.configureDefaultSingleColumnTable(500);
37 CmsView cmsView = CmsSwtUtils.getCmsView(parent);
38 Node homeNode = CmsJcrUtils.getUserHome(cmsView.doAs(() -> Jcr.login(repository, CmsConstants.HOME_WORKSPACE)));
39 parent.addDisposeListener((e1) -> Jcr.logout(homeNode));
40 Path homePath = CmsFsUtils.getPath(nodeFileSystemProvider, homeNode);
41 fsTreeViewer.addSelectionChangedListener((e) -> {
42 IStructuredSelection selection = (IStructuredSelection) fsTreeViewer.getSelection();
43 if (selection.isEmpty())
44 return;
45 else {
46 Path newSelected = (Path) selection.getFirstElement();
47 if (Files.isDirectory(newSelected)) {
48 Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(repository, newSelected));
49 parent.addDisposeListener((e1) -> Jcr.logout(folderNode));
50 cmsView.sendEvent(SuiteUxEvent.refreshPart.topic(), SuiteUiUtils.eventProperties(folderNode));
51 }
52 }
53 });
54 fsTreeViewer.addDoubleClickListener((e) -> {
55 IStructuredSelection selection = (IStructuredSelection) fsTreeViewer.getSelection();
56 if (selection.isEmpty())
57 return;
58 else {
59 Path newSelected = (Path) selection.getFirstElement();
60 if (Files.isDirectory(newSelected)) {
61 Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(repository, newSelected));
62 parent.addDisposeListener((e1) -> Jcr.logout(folderNode));
63 cmsView.sendEvent(SuiteUxEvent.openNewPart.topic(), SuiteUiUtils.eventProperties(folderNode));
64 }
65 }
66 });
67 fsTreeViewer.setPathsInput(homePath);
68 fsTreeViewer.getControl().setLayoutData(CmsSwtUtils.fillAll());
69 fsTreeViewer.getControl().getParent().layout(true, true);
70 return fsTreeViewer.getControl();
71 }
72
73 public void setNodeFileSystemProvider(FileSystemProvider nodeFileSystemProvider) {
74 this.nodeFileSystemProvider = nodeFileSystemProvider;
75 }
76
77 public void setRepository(Repository repository) {
78 this.repository = repository;
79 }
80
81 }