#5067 Integrate remoting sessions in derivate hierachy views, Adapt existing actions
authorCherian Mathew <c.mathew@bgbm.org>
Thu, 9 Jul 2015 11:16:56 +0000 (13:16 +0200)
committerCherian Mathew <c.mathew@bgbm.org>
Thu, 9 Jul 2015 11:16:56 +0000 (13:16 +0200)
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateContentProvider.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchView.java

index ba5c22d75ca59e16e2cdfba5baec696910c7cb49..2510d27e15e2a8115d96d7a573adaf5b979c8921 100644 (file)
@@ -271,6 +271,7 @@ public class CdmTransientEntityCacher implements ICdmCacher {
     }
 
     public void dispose() {
+        CacheManager.create().removeCache(cache.getName());
         cache.dispose();
 
     }
index 06a3f3e1e153ace0190d7477cde05781a8601714..c1a951777be518e9fa9e750d1f6fb2dbbb947654 100644 (file)
@@ -19,6 +19,7 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
 
+import org.hibernate.collection.internal.PersistentBag;
 import org.hibernate.collection.internal.PersistentList;
 import org.hibernate.collection.internal.PersistentMap;
 import org.hibernate.collection.internal.PersistentSet;
@@ -76,7 +77,7 @@ public class ProxyUtils {
             if(pc instanceof PersistentSortedSet) {
                 return new TreeSet((Set)pc);
             }
-            if(pc instanceof PersistentList) {
+            if(pc instanceof PersistentList || pc instanceof PersistentBag) {
                 return new ArrayList((List)pc);
             }
             if(pc instanceof PersistentMap || pc instanceof PersistentMultiLanguageText) {
index b8cef62f38e51feac8a9a6750b3efead16d20d69..12785fa57e421d6418715b7fbefecb93554f22ba 100644 (file)
@@ -1314,6 +1314,9 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
 
                                //Object obj = ProxyUtils.deproxy(cachedCommonService.initializeCollection(this));
                                Object obj = ProxyUtils.deproxy(cachedCommonService.initializeCollection(cdmBase.getUuid(), fieldName));
+                               if(ProxyUtils.isProxy(obj)) {
+                                   throw new HibernateException("Persistent Collection initialized but is still a proxy");
+                               }
                                afterInitialize();
 
                                Class<?> clazz = getClass();
index ecb9959cbcadb7c77aa575cd82b66a723cd0f743..591594804851422ea9f6ed3ebc1fb14fd54020f0 100644 (file)
@@ -41,6 +41,7 @@ import org.jboss.logging.Logger;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration;
 import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.taxeditor.remoting.cache.ProxyUtils;
 import eu.etaxonomy.taxeditor.service.ICachedCommonService;
 
 /**
@@ -446,6 +447,9 @@ public abstract class AbstractLazyInitializer implements LazyInitializer {
                        }
 
                        CdmBase cdmBase = cachedCommonService.find(clazz,classid);
+            if(ProxyUtils.isProxy(cdmBase)) {
+                throw new HibernateException("CdmBase Object initialized but is still a proxy");
+            }
                        setImplementation(cdmBase);
 
                }
index 692fa9a71e8d071b9ad0d70e1463cbc9c9ea5f49..e705652463c47b91c83de56f303eeb89483ed341 100644 (file)
@@ -1016,4 +1016,20 @@ public class TransientOccurenceService implements IOccurrenceService {
         return defaultService.merge(arg0);
     }
 
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#deleteDerivateHierarchy(java.util.UUID, eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator)
+     */
+    @Override
+    public DeleteResult deleteDerivateHierarchy(UUID arg0, SpecimenDeleteConfigurator arg1) {
+        return defaultService.deleteDerivateHierarchy(arg0, arg1);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#deleteSingleRead(java.util.UUID, java.util.UUID)
+     */
+    @Override
+    public DeleteResult deleteSingleRead(UUID arg0, UUID arg1) {
+        return defaultService.deleteSingleRead(arg0, arg1);
+    }
+
 }
index 7548960d901fee8e5cf57967c11d847e1f60866a..2fb470f6ea56cabebca1426ede6bdc1ddfe80066 100644 (file)
@@ -2,6 +2,7 @@ package eu.etaxonomy.taxeditor.editor.view.derivate;
 
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
@@ -30,6 +31,7 @@ import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.EditorPart;
 
+import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
@@ -45,6 +47,8 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
 import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateContentProvider;
 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
@@ -55,7 +59,7 @@ import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
  */
 public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable,
         IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia,
-        ISelectionChangedListener, IPostOperationEnabled {
+        ISelectionChangedListener, IPostOperationEnabled , ICdmEntitySessionEnabled {
 
     public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView";
 
@@ -73,10 +77,15 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
 
     private ISelection selection = null;
 
+    private final ICdmEntitySession cdmEntitySession;
+
+    private DerivateContentProvider contentProvider;
+
     /**
      * Default constructor
      */
     public DerivateView() {
+        cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
     }
 
     /* (non-Javadoc)
@@ -85,7 +94,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
     @Override
     public void createPartControl(Composite parent) {
         viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
-        viewer.setContentProvider(new DerivateContentProvider());
+        contentProvider = new DerivateContentProvider();
+        viewer.setContentProvider(contentProvider);
         labelProvider = new DerivateLabelProvider();
         labelProvider.setConversation(conversation);
         viewer.setLabelProvider(labelProvider);
@@ -141,6 +151,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
 
         // commit the conversation and start a new transaction immediately
         conversation.commit(true);
+        CdmStore.getService(IOccurrenceService.class).merge(getRootEntities());
         monitor.worked(1);
 
         this.setDirty(false);
@@ -217,6 +228,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
         if(!conversation.isBound()){
             conversation.bind();
         }
+        cdmEntitySession.bind();
     }
 
     /* (non-Javadoc)
@@ -335,4 +347,35 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
         return true;
     }
 
+    @Override
+    public void dispose() {
+        cdmEntitySession.dispose();
+        super.dispose();
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.application.ICdmChangeListener#onChange(eu.etaxonomy.cdm.api.application.CdmChangeEvent)
+     */
+    @Override
+    public void onChange(CdmChangeEvent event) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
+     */
+    @Override
+    public ICdmEntitySession getCdmEntitySession() {
+       return cdmEntitySession;
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
+     */
+    @Override
+    public List<SpecimenOrObservationBase>  getRootEntities() {
+        return contentProvider.getRootElements();
+    }
+
 }
index b04582f5e453ad17148e2868bbd88099a3846f0d..4ffb412a2760c5f00e7573b2faeaa147ea512555 100644 (file)
@@ -14,6 +14,7 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.CompoundContributionItem;
 
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.molecular.DnaSample;
 import eu.etaxonomy.cdm.model.molecular.Sequence;
@@ -29,6 +30,7 @@ import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog;
 
 /**
@@ -133,6 +135,7 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
                         specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, mediaSpecimen, derivationEventType));
                         mediaSpecimen.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
                         mediaSpecimen.getTitleCache(); //update title cache
+                        CdmStore.getService(IOccurrenceService.class).merge(specimenOrObservationBase);
                     }
 
                     //refresh view
@@ -141,6 +144,7 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
                         derivateView = (DerivateView) AbstractUtility.getActivePart();
                     }
                     if(derivateView!=null){
+
                         derivateView.getConversationHolder().commit();
                         derivateView.refreshTree(mediaSpecimen);
                     }
@@ -232,6 +236,7 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
 
             //refresh view
             if(derivateView!=null){
+                CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate);
                 derivateView.getConversationHolder().commit();
                 derivateView.refreshTree(createdElement);
             }
index c467a943e007f923330bb62fdee50b8681b1a0c4..9706247d6a8b3807b1024889752dfb298aeed1cd 100644 (file)
@@ -78,10 +78,11 @@ public class DeleteDerivateOperation extends AbstractPostOperation<CdmBase> {
                 && treeNode.getValue().equals(element)
                 && treeNode.getParent()!=null
                 && treeNode.getParent().getValue() instanceof Sequence){
-            deleteResult = CdmStore.getService(IOccurrenceService.class).deleteSingleRead((SingleRead)element, (Sequence) treeNode.getParent().getValue());
+            deleteResult = CdmStore.getService(IOccurrenceService.class).deleteSingleRead(((SingleRead)element).getUuid(),
+                    ((Sequence) treeNode.getParent().getValue()).getUuid());
         }
         else{
-            deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element, deleteConfigurator);
+            deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element.getUuid(), deleteConfigurator);
         }
         if(deleteResult.isOk()){
             if(getPostOperationEnabled() instanceof DerivateView){
index 7c3c5e282c54d7469f27ebbc3597448b5731d0c8..070344b8c7749e576f396c969bf5178d7a6664b1 100644 (file)
@@ -22,31 +22,44 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 
 public class DerivateContentProvider implements ITreeContentProvider {
 
+    List<TreeNode> rootNodes;
+
        @Override
        public void dispose() {
                // TODO Auto-generated method stub
 
        }
 
+       public List<SpecimenOrObservationBase> getRootElements() {
+           List<SpecimenOrObservationBase> elements = new ArrayList<SpecimenOrObservationBase>();
+
+           if(rootNodes != null) {
+               for(TreeNode node : rootNodes) {
+                   elements.add((SpecimenOrObservationBase)node.getValue());
+               }
+           }
+           return elements;
+       }
+
        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
 
        @Override
        public Object[] getElements(Object inputElement) {
-           List<TreeNode> rootElements = new ArrayList<TreeNode>();
+           rootNodes = new ArrayList<TreeNode>();
            if(inputElement instanceof Set){
                for (Object o: (Set)inputElement) {
                    if(o instanceof UUID){
                        UUID uuid = (UUID)o;
                        SpecimenOrObservationBase<?> rootElement = CdmStore.getService(IOccurrenceService.class).load(uuid);
                        if(rootElement!=null){
-                           rootElements.add(new TreeNode(rootElement));
+                           rootNodes.add(new TreeNode(rootElement));
                        }
                    }
             }
            }
-           return rootElements.toArray();
+           return rootNodes.toArray();
        }
 
        @Override
index 490b1ceb38a2f660fe1323c5ab09d674a56546ec..59fd5ed1aba31b7be887fe3dce6a9cd9c99551e4 100644 (file)
@@ -37,14 +37,13 @@ public class DerivateSearchView extends ViewPart implements IContextListener, IC
     public static final String ID = "eu.etaxonomy.taxeditor.view.derivateSearch.DerivateSearchView";
     private DerivateSearchCompositeController derivateSearchCompositeController;
     private ConversationHolder conversationHolder;
-    private final ICdmEntitySession cdmEntitySession;
+    private ICdmEntitySession cdmEntitySession;
 
     /**
      * Constructs a new DerivateSearchView and registers it to listen to context changes
      */
     public DerivateSearchView() {
         CdmStore.getContextManager().addContextListener(this);
-        cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
     }
 
     /* (non-Javadoc)
@@ -52,6 +51,7 @@ public class DerivateSearchView extends ViewPart implements IContextListener, IC
      */
     @Override
     public void createPartControl(Composite parent) {
+
         derivateSearchCompositeController = new DerivateSearchCompositeController(parent, this);
         getSite().setSelectionProvider(derivateSearchCompositeController.getResultViewer());
         derivateSearchCompositeController.setEnabled(CdmStore.isActive());
@@ -74,7 +74,9 @@ public class DerivateSearchView extends ViewPart implements IContextListener, IC
         if(getConversationHolder()!=null && !getConversationHolder().isClosed() && !getConversationHolder().isBound()){
             getConversationHolder().bind();
         }
-        cdmEntitySession.bind();
+        if(getCdmEntitySession() != null) {
+            getCdmEntitySession().bind();
+        }
     }
 
     /* (non-Javadoc)
@@ -107,6 +109,13 @@ public class DerivateSearchView extends ViewPart implements IContextListener, IC
     @Override
     public void contextRefresh(IProgressMonitor monitor) {
         initConversation();
+        initSession();
+    }
+
+    private void initSession() {
+        if(CdmStore.isActive() && cdmEntitySession == null) {
+            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+        }
     }
 
     private void initConversation(){
@@ -153,6 +162,7 @@ public class DerivateSearchView extends ViewPart implements IContextListener, IC
      */
     @Override
     public ICdmEntitySession getCdmEntitySession() {
+        initSession();
         return cdmEntitySession;
     }