ref #6932 Refactor merge annotating
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 13 Sep 2017 12:56:22 +0000 (14:56 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 13 Sep 2017 12:56:22 +0000 (14:56 +0200)
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/AnnotatedTableItem.java [deleted file]
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorLabelProvider.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/handler/ConvertPerson2TeamHandlerE4.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/handler/ConvertTeam2PersonHandlerE4.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/handler/DeleteHandlerE4.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/handler/MergeGroupHandlerE4.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/handler/RemoveMergeCandidateHandlerE4.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/handler/SetMergeCandidateHandlerE4.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/handler/SetMergeTargetHandlerE4.java
eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java

diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/AnnotatedTableItem.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/AnnotatedTableItem.java
deleted file mode 100644 (file)
index e4d8bc5..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// $Id$
-/**
-* Copyright (C) 2017 EDIT
-* 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.bulkeditor.e4;
-
-import eu.etaxonomy.cdm.model.common.CdmBase;
-
-/**
- * @author pplitzner
- * @date 12.09.2017
- *
- */
-public class AnnotatedTableItem <T extends CdmBase> {
-
-    private T element;
-    private boolean isMergeCandidate = false;
-    private boolean isMergeTarget = false;
-
-    public AnnotatedTableItem(T element) {
-        super();
-        this.element = element;
-    }
-
-    public T getElement() {
-        return element;
-    }
-
-    public void setMergeCandidate(boolean isMergeCandidate) {
-        this.isMergeCandidate = isMergeCandidate;
-        if(isMergeCandidate){
-            this.isMergeTarget = false;
-        }
-    }
-
-    public void setMergeTarget(boolean isMergeTarget) {
-        this.isMergeTarget = isMergeTarget;
-        if(isMergeTarget){
-            this.isMergeCandidate = false;
-        }
-    }
-
-    public boolean isMergeCandidate() {
-        return isMergeCandidate;
-    }
-
-    public boolean isMergeTarget() {
-        return isMergeTarget;
-    }
-
-    @Override
-    public String toString() {
-        return element.toString();
-    }
-}
index 866b2d3fdf729c0106dd1ee00bfc7ef07d575e37..17ce13fafca8e422533ca2d277ed86dcfefb152a 100644 (file)
@@ -9,7 +9,6 @@
 
 package eu.etaxonomy.taxeditor.bulkeditor.e4;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.PostConstruct;
@@ -112,7 +111,7 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
                bottomComposite.setLayout(new FillLayout());
                viewer = new TableViewer(bottomComposite);
                viewer.setContentProvider(new ArrayContentProvider());
-               viewer.setLabelProvider(new BulkEditorLabelProvider());
+               viewer.setLabelProvider(new BulkEditorLabelProvider(this));
 
 
         //propagate selection
@@ -126,17 +125,16 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
 
        @Persist
        public void save() {
+           //FIXME E4 do the potential merging of groups
+
            // commit the conversation and start a new transaction immediately
            conversation.commit(true);
 
            Object object = viewer.getInput();
            if(object instanceof List){
                for (Object item: (List)object) {
-                   if(item instanceof AnnotatedTableItem){
-                       CdmBase cdmBase = ((AnnotatedTableItem) item).getElement();
-                    CdmStore.getService(cdmBase).merge(cdmBase, true);
-                   }
-
+                   CdmBase cdmBase = (CdmBase) item;
+                   CdmStore.getService(cdmBase).merge(cdmBase, true);
             }
            }
         dirty.setDirty(false);
@@ -160,7 +158,7 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
 
             getEditorInput().performSearch(query);
 
-            viewer.setInput(getEditorInput().getWrappedModel());
+            viewer.setInput(getEditorInput().getModel());
             refresh();
         }
     }
@@ -171,7 +169,7 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
 
     public void refresh(boolean resetInput) {
         if(resetInput){
-            viewer.setInput(getEditorInput().getWrappedModel());
+            viewer.setInput(getEditorInput().getModel());
         }
         viewer.refresh();
     }
@@ -192,30 +190,9 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
         return input;
     }
 
-    public List<AnnotatedTableItem> getMergeCandidates(){
-        List<AnnotatedTableItem> mergeCandidates = new ArrayList<>();
-        for(AnnotatedTableItem item: (List<AnnotatedTableItem>)viewer.getInput()){
-            if(item.isMergeCandidate()){
-                mergeCandidates.add(item);
-            }
-        }
-        return mergeCandidates;
-    }
-
-    public AnnotatedTableItem getMergeTarget(){
-        for(AnnotatedTableItem item: (List<AnnotatedTableItem>)viewer.getInput()){
-            if(item.isMergeTarget()){
-                return item;
-            }
-        }
-        return null;
-    }
-
     public void removeAllAnnotations(){
-        for(AnnotatedTableItem item: (List<AnnotatedTableItem>)viewer.getInput()){
-            item.setMergeCandidate(false);
-            item.setMergeTarget(false);
-        }
+        input.removeMergeTarget();
+        input.removeMergeCandidates();
     }
 
     /**
index 2d47fd1c7945ec83368b3b4e34ec3b46d0d0b03c..f7eb7e0d9098ae79812e86a54b6156014aef540b 100644 (file)
@@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.graphics.Image;
 
+import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;
 import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 
@@ -28,19 +29,27 @@ import eu.etaxonomy.taxeditor.model.ImageResources;
  */
 public class BulkEditorLabelProvider extends LabelProvider {
 
+    private BulkEditorE4 editor;
+
+    public BulkEditorLabelProvider(BulkEditorE4 editor) {
+        super();
+        this.editor = editor;
+    }
+
     /**
      * {@inheritDoc}
      */
     @Override
     public Image getImage(Object element) {
-        AnnotatedTableItem item = (AnnotatedTableItem)element;
+        AbstractBulkEditorInput input = editor.getEditorInput();
+
         try {
-            if(item.isMergeCandidate()){
+            if(input.getMergeCandidates().contains(element)){
                 IPath path = new Path("icons/merge_candidate.gif"); //$NON-NLS-1$
                 URL url = FileLocator.find(TaxeditorBulkeditorPlugin.getDefault().getBundle(), path, null);
                 return ImageResources.getImage(url.toURI());
             }
-            else if(item.isMergeTarget()){
+            else if(input.getMergeTarget()!=null && input.getMergeTarget().equals(element)){
                 IPath path = new Path("icons/merge_target.gif"); //$NON-NLS-1$
                 URL url = FileLocator.find(TaxeditorBulkeditorPlugin.getDefault().getBundle(), path, null);
                 return ImageResources.getImage(url.toURI());
index 328d7057c5f0bd7bc462c2fa306e2cdbcfed241e..f8d446933f36d83db3908aeec442c74ab4bac659 100644 (file)
@@ -21,8 +21,8 @@ import eu.etaxonomy.cdm.api.service.IAgentService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.strategy.merge.MergeException;
-import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
 import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
@@ -37,7 +37,7 @@ public class ConvertPerson2TeamHandlerE4 {
 
 
     @Execute
-    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)AnnotatedTableItem item,
+    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmBase selection,
             @Named(IServiceConstants.ACTIVE_PART)MPart activePart) {
 
         BulkEditorE4 editor = (BulkEditorE4) activePart.getObject();
@@ -55,7 +55,7 @@ public class ConvertPerson2TeamHandlerE4 {
         Team team =null;
         UpdateResult result = null;
         try {
-            result = CdmStore.getService(IAgentService.class).convertPerson2Team(item.getElement().getUuid());
+            result = CdmStore.getService(IAgentService.class).convertPerson2Team(selection.getUuid());
         } catch (IllegalArgumentException e) {
             MessagingUtils.errorDialog("Can not convert Person into a Team", null, e.getLocalizedMessage(), TaxeditorBulkeditorPlugin.PLUGIN_ID,e, true);
         } catch (MergeException e) {
@@ -70,11 +70,11 @@ public class ConvertPerson2TeamHandlerE4 {
     }
 
     @CanExecute
-    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)AnnotatedTableItem selection,
+    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmBase selection,
             @Named(IServiceConstants.ACTIVE_PART)MPart activePart,
             MHandledMenuItem menuItem){
         boolean canExecute = false;
-        canExecute = ((BulkEditorE4)activePart.getObject()).getEditorInput().isConvertingEnabled() && selection.getElement() instanceof Person;
+        canExecute = ((BulkEditorE4)activePart.getObject()).getEditorInput().isConvertingEnabled() && selection instanceof Person;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
index bd54325bbd2b880ecdbbb71c6bacdf9d2d331d1e..e9ecbcd509fe692cb8785ecfd0b7f275c34f3bf7 100644 (file)
@@ -21,8 +21,8 @@ import eu.etaxonomy.cdm.api.service.IAgentService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.strategy.merge.MergeException;
-import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
 import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -35,7 +35,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 public class ConvertTeam2PersonHandlerE4 {
 
     @Execute
-       public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)AnnotatedTableItem item,
+       public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmBase selection,
                @Named(IServiceConstants.ACTIVE_PART)MPart activePart) {
 
         BulkEditorE4 editor = (BulkEditorE4) activePart.getObject();
@@ -54,7 +54,7 @@ public class ConvertTeam2PersonHandlerE4 {
                UpdateResult result = null;
 
                try {
-                   result = CdmStore.getService(IAgentService.class).convertTeam2Person(item.getElement().getUuid());
+                   result = CdmStore.getService(IAgentService.class).convertTeam2Person(selection.getUuid());
                } catch (IllegalArgumentException e) {
                    MessagingUtils.informationDialog("Can not convert Team to Person", e.getMessage());
                } catch (MergeException e) {
@@ -69,11 +69,11 @@ public class ConvertTeam2PersonHandlerE4 {
     }
 
     @CanExecute
-    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)AnnotatedTableItem selection,
+    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmBase selection,
             @Named(IServiceConstants.ACTIVE_PART)MPart activePart,
             MHandledMenuItem menuItem){
         boolean canExecute = false;
-        canExecute = ((BulkEditorE4)activePart.getObject()).getEditorInput().isConvertingEnabled() && selection.getElement() instanceof Team;
+        canExecute = ((BulkEditorE4)activePart.getObject()).getEditorInput().isConvertingEnabled() && selection instanceof Team;
         menuItem.setVisible(canExecute);
         return canExecute;
     }
index 3dca3dd8bc942ea5040ebaf35b0f6605a0d451e9..6e39daad6af21bcabe5db54e6fd6f27efe9197c9 100644 (file)
@@ -46,7 +46,6 @@ import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
 import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
 import eu.etaxonomy.taxeditor.l10n.Messages;
@@ -83,7 +82,7 @@ public class DeleteHandlerE4 {
     private static final String CONFIRM_DELETION = Messages.DeleteHandler_CONFIRM;
 
     @Execute
-    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)AnnotatedTableItem item,
+    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmBase object,
             @Named(IServiceConstants.ACTIVE_PART)MPart activePart,
             @Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
 
@@ -98,7 +97,6 @@ public class DeleteHandlerE4 {
         DeleteConfiguratorBase config = null;
         DeleteResult result = new DeleteResult();
         String errorMessage= OBJECT;
-        CdmBase object = item.getElement();
         if (editor.isDirty()){
             boolean proceed = MessageDialog.openQuestion(null,
                     "Save changes", "You have made changes that must be saved before this query can be executed. Would you like to proceed?");
index 10aeb78a6ad26347f4007c0c7184986d38bd24e9..d2adbb6530e70545b6bf614809480bdfd2fce722 100644 (file)
@@ -12,7 +12,6 @@ import java.util.List;
 
 import javax.inject.Named;
 
-import org.apache.log4j.Logger;
 import org.eclipse.e4.core.di.annotations.Execute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
@@ -21,10 +20,11 @@ import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.strategy.merge.MergeException;
-import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
 import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
+import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -34,18 +34,17 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  *
  */
 public class MergeGroupHandlerE4 {
-    private static final Logger logger = Logger
-            .getLogger(MergeGroupHandlerE4.class);
 
     @Execute
-    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)Object object,
+    public void execute(
             @Named(IServiceConstants.ACTIVE_PART)MPart activePart,
             @Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
 
         BulkEditorE4 editor = (BulkEditorE4) activePart.getObject();
+        AbstractBulkEditorInput input = editor.getEditorInput();
 
         // Check whether there are any group annotations
-        List<AnnotatedTableItem> mergeCandidates = editor.getMergeCandidates();
+        List<CdmBase> mergeCandidates = input.getMergeCandidates();
         if (mergeCandidates.size() == 0) {
             MessageDialog.openWarning(shell,
                     "No merge candidates", "No objects have been chosen for merging.");
@@ -53,47 +52,46 @@ public class MergeGroupHandlerE4 {
         }
 
         // Check whether group merge target has been set
-        AnnotatedTableItem mergeTarget = editor.getMergeTarget();
+        CdmBase mergeTarget = input.getMergeTarget();
         if (mergeTarget == null) {
             MessageDialog.openWarning(shell,
                     "No group merge target set", "No group merge target has been set.");
             return;
         }
-        Object targetEntity = mergeTarget.getElement();
 
         TeamOrPersonBase teamOrPerson = null;
         Reference ref = null;
-        if (targetEntity instanceof TeamOrPersonBase){
-            teamOrPerson = HibernateProxyHelper.deproxy(targetEntity, TeamOrPersonBase.class);
-        } else if(targetEntity instanceof Reference){
-            ref = HibernateProxyHelper.deproxy(targetEntity, Reference.class);
+        if (mergeTarget instanceof TeamOrPersonBase){
+            teamOrPerson = HibernateProxyHelper.deproxy(mergeTarget, TeamOrPersonBase.class);
+        } else if(mergeTarget instanceof Reference){
+            ref = HibernateProxyHelper.deproxy(mergeTarget, Reference.class);
         }
-        for (AnnotatedTableItem item : mergeCandidates) {
+        for (CdmBase item : mergeCandidates) {
             //first check whether entities are mergeable
             try{
                 if (ref != null){
-                    Reference ref2 = HibernateProxyHelper.deproxy(item.getElement(), Reference.class);
+                    Reference ref2 = HibernateProxyHelper.deproxy(item, Reference.class);
 
                     if (!CdmStore.getCommonService().isMergeable(ref, ref2, null)){
                         MessageDialog.openWarning(shell,
                                 "No merge possible", "A merge of " + ref.getTitleCache() + " and " + ref2.getTitleCache() + " is not possible.");
                         return;
                     }
+                    input.getModel().remove(item);
                 }
                 if (teamOrPerson != null){
-                    TeamOrPersonBase teamOrPerson2 = HibernateProxyHelper.deproxy(item.getElement(), TeamOrPersonBase.class);
+                    TeamOrPersonBase teamOrPerson2 = HibernateProxyHelper.deproxy(item, TeamOrPersonBase.class);
 
                     if (!CdmStore.getCommonService().isMergeable(teamOrPerson, teamOrPerson2, null)){
                         MessageDialog.openWarning(shell,
                                 "No merge possible", "A merge of " + teamOrPerson.getTitleCache() + " and " + teamOrPerson2.getTitleCache() + " is not possible.");
                         return;
                     }
+                    input.getModel().remove(item);
                 }
             }catch(MergeException e){
 
             }
-            editor.removeAllAnnotations();
-            editor.refresh();
             //                         ((BulkEditor) editor).removeAnnotatedLine(item);
             //
             //                         // Mark entity container for merging with target entity
@@ -107,5 +105,7 @@ public class MergeGroupHandlerE4 {
             //                 model.removeTypeFromAllAnnotations(IBulkEditorConstants.TYPE_MERGE_CANDIDATE);
             //                 model.removeTypeFromAllAnnotations(IBulkEditorConstants.TYPE_MERGE_TARGET);
         }
+        editor.setDirty();
+        editor.refresh();
     }
 }
index 453bf7e1f48b3c4767ba97793a4a4161e5887286..b7f6e6e7e3ad1df74c232618a7bab5641a4d2194 100644 (file)
@@ -14,7 +14,7 @@ import org.eclipse.e4.core.di.annotations.Execute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
 
-import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 
 /**
@@ -27,10 +27,10 @@ public class RemoveMergeCandidateHandlerE4  {
 
 
     @Execute
-    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)AnnotatedTableItem item,
+    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmBase selection,
             @Named(IServiceConstants.ACTIVE_PART)MPart activePart) {
         BulkEditorE4 editor = (BulkEditorE4) activePart.getObject();
-        item.setMergeCandidate(false);
+        editor.getEditorInput().removeMergeCandidate(selection);
         editor.refresh();
     }
 }
index edc7bcf0076ac8ff226fd4eb2f79746bc8361ec3..0a3f625b5ed79f5e77521112b98c7b4df36b48e0 100644 (file)
@@ -14,7 +14,7 @@ import org.eclipse.e4.core.di.annotations.Execute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
 
-import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 
 /**
@@ -26,10 +26,10 @@ import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 public class SetMergeCandidateHandlerE4 {
 
     @Execute
-    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)AnnotatedTableItem item,
+    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmBase selection,
             @Named(IServiceConstants.ACTIVE_PART)MPart activePart) {
         BulkEditorE4 editor = (BulkEditorE4) activePart.getObject();
-        item.setMergeCandidate(true);
+        editor.getEditorInput().addMergeCandidate(selection);
         editor.refresh();
     }
 }
index 6edef7b9e8ceaa94039f4ad19682a0c890e980b4..afe5091a2351eb202a735d64a347f3bc267c33b6 100644 (file)
@@ -14,8 +14,9 @@ import org.eclipse.e4.core.di.annotations.Execute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
 
-import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
+import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;
 
 /**
  *
@@ -26,14 +27,11 @@ import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 public class SetMergeTargetHandlerE4 {
 
     @Execute
-    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)AnnotatedTableItem item,
+    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmBase selection,
             @Named(IServiceConstants.ACTIVE_PART)MPart activePart) {
         BulkEditorE4 editor = (BulkEditorE4) activePart.getObject();
-        AnnotatedTableItem mergeTarget = editor.getMergeTarget();
-        if(mergeTarget!=null){
-            mergeTarget.setMergeTarget(false);
-        }
-        item.setMergeTarget(true);
+        AbstractBulkEditorInput input = editor.getEditorInput();
+        input.setMergeTarget(selection);
         editor.refresh();
        }
 }
index 0bd958bab9048ce5e812aec78b1d0bbd15ad0919..3abc2c97a8da88f44dd4f2bdc586c24d1cf15953 100644 (file)
@@ -31,7 +31,6 @@ import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService;
 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorQuery;
 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
-import eu.etaxonomy.taxeditor.bulkeditor.e4.AnnotatedTableItem;
 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.CdmBaseSortProvider;
 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.TitleCacheComparator;
 import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
@@ -52,6 +51,9 @@ public abstract class AbstractBulkEditorInput<T extends CdmBase> extends CdmEnti
 
        private List<T> model = new ArrayList<>();
 
+       private List<T> mergeCandidates = new ArrayList<>();
+       private T mergeTarget = null;
+
        private IEntityCreator<T> entityCreator;
        private final ConversationHolder conversation;
 
@@ -80,6 +82,34 @@ public abstract class AbstractBulkEditorInput<T extends CdmBase> extends CdmEnti
 
        protected abstract T loadEntity(UUID entityUuid);
 
+       public void setMergeTarget(T t){
+           mergeTarget = t;
+       }
+
+    public List<T> getMergeCandidates() {
+        return mergeCandidates;
+    }
+
+    public T getMergeTarget() {
+        return mergeTarget;
+    }
+
+       public void removeMergeTarget(){
+           mergeTarget = null;
+       }
+
+       public void addMergeCandidate(T t){
+           mergeCandidates.add(t);
+       }
+
+       public void removeMergeCandidate(T t){
+           mergeCandidates.remove(t);
+       }
+
+    public void removeMergeCandidates() {
+        mergeCandidates = new ArrayList<>();
+    }
+
        private void setEntityUuid(UUID entityUuid){
                this.entityUuid = entityUuid;
        }
@@ -222,14 +252,6 @@ public abstract class AbstractBulkEditorInput<T extends CdmBase> extends CdmEnti
                return model;
        }
 
-       public List<AnnotatedTableItem<T>> getWrappedModel() {
-           List<AnnotatedTableItem<T>> wrappetItems = new ArrayList<>();
-           for(T t:model){
-               wrappetItems.add(new AnnotatedTableItem<T>(t));
-           }
-           return wrappetItems;
-       }
-
        protected boolean replaceInModel(T entity) {
            int index = model.indexOf(entity);
            if(index >= 0) {