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