From: Patrick Plitzner
Date: Mon, 30 Nov 2015 06:01:23 +0000 (+0100)
Subject: list specimen-taxon associations separately in specimen details view
X-Git-Tag: 3.12.0^2~50
X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/fa9bf2825d8bf39ab2dd3014b69e833de5d1853c?hp=56a58ffb228bdb56a0e2e95e8aa0c9f495c0d014
list specimen-taxon associations separately in specimen details view
- remove determination info from derivative label
---
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/association/TaxonAssociationDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/association/TaxonAssociationDetailElement.java
index 53d9ea6ab..eb81115f5 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/association/TaxonAssociationDetailElement.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/association/TaxonAssociationDetailElement.java
@@ -11,6 +11,8 @@ package eu.etaxonomy.taxeditor.ui.section.occurrence.association;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Set;
+import java.util.UUID;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ExecutionException;
@@ -24,6 +26,7 @@ import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Label;
@@ -34,6 +37,9 @@ import org.eclipse.ui.handlers.IHandlerService;
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -49,8 +55,6 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
*/
public class TaxonAssociationDetailElement extends AbstractCdmDetailElement implements IDoubleClickListener{
- private TableViewer associationsViewer;
-
public TaxonAssociationDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
super(formFactory, formElement);
}
@@ -61,20 +65,70 @@ public class TaxonAssociationDetailElement extends AbstractCdmDetailElement> associatedTaxa = CdmStore.getService(IOccurrenceService.class).listAssociatedTaxa(entity.innerDerivedUnit(), null, null, null, null);
+ Collection> associatedTaxa = CdmStore.getService(IOccurrenceService.class).listIndividualsAssociationTaxa(entity.innerDerivedUnit(), null, null, null, null);
+ Collection typeDesignations = CdmStore.getService(IOccurrenceService.class).listTypeDesignations(entity.innerDerivedUnit(), null, null, null, null);
+ Collection determinationEvents = CdmStore.getService(IOccurrenceService.class).listDeterminationEvents(entity.innerDerivedUnit(), null, null, null, null);
- if(!associatedTaxa.isEmpty()){
- associationsViewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
- associationsViewer.getTable().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
- associationsViewer.setContentProvider(new ArrayContentProvider());
- associationsViewer.setInput(associatedTaxa);
- associationsViewer.addDoubleClickListener(this);
- }
- else{
+ if(associatedTaxa.isEmpty() && typeDesignations.isEmpty() && determinationEvents.isEmpty()){
Label label = formFactory.createLabel(getLayoutComposite(), "No associations");
label.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+ return;
+ }
+ if(!associatedTaxa.isEmpty()){
+ TableViewer viewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
+ viewer.getTable().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+ viewer.setContentProvider(new ArrayContentProvider());
+ viewer.setLabelProvider(new LabelProvider(){
+ @Override
+ public String getText(Object element) {
+ return "Associated with "+element.toString();
+ }
+ });
+ viewer.setInput(associatedTaxa);
+ viewer.addDoubleClickListener(this);
+ }
+ if(!typeDesignations.isEmpty()){
+ TableViewer viewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
+ viewer.getTable().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+ viewer.setContentProvider(new ArrayContentProvider());
+ viewer.setLabelProvider(new LabelProvider(){
+ @Override
+ public String getText(Object element) {
+ SpecimenTypeDesignation typeDesignation = (SpecimenTypeDesignation)element;
+ String label = typeDesignation.getTypeStatus().getLabel()+" of ";
+ Set typifiedNames = typeDesignation.getTypifiedNames();
+ for (TaxonNameBase taxonNameBase : typifiedNames) {
+ label += taxonNameBase+", ";
+ }
+ if(label.endsWith(", ")){
+ label = label.substring(0, label.length()-2);
+ }
+ return label;
+ }
+ });
+ viewer.setInput(typeDesignations);
+ viewer.addDoubleClickListener(this);
+ }
+ if(!determinationEvents.isEmpty()){
+ TableViewer viewer = new TableViewer(getLayoutComposite(), SWT.FULL_SELECTION);
+ viewer.getTable().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+ viewer.setContentProvider(new ArrayContentProvider());
+ viewer.setLabelProvider(new LabelProvider(){
+ @Override
+ public String getText(Object element) {
+ DeterminationEvent determinationEvent = (DeterminationEvent)element;
+ if(determinationEvent.getTaxon()!=null){
+ return "Determined as taxon "+determinationEvent.getTaxon();
+ }
+ if(determinationEvent.getTaxonName()!=null){
+ return "Determined as name "+determinationEvent.getTaxonName();
+ }
+ return element.toString();
+ }
+ });
+ viewer.setInput(determinationEvents);
+ viewer.addDoubleClickListener(this);
}
-
}
/** {@inheritDoc} */
@@ -87,8 +141,22 @@ public class TaxonAssociationDetailElement extends AbstractCdmDetailElement){
- TaxonBase> taxonBase = (TaxonBase>)firstElement;
+ taxonToOpenUuid = ((TaxonBase>)firstElement).getUuid();
+ }
+ else if(firstElement instanceof SpecimenTypeDesignation){
+ //TODO how to open an editor for all typed names?
+ }
+ else if(firstElement instanceof DeterminationEvent){
+ if(((DeterminationEvent) firstElement).getTaxon()!=null){
+ taxonToOpenUuid = ((DeterminationEvent) firstElement).getTaxon().getUuid();
+ }
+ else if(((DeterminationEvent) firstElement).getTaxonName()!=null){
+ //TODO how to open editor for taxon name
+ }
+ }
+ if(taxonToOpenUuid!=null){
String commandId = "eu.etaxonomy.taxeditor.editor.openTaxonEditor";
@@ -106,7 +174,7 @@ public class TaxonAssociationDetailElement extends AbstractCdmDetailElement multiLinkSingleReads;
- private static Map> determinationEvents;
-
private static Map> typeDesignations;
private ConversationHolder conversation;
@@ -238,12 +234,6 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
addTypeDesignation(derivedUnit, specimenTypeDesignation);
}
}
- //check for determination events
- if(determinationEvents.get(derivedUnit)==null){
- for (DeterminationEvent determinationEvent : CdmStore.getService(IOccurrenceService.class).listDeterminationEvents(derivedUnit, null, null, null, null)) {
- addDeterminationEvent(derivedUnit, determinationEvent);
- }
- }
//java.util.Collection fieldUnits = CdmStore.getService(IOccurrenceService.class).getFieldUnits(derivedUnit.getUuid());
//TODO : This is not generic anymore for performance reasons
Set originals = derivedUnit.getOriginals();
@@ -265,35 +255,6 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
}
String mostSignificantIdentifier = derivedUnit.getMostSignificantIdentifier();
label += mostSignificantIdentifier!=null?mostSignificantIdentifier+separator:emptyString;
- //type designation extension
- List typeDesignationList = typeDesignations.get(derivedUnit);
- if(typeDesignationList!=null){
- for (SpecimenTypeDesignation specimenTypeDesignation : typeDesignationList) {
- label += "("+specimenTypeDesignation.getTypeStatus()+" of ";
- for (TaxonNameBase taxonNameBase : specimenTypeDesignation.getTypifiedNames()) {
- label += taxonNameBase+separator;
- }
- if(label.endsWith(separator)){
- label = label.substring(0, label.length()-separator.length());
- }
- label += ")";
- }
- }
- //determination event extension
- List determinationEventList = determinationEvents.get(derivedUnit);
- if(determinationEventList!=null){
- for (DeterminationEvent determinationEvent : determinationEventList) {
- label += "(";
- if(determinationEvent.getTaxon()!=null){
- label += "Determined as "+determinationEvent.getTaxon();
- }
-
- if(label.endsWith(separator)){
- label = label.substring(0, label.length()-separator.length());
- }
- label += ")";
- }
- }
}
else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.TissueSample){
//TissueSample should only be created by using it's own class
@@ -369,6 +330,12 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
}
else if(cdmBase.isInstanceOf(DerivedUnit.class)){
DerivedUnit derivedUnit = HibernateProxyHelper.deproxy(element, DerivedUnit.class);
+
+ boolean isType = false;
+ //type designation extension
+ if(typeDesignations.get(derivedUnit)!=null){
+ isType = true;
+ }
if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.FieldUnit){
return hasCharacterData?ImageResources.getImage(ImageResources.FIELD_UNIT_CHARACTER_DATA):ImageResources.getImage(ImageResources.FIELD_UNIT);
}
@@ -445,16 +412,6 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
}
}
DerivateLabelProvider.typeDesignations = new HashMap>();
- DerivateLabelProvider.determinationEvents = new HashMap>();
- }
-
- private static void addDeterminationEvent(DerivedUnit derivedUnit, DeterminationEvent determinationEvent){
- List list = determinationEvents.get(derivedUnit);
- if(list==null){
- list = new ArrayList();
- }
- list.add(determinationEvent);
- determinationEvents.put(derivedUnit, list);
}
private static void addTypeDesignation(DerivedUnit derivedUnit, SpecimenTypeDesignation typeDesignation){