X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/c3efc10a8ccfc08ef6fe227b58b22842bcc5ae69..c860d200ef52f74bac80408bdaee665a55d25ad9:/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java index 64a412363..52fedd9b0 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java @@ -11,7 +11,11 @@ package eu.etaxonomy.taxeditor.editor.view.descriptive; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.Map; +import java.util.Set; +import java.util.UUID; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.GroupMarker; @@ -19,10 +23,14 @@ 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.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; 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.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; @@ -35,11 +43,21 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.PartInitException; 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.IDescribable; +import eu.etaxonomy.cdm.model.description.IndividualsAssociation; +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.view.checklist.ChecklistEditor; +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; +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; @@ -47,6 +65,7 @@ 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.model.MessagingUtils; import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart; import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart; import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart; @@ -77,12 +96,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); @@ -107,6 +129,49 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP // if(getEditor() != null){ // viewer.setInput(getEditor().getEditorInput()); // } + + viewer.addDoubleClickListener(new IDoubleClickListener() { + @Override + public void doubleClick(DoubleClickEvent event) { + //Open derivate editor when specimen description element is double clicked + TreeSelection selection = (TreeSelection) viewer.getSelection(); + Iterator iterator = selection.iterator(); + Set specimenUuids = new HashSet(); + while(iterator.hasNext()){ + Object next = iterator.next(); + if(next instanceof IndividualsAssociation){ + SpecimenOrObservationBase specimen = ((IndividualsAssociation)next).getAssociatedSpecimenOrObservation(); + if(specimen!=null){ + specimenUuids.add(specimen.getUuid()); + } + } + } + try { + if(!specimenUuids.isEmpty()){ + EditorUtil.open(new DerivateViewEditorInput(specimenUuids)); + } + } catch (PartInitException e) { + MessagingUtils.error(DescriptiveViewPart.class, "Could not open Derivative Editor", e); + } + + + //TODO: extend command to accept parameter to open editor +// String commandId = "eu.etaxonomy.taxeditor.editor.handler.openDerivateView"; +// IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class); +// try { +// handlerService.executeCommand(commandId, null); +// } catch (ExecutionException e) { +// MessagingUtils.error(DerivateSearchCompositeController.class, e); +// } catch (NotDefinedException e) { +// MessagingUtils.error(DerivateSearchCompositeController.class, e); +// } catch (NotEnabledException e) { +// MessagingUtils.error(DerivateSearchCompositeController.class, e); +// } catch (NotHandledException e) { +// MessagingUtils.error(DerivateSearchCompositeController.class, e); +// } + + } + }); } /* (non-Javadoc) @@ -149,8 +214,9 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP /** {@inheritDoc} */ @Override - public void selectionChanged(IWorkbenchPart part, ISelection selection) { + protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) { if(AbstractUtility.getActiveEditor() == null){ + setPartName(createPartTitle(null)); showEmptyPage(); return; } @@ -158,23 +224,50 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP if(part == this){ 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 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()); + } } - + 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){ + && part instanceof IPartContentHasFactualData && !(((IStructuredSelection) selection).getFirstElement() instanceof SpecimenOrObservationBase && part instanceof BulkEditor)){ featureNodeContainerCache.clear(); + setPartName(createPartTitle(((IStructuredSelection) selection).getFirstElement())); showViewer(part, (IStructuredSelection) selection); return; } else{ + setPartName(createPartTitle(null)); showEmptyPage(); } } + protected String getViewName(){ + return "Factual Data"; + } + + private String createPartTitle(Object selectedObject){ + if(selectedObject!=null){ + return getViewName()+": "+selectedObject; + } + return getViewName(); + } + /** * * @author n.hoffmann @@ -227,6 +320,7 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP for(FeatureNodeContainerTree containerTree : featureNodeContainerCache.values()){ containerTree.buildTree(); } + viewer.expandToLevel(2); viewer.refresh(); if(object instanceof DescriptionElementBase){ @@ -243,6 +337,9 @@ 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(); + } super.changed(object); } @@ -262,4 +359,9 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP public boolean onComplete() { return false; } + + public void toggleShowOnlyIndividualAssociations(){ + provider.toggleShowOnlyIndividualAssociations(); + viewer.refresh(); + } }