bulkeditor: merge of teams and persons and convert team to person and person to team
[taxeditor.git] / eu.etaxonomy.taxeditor.bulkeditor / src / main / java / eu / etaxonomy / taxeditor / bulkeditor / input / AgentEditorInput.java
index 923d532c08bfaf6b62246a04cbc82e6b82b9bee0..5cc1e2925509da08a27a6bb05fa4f654879341af 100644 (file)
@@ -20,10 +20,20 @@ import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurato
 import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;
 import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
 import eu.etaxonomy.cdm.model.agent.AgentBase;
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
+import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;
+import eu.etaxonomy.cdm.strategy.merge.IMergable;
+import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
+import eu.etaxonomy.cdm.strategy.merge.MergeException;
+import eu.etaxonomy.cdm.strategy.merge.MergeMode;
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
+import eu.etaxonomy.taxeditor.bulkeditor.handler.MergeGroupHandler;
 import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.AgentCreator;
 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.IdentifiableEntitySortProvider;
+import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 
@@ -34,7 +44,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created 25.06.2009
  * @version 1.0
  */
-public class AgentEditorInput extends AbstractBulkEditorInput<AgentBase> {
+public class AgentEditorInput extends AbstractBulkEditorInput<TeamOrPersonBase> {
 
        /**
         * 
@@ -99,10 +109,39 @@ public class AgentEditorInput extends AbstractBulkEditorInput<AgentBase> {
        public boolean isMergingEnabled() {
                return true;
        }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled()
+        */
+       /** {@inheritDoc} */
+       @Override
+       public boolean isConvertingEnabled() {
+               return true;
+       }
+       
+       /** {@inheritDoc} */
+       @Override
+    public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
+               if (entity instanceof IMergable) {
+                       try {
+                               IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
+                               strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
+                               CdmStore.getCommonService().merge((IMergable)mergeTarget, (IMergable)entity, strategy);                         
+                       } catch (MergeException e) {
+                               MessagingUtils.errorDialog("Bulk Editor Merge Error",
+                                               this,
+                                               "Could not merge chosen objects of type " + entity.getClass().getName(),
+                                               TaxeditorBulkeditorPlugin.PLUGIN_ID,
+                                               e,
+                                               true);
+                       }
+               }
+               return true;
+       }
 
        /** {@inheritDoc} */
        @Override
-       public List<AgentBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
+       public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
                return CdmStore.getSearchManager().findTeamOrPersons(configurator);
        }
        
@@ -130,10 +169,10 @@ public class AgentEditorInput extends AbstractBulkEditorInput<AgentBase> {
         * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#getSortProviders()
         */
        @Override
-       public List<IBulkEditorSortProvider<AgentBase>> getSortProviders() {
-               List<IBulkEditorSortProvider<AgentBase>> sortProviders = super.getSortProviders();
+       public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
+               List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
                
-               sortProviders.add(0, new IdentifiableEntitySortProvider<AgentBase>());
+               sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
                
                return sortProviders;
        }
@@ -142,8 +181,21 @@ public class AgentEditorInput extends AbstractBulkEditorInput<AgentBase> {
         * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#createEntityCreator()
         */
        @Override
-       protected IEntityCreator<AgentBase> createEntityCreator() {
+       protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
                return new AgentCreator();
        }
 
+       @Override
+       public boolean save(TeamOrPersonBase entity) {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       @Override
+       public boolean delete(TeamOrPersonBase entity)
+                       throws ReferencedObjectUndeletableException {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
 }