ref #7887 Speed up saving
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 12 Nov 2018 08:00:13 +0000 (09:00 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 12 Nov 2018 08:00:13 +0000 (09:00 +0100)
 - Fix multiple saving of the same term base

eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java

index 0338ac98f58cc8fbef5a76e29f67156b932f70d2..7cc93894da9dadd13bb2bd18f936d101a6a1a414 100644 (file)
@@ -8,8 +8,8 @@
  */
 package eu.etaxonomy.taxeditor.editor.definedterm.e4;
 
  */
 package eu.etaxonomy.taxeditor.editor.definedterm.e4;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -41,7 +41,9 @@ import org.eclipse.ui.IMemento;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.TermBase;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
@@ -91,7 +93,7 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IE4SavablePart, IContex
     @Inject
     private MPart thisPart;
 
     @Inject
     private MPart thisPart;
 
-    private List<DefinedTermBase> changedTerms = new ArrayList<>();
+    private Set<TermBase> changedTerms = new HashSet<>();
 
        @Inject
        public DefinedTermEditorE4() {
 
        @Inject
        public DefinedTermEditorE4() {
@@ -187,9 +189,15 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IE4SavablePart, IContex
     @Persist
        public void save(IProgressMonitor monitor) {
                getConversationHolder().commit();
     @Persist
        public void save(IProgressMonitor monitor) {
                getConversationHolder().commit();
-        changedTerms.forEach(term->CdmStore.getService(ITermService.class).merge(term));
+               for(TermBase term:changedTerms){
+            if(term.isInstanceOf(DefinedTermBase.class)){
+                CdmStore.getService(ITermService.class).merge((DefinedTermBase) term);
+            }
+            else if(term.isInstanceOf(TermVocabulary.class)){
+                CdmStore.getService(IVocabularyService.class).merge((TermVocabulary) term);
+            }
+               }
         changedTerms.clear();
         changedTerms.clear();
-               input.merge();
                setDirty(false);
                input.initialiseVocabularies();
                viewer.refresh();
                setDirty(false);
                input.initialiseVocabularies();
                viewer.refresh();
@@ -238,6 +246,7 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IE4SavablePart, IContex
                TermVocabulary vocabulary = (TermVocabulary)element;
                TermVocabularyDto vocabularyDto = new TermVocabularyDto(vocabulary.getUuid(), vocabulary.getRepresentations());
                viewer.update(vocabularyDto, null);
                TermVocabulary vocabulary = (TermVocabulary)element;
                TermVocabularyDto vocabularyDto = new TermVocabularyDto(vocabulary.getUuid(), vocabulary.getRepresentations());
                viewer.update(vocabularyDto, null);
+               changedTerms.add(vocabulary);
            }
                setDirty(true);
                viewer.update(element, null);
            }
                setDirty(true);
                viewer.update(element, null);