1 package org
.argeo
.app
.ui
.library
;
3 import java
.nio
.file
.Files
;
4 import java
.nio
.file
.Path
;
5 import java
.nio
.file
.spi
.FileSystemProvider
;
8 import javax
.jcr
.Repository
;
9 import javax
.jcr
.RepositoryException
;
11 import org
.argeo
.app
.ui
.SuiteEvent
;
12 import org
.argeo
.api
.cms
.CmsConstants
;
13 import org
.argeo
.api
.cms
.ux
.CmsView
;
14 import org
.argeo
.cms
.fs
.CmsFsUtils
;
15 import org
.argeo
.cms
.jcr
.CmsJcrUtils
;
16 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
17 import org
.argeo
.cms
.ui
.CmsUiProvider
;
18 import org
.argeo
.eclipse
.ui
.fs
.FsTreeViewer
;
19 import org
.argeo
.jcr
.Jcr
;
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
;
26 /** Tree view of a user root folders. */
27 public class DocumentsTreeUiProvider
implements CmsUiProvider
{
28 private FileSystemProvider nodeFileSystemProvider
;
29 private Repository repository
;
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
= CmsSwtUtils
.getCmsView(parent
);
37 Node homeNode
= CmsJcrUtils
.getUserHome(cmsView
.doAs(() -> Jcr
.login(repository
, CmsConstants
.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())
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
));
53 fsTreeViewer
.addDoubleClickListener((e
) -> {
54 IStructuredSelection selection
= (IStructuredSelection
) fsTreeViewer
.getSelection();
55 if (selection
.isEmpty())
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
));
66 fsTreeViewer
.setPathsInput(homePath
);
67 fsTreeViewer
.getControl().setLayoutData(CmsSwtUtils
.fillAll());
68 fsTreeViewer
.getControl().getParent().layout(true, true);
69 return fsTreeViewer
.getControl();
72 public void setNodeFileSystemProvider(FileSystemProvider nodeFileSystemProvider
) {
73 this.nodeFileSystemProvider
= nodeFileSystemProvider
;
76 public void setRepository(Repository repository
) {
77 this.repository
= repository
;