package org.argeo.documents.ui;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.spi.FileSystemProvider;
import javax.jcr.Node;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
+import org.argeo.api.NodeConstants;
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;
/** 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 {
parent.setLayout(new GridLayout());
FsTreeViewer fsTreeViewer = new FsTreeViewer(parent, SWT.NONE);
fsTreeViewer.configureDefaultSingleColumnTable(500);
- Node homeNode = NodeUtils.getUserHome(context.getSession());
+ CmsView cmsView = CmsView.getCmsView(parent);
+ Node homeNode = NodeUtils.getUserHome(cmsView.doAs(() -> Jcr.login(repository, NodeConstants.HOME_WORKSPACE)));
+ parent.addDisposeListener((e1) -> Jcr.logout(homeNode));
Path homePath = CmsFsUtils.getPath(nodeFileSystemProvider, homeNode);
+ 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));
+ cmsView.sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(folderNode));
+ }
+ }
+ });
+ 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));
+ cmsView.sendEvent(SuiteEvent.openNewPart.topic(), SuiteEvent.eventProperties(folderNode));
+ }
+ }
+ });
fsTreeViewer.setPathsInput(homePath);
fsTreeViewer.getControl().setLayoutData(CmsUiUtils.fillAll());
fsTreeViewer.getControl().getParent().layout(true, true);
this.nodeFileSystemProvider = nodeFileSystemProvider;
}
+ public void setRepository(Repository repository) {
+ this.repository = repository;
+ }
+
}