Improve documents management.
[gpl/argeo-suite.git] / library / org.argeo.documents.ui / src / org / argeo / documents / ui / DocumentsTreeUiProvider.java
index 224576e39441fdfdda147939e3e19fa7a8a990c0..c2cda5647511535bd617320f746ecc21146efa40 100644 (file)
@@ -1,16 +1,24 @@
 package org.argeo.documents.ui;
 
 package org.argeo.documents.ui;
 
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.spi.FileSystemProvider;
 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.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 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.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;
 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;
 /** 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 {
 
        @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);
                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<String, Object> 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<String, Object> 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);
                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;
        }
 
                this.nodeFileSystemProvider = nodeFileSystemProvider;
        }
 
+       public void setRepository(Repository repository) {
+               this.repository = repository;
+       }
+
 }
 }