improve deduplication handling and saving in bulkeditor
[taxeditor.git] / eu.etaxonomy.taxeditor.bulkeditor / src / main / java / eu / etaxonomy / taxeditor / bulkeditor / input / AbstractBulkEditorInput.java
index bb383be7f65a2a60521f086da8ccd2bee316ef79..a26da3ad3d08d4d9801003b933ae283de80d7ea6 100644 (file)
@@ -57,8 +57,10 @@ public abstract class AbstractBulkEditorInput<T extends CdmBase> extends CdmEnti
        private List<T> saveCandidates = new ArrayList<>();
 
 
-       private Set<T> mergeCandidates = new HashSet<>();
-       private T mergeTarget = null;
+       private Set<T> markedMergeCandidates = new HashSet<>();
+       private T markedMergeTarget = null;
+
+       private HashMap<T, Set<T>> mergedEntities = new HashMap<>();
 
        private IEntityCreator<T> entityCreator;
        private final ConversationHolder conversation;
@@ -91,27 +93,27 @@ public abstract class AbstractBulkEditorInput<T extends CdmBase> extends CdmEnti
        protected abstract T loadEntity(UUID entityUuid);
 
        public void setMergeTarget(T t){
-           mergeTarget = t;
+           markedMergeTarget = t;
        }
 
     public Set<T> getMergeCandidates() {
-        return mergeCandidates;
+        return markedMergeCandidates;
     }
 
     public T getMergeTarget() {
-        return mergeTarget;
+        return markedMergeTarget;
     }
 
        public void removeMergeTarget(){
-           mergeTarget = null;
+           markedMergeTarget = null;
        }
 
        public void addMergeCandidate(T t){
-           mergeCandidates.add(t);
+           markedMergeCandidates.add(t);
        }
 
        public void removeMergeCandidate(T t){
-               mergeCandidates.remove(t);
+               markedMergeCandidates.remove(t);
        }
 
     public void addToDelete(T t, DeleteConfiguratorBase config) {
@@ -198,13 +200,18 @@ public abstract class AbstractBulkEditorInput<T extends CdmBase> extends CdmEnti
             }
            }
            toDelete.clear();
+           if (!saveCandidates.isEmpty()){
+            CdmStore.getService(saveCandidates.get(0)).merge(saveCandidates, true);
+        }
            if(resetMerge){
                //merge entities
-               for(T mergeCandidate:mergeCandidates){
-                   merge(mergeCandidate, mergeTarget);
+               for(T mergeTarget:mergedEntities.keySet()){
+                   for (T mergeCandidate: mergedEntities.get(mergeTarget)){
+                       merge(mergeCandidate, mergeTarget);
+                   }
                }
-               mergeCandidates.clear();
-               mergeTarget = null;
+               mergedEntities.clear();
+
            }
        }
 
@@ -299,4 +306,12 @@ public abstract class AbstractBulkEditorInput<T extends CdmBase> extends CdmEnti
        this.saveCandidates.clear();
 
     }
+
+    public HashMap<T, Set<T>> getMergedEntities() {
+        return mergedEntities;
+    }
+
+    public void setMergedEntities(HashMap<T, Set<T>> mergedEntities) {
+        this.mergedEntities = mergedEntities;
+    }
 }