X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=library%2Forg.argeo.documents.ui%2Fsrc%2Forg%2Fargeo%2Fdocuments%2Fui%2FDocumentsTreeUiProvider.java;h=c2cda5647511535bd617320f746ecc21146efa40;hp=224576e39441fdfdda147939e3e19fa7a8a990c0;hb=f21589b7f2a19a79edcc213b867c47130faa76cd;hpb=dec8c11591d7525c4be934406326823348daa461 diff --git a/library/org.argeo.documents.ui/src/org/argeo/documents/ui/DocumentsTreeUiProvider.java b/library/org.argeo.documents.ui/src/org/argeo/documents/ui/DocumentsTreeUiProvider.java index 224576e..c2cda56 100644 --- a/library/org.argeo.documents.ui/src/org/argeo/documents/ui/DocumentsTreeUiProvider.java +++ b/library/org.argeo.documents.ui/src/org/argeo/documents/ui/DocumentsTreeUiProvider.java @@ -1,16 +1,24 @@ package org.argeo.documents.ui; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.spi.FileSystemProvider; +import java.util.HashMap; +import java.util.Map; import javax.jcr.Node; +import javax.jcr.Repository; import javax.jcr.RepositoryException; import org.argeo.api.NodeUtils; import org.argeo.cms.fs.CmsFsUtils; import org.argeo.cms.ui.CmsUiProvider; +import org.argeo.cms.ui.CmsView; import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.eclipse.ui.fs.FsTreeViewer; +import org.argeo.jcr.Jcr; +import org.argeo.suite.ui.SuiteEvent; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; @@ -19,6 +27,7 @@ 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 { @@ -27,6 +36,39 @@ public class DocumentsTreeUiProvider implements CmsUiProvider { fsTreeViewer.configureDefaultSingleColumnTable(500); Node homeNode = NodeUtils.getUserHome(context.getSession()); Path homePath = CmsFsUtils.getPath(nodeFileSystemProvider, homeNode); + CmsView cmsView = CmsView.getCmsView(parent); + 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)); + Map properties = new HashMap<>(); + properties.put(SuiteEvent.NODE_ID, Jcr.getIdentifier(folderNode)); + properties.put(SuiteEvent.WORKSPACE, Jcr.getWorkspaceName(folderNode)); + cmsView.sendEvent(SuiteEvent.refreshPart.topic(), properties); + } + } + }); + 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)); + Map properties = new HashMap<>(); + properties.put(SuiteEvent.NODE_ID, Jcr.getIdentifier(folderNode)); + properties.put(SuiteEvent.WORKSPACE, Jcr.getWorkspaceName(folderNode)); + cmsView.sendEvent(SuiteEvent.openNewPart.topic(), properties); + } + } + }); fsTreeViewer.setPathsInput(homePath); fsTreeViewer.getControl().setLayoutData(CmsUiUtils.fillAll()); fsTreeViewer.getControl().getParent().layout(true, true); @@ -37,4 +79,8 @@ public class DocumentsTreeUiProvider implements CmsUiProvider { this.nodeFileSystemProvider = nodeFileSystemProvider; } + public void setRepository(Repository repository) { + this.repository = repository; + } + }