Merge branch 'LibrAlign' of https://dev.e-taxonomy.eu/git/taxeditor into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.bulkeditor / src / main / java / eu / etaxonomy / taxeditor / bulkeditor / input / AbstractBulkEditorInput.java
index 00de6d37a773594277672cacf115a446c5604b8a..d57ea686635b84c2219f18ff87d83e6e1c1873d6 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
 * Copyright (C) 2007 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.
 */
@@ -13,15 +13,17 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IPersistableElement;
 
-import eu.etaxonomy.cdm.api.service.ICommonService;
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.MarkerType;
@@ -30,213 +32,150 @@ import eu.etaxonomy.cdm.strategy.merge.MergeException;
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService;
 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorQuery;
-import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorUtil;
 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
-import eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInputTypeValues.BulkEditorInputType;
 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.CdmBaseSortProvider;
 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.TitleCacheComparator;
+import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
+import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
- * <p>Abstract AbstractBulkEditorInput class.</p>
- *
  * @author p.ciardelli
  * @created 25.06.2009
  * @version 1.0
  * @param <T>
  */
-public abstract class AbstractBulkEditorInput<T extends ICdmBase> implements IEditorInput, IEntityPersistenceService<T> {
-
-       /**
-        * 
-        */
-       private static final long serialVersionUID = 416414530232743735L;
+public abstract class AbstractBulkEditorInput<T extends ICdmBase> extends CdmEntitySessionInput implements IEditorInput ,
+    IEntityPersistenceService<T> {
 
        private UUID entityUuid;
 
        private List<T> model;
-       
+
        private IEntityCreator<T> entityCreator;
-       
-       /**
-        * <p>NewInstance</p>
-        *
-        * @param inputType a {@link eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInputTypeValues.BulkEditorInputType} object.
-        * @return a {@link eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput} object.
-        */
+       private final ConversationHolder conversation;
+
+       public AbstractBulkEditorInput() {
+           super(true);
+           this.conversation = CdmStore.createConversation();
+       }
+
        static public AbstractBulkEditorInput NewInstance(BulkEditorInputType inputType) {
+
                return BulkEditorInputType.getInput(inputType);
        }
-       
-       /**
-        * <p>NewInstance</p>
-        *
-        * @param entity a {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity} object.
-        * @return a {@link eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput} object.
-        */
+
        public static AbstractBulkEditorInput NewInstance(IdentifiableEntity entity) {
-               
-               
+
                BulkEditorInputType inputType = BulkEditorInputType.getByType(entity.getClass());
-               
+
                AbstractBulkEditorInput editorInput = NewInstance(inputType);
-               
+
                editorInput.setEntityUuid(entity.getUuid());
-               
+
                return editorInput;
        }
-       
-       /**
-        * <p>listEntities</p>
-        *
-        * @param configurator a {@link eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator} object.
-        * @return a {@link java.util.List} object.
-        */
+
        protected abstract List<T> listEntities(IIdentifiableEntityServiceConfigurator configurator);
-       
-       /**
-        * <p>loadEntity</p>
-        *
-        * @param entityUuid a {@link java.util.UUID} object.
-        * @return a T object.
-        */
+
        protected abstract T loadEntity(UUID entityUuid);
 
        private void setEntityUuid(UUID entityUuid){
                this.entityUuid = entityUuid;
        }
-       
-       /**
-        * <p>Getter for the field <code>entityUuid</code>.</p>
-        *
-        * @return a {@link java.util.UUID} object.
-        */
+
        public UUID getEntityUuid() {
                return entityUuid;
        }
 
-                       
-       /* (non-Javadoc)
-        * @see org.eclipse.ui.IEditorInput#exists()
-        */
-       /**
-        * <p>exists</p>
-        *
-        * @return a boolean.
-        */
-       public boolean exists() {
+       @Override
+    public boolean exists() {
                // TODO Auto-generated method stub
                return false;
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
-        */
-       /**
-        * <p>getImageDescriptor</p>
-        *
-        * @return a {@link org.eclipse.jface.resource.ImageDescriptor} object.
-        */
-       public ImageDescriptor getImageDescriptor() {
+       @Override
+    public ImageDescriptor getImageDescriptor() {
                // TODO Auto-generated method stub
                return null;
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.ui.IEditorInput#getPersistable()
-        */
-       /**
-        * <p>getPersistable</p>
-        *
-        * @return a {@link org.eclipse.ui.IPersistableElement} object.
-        */
-       public IPersistableElement getPersistable() {
+       @Override
+    public IPersistableElement getPersistable() {
                return null;
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
-        */
        /** {@inheritDoc} */
-       @SuppressWarnings("unchecked")
+       @Override
+    @SuppressWarnings("unchecked")
        public Object getAdapter(Class adapter) {
                return null;
        }
 
-       /**
-        * <p>Setter for the field <code>query</code>.</p>
-        *
-        * @param bulkEditorQuery a {@link eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorQuery} object.
-        */
        public void performSearch(final BulkEditorQuery bulkEditorQuery) {
-               
+
                List<T> entityList = new ArrayList<T>();
-               
+
                if(getEntityUuid() != null){
-                       
+
                        T entity = loadEntity(getEntityUuid());
                        entityList.add(entity);
                        model = entityList;
                }
                else if(bulkEditorQuery != null){
-                       
-                       String queryString = bulkEditorQuery.getSearchString();
+
                        IIdentifiableEntityServiceConfigurator configurator = bulkEditorQuery.getSearchConfigurator();
                        Comparator queryComparator = (bulkEditorQuery.getComparator() != null) ? bulkEditorQuery.getComparator() : new TitleCacheComparator();
-                       
+
                        entityList = listEntities(configurator);
-                       
-                       Collections.sort(entityList, queryComparator);                  
-                       
+
+                       Collections.sort(entityList, queryComparator);
+
+
                }
-               
+
                model = entityList;
        }
-       
-       /**
-        * <p>isMergingEnabled</p>
-        *
-        * @return a boolean.
-        */
+
        public boolean isMergingEnabled() {
                return false;
        }
 
-       /**
-        * <p>isMarkerTypeEditingEnabled</p>
-        *
-        * @param markerType a {@link eu.etaxonomy.cdm.model.common.MarkerType} object.
-        * @return a boolean.
-        */
+       public boolean isConvertingEnabled() {
+               return false;
+       }
+
        public boolean isMarkerTypeEditingEnabled(MarkerType markerType) {
                return false;
        }
-       
-       /*
-        * (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService#merge(eu.etaxonomy.cdm.model.common.IdentifiableEntity, eu.etaxonomy.cdm.model.common.IdentifiableEntity)
-        */
+
+
        /** {@inheritDoc} */
-       public boolean merge(T entity, T mergeTarget) {
+       @Override
+    public boolean merge(T entity, T mergeTarget) {
                if (entity instanceof IMergable) {
                        try {
-                               CdmStore.getService(ICommonService.class).merge((IMergable)mergeTarget, (IMergable)entity, null);
+                               CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), (Class<? extends CdmBase>)entity.getClass());
                        } catch (MergeException e) {
-                               BulkEditorUtil.error(getClass(), 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;
-       };
-       
-       /*
-        * (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService#create(eu.etaxonomy.cdm.model.common.IdentifiableEntity)
-        */
+       }
+
+
        /** {@inheritDoc} */
-       public boolean create(T entity) {
-               return save(entity);            
-       };
-       
+       @Override
+    public T create(T entity) {
+               return save(entity);
+       }
+
        public IEntityCreator<T> getEntityCreator(){
                if(entityCreator == null){
                        entityCreator = createEntityCreator();
@@ -244,9 +183,6 @@ public abstract class AbstractBulkEditorInput<T extends ICdmBase> implements IEd
                return entityCreator;
        }
 
-       /**
-        * @return
-        */
        protected abstract IEntityCreator<T> createEntityCreator();
 
        /**
@@ -255,40 +191,61 @@ public abstract class AbstractBulkEditorInput<T extends ICdmBase> implements IEd
         */
        public List<IBulkEditorSortProvider<T>> getSortProviders(){
                List<IBulkEditorSortProvider<T>> sortProviders = new ArrayList<IBulkEditorSortProvider<T>>();
-               
+
                sortProviders.add(new CdmBaseSortProvider<T>());
-               
+
                return sortProviders;
        }
 
        /**
+        * Returns a textual representation given object. The default implementation
+        * in the abstract base class returns the simple name of the class, this may
+        * be overwritten to something more specific in subclasses.
+        *
         * @param entity
-        * @return
+        * @return a textual representation given object.
         */
        public String getTypeText(Object entity){
                return entity.getClass().getSimpleName();
        }
 
-       /**
-        * @param entity
-        * @return
-        */
        public String getText(T entity) {
                if(entity instanceof IdentifiableEntity){
                        IdentifiableEntity identifiableEntity = (IdentifiableEntity) HibernateProxyHelper.deproxy(entity);
-                       
+
                        return identifiableEntity.getTitleCache();
                }
-               
+
                return "No text. Implement in subclass";
        }
-       
-       /**
-        * @return
-        */
-       public List<?> getModel() {
+
+       public List<T> getModel() {
                return model;
        }
 
+       protected boolean replaceInModel(T entity) {
+           int index = model.indexOf(entity);
+           if(index >= 0) {
+               model.set(index, entity);
+               return true;
+           } else {
+               return false;
+           }
+       }
+
+    @Override
+    public   List<T> getRootEntities() {
+        return getModel();
+    }
 
+
+    @Override
+    public Map<Object, List<String>> getPropertyPathsMap() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+       public ConversationHolder getConversation() {
+               return conversation;
+       }
 }