Introduce Makefile for Java build
[lgpl/argeo-commons.git] / org.argeo.cms.e4 / src / org / argeo / cms / e4 / jcr / JcrBrowserView.java
index dd5bcb184fe4457ca6796d4a4af3ff4280222d93..98e80936da362693bf1844582fd470a52521177b 100644 (file)
@@ -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,20 +16,26 @@ 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;
 import org.argeo.cms.ui.jcr.PropertiesContentProvider;
 import org.argeo.cms.ui.jcr.model.SingleJcrNodeElem;
-import org.argeo.cms.util.CmsUtils;
 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.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;
@@ -68,21 +59,21 @@ import org.eclipse.swt.widgets.Display;
  * repository environment
  */
 public class JcrBrowserView {
-       public final static String ID = "org.argeo.cms.e4.jcrbrowser";
-
-       @Inject
-       private ESelectionService selectionService;
+       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();
@@ -94,7 +85,8 @@ 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());
@@ -105,10 +97,10 @@ public class JcrBrowserView {
                // Create the tree on top of the view
                Composite top = new Composite(sashForm, SWT.NONE);
                // GridLayout gl = new GridLayout(1, false);
-               top.setLayout(CmsUtils.noSpaceGridLayout());
+               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);
                }
@@ -129,7 +121,7 @@ public class JcrBrowserView {
 
                // Create the property viewer on the bottom
                Composite bottom = new Composite(sashForm, SWT.NONE);
-               bottom.setLayout(CmsUtils.noSpaceGridLayout());
+               bottom.setLayout(CmsSwtUtils.noSpaceGridLayout());
                propertiesViewer = createPropertiesViewer(bottom);
 
                sashForm.setWeights(getWeights());
@@ -140,12 +132,15 @@ public class JcrBrowserView {
                                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();
        }
 
@@ -201,7 +196,7 @@ public class JcrBrowserView {
                                throw new EclipseUiException("Cannot register listeners", e);
                        }
 
-               tmpNodeViewer.addDoubleClickListener(new JcrDClickListener(tmpNodeViewer));
+               // tmpNodeViewer.addDoubleClickListener(new JcrDClickListener(tmpNodeViewer));
                return tmpNodeViewer;
        }
 
@@ -273,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;