#5301 Fix null session issues, Add remoting session for feature tree editor
authorCherian Mathew <c.mathew@bgbm.org>
Fri, 2 Oct 2015 14:50:50 +0000 (16:50 +0200)
committerCherian Mathew <c.mathew@bgbm.org>
Fri, 2 Oct 2015 14:52:25 +0000 (16:52 +0200)
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/CdmPreferencePage.java

index 84be7d87176ac0dc72d153c09c8674f12d622b31..1e5d7d889b77c3f3584158c840f53ed8fd395218 100644 (file)
@@ -186,6 +186,7 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
             setActiveSession(null);
         }
         ownerSessionMap.remove(owner);
             setActiveSession(null);
         }
         ownerSessionMap.remove(owner);
+        notifyObservers();
 
     }
 
 
     }
 
@@ -198,15 +199,10 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
         if(nullSession != null && nullSession.getOwner() == owner) {
             nullSession = null;
         }
         if(nullSession != null && nullSession.getOwner() == owner) {
             nullSession = null;
         }
-        notifyObservers();
-    }
 
 
-    @Override
-    public void disposeNullSession() {
-        nullSession = null;
-        notifyObservers();
     }
 
     }
 
+
     @Override
     public void disposeAll() {
         Set<ICdmEntitySessionEnabled> owners =
     @Override
     public void disposeAll() {
         Set<ICdmEntitySessionEnabled> owners =
@@ -217,11 +213,12 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager {
                 session.dispose();
             }
         }
                 session.dispose();
             }
         }
-        notifyObservers();
+
     }
 
     void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) {
         ownerSessionMap.put(owner, session);
     }
 
     void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) {
         ownerSessionMap.put(owner, session);
+        notifyObservers();
     }
 
     /* (non-Javadoc)
     }
 
     /* (non-Javadoc)
index 1800003818b5750915666e88ab73f4657067d7e5..ea2c7867b79a2b111101adf08654b173e3e996de 100644 (file)
@@ -72,9 +72,5 @@ public interface ICdmEntitySessionManager {
      */
     public ICdmEntitySession getNullSession();
 
      */
     public ICdmEntitySession getNullSession();
 
-    /**
-     *
-     */
-    public void disposeNullSession();
 
 }
\ No newline at end of file
 
 }
\ No newline at end of file
index 9eeabb7a5bbbbb00ba5f1880ee7978429c88a3d6..32467f377a8c2fd8cc59056a683e893eae137f4f 100644 (file)
@@ -134,15 +134,4 @@ public class MockCdmEntitySessionManager implements ICdmEntitySessionManager {
         return new MockCdmEntitySession();
     }
 
         return new MockCdmEntitySession();
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#disposeNullSession()
-     */
-    @Override
-    public void disposeNullSession() {
-        // TODO Auto-generated method stub
-
-    }
-
-
-
 }
 }
index 3c4466647a4ad9405d9fb6d47ed03f01f9f6fe19..a39b9ff525836a4753f2ff3babfe259afd50dfa4 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
  * Copyright (C) 2007 EDIT
 // $Id$
 /**
  * Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy 
+ * European Distributed Institute of Taxonomy
  * http://www.e-taxonomy.eu
  * http://www.e-taxonomy.eu
- * 
+ *
  * The contents of this file are subject to the Mozilla Public License Version 1.1
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
  * The contents of this file are subject to the Mozilla Public License Version 1.1
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
@@ -49,7 +49,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * <p>
  * EditFeatureTreeWizardPage class.
  * </p>
  * <p>
  * EditFeatureTreeWizardPage class.
  * </p>
- * 
+ *
  * @author n.hoffmann
  * @created Aug 5, 2010
  * @version 1.0
  * @author n.hoffmann
  * @created Aug 5, 2010
  * @version 1.0
@@ -69,7 +69,7 @@ public class EditFeatureTreeWizardPage extends WizardPage implements
         * <p>
         * Constructor for EditFeatureTreeWizardPage.
         * </p>
         * <p>
         * Constructor for EditFeatureTreeWizardPage.
         * </p>
-        * 
+        *
         * @param pageName
         *            a {@link java.lang.String} object.
         */
         * @param pageName
         *            a {@link java.lang.String} object.
         */
@@ -80,7 +80,7 @@ public class EditFeatureTreeWizardPage extends WizardPage implements
 
        /*
         * (non-Javadoc)
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
         * .Composite)
         * @see
         * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
         * .Composite)
@@ -153,7 +153,7 @@ public class EditFeatureTreeWizardPage extends WizardPage implements
         * <p>
         * setSelectedTree
         * </p>
         * <p>
         * setSelectedTree
         * </p>
-        * 
+        *
         * @param featureTree
         *            a {@link eu.etaxonomy.cdm.model.description.FeatureTree}
         *            object.
         * @param featureTree
         *            a {@link eu.etaxonomy.cdm.model.description.FeatureTree}
         *            object.
@@ -200,8 +200,11 @@ public class EditFeatureTreeWizardPage extends WizardPage implements
                                                .getAdditionalFeatures();
                                for (Feature feature : additionalFeatures) {
                                        FeatureNode child = FeatureNode.NewInstance(feature);
                                                .getAdditionalFeatures();
                                for (Feature feature : additionalFeatures) {
                                        FeatureNode child = FeatureNode.NewInstance(feature);
-                                       CdmStore.getService(IFeatureNodeService.class)
-                                                       .saveOrUpdate(child);
+                                       if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                                           CdmStore.getService(IFeatureNodeService.class).merge(child, true);
+                                       } else {
+                                           CdmStore.getService(IFeatureNodeService.class).saveOrUpdate(child);
+                                       }
                                        parent.addChild(child);
                                }
                                viewer.refresh();
                                        parent.addChild(child);
                                }
                                viewer.refresh();
@@ -237,8 +240,9 @@ public class EditFeatureTreeWizardPage extends WizardPage implements
                 */
                @Override
                public void dragFinished(DragSourceEvent event) {
                 */
                @Override
                public void dragFinished(DragSourceEvent event) {
-                       if (!event.doit)
-                               return;
+                       if (!event.doit) {
+                return;
+            }
                        // if the featureNode was moved, remove it from the source viewer
                        if (event.detail == DND.DROP_MOVE) {
                                IStructuredSelection selection = (IStructuredSelection) viewer
                        // if the featureNode was moved, remove it from the source viewer
                        if (event.detail == DND.DROP_MOVE) {
                                IStructuredSelection selection = (IStructuredSelection) viewer
index 24a7795afecaed2f557a64ebf55cac2976e0f693..d65ad420e94c6cb1c34220b7246246ccedccc893 100644 (file)
@@ -1,20 +1,26 @@
 // $Id$
 /**
 * Copyright (C) 2007 EDIT
 // $Id$
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 package eu.etaxonomy.taxeditor.featuretree;
 
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 package eu.etaxonomy.taxeditor.featuretree;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
 import org.eclipse.jface.wizard.Wizard;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
 import org.eclipse.jface.wizard.Wizard;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -24,30 +30,35 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created Aug 5, 2010
  * @version 1.0
  */
  * @created Aug 5, 2010
  * @version 1.0
  */
-public class FeatureTreeEditorWizard extends Wizard {
-       
+public class FeatureTreeEditorWizard extends Wizard implements ICdmEntitySessionEnabled {
+
        private SelectFeatureTreeWizardPage selectFeatureTreePage;
        private EditFeatureTreeWizardPage editFeatureTreePage;
        private SelectFeatureTreeWizardPage selectFeatureTreePage;
        private EditFeatureTreeWizardPage editFeatureTreePage;
-       
+
        private FeatureTree selectedFeatureTree;
 
        private ConversationHolder conversation;
        private FeatureTree selectedFeatureTree;
 
        private ConversationHolder conversation;
-       
+       private ICdmEntitySession cdmEntitySession;
+       private ICdmEntitySession previousCdmEntitySession;
+
        /**
         * <p>Constructor for FeatureTreeEditorWizard.</p>
         */
        public FeatureTreeEditorWizard(){
                conversation = CdmStore.createConversation();
        /**
         * <p>Constructor for FeatureTreeEditorWizard.</p>
         */
        public FeatureTreeEditorWizard(){
                conversation = CdmStore.createConversation();
+               previousCdmEntitySession = CdmStore.getCurrentSessionManager().getActiveSession();
+               cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
                setWindowTitle("Feature Tree Editor");
        }
                setWindowTitle("Feature Tree Editor");
        }
-       
+
        /**
         * <p>addPages</p>
         */
        /**
         * <p>addPages</p>
         */
-       public void addPages() {
+       @Override
+    public void addPages() {
                selectFeatureTreePage = new SelectFeatureTreeWizardPage("SELECT");
                addPage(selectFeatureTreePage);
                selectFeatureTreePage = new SelectFeatureTreeWizardPage("SELECT");
                addPage(selectFeatureTreePage);
-               
+
                editFeatureTreePage = new EditFeatureTreeWizardPage("EDIT");
                addPage(editFeatureTreePage);
        }
                editFeatureTreePage = new EditFeatureTreeWizardPage("EDIT");
                addPage(editFeatureTreePage);
        }
@@ -59,16 +70,34 @@ public class FeatureTreeEditorWizard extends Wizard {
        public boolean performFinish() {
                try{
                        if (selectedFeatureTree != null){
        public boolean performFinish() {
                try{
                        if (selectedFeatureTree != null){
-                               CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(selectedFeatureTree);
+                           if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                               CdmStore.getService(IFeatureTreeService.class).merge(selectedFeatureTree, true);
+                           } else {
+                               CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(selectedFeatureTree);
+                           }
                        }
                        conversation.commit();
                }finally{
                        conversation.close();
                        }
                        conversation.commit();
                }finally{
                        conversation.close();
+                       cdmEntitySession.dispose();
+                       if(previousCdmEntitySession != null) {
+                           previousCdmEntitySession.bind();
+                       }
                }
                }
-               
+
                return true;
        }
 
                return true;
        }
 
+       /** {@inheritDoc} */
+    @Override
+    public boolean performCancel() {
+        cdmEntitySession.dispose();
+        if(previousCdmEntitySession != null) {
+            previousCdmEntitySession.bind();
+        }
+        return true;
+    }
+
        /**
         * <p>Setter for the field <code>selectedFeatureTree</code>.</p>
         *
        /**
         * <p>Setter for the field <code>selectedFeatureTree</code>.</p>
         *
@@ -87,5 +116,31 @@ public class FeatureTreeEditorWizard extends Wizard {
        public FeatureTree getSelectedFeatureTree() {
                return selectedFeatureTree;
        }
        public FeatureTree getSelectedFeatureTree() {
                return selectedFeatureTree;
        }
-       
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
+     */
+    @Override
+    public ICdmEntitySession getCdmEntitySession() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
+     */
+    @Override
+    public List<FeatureTree> getRootEntities() {
+        return Arrays.asList(selectedFeatureTree);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
+     */
+    @Override
+    public Map<Object, List<String>> getPropertyPathsMap() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
 }
index 769e24a1368e322063fee17e45c0a196541291c2..88d5d3a34073027c168b4735fd51e25c22fff060 100644 (file)
@@ -10,7 +10,6 @@
 
 package eu.etaxonomy.taxeditor.preference;
 
 
 package eu.etaxonomy.taxeditor.preference;
 
-import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridLayout;
@@ -19,6 +18,7 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
+import eu.etaxonomy.taxeditor.preference.menu.CdmPreferencePage;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.element.CommandHandlerButton;
 
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.element.CommandHandlerButton;
 
@@ -31,7 +31,7 @@ import eu.etaxonomy.taxeditor.ui.element.CommandHandlerButton;
  * @created Aug 5, 2010
  * @version 1.0
  */
  * @created Aug 5, 2010
  * @version 1.0
  */
-public class FeatureTreePreferences extends PreferencePage implements
+public class FeatureTreePreferences extends CdmPreferencePage implements
                IWorkbenchPreferencePage {
 
        /**
                IWorkbenchPreferencePage {
 
        /**
index c52f692666b7faa3c862105e413726eb2bd1b10b..02ff53a0d7b0c78f38f0fe44fa31c6531b70416c 100644 (file)
@@ -14,6 +14,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.eclipse.jface.preference.PreferencePage;
 import java.util.Map;
 
 import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
@@ -27,12 +28,25 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  */
 public abstract class CdmPreferencePage extends PreferencePage implements ICdmEntitySessionEnabled {
 
  */
 public abstract class CdmPreferencePage extends PreferencePage implements ICdmEntitySessionEnabled {
 
+    private ICdmEntitySession previousCdmEntitySession;
+    private boolean isApply;
+
     public CdmPreferencePage() {
     public CdmPreferencePage() {
-        bindNullSession();
+        initSession();
     }
 
     public CdmPreferencePage(String title) {
         super(title);
     }
 
     public CdmPreferencePage(String title) {
         super(title);
+        initSession();
+    }
+
+    public CdmPreferencePage(String title, ImageDescriptor image) {
+        super(title, image);
+        initSession();
+    }
+
+    private void initSession() {
+        previousCdmEntitySession = CdmStore.getCurrentSessionManager().getActiveSession();
         bindNullSession();
     }
 
         bindNullSession();
     }
 
@@ -42,25 +56,30 @@ public abstract class CdmPreferencePage extends PreferencePage implements ICdmEn
         }
     }
 
         }
     }
 
-    protected void disposeNullSession() {
-        if(CdmStore.isActive()) {
-            CdmStore.getCurrentSessionManager().disposeNullSession();
-        }
-    }
-
     @Override
     public boolean performOk() {
     @Override
     public boolean performOk() {
-        disposeNullSession();
+        if(previousCdmEntitySession != null && !isApply) {
+            previousCdmEntitySession.bind();
+        }
         return super.performOk();
     }
 
     @Override
     public boolean performCancel() {
         return super.performOk();
     }
 
     @Override
     public boolean performCancel() {
-        disposeNullSession();
+        if(previousCdmEntitySession != null) {
+            previousCdmEntitySession.bind();
+        }
         return super.performCancel();
     }
 
         return super.performCancel();
     }
 
-       /* (non-Javadoc)
+    @Override
+    public void performApply() {
+        isApply = true;
+        super.performApply();
+        isApply = false;
+    }
+
+    /* (non-Javadoc)
      * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
      */
     @Override
      * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
      */
     @Override