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;
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;
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;
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;
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);
// 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<UUID> specimenUuids = new HashSet<UUID>();
+ 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)
/** {@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;
}
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
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();
+ }
super.changed(object);
}
public boolean onComplete() {
return false;
}
+
+ public void toggleShowOnlyIndividualAssociations(){
+ provider.toggleShowOnlyIndividualAssociations();
+ viewer.refresh();
+ }
}