From: Cherian Mathew Date: Tue, 1 Dec 2015 15:01:06 +0000 (+0100) Subject: #5277 Correct session intialisation and default feature tree caching X-Git-Tag: 3.12.0^2~46 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/b6d5d6a65a7ed4212c8459cdd1f71dee3ef2d971?ds=sidebyside #5277 Correct session intialisation and default feature tree caching --- diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java index 33626cb75..b0aeb0f4d 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java @@ -20,6 +20,7 @@ import eu.etaxonomy.cdm.model.description.Feature; import eu.etaxonomy.cdm.model.description.FeatureTree; import eu.etaxonomy.cdm.model.description.IDescribable; import eu.etaxonomy.cdm.model.description.IndividualsAssociation; +import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput; import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; @@ -38,7 +39,7 @@ public class DescriptiveContentProvider implements ITreeContentProvider { protected static final Object[] NO_CHILDREN = new Object[0]; protected Map, FeatureNodeContainerTree> featureNodeContainerCache; private boolean showOnlyIndividualAssociations; - private static FeatureTree defaultFeatureTree = null; + public DescriptiveContentProvider(Map, FeatureNodeContainerTree> featureNodeContainerCache) { this(featureNodeContainerCache, false); @@ -146,9 +147,6 @@ public class DescriptiveContentProvider implements ITreeContentProvider { */ private FeatureTree getFeatureTree(DescriptionBase description){ - if(defaultFeatureTree == null) { - defaultFeatureTree = FeatureTree.NewInstance(TermStore.getTerms(Feature.class)); - } FeatureTree featureTree; // TODO change this to the feature tree associated with this taxon description if (description.hasStructuredData()){ @@ -159,7 +157,7 @@ public class DescriptiveContentProvider implements ITreeContentProvider { // create a transient tree with all features if none was selected if(featureTree == null){ - featureTree = defaultFeatureTree; + featureTree = TermEditorInput.getDefaultFeatureTree(); } return featureTree; diff --git a/eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF index 4629862f6..2b4298631 100644 --- a/eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF @@ -12,6 +12,7 @@ Export-Package: eu.etaxonomy.cdm, eu.etaxonomy.taxeditor.dnd.transfer, eu.etaxonomy.taxeditor.editor, eu.etaxonomy.taxeditor.editor.definedterm, + eu.etaxonomy.taxeditor.editor.definedterm.input, eu.etaxonomy.taxeditor.featuretree, eu.etaxonomy.taxeditor.handler, eu.etaxonomy.taxeditor.io, diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java index 3c1622449..11bea5cfb 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermEditor.java @@ -9,11 +9,6 @@ */ package eu.etaxonomy.taxeditor.editor.definedterm; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.MenuManager; @@ -40,17 +35,12 @@ import org.eclipse.ui.part.EditorPart; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; -import eu.etaxonomy.cdm.api.service.IVocabularyService; import eu.etaxonomy.cdm.model.common.CdmBase; -import eu.etaxonomy.cdm.model.common.DefinedTermBase; import eu.etaxonomy.cdm.model.common.OrderedTermBase; -import eu.etaxonomy.cdm.model.common.TermVocabulary; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput; import eu.etaxonomy.taxeditor.model.IDirtyMarkable; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; -import eu.etaxonomy.taxeditor.session.ICdmEntitySession; -import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.ui.element.LayoutConstants; @@ -59,7 +49,7 @@ import eu.etaxonomy.taxeditor.ui.element.LayoutConstants; * @date 3 Jan 2012 * */ -public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkable, IPostOperationEnabled, ICdmEntitySessionEnabled { +public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkable, IPostOperationEnabled { public static final String ID = "eu.etaxonomy.taxeditor.editor.definedTerm"; @@ -70,8 +60,6 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable private ISelectionService selectionService; private boolean dirty; - private final ICdmEntitySession cdmEntitySession; - private final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE; /** @@ -80,7 +68,6 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable public DefinedTermEditor() { super(); conversation = CdmStore.createConversation(); - cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true); } @Override @@ -161,9 +148,7 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable @Override public void doSave(IProgressMonitor monitor) { getConversationHolder().commit(); - if(CdmStore.getCurrentSessionManager().isRemoting()) { - CdmStore.getService(IVocabularyService.class).merge(new ArrayList(getRootEntities()), true); - } + getDefinedTermEditorInput().merge(); setDirty(false); getDefinedTermEditorInput().initialiseVocabularies(); viewer.refresh(); @@ -194,7 +179,7 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable public void setFocus() { viewer.getControl().setFocus(); getConversationHolder().bind(); - cdmEntitySession.bind(); + getDefinedTermEditorInput().bind(); } @Override @@ -275,34 +260,7 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable @Override public void dispose() { - cdmEntitySession.dispose(); + getDefinedTermEditorInput().dispose(); super.dispose(); } - - /* (non-Javadoc) - * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession() - */ - @Override - public ICdmEntitySession getCdmEntitySession() { - return cdmEntitySession; - } - - /* (non-Javadoc) - * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() - */ - @Override - public Set> getRootEntities() { - return getDefinedTermEditorInput().getVocabularies(); - } - - /* (non-Javadoc) - * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap() - */ - @Override - public Map> getPropertyPathsMap() { - // TODO Auto-generated method stub - return null; - } - - } \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/AbstractDefinedTermEditorInput.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/AbstractDefinedTermEditorInput.java index c18d397be..0a4132174 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/AbstractDefinedTermEditorInput.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/AbstractDefinedTermEditorInput.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2009 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. */ @@ -16,19 +16,20 @@ import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPersistableElement; import eu.etaxonomy.cdm.model.common.DefinedTermBase; +import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput; /** * @author l.morris * @date 3 Jan 2012 * */ -public abstract class AbstractDefinedTermEditorInput implements IEditorInput { +public abstract class AbstractDefinedTermEditorInput extends CdmEntitySessionInput implements IEditorInput { /** - * + * */ public AbstractDefinedTermEditorInput() { - super(); + super(true); } @Override @@ -59,7 +60,7 @@ public abstract class AbstractDefinedTermEditorInput /** * @return */ - public abstract List getTermClasses(); + public abstract List getTermClasses(); + - } \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/TermEditorInput.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/TermEditorInput.java index aef64fe08..518382f1f 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/TermEditorInput.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/TermEditorInput.java @@ -1,14 +1,15 @@ // $Id$ /** * Copyright (C) 2009 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.editor.definedterm.input; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -19,7 +20,10 @@ import eu.etaxonomy.cdm.model.common.DefinedTerm; import eu.etaxonomy.cdm.model.common.DefinedTermBase; import eu.etaxonomy.cdm.model.common.TermType; import eu.etaxonomy.cdm.model.common.TermVocabulary; +import eu.etaxonomy.cdm.model.description.Feature; +import eu.etaxonomy.cdm.model.description.FeatureTree; import eu.etaxonomy.taxeditor.store.CdmStore; +import eu.etaxonomy.taxeditor.store.TermStore; @@ -32,10 +36,15 @@ public class TermEditorInput extends AbstractDefinedTermEditorInput private TermType termType; private Set> vocabularies; + + // FIXME: the default feature should be move to CdmApplicationState + // where it is a singleton instance variable + private static FeatureTree defaultFeatureTree = null; + private List termClasses = Arrays.asList(new String[]{ DefinedTerm.class.getName() }); - + public TermEditorInput(TermType termType) { this.termType = termType; vocabularies = new HashSet>(); @@ -56,21 +65,52 @@ public class TermEditorInput extends AbstractDefinedTermEditorInput public List getTermClasses() { return termClasses; } - + public TermType getTermType() { return termType; } - + public void initialiseVocabularies() { if(vocabularies != null) { vocabularies.clear(); - } + } List> vocs = CdmStore.getService(IVocabularyService.class).findByTermType(termType); - vocabularies.addAll(vocs); + vocabularies.addAll(vocs); } - + public Set> getVocabularies() { return vocabularies; } + public void updateDefaultFeatureTree() { + for(TermVocabulary vocab : getVocabularies()) { + if(vocab != null && TermType.Feature.equals(vocab.getTermType())) { + defaultFeatureTree = null; + } + } + } + /** + * {@inheritDoc} + */ + @Override + public Set> getRootEntities() { + return getVocabularies(); + } + /** + * {@inheritDoc} + */ + @Override + public void merge() { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmStore.getService(IVocabularyService.class).merge(new ArrayList(getRootEntities()), true); + updateDefaultFeatureTree(); + } + } + + public static FeatureTree getDefaultFeatureTree() { + if(defaultFeatureTree == null) { + defaultFeatureTree = FeatureTree.NewInstance(TermStore.getTerms(Feature.class)); + } + return defaultFeatureTree; + } } \ No newline at end of file