merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / descriptive / DescriptiveViewPart.java
index dbd2cbbaac30e881931f82de080dd70ad69b695c..64a4123639a1709da77b5ff6067d8c0c29d3c3e3 100644 (file)
@@ -15,10 +15,13 @@ import java.util.Map;
 
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
@@ -30,26 +33,23 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Tree;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.IWorkbenchPart;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
-import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
-import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;
-import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;
+import eu.etaxonomy.cdm.model.description.IDescribable;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
+import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
+import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
+import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
 
 /**
  * <p>DescriptiveViewPart class.</p>
@@ -65,7 +65,11 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
 
        protected TreeViewer viewer;
 
-       protected Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache = new HashMap<TaxonDescription, FeatureNodeContainerTree>();
+       /**
+        * Maps {@link FeatureNodeContainerTree} to their corresponding {@link TaxonDescritpion}.<br>
+        * This serves as input for the {@link ITreeContentProvider} of the {@link TreeViewer}
+        */
+       protected Map<DescriptionBase<?>, FeatureNodeContainerTree> featureNodeContainerCache = new HashMap<DescriptionBase<?>, FeatureNodeContainerTree>();
 
        protected ToggleDescriptionAction showAllElementsAction;
 
@@ -146,33 +150,28 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
        /** {@inheritDoc} */
        @Override
     public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-               if(EditorUtil.getActiveEditor() == null){
+               if(AbstractUtility.getActiveEditor() == null){
                        showEmptyPage();
                        return;
                }
 
-               if(part instanceof BulkEditor){
-                       showEmptyPage();
-                       return;
+               if(part == this){
+                   return;
                }
-
-               if(part instanceof AbstractGraphKeyEditor){
-                       showEmptyPage();
-                       return;
+               if(part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart){
+                   // do not show empty page as these views are also used to edit the description selected in this view
+                   return;
                }
 
-               if(part instanceof DefinedTermEditor){
-                       showEmptyPage();
-                       return;
+               if(selection instanceof IStructuredSelection
+                       && ((IStructuredSelection) selection).getFirstElement() instanceof IDescribable<?>
+                       && part instanceof IPartContentHasFactualData){
+                   featureNodeContainerCache.clear();
+                   showViewer(part, (IStructuredSelection) selection);
+                   return;
                }
-
-               if(part instanceof MultiPageTaxonEditor){
-                       if(! part.equals(this.part)){
-                               IEditorInput input = ((IEditorPart) part).getEditorInput();
-                               featureNodeContainerCache.clear();
-                               showViewer(part, new StructuredSelection(input));
-                       }
-                       showViewer();
+               else{
+                   showEmptyPage();
                }
        }
 
@@ -186,7 +185,7 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
                private final boolean expanded;
 
                public ToggleDescriptionAction(boolean expand){
-                       super(null, Action.AS_PUSH_BUTTON);
+                       super(null, IAction.AS_PUSH_BUTTON);
                        expanded = expand;
                        setImageAndTooltip();
                }