ref #7230: refresh of name editor and details view after changing taxon of misapplie...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / e4 / details / DetailsPartE4.java
index 6636762c66c0af7266ec1dcdfb57b89be6dd5922..284496a5768f2821a9871d7b461d53bdbc5b7852 100644 (file)
@@ -12,10 +12,12 @@ package eu.etaxonomy.taxeditor.view.e4.details;
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.services.log.Logger;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWTException;
 import org.eclipse.swt.widgets.Composite;
 
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
@@ -24,7 +26,11 @@ import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
+import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.view.e4.AbstractCdmEditorPartE4;
+import eu.etaxonomy.taxeditor.view.e4.supplementaldata.SupplementalDataPartE4;
 import eu.etaxonomy.taxeditor.workbench.part.ISelectionElementEditingPart;
 
 /**
@@ -32,20 +38,21 @@ import eu.etaxonomy.taxeditor.workbench.part.ISelectionElementEditingPart;
  * @date 18.07.2017
  *
  */
-public class DetailsPartE4 extends AbstractCdmEditorPartE4{
-
-    private ISelectionChangedListener selectionChangedListener;
-
-    @Inject
-    private ESelectionService selService;
-
-    @Inject
+public class DetailsPartE4 extends AbstractCdmEditorPartE4 implements IPartContentHasSupplementalData {
+       @Inject
+       private Logger logger;
+    
+       @Inject
     public DetailsPartE4() {
     }
 
     @PostConstruct
-    public void create(Composite parent) {
-        viewer = new DetailsViewerE4(parent, this);
+    public void create(Composite parent, MPart thisPart, IEclipseContext context) {
+
+        this.thisPart = thisPart;
+
+        viewer = ContextInjectionFactory.make(DetailsViewerE4.class, context);
+        ((DetailsViewerE4)viewer).init(parent, this);
 
         // Propagate selection from viewer
         selectionChangedListener = (event -> selService.setSelection(AbstractUtility.getElementsFromSelectionChangedEvent(event)));
@@ -59,6 +66,10 @@ public class DetailsPartE4 extends AbstractCdmEditorPartE4{
         }
 
         Object partObject = createPartObject(activePart);
+        if (partObject instanceof SupplementalDataPartE4) {
+            // do not show empty page
+            return;
+        }
 
         if(partObject instanceof IPartContentHasDetails){
             IStructuredSelection structuredSelection = createSelection(selection);
@@ -81,25 +92,43 @@ public class DetailsPartE4 extends AbstractCdmEditorPartE4{
                     return;
                 }
             }
+//            if (partObject instanceof IDistributionEditor){
+//
+//                showViewer(structuredSelection, activePart, viewer);
+//                return;
+//
+//            }
+            //FIXME this is a temporary workaround to fix selection handling for supplemental data view
+            // Now the supp data view gets double selection from details view and name editor (see #7126)
+            viewer.setSelection(structuredSelection, false);
             showViewer(structuredSelection, activePart, viewer);
             return;
         }
-        else if(selectionProvidingPart!=null && selectionProvidingPart.isVisible()){
-            return;
-        }
         else{
             showEmptyPage();
             return;
         }
     }
 
-//    protected void showEmptyPage() {
-//        super.showEmptyPage();
-//        if(viewer!=null){
-//            viewer.showEmptyPage();
-//        }
-//        selectionProvidingPart = null;
-//    }
+    @Override
+    protected void showEmptyPage() {
+        super.showEmptyPage();
+        if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed() ){
+               try{
+                       ((DetailsViewerE4)viewer).destroySections();
+               }catch(SWTException e){
+                       if (PreferencesUtil.isShowUpWidgetIsDisposedMessages() && e.getMessage().equals("Widget is disposed")){
+                    MessagingUtils.errorDialog("Widget is disposed",
+                            null,
+                            MessagingUtils.WIDGET_IS_DISPOSED_MESSAGE,
+                            null,
+                            e,
+                            true);
+
+                }
+               }
+        }
+    }
 
     @Override
     protected String getViewName(){