fix #5801 Fix exceptions during selection propagation for concept
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / concept / ConceptViewPart.java
index 69751b2132abbaf770d8e90565b3ed814d4680da..015600a06cf733315ddf18b5d01168c285a0bffb 100644 (file)
 
 package eu.etaxonomy.taxeditor.editor.view.concept;
 
+import java.util.Map.Entry;
+
 import org.eclipse.jface.action.GroupMarker;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ListViewer;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Menu;
@@ -24,12 +28,15 @@ import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.IWorkbenchPart;
 
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
 import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
+import eu.etaxonomy.taxeditor.model.LineSelection;
 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
 
 /**
@@ -37,35 +44,49 @@ import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
  * @created Jan 24, 2011
  * @version 1.0
  */
-public class ConceptViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData{
+public class ConceptViewPart extends AbstractCdmEditorViewPart 
+implements IPartContentHasDetails, IPartContentHasSupplementalData{
 
        public static final String ID = "eu.etaxonomy.taxeditor.editor.view.concept";
 
-       private ListViewer viewer;
+       private ConceptRelationViewer viewer;
 
        @Override
        protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) {
+               if(part == this){
+                   return;
+               }
                if(AbstractUtility.getActiveEditor() == null){
                        showEmptyPage();
                        return;
                }
 
-               if(part instanceof BulkEditor){
-                       showEmptyPage();
+               if(part instanceof BulkEditor && selection instanceof LineSelection){
+                       if(((LineSelection) selection).getFirstElement() instanceof Taxon){
+                               showViewer(part, (LineSelection) selection);
+                       }
+                       else{
+                               showEmptyPage();
+                       }
                        return;
                }
 
-               if(part instanceof AbstractGraphKeyEditor){
+               else if(part instanceof AbstractGraphKeyEditor){
                        showEmptyPage();
                        return;
                }
 
-               if(part instanceof MultiPageTaxonEditor){
+               else if(part instanceof MultiPageTaxonEditor){
                        if(! part.equals(this.part)){
                                IEditorInput input = ((IEditorPart) part).getEditorInput();
                                showViewer(part, new StructuredSelection(input));
                        }
-                       showViewer();
+                       else{
+                               showViewer();
+                       }
+               }
+               else {
+                   showEmptyPage();
                }
 
        }
@@ -82,13 +103,13 @@ public class ConceptViewPart extends AbstractCdmEditorViewPart implements IPartC
 
        @Override
        public void createViewer(Composite parent) {
-               viewer = new ListViewer(parent);
+               viewer = new ConceptRelationViewer(parent);
 
                viewer.setContentProvider(new ConceptContentProvider());
                viewer.setLabelProvider(new ConceptLabelProvider());
 
 
-               viewer.setSorter(new ConceptViewerSorter());
+               viewer.setSorter(new ViewerSorter());
 
                getSite().setSelectionProvider(viewer);
 
@@ -113,4 +134,29 @@ public class ConceptViewPart extends AbstractCdmEditorViewPart implements IPartC
                super.changed(object);
        }
 
+       private class ConceptRelationViewer extends ListViewer {
+
+               public ConceptRelationViewer(Composite parent) {
+                       super(parent);
+               } 
+               
+               @Override
+               public ISelection getSelection() {
+                       ISelection selection = super.getSelection();
+                       if(selection instanceof IStructuredSelection && !selection.isEmpty()){
+                               Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+                               TaxonRelationship taxonRelationship = ((Entry<TaxonRelationship, Taxon>)firstElement).getKey();
+                               return new StructuredSelection(taxonRelationship);
+                               
+                       }
+                       return selection;
+               }
+               
+               @Override
+               public void setSelection(ISelection selection) {
+                       super.setSelection(selection);
+               }
+
+       }
+
 }