- fixed possible LazyInitializaitionException in DerivateLabelProvdider
authorPatric Plitzner <p.plitzner@bgbm.org>
Mon, 15 Sep 2014 07:53:13 +0000 (07:53 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Mon, 15 Sep 2014 07:53:13 +0000 (07:53 +0000)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchView.java

index 0188825eb5a25e2b13bc80f7dc92b138e24171af..69f175743e030568b3e904015de829284f4a00b2 100644 (file)
@@ -76,7 +76,9 @@ public class DerivateDropListener extends ViewerDropAdapter {
                     return true;
                 }
                 else{
-                    MessagingUtils.warningDialog("Moving derivate not possible!", derivateView, "Moving \""+DerivateLabelProvider.getDerivateText(draggednode)+"\" to \""+DerivateLabelProvider.getDerivateText(targetNode)+"\" is not possible!");
+                    DerivateLabelProvider derivateLabelProvider = new DerivateLabelProvider();
+                    derivateLabelProvider.setConversation(derivateView.getConversationHolder());
+                    MessagingUtils.warningDialog("Moving derivate not possible!", derivateView, "Moving \""+derivateLabelProvider.getDerivateText(draggednode)+"\" to \""+derivateLabelProvider.getDerivateText(targetNode)+"\" is not possible!");
                 }
             }
         }
@@ -99,7 +101,10 @@ public class DerivateDropListener extends ViewerDropAdapter {
         Object draggedNodeValue = draggedNode.getValue();
         Object targetNodeValue = targetNode.getValue();
         TreeNode fromParentNode = draggedNode.getParent();
-        Object fromParentSpecimen = fromParentNode.getValue();
+        Object fromParentSpecimen = null;
+        if(fromParentNode!=null){
+            fromParentNode.getValue();
+        }
 
         // drag'n'drop for SpecimenOrObservationBase
         IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
index 90fc97eeb9c9f4fdb5297f5594529e3a05556bff..8949898d79629cff51e6323b1c776b9957586812 100644 (file)
@@ -88,6 +88,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
         viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
         viewer.setContentProvider(new DerivateContentProvider());
         labelProvider = new DerivateLabelProvider();
+        labelProvider.setConversation(conversation);
         viewer.setLabelProvider(labelProvider);
         viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
         // Propagate selection from viewer
@@ -107,7 +108,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
         if(editorInput instanceof DerivateViewEditorInput){
             SpecimenOrObservationBase<?> specimen = ((DerivateViewEditorInput) editorInput).getDerivate();
             SpecimenOrObservationBase<?> rootElement = ((DerivateViewEditorInput) editorInput).getRootElement();
-            setPartName(DerivateLabelProvider.getDerivateText(rootElement));
+            setPartName(labelProvider.getDerivateText(rootElement));
             viewer.setSelection(new StructuredSelection(new TreeNode(specimen)));
         }
 
index d628deaaac6e025d30594b0895c2e23e9fb64beb..055880fa63e2e720de579eb22c7036932ba028c6 100644 (file)
@@ -40,12 +40,15 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * <b>Note:</b> If you use this label provider you need to assure that you
  * created a {@link ConversationHolder} resp. have an open session because
  * the labels are generated from various fields of the derivate hierarchy which
- * are lazy loaded and could therefore throw a {@link LazyInitializationException}.
+ * are lazy loaded and could therefore throw a {@link LazyInitializationException}.<br>
+ * Use <b>{@link #setConversation(ConversationHolder)}</b> to assign the session to this provider.
  */
 public class DerivateLabelProvider extends ColumnLabelProvider {
 
     private Set<SingleRead> multiLinkSingleReads;
 
+    private ConversationHolder conversation;
+
     private static DefinedTerm photoTerm = null;
     private static DefinedTerm drawingTerm = null;
     private static DefinedTerm specimenScanTerm = null;
@@ -110,22 +113,35 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
         return getDerivateText(element);
     }
 
+    /**
+     * @param conversation the conversation to set
+     */
+    public void setConversation(ConversationHolder conversation) {
+        this.conversation = conversation;
+    }
+
     /**
      *
      * @param element
      * @return
      */
-    public static String getDerivateText(Object element){
+    public String getDerivateText(Object element){
         if(element instanceof TreeNode){
             //unwrap specimen from TreeNode
             element = ((TreeNode) element).getValue();
         }
 
+        conversation.bind();
+
         String label = "";
         if(element instanceof FieldUnit){
             FieldUnit fieldUnit = (FieldUnit)element;
-            GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
-            if(gatheringEvent!=null){
+            if(fieldUnit.getGatheringEvent()!=null){
+                GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
+                if(!conversation.getSession().contains(gatheringEvent)){
+                    fieldUnit = (FieldUnit) CdmStore.getService(IOccurrenceService.class).load(fieldUnit.getUuid());
+                    gatheringEvent = fieldUnit.getGatheringEvent();
+                }
                 label += gatheringEvent.getCountry()!=null?gatheringEvent.getCountry().getLabel()+", ":"";
                 label += gatheringEvent.getLocality()!=null?gatheringEvent.getLocality().getText()+", ":"";
                 label += gatheringEvent.getGatheringDate()!=null?gatheringEvent.getGatheringDate()+", ":"";
index ff7cb73f53ffdf67d466b997700437b9475bc2c2..536c3b2b78694396052c43ecc3fca9217bf3d5df 100644 (file)
@@ -29,6 +29,7 @@ import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Widget;
 import org.eclipse.ui.handlers.IHandlerService;
 
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
@@ -51,6 +52,7 @@ public class DerivateSearchCompositeController implements Listener{
     private final DerivateSearchComposite derivateSearchComposite;
     private IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>> configurator;
     private EnumTermComboController<SpecimenOrObservationType> enumTermComboController;
+    private DerivateLabelProvider labelProvider;
 
     /**
      * @param parent
@@ -77,7 +79,8 @@ public class DerivateSearchCompositeController implements Listener{
 
         TableViewer resultViewer = derivateSearchComposite.getResultViewer();
         resultViewer.setContentProvider(new ArrayContentProvider());
-        resultViewer.setLabelProvider(new DerivateLabelProvider());
+        labelProvider = new DerivateLabelProvider();
+        resultViewer.setLabelProvider(labelProvider);
         resultViewer.addDoubleClickListener(new IDoubleClickListener() {
             @Override
             public void doubleClick(DoubleClickEvent event) {
@@ -159,4 +162,11 @@ public class DerivateSearchCompositeController implements Listener{
         derivateSearchComposite.getResultViewer().getControl().setFocus();
     }
 
+    /**
+     * @param conversationHolder
+     */
+    public void setConversation(ConversationHolder conversationHolder) {
+        labelProvider.setConversation(conversationHolder);
+    }
+
 }
index ddd4b1a20dba1cd3283da47aa4fa965e6d88c98b..382032037ded23055f935150326e2460a0503399 100644 (file)
@@ -93,6 +93,7 @@ public class DerivateSearchView extends ViewPart implements IContextListener {
     private void initConversation(){
         if(conversationHolder==null){
             conversationHolder = CdmStore.createConversation();
+            derivateSearchCompositeController.setConversation(conversationHolder);
         }
     }