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;
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
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;
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);
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() {
*/
protected void createMenu(){
MenuManager menuManager = new MenuManager();
+ menuManager.setRemoveAllWhenShown(true);
menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
getSite().registerContextMenu(menuManager, viewer);
/** {@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
private final boolean expanded;
public ToggleDescriptionAction(boolean expand){
- super(null, Action.AS_PUSH_BUTTON);
+ super(null, IAction.AS_PUSH_BUTTON);
expanded = expand;
setImageAndTooltip();
}
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);
}
for(FeatureNodeContainerTree containerTree : featureNodeContainerCache.values()){
containerTree.buildTree();
}
+ viewer.expandToLevel(2);
viewer.refresh();
if(object instanceof DescriptionElementBase){
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);
}
return viewer;
}
- /**
- * <p>onComplete</p>
- *
- * @return a boolean.
- */
@Override
public boolean onComplete() {
return false;
}
+
+ public void toggleShowOnlyIndividualAssociations(){
+ provider.toggleShowOnlyIndividualAssociations();
+ viewer.refresh();
+ }
}