MultiPageTaxonEditor : added cdm entity session capabilities to update and register...
authorCherian Mathew <c.mathew@bgbm.org>
Wed, 11 Feb 2015 13:08:39 +0000 (13:08 +0000)
committerCherian Mathew <c.mathew@bgbm.org>
Wed, 11 Feb 2015 13:08:39 +0000 (13:08 +0000)
TaxonNavigator, TaxonNavigatorDataChangeBehavior : added refreshing of specific objects
MoveFactualDataHandler : moved business logic to service call using uuids
AbstractPersistentPostOperation : refactoring

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientDescriptionService.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigator.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPersistentPostOperation.java

index 1d6ab76ef195043f5aed2c0eb9fb84aa6acad021..d1054f9598eb6a97aed9c663f1b0e541e78432c0 100644 (file)
@@ -79,6 +79,7 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
     public MultiPageTaxonEditor() {
         super();
         undoContext = new UndoContext();
     public MultiPageTaxonEditor() {
         super();
         undoContext = new UndoContext();
+
     }
 
     /** {@inheritDoc} */
     }
 
     /** {@inheritDoc} */
@@ -103,7 +104,7 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
         input = (TaxonEditorInput) getEditorInput();
         conversation = input.getConversationHolder();
         conversation.registerForDataStoreChanges(this);
         input = (TaxonEditorInput) getEditorInput();
         conversation = input.getConversationHolder();
         conversation.registerForDataStoreChanges(this);
-
+        cdmEntitySession.registerForDataStoreChanges(this);
         try {
             addPage(Page.NAME.getIndex(), new TaxonNameEditor(this),
                     getEditorInput());
         try {
             addPage(Page.NAME.getIndex(), new TaxonNameEditor(this),
                     getEditorInput());
@@ -147,6 +148,8 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
             }
 
             // commit the conversation and start a new transaction immediately
             }
 
             // commit the conversation and start a new transaction immediately
+
+            input.update();
             conversation.commit(true);
             monitor.worked(1);
 
             conversation.commit(true);
             monitor.worked(1);
 
@@ -169,6 +172,7 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
                 editorPage.setDisabled();
             }
         }
                 editorPage.setDisabled();
             }
         }
+        cdmEntitySession.unregisterForDataStoreChanges(this);
         conversation.unregisterForDataStoreChanges(this);
         conversation.close();
         setDirty(false);
         conversation.unregisterForDataStoreChanges(this);
         conversation.close();
         setDirty(false);
@@ -251,6 +255,7 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
         }
 
         this.input = (TaxonEditorInput) input;
         }
 
         this.input = (TaxonEditorInput) input;
+        cdmEntitySession = this.input.getCdmEntitySession();
 
         // try {
         // // Listen for name changes,
 
         // try {
         // // Listen for name changes,
@@ -561,7 +566,6 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
      */
     @Override
     public ICdmEntitySession getCdmEntitySession() {
      */
     @Override
     public ICdmEntitySession getCdmEntitySession() {
-        // TODO Auto-generated method stub
-        return null;
+        return cdmEntitySession;
     }
 }
     }
 }
index 0304e35d5b24cd4e6e9bf02aba85cce1aaef8986..6dd288d8c0f1f290f3ba7b7740ccfb1435d97b6f 100644 (file)
@@ -28,7 +28,6 @@ import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurato
 import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
 import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.ISourceable;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.ISourceable;
@@ -1108,7 +1107,7 @@ public class TransientDescriptionService implements IDescriptionService {
        public DescriptionBase findWithoutFlush(UUID uuid) {
                return defaultService.findWithoutFlush(uuid);
        }
        public DescriptionBase findWithoutFlush(UUID uuid) {
                return defaultService.findWithoutFlush(uuid);
        }
-       
+
        @Override
        public <S extends DescriptionBase>  Pager<FindByIdentifierDTO<S>> findByIdentifier(Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, boolean includeEntity, Integer pageSize, Integer pageNumber, List<String> propertyPaths){
                return defaultService.findByIdentifier(clazz, identifier, identifierType, matchmode, includeEntity, pageSize, pageNumber, propertyPaths);
        @Override
        public <S extends DescriptionBase>  Pager<FindByIdentifierDTO<S>> findByIdentifier(Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, boolean includeEntity, Integer pageSize, Integer pageNumber, List<String> propertyPaths){
                return defaultService.findByIdentifier(clazz, identifier, identifierType, matchmode, includeEntity, pageSize, pageNumber, propertyPaths);
@@ -1118,4 +1117,22 @@ public class TransientDescriptionService implements IDescriptionService {
        public UUID deleteDescription(DescriptionBase description) {
                return defaultService.deleteDescription(description);
        }
        public UUID deleteDescription(DescriptionBase description) {
                return defaultService.deleteDescription(description);
        }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IDescriptionService#moveTaxonDescriptions(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.Taxon)
+     */
+    @Override
+    public void moveTaxonDescriptions(Taxon sourceTaxon, Taxon targetTaxon) {
+        defaultService.moveTaxonDescriptions(sourceTaxon, targetTaxon);
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IDescriptionService#moveTaxonDescriptions(java.util.UUID, java.util.UUID)
+     */
+    @Override
+    public void moveTaxonDescriptions(UUID sourceTaxonUuid, UUID targetTaxonUuid) {
+        defaultService.moveTaxonDescriptions(sourceTaxonUuid, targetTaxonUuid);
+
+    }
 }
 }
index 0b3beabfc5a775757663ac72477ca1325f7da0c3..1ecc3f48cd0efeaa4aebe7dc2c4309795eb7955a 100644 (file)
@@ -149,9 +149,22 @@ public class TaxonNavigator extends CommonNavigator implements
                            getConversationHolder().commit();
                        }
                }
                            getConversationHolder().commit();
                        }
                }
+               if (cdmEntitySession != null) {
+                   cdmEntitySession.fireNotifications();
+               }
                getCommonViewer().refresh();
        }
 
                getCommonViewer().refresh();
        }
 
+          /**
+     * Refresh this navigators viewer
+     */
+    public void refresh(Set objects) {
+
+        for(Object obj : objects) {
+            getCommonViewer().refresh(obj);
+        }
+    }
+
        /**
         * Removes all content
         */
        /**
         * Removes all content
         */
index 638fac3de3c9202878fb68b343d13f1e8b90fa59..b1a636182f437497435f86860f87cc197b8712d8 100644 (file)
@@ -19,6 +19,7 @@ import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorPart;
 
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorPart;
 
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
@@ -73,6 +74,13 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
                        EventType eventType = event.getEventType();
                        CdmBase eventEntity = event.getEntity();
 
                        EventType eventType = event.getEventType();
                        CdmBase eventEntity = event.getEntity();
 
+                       Set<CdmBase> affectedObjects = event.getAffectedObjects();
+                       if(affectedObjects != null) {
+                           for(CdmBase cb : affectedObjects) {
+                               staleObjects.add((CdmBase)HibernateProxyHelper.deproxy(cb));
+                           }
+                       }
+
                        // all tree node changes are relevant
                        if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
                                        && event.getEntity() instanceof ITaxonTreeNode){
                        // all tree node changes are relevant
                        if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
                                        && event.getEntity() instanceof ITaxonTreeNode){
@@ -102,6 +110,8 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
                                return true;
                        }
 
                                return true;
                        }
 
+
+
                        if(eventType == EventType.UPDATE && event.getEntity() instanceof Taxon){
                                TaxonNameBase name = null;
                                if(eventEntity instanceof Taxon){
                        if(eventType == EventType.UPDATE && event.getEntity() instanceof Taxon){
                                TaxonNameBase name = null;
                                if(eventEntity instanceof Taxon){
@@ -183,7 +193,11 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
                                        display.asyncExec(new Runnable() {
                                            @Override
                                            public void run() {
                                        display.asyncExec(new Runnable() {
                                            @Override
                                            public void run() {
-                                               source.refresh();
+                                               if(staleObjects != null && staleObjects.size() > 0) {
+                                                  source.refresh(staleObjects);
+                                               } else {
+                                                   source.refresh();
+                                               }
                                            }
                                        });
 
                                            }
                                        });
 
index 18c3a68b659873a261891274f8e804b131fe0a3b..f29211d55beff57be12f0eae7ad9d088c89c384b 100644 (file)
@@ -4,7 +4,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
 import java.util.List;
 import java.util.UUID;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.apache.log4j.Logger;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -21,10 +20,6 @@ import eu.etaxonomy.cdm.api.service.IDescriptionService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.Annotation;
-import eu.etaxonomy.cdm.model.common.AnnotationType;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
@@ -81,25 +76,9 @@ public class MoveFactualDataHandler extends AbstractHandler {
                                 "changes in the target taxon. Please save first.");
                         return null;
                     }
                                 "changes in the target taxon. Please save first.");
                         return null;
                     }
-                    for(TaxonDescription description : taxon.getDescriptions()){
-                        //reload to avoid session conflicts
-                        description = HibernateProxyHelper.deproxy(CdmStore.getService(IDescriptionService.class).load(description.getUuid()), TaxonDescription.class);
+                    CdmStore.getService(IDescriptionService.class).moveTaxonDescriptions(taxon.getUuid(),
+                            targetTaxonNode.getTaxon().getUuid());
 
 
-                        String moveMessage = String.format("Description moved from %s", taxon);
-                        if(description.isProtectedTitleCache()){
-                            String separator = "";
-                            if(!StringUtils.isBlank(description.getTitleCache())){
-                                separator = " - ";
-                            }
-                            description.setTitleCache(description.getTitleCache() + separator + moveMessage, true);
-                        }
-                        Annotation annotation = Annotation.NewInstance(moveMessage, Language.getDefaultLanguage());
-                        annotation.setAnnotationType(AnnotationType.TECHNICAL());
-                        description.addAnnotation(annotation);
-                        targetTaxonNode.getTaxon().addDescription(description);
-
-                    }
-                    CdmStore.getService(ITaxonNodeService.class).merge(targetTaxonNode);
                     navigator.getConversationHolder().bind();
                     navigator.getConversationHolder().commit();
 
                     navigator.getConversationHolder().bind();
                     navigator.getConversationHolder().commit();
 
index 99ee34636d6c8cf0cfe891540e22d2a1ccdf8b53..09a2a532aa574018ce778b6948a509b2267e60ea 100644 (file)
@@ -106,7 +106,7 @@ public abstract class AbstractPersistentPostOperation extends AbstractPostTaxonO
                        conversationEnabled.getConversationHolder().commit(true);
                }
                if(cdmEntitySessionEnabled != null) {
                        conversationEnabled.getConversationHolder().commit(true);
                }
                if(cdmEntitySessionEnabled != null) {
-                   cdmEntitySessionEnabled.getCdmEntitySession().commit();
+                   cdmEntitySessionEnabled.getCdmEntitySession().fireNotifications();
                }
                IStatus status = super.postExecute(objectAffectedByOperation);
 
                }
                IStatus status = super.postExecute(objectAffectedByOperation);