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
.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
;
27 /** Tree view of a user root folders. */
28 public class DocumentsTreeUiProvider
implements CmsUiProvider
{
29 private FileSystemProvider nodeFileSystemProvider
;
30 private Repository repository
;
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())
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
));
54 fsTreeViewer
.addDoubleClickListener((e
) -> {
55 IStructuredSelection selection
= (IStructuredSelection
) fsTreeViewer
.getSelection();
56 if (selection
.isEmpty())
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
));
67 fsTreeViewer
.setPathsInput(homePath
);
68 fsTreeViewer
.getControl().setLayoutData(CmsSwtUtils
.fillAll());
69 fsTreeViewer
.getControl().getParent().layout(true, true);
70 return fsTreeViewer
.getControl();
73 public void setNodeFileSystemProvider(FileSystemProvider nodeFileSystemProvider
) {
74 this.nodeFileSystemProvider
= nodeFileSystemProvider
;
77 public void setRepository(Repository repository
) {
78 this.repository
= repository
;