X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Fjcr%2FJcrBrowserView.java;h=98e80936da362693bf1844582fd470a52521177b;hb=b71546ddc74d6ca49d252806aafd491c75dfe1fb;hp=0551e16b8c89db3133ef6e195cd82e1b785b7101;hpb=d4aea98e59c1754bdf557e43f19b9462053b59b2;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/jcr/JcrBrowserView.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/jcr/JcrBrowserView.java index 0551e16b8..98e80936d 100644 --- a/org.argeo.cms.e4/src/org/argeo/cms/e4/jcr/JcrBrowserView.java +++ b/org.argeo.cms.e4/src/org/argeo/cms/e4/jcr/JcrBrowserView.java @@ -1,18 +1,3 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.argeo.cms.e4.jcr; import java.util.List; @@ -31,9 +16,12 @@ import javax.jcr.observation.Event; import javax.jcr.observation.EventListener; import javax.jcr.observation.ObservationManager; +import org.argeo.api.cms.CmsConstants; import org.argeo.cms.CmsException; +import org.argeo.cms.security.CryptoKeyring; +import org.argeo.cms.security.Keyring; +import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.cms.ui.jcr.JcrBrowserUtils; -import org.argeo.cms.ui.jcr.JcrDClickListener; import org.argeo.cms.ui.jcr.NodeContentProvider; import org.argeo.cms.ui.jcr.NodeLabelProvider; import org.argeo.cms.ui.jcr.OsgiRepositoryRegister; @@ -42,10 +30,15 @@ import org.argeo.cms.ui.jcr.model.SingleJcrNodeElem; import org.argeo.eclipse.ui.EclipseUiException; import org.argeo.eclipse.ui.TreeParent; import org.argeo.eclipse.ui.jcr.AsyncUiEventListener; -import org.argeo.eclipse.ui.jcr.utils.NodeViewerComparer; -import org.argeo.node.security.CryptoKeyring; -import org.eclipse.jface.action.MenuManager; +import org.argeo.eclipse.ui.jcr.util.NodeViewerComparer; +import org.argeo.jcr.JcrUtils; +import org.eclipse.e4.core.contexts.IEclipseContext; +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.e4.ui.services.EMenuService; +import org.eclipse.e4.ui.workbench.modeling.EPartService; +import org.eclipse.e4.ui.workbench.modeling.ESelectionService; import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; @@ -58,33 +51,32 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Menu; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; /** * Basic View to display a sash form to browse a JCR compliant multiple * repository environment */ public class JcrBrowserView { - private static BundleContext bc = FrameworkUtil.getBundle(JcrBrowserView.class).getBundleContext(); + final static String ID = "org.argeo.cms.e4.jcrbrowser"; + final static String NODE_VIEWER_POPUP_MENU_ID = "org.argeo.cms.e4.popupmenu.nodeViewer"; private boolean sortChildNodes = true; /* DEPENDENCY INJECTION */ - private CryptoKeyring keyring; + @Inject + @Optional + private Keyring keyring; @Inject private RepositoryFactory repositoryFactory; @Inject private Repository nodeRepository; - // Current user session on the "Argeo node" default workspace + // Current user session on the home repository default workspace private Session userSession; - private OsgiRepositoryRegister repositoryRegister = new OsgiRepositoryRegister(bc); + private OsgiRepositoryRegister repositoryRegister = new OsgiRepositoryRegister(); // This page widgets private TreeViewer nodesViewer; @@ -93,21 +85,22 @@ public class JcrBrowserView { private EventListener resultsObserver; @PostConstruct - public void createPartControl(Composite parent) { + public void createPartControl(Composite parent, IEclipseContext context, EPartService partService, + ESelectionService selectionService, EMenuService menuService) { repositoryRegister.init(); parent.setLayout(new FillLayout()); SashForm sashForm = new SashForm(parent, SWT.VERTICAL); - sashForm.setSashWidth(4); - sashForm.setLayout(new FillLayout()); + // sashForm.setSashWidth(4); + // sashForm.setLayout(new FillLayout()); // Create the tree on top of the view Composite top = new Composite(sashForm, SWT.NONE); - GridLayout gl = new GridLayout(1, false); - top.setLayout(gl); + // GridLayout gl = new GridLayout(1, false); + top.setLayout(CmsSwtUtils.noSpaceGridLayout()); try { - this.userSession = this.nodeRepository.login(); + this.userSession = this.nodeRepository.login(CmsConstants.HOME_WORKSPACE); } catch (RepositoryException e) { throw new CmsException("Cannot open user session", e); } @@ -119,27 +112,35 @@ public class JcrBrowserView { nodesViewer = createNodeViewer(top, nodeContentProvider); // context menu : it is completely defined in the plugin.xml file. - MenuManager menuManager = new MenuManager(); - Menu menu = menuManager.createContextMenu(nodesViewer.getTree()); + // MenuManager menuManager = new MenuManager(); + // Menu menu = menuManager.createContextMenu(nodesViewer.getTree()); - nodesViewer.getTree().setMenu(menu); + // nodesViewer.getTree().setMenu(menu); nodesViewer.setInput(""); // Create the property viewer on the bottom Composite bottom = new Composite(sashForm, SWT.NONE); - bottom.setLayout(new GridLayout(1, false)); + bottom.setLayout(CmsSwtUtils.noSpaceGridLayout()); propertiesViewer = createPropertiesViewer(bottom); sashForm.setWeights(getWeights()); nodesViewer.setComparer(new NodeViewerComparer()); - + nodesViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + IStructuredSelection selection = (IStructuredSelection) event.getSelection(); + selectionService.setSelection(selection.toList()); + } + }); + nodesViewer.addDoubleClickListener(new JcrE4DClickListener(nodesViewer, partService)); + menuService.registerContextMenu(nodesViewer.getControl(), NODE_VIEWER_POPUP_MENU_ID); // getSite().registerContextMenu(menuManager, nodesViewer); // getSite().setSelectionProvider(nodesViewer); } @PreDestroy public void dispose() { + JcrUtils.logoutQuietly(userSession); repositoryRegister.destroy(); } @@ -171,7 +172,7 @@ public class JcrBrowserView { tmpNodeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); tmpNodeViewer.setContentProvider(nodeContentProvider); - tmpNodeViewer.setLabelProvider(new NodeLabelProvider()); + tmpNodeViewer.setLabelProvider((IBaseLabelProvider) new NodeLabelProvider()); tmpNodeViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { if (!event.getSelection().isEmpty()) { @@ -195,12 +196,12 @@ public class JcrBrowserView { throw new EclipseUiException("Cannot register listeners", e); } - tmpNodeViewer.addDoubleClickListener(new JcrDClickListener(tmpNodeViewer)); + // tmpNodeViewer.addDoubleClickListener(new JcrDClickListener(tmpNodeViewer)); return tmpNodeViewer; } protected TableViewer createPropertiesViewer(Composite parent) { - propertiesViewer = new TableViewer(parent); + propertiesViewer = new TableViewer(parent, SWT.NONE); propertiesViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); propertiesViewer.getTable().setHeaderVisible(true); propertiesViewer.setContentProvider(new PropertiesContentProvider()); @@ -267,9 +268,8 @@ public class JcrBrowserView { /** * Resets the tree content provider * - * @param sortChildNodes - * if true the content provider will use a comparer to sort nodes - * that might slow down the display + * @param sortChildNodes if true the content provider will use a comparer to + * sort nodes that might slow down the display */ public void setSortChildNodes(boolean sortChildNodes) { this.sortChildNodes = sortChildNodes;