From: Patric Plitzner
Date: Mon, 15 Sep 2014 07:53:13 +0000 (+0000)
Subject: - fixed possible LazyInitializaitionException in DerivateLabelProvdider
X-Git-Tag: 3.6.0~445
X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/3e6de1b71f25c1a4e1f5b403dbb3e43255e0573e
- fixed possible LazyInitializaitionException in DerivateLabelProvdider
---
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java
index 0188825eb..69f175743 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java
@@ -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);
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
index 90fc97eeb..8949898d7 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
@@ -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)));
}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java
index d628deaaa..055880fa6 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java
@@ -40,12 +40,15 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
* Note: 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}.
+ * Use {@link #setConversation(ConversationHolder)} to assign the session to this provider.
*/
public class DerivateLabelProvider extends ColumnLabelProvider {
private Set 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()+", ":"";
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java
index ff7cb73f5..536c3b2b7 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java
@@ -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> configurator;
private EnumTermComboController 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);
+ }
+
}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchView.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchView.java
index ddd4b1a20..382032037 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchView.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchView.java
@@ -93,6 +93,7 @@ public class DerivateSearchView extends ViewPart implements IContextListener {
private void initConversation(){
if(conversationHolder==null){
conversationHolder = CdmStore.createConversation();
+ derivateSearchCompositeController.setConversation(conversationHolder);
}
}