From ec23f5f494a0435a9d27482e45e32f0fc228f6b4 Mon Sep 17 00:00:00 2001 From: Cherian Mathew Date: Fri, 2 Oct 2015 16:50:50 +0200 Subject: [PATCH 1/1] #5301 Fix null session issues, Add remoting session for feature tree editor --- .../session/CdmEntitySessionManager.java | 11 +-- .../session/ICdmEntitySessionManager.java | 4 - .../mock/MockCdmEntitySessionManager.java | 11 --- .../EditFeatureTreeWizardPage.java | 24 +++--- .../featuretree/FeatureTreeEditorWizard.java | 79 ++++++++++++++++--- .../preference/FeatureTreePreferences.java | 4 +- .../preference/menu/CdmPreferencePage.java | 39 ++++++--- 7 files changed, 116 insertions(+), 56 deletions(-) diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java index 84be7d871..1e5d7d889 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java @@ -186,6 +186,7 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager { setActiveSession(null); } ownerSessionMap.remove(owner); + notifyObservers(); } @@ -198,15 +199,10 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager { if(nullSession != null && nullSession.getOwner() == owner) { nullSession = null; } - notifyObservers(); - } - @Override - public void disposeNullSession() { - nullSession = null; - notifyObservers(); } + @Override public void disposeAll() { Set owners = @@ -217,11 +213,12 @@ public class CdmEntitySessionManager implements ICdmEntitySessionManager { session.dispose(); } } - notifyObservers(); + } void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) { ownerSessionMap.put(owner, session); + notifyObservers(); } /* (non-Javadoc) diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java index 180000381..ea2c7867b 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java @@ -72,9 +72,5 @@ public interface ICdmEntitySessionManager { */ public ICdmEntitySession getNullSession(); - /** - * - */ - public void disposeNullSession(); } \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java index 9eeabb7a5..32467f377 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java @@ -134,15 +134,4 @@ public class MockCdmEntitySessionManager implements ICdmEntitySessionManager { return new MockCdmEntitySession(); } - /* (non-Javadoc) - * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#disposeNullSession() - */ - @Override - public void disposeNullSession() { - // TODO Auto-generated method stub - - } - - - } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java index 3c4466647..a39b9ff52 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT - * European Distributed Institute of Taxonomy + * European Distributed Institute of Taxonomy * 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. */ @@ -49,7 +49,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; *

* EditFeatureTreeWizardPage class. *

- * + * * @author n.hoffmann * @created Aug 5, 2010 * @version 1.0 @@ -69,7 +69,7 @@ public class EditFeatureTreeWizardPage extends WizardPage implements *

* Constructor for EditFeatureTreeWizardPage. *

- * + * * @param pageName * a {@link java.lang.String} object. */ @@ -80,7 +80,7 @@ public class EditFeatureTreeWizardPage extends WizardPage implements /* * (non-Javadoc) - * + * * @see * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets * .Composite) @@ -153,7 +153,7 @@ public class EditFeatureTreeWizardPage extends WizardPage implements *

* setSelectedTree *

- * + * * @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); - 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(); @@ -237,8 +240,9 @@ public class EditFeatureTreeWizardPage extends WizardPage implements */ @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 diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java index 24a7795af..d65ad420e 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java @@ -1,20 +1,26 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* European Distributed Institute of Taxonomy * 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; +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 eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -24,30 +30,35 @@ import eu.etaxonomy.taxeditor.store.CdmStore; * @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 FeatureTree selectedFeatureTree; private ConversationHolder conversation; - + private ICdmEntitySession cdmEntitySession; + private ICdmEntitySession previousCdmEntitySession; + /** *

Constructor for FeatureTreeEditorWizard.

*/ public FeatureTreeEditorWizard(){ conversation = CdmStore.createConversation(); + previousCdmEntitySession = CdmStore.getCurrentSessionManager().getActiveSession(); + cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true); setWindowTitle("Feature Tree Editor"); } - + /** *

addPages

*/ - public void addPages() { + @Override + public void addPages() { selectFeatureTreePage = new SelectFeatureTreeWizardPage("SELECT"); addPage(selectFeatureTreePage); - + editFeatureTreePage = new EditFeatureTreeWizardPage("EDIT"); addPage(editFeatureTreePage); } @@ -59,16 +70,34 @@ public class FeatureTreeEditorWizard extends Wizard { 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(); + cdmEntitySession.dispose(); + if(previousCdmEntitySession != null) { + previousCdmEntitySession.bind(); + } } - + return true; } + /** {@inheritDoc} */ + @Override + public boolean performCancel() { + cdmEntitySession.dispose(); + if(previousCdmEntitySession != null) { + previousCdmEntitySession.bind(); + } + return true; + } + /** *

Setter for the field selectedFeatureTree.

* @@ -87,5 +116,31 @@ public class FeatureTreeEditorWizard extends Wizard { 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 getRootEntities() { + return Arrays.asList(selectedFeatureTree); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap() + */ + @Override + public Map> getPropertyPathsMap() { + // TODO Auto-generated method stub + return null; + } + } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java index 769e24a13..88d5d3a34 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java @@ -10,7 +10,6 @@ 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; @@ -19,6 +18,7 @@ import org.eclipse.swt.widgets.Control; 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; @@ -31,7 +31,7 @@ import eu.etaxonomy.taxeditor.ui.element.CommandHandlerButton; * @created Aug 5, 2010 * @version 1.0 */ -public class FeatureTreePreferences extends PreferencePage implements +public class FeatureTreePreferences extends CdmPreferencePage implements IWorkbenchPreferencePage { /** diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/CdmPreferencePage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/CdmPreferencePage.java index c52f69266..02ff53a0d 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/CdmPreferencePage.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/CdmPreferencePage.java @@ -14,6 +14,7 @@ import java.util.List; 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; @@ -27,12 +28,25 @@ import eu.etaxonomy.taxeditor.store.CdmStore; */ public abstract class CdmPreferencePage extends PreferencePage implements ICdmEntitySessionEnabled { + private ICdmEntitySession previousCdmEntitySession; + private boolean isApply; + public CdmPreferencePage() { - bindNullSession(); + initSession(); } 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(); } @@ -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() { - disposeNullSession(); + if(previousCdmEntitySession != null && !isApply) { + previousCdmEntitySession.bind(); + } return super.performOk(); } @Override public boolean performCancel() { - disposeNullSession(); + if(previousCdmEntitySession != null) { + previousCdmEntitySession.bind(); + } 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 -- 2.34.1