fix #5759 remove all switches for remoting and standalone
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / descriptive / DescriptiveViewPart.java
index dbd2cbbaac30e881931f82de080dd70ad69b695c..b61efaa48f9eef794f3922ebdcbdb45704cea269 100644 (file)
@@ -15,11 +15,15 @@ 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.TreeNode;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
@@ -30,30 +34,34 @@ 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.cdm.model.description.IDescribable;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
 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.taxeditor.editor.Messages;
+import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor;
+import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
+import eu.etaxonomy.taxeditor.editor.view.media.MediaViewPart;
+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.store.CdmStore;
 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
+import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
+import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
 
 /**
- * <p>DescriptiveViewPart class.</p>
- *
  * @author n.hoffmann
  * @created Jun 9, 2010
  * @version 1.0
@@ -61,11 +69,15 @@ import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
 public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
 
        /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.view.desc"{trunked}</code> */
-       public static final String ID = "eu.etaxonomy.taxeditor.editor.view.descriptive";
+       public static final String ID = "eu.etaxonomy.taxeditor.editor.view.descriptive"; //$NON-NLS-1$
 
        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;
 
@@ -73,12 +85,15 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
 
        protected int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
 
+    private DescriptiveContentProvider provider;
+
        /** {@inheritDoc} */
        @Override
        public void createViewer(Composite parent) {
                viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
                                | SWT.V_SCROLL | SWT.FULL_SELECTION));
-               viewer.setContentProvider(new DescriptiveContentProvider(featureNodeContainerCache));
+               provider = new DescriptiveContentProvider(featureNodeContainerCache);
+        viewer.setContentProvider(provider);
                viewer.setLabelProvider(new DescriptiveLabelProvider());
                viewer.setSorter(new DescriptiveViewerSorter());
                viewer.setAutoExpandLevel(2);
@@ -99,15 +114,8 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
 
                createToolbar();
 
-               // set initial input
-//             if(getEditor() != null){
-//                     viewer.setInput(getEditor().getEditorInput());
-//             }
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()
-        */
        /** {@inheritDoc} */
        @Override
        protected ISelection getInitialSelection() {
@@ -129,6 +137,7 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
         */
        protected void createMenu(){
                MenuManager menuManager = new MenuManager();
+               menuManager.setRemoveAllWhenShown(true);
                menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
 
                getSite().registerContextMenu(menuManager, viewer);
@@ -145,37 +154,60 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
 
        /** {@inheritDoc} */
        @Override
-    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-               if(EditorUtil.getActiveEditor() == null){
+    protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) {
+               if(AbstractUtility.getActiveEditor() == null){
+                   setPartName(createPartTitle(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
+                || part instanceof MediaViewPart) {
+            // do not show empty page as these views are also used to edit the
+            // description selected in this view
+            return;
+        }
+               // unpackage TreeNode of DerivateView
+               else if(part instanceof DerivateView){
+                   TreeNode treeNodeOfSelection = EditorUtil.getTreeNodeOfSelection(selection);
+                   if(treeNodeOfSelection!=null){
+                       selection = new StructuredSelection(treeNodeOfSelection.getValue());
+                   }
                }
-
-               if(part instanceof DefinedTermEditor){
-                       showEmptyPage();
-                       return;
+        else if(part instanceof ChecklistEditor){
+            if(selection instanceof StructuredSelection  && ((IStructuredSelection) selection).getFirstElement() instanceof Taxon){
+                Taxon taxon = (Taxon)((IStructuredSelection) selection).getFirstElement();
+                selection = new StructuredSelection(taxon);
+            }
+        }
+               if(selection instanceof IStructuredSelection
+                       && ((IStructuredSelection) selection).getFirstElement() instanceof IDescribable<?>
+                       && part instanceof IPartContentHasFactualData  && !(((IStructuredSelection) selection).getFirstElement() instanceof SpecimenOrObservationBase && part instanceof BulkEditor)){
+                   featureNodeContainerCache.clear();
+               setPartName(createPartTitle(((IStructuredSelection) selection).getFirstElement()));
+                   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{
+            setPartName(createPartTitle(null));
+                   showEmptyPage();
                }
        }
 
+       protected String getViewName(){
+           return Messages.DescriptiveViewPart_FACTUAL_DATA;
+       }
+
+       private String createPartTitle(Object selectedObject){
+           if(selectedObject!=null){
+               return getViewName()+": "+selectedObject; //$NON-NLS-1$
+           }
+        return getViewName();
+       }
+
        /**
         *
         * @author n.hoffmann
@@ -186,7 +218,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();
                }
@@ -195,13 +227,13 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
                        setImageDescriptor(new ImageDescriptor() {
                                @Override
                                public ImageData getImageData() {
-                                       setText(expanded ? "Collapse All" : "Expand All");
+                                       setText(expanded ? Messages.DescriptiveViewPart_COLLAPSE_ALL : Messages.DescriptiveViewPart_EXPAND_ALL);
                                        String resource = expanded ? ImageResources.COLLAPSE_ALL : ImageResources.EXPAND_ALL;
                                        return ImageResources.getImage(resource).getImageData();
                                }
                        });
 
-                       String toolTipText = expanded ? "Collapse all" : "Show all factual data";
+                       String toolTipText = expanded ? Messages.DescriptiveViewPart_COLLAPSE_ALL : Messages.DescriptiveViewPart_SHOW_ALL_DATA;
                        setToolTipText(toolTipText);
                }
 
@@ -228,6 +260,7 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
                for(FeatureNodeContainerTree containerTree : featureNodeContainerCache.values()){
                        containerTree.buildTree();
                }
+               viewer.expandToLevel(2);
                viewer.refresh();
 
                if(object instanceof DescriptionElementBase){
@@ -244,6 +277,13 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
                        StructuredSelection selection = new StructuredSelection(object);
                        viewer.setSelection(selection, true);
                }
+               if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
+                   ((BulkEditor) part).forceDirty();
+                   IStructuredSelection selection = (IStructuredSelection) ((BulkEditor) part).getSelectionProvider().getSelection();
+                   ((BulkEditor) part).changed(selection.getFirstElement());
+                   
+               }
+
 
                super.changed(object);
        }
@@ -254,13 +294,13 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
                return viewer;
        }
 
-       /**
-        * <p>onComplete</p>
-        *
-        * @return a boolean.
-        */
        @Override
     public boolean onComplete() {
                return false;
        }
+
+       public void toggleShowOnlyIndividualAssociations(){
+           provider.toggleShowOnlyIndividualAssociations();
+           viewer.refresh();
+       }
 }