X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/e2b6e8ec8638d8bb7da1b6e084e2b44ff9502b23..84ff95599b9406072ee85834262ddae5f60cf450:/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java index 4f16e00c4..29d858118 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java @@ -9,20 +9,98 @@ */ package eu.etaxonomy.taxeditor.view.derivateSearch; +import java.util.List; +import java.util.Set; +import java.util.UUID; + import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.TreeNode; import org.eclipse.swt.graphics.Image; +import org.hibernate.LazyInitializationException; +import eu.etaxonomy.cdm.api.conversation.ConversationHolder; +import eu.etaxonomy.cdm.api.service.IOccurrenceService; +import eu.etaxonomy.cdm.model.common.DefinedTerm; +import eu.etaxonomy.cdm.model.molecular.DnaSample; +import eu.etaxonomy.cdm.model.molecular.Sequence; +import eu.etaxonomy.cdm.model.molecular.SingleRead; +import eu.etaxonomy.cdm.model.occurrence.Collection; import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; import eu.etaxonomy.cdm.model.occurrence.FieldUnit; +import eu.etaxonomy.cdm.model.occurrence.GatheringEvent; +import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; import eu.etaxonomy.taxeditor.model.ImageResources; +import eu.etaxonomy.taxeditor.store.CdmStore; /** - * Label provider for the views to show {@link SpecimenOrObservationBase}s. + * Label provider for the views to show {@link SpecimenOrObservationBase}s.
+ *
+ * Note: If you use this label provider you need to assure that you + * created a {@link ConversationHolder} resp. have an open session because + * the labels are generated from various fields of the derivate hierarchy which + * are lazy loaded and could therefore throw a {@link LazyInitializationException}.
+ * Use {@link #setConversation(ConversationHolder)} to assign the session to this provider. */ public class DerivateLabelProvider extends ColumnLabelProvider { + private Set multiLinkSingleReads; + + private ConversationHolder conversation; + + private static DefinedTerm photoTerm = null; + private static DefinedTerm drawingTerm = null; + private static DefinedTerm specimenScanTerm = null; + private static DefinedTerm detailImageTerm = null; + + private static void initializeTerms() { + List preferredTerms = CdmStore.getTermManager().getPreferredTerms(DefinedTerm.class); + for (DefinedTerm definedTerm : preferredTerms) { + if(definedTerm.getUuid().equals(UUID.fromString("c5c59c42-f254-471e-96c6-09f459f7c903"))){ + photoTerm = definedTerm; + } + else if(definedTerm.getUuid().equals(UUID.fromString("669b0409-4aa4-4695-aae4-a95ed27bad4c"))){ + drawingTerm = definedTerm; + } + else if(definedTerm.getUuid().equals(UUID.fromString("acda15be-c0e2-4ea8-8783-b9b0c4ad7f03"))){ + specimenScanTerm = definedTerm; + } + else if(definedTerm.getUuid().equals(UUID.fromString("31eb8d02-bf5d-437c-bcc6-87a626445f34"))){ + detailImageTerm = definedTerm; + } + } + } + + public static DefinedTerm getLivingPlantPhotoTerm(){ + if(photoTerm==null){ + initializeTerms(); + } + return photoTerm; + } + + public static DefinedTerm getArtworkTerm(){ + if(drawingTerm==null){ + initializeTerms(); + } + return drawingTerm; + } + + public static DefinedTerm getSpecimenScanTerm(){ + if(specimenScanTerm==null){ + initializeTerms(); + } + return specimenScanTerm; + } + + public static DefinedTerm getDetailImageTerm(){ + if(detailImageTerm==null){ + initializeTerms(); + } + return detailImageTerm; + } + + /** {@inheritDoc} */ @Override public String getText(Object element) { @@ -35,13 +113,109 @@ public class DerivateLabelProvider extends ColumnLabelProvider { return getDerivateText(element); } - private String getDerivateText(Object element){ - if(element instanceof SpecimenOrObservationBase){ + /** + * @param conversation the conversation to set + */ + public void setConversation(ConversationHolder conversation) { + this.conversation = conversation; + } + + /** + * + * @param element + * @return + */ + public String getDerivateText(Object element){ + if(element instanceof TreeNode){ + //unwrap specimen from TreeNode + element = ((TreeNode) element).getValue(); + } + + conversation.bind(); + + String label = ""; + if(element instanceof FieldUnit){ + FieldUnit fieldUnit = (FieldUnit)element; + if(fieldUnit.getGatheringEvent()!=null){ + GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent(); + if(!conversation.getSession().contains(gatheringEvent)){ + fieldUnit = (FieldUnit) CdmStore.getService(IOccurrenceService.class).load(fieldUnit.getUuid()); + gatheringEvent = fieldUnit.getGatheringEvent(); + } + label += gatheringEvent.getCountry()!=null?gatheringEvent.getCountry().getLabel()+", ":""; + label += gatheringEvent.getLocality()!=null?gatheringEvent.getLocality().getText()+", ":""; + label += gatheringEvent.getGatheringDate()!=null?gatheringEvent.getGatheringDate()+", ":""; + label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+", ":""; + } + label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber():""; + } + else if(element instanceof MediaSpecimen){ + MediaSpecimen mediaSpecimen = (MediaSpecimen)element; + if(mediaSpecimen.getMediaSpecimen()!=null){ + label += mediaSpecimen.getMediaSpecimen().getTitle()!=null?mediaSpecimen.getMediaSpecimen().getTitle().getText()+", ":"[no motif]"; + label += mediaSpecimen.getMediaSpecimen().getArtist()!=null?mediaSpecimen.getMediaSpecimen().getArtist()+", ":""; + } + label += mediaSpecimen.getAccessionNumber()!=null?mediaSpecimen.getAccessionNumber()+", ":""; + Collection collection = mediaSpecimen.getCollection(); + if(collection!=null){ + label += collection.getName()!=null?collection.getName()+" ":""; + } + } + else if(element instanceof DnaSample + || (element instanceof DerivedUnit + && ((SpecimenOrObservationBase) element).getRecordBasis()==SpecimenOrObservationType.DnaSample)){ + //TODO implement + label += element.toString(); + + } + else if(element instanceof DerivedUnit){ + DerivedUnit derivedUnit = (DerivedUnit)element; + if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){ + java.util.Collection fieldUnits = CdmStore.getService(IOccurrenceService.class).getFieldUnits(derivedUnit.getUuid()); + if(fieldUnits!=null && !fieldUnits.isEmpty()){ + FieldUnit fieldUnit = fieldUnits.iterator().next(); + GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent(); + if(gatheringEvent!=null){ + label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+", ":""; + } + label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber()+", ":""; + } + Collection collection = derivedUnit.getCollection(); + if(collection!=null){ + label += collection.getName()!=null?collection.getName()+" ":""; + label += collection.getCode()!=null?"("+collection.getCode()+"), ":""; + } + label += derivedUnit.getAccessionNumber()!=null?derivedUnit.getAccessionNumber()+", ":""; + label += derivedUnit.getBarcode()!=null?derivedUnit.getBarcode():""; + } + else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.TissueSample){ + //TODO: implement +// kindofTissue + SampleDesignation + } + } + else if(element instanceof Sequence){ + Sequence sequence = (Sequence)element; + label += "SampleDesignation?"+", "; + label += sequence.getDnaMarker()!=null?sequence.getDnaMarker():""; + } + else if(element instanceof SingleRead){ + SingleRead singleRead = (SingleRead)element; + label += singleRead.getPrimer()!=null?singleRead.getPrimer().getLabel()+", ":""; + label += "Marker?"; + } + else if(element instanceof SpecimenOrObservationBase){ SpecimenOrObservationBase derivate = (SpecimenOrObservationBase) element; SpecimenOrObservationType type = derivate.getRecordBasis(); return derivate.getTitleCache() + (type!=null?" ["+type.toString()+"]":""); } - return element.toString(); + if(label.isEmpty()){ + label = element.toString(); + } + //remove last comma + else if(label.endsWith(", ")){ + label = label.substring(0, label.length()-2); + } + return label; } /* (non-Javadoc) @@ -49,6 +223,9 @@ public class DerivateLabelProvider extends ColumnLabelProvider { */ @Override public Image getImage(Object element) { + if(element instanceof TreeNode){ + element = ((TreeNode) element).getValue(); + } if(element instanceof FieldUnit){ return ImageResources.getImage(ImageResources.FIELD_UNIT); } @@ -66,11 +243,43 @@ public class DerivateLabelProvider extends ColumnLabelProvider { else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){ return ImageResources.getImage(ImageResources.SPECIMEN_DERIVATE); } - else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.StillImage){ - return ImageResources.getImage(ImageResources.ARTWORK_DERIVATE); + else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.Media){ + if(derivedUnit.getKindOfUnit()!=null){ + if(derivedUnit.getKindOfUnit().equals(getArtworkTerm())){ + return ImageResources.getImage(ImageResources.ARTWORK_DERIVATE); + } + else if(derivedUnit.getKindOfUnit().equals(getLivingPlantPhotoTerm())){ + return ImageResources.getImage(ImageResources.LIVING_PLANT_PHOTO_DERIVATE); + } + else if(derivedUnit.getKindOfUnit().equals(getSpecimenScanTerm())){ + return ImageResources.getImage(ImageResources.SPECIMEN_SCAN_DERIVATE); + } + else if(derivedUnit.getKindOfUnit().equals(getDetailImageTerm())){ + return ImageResources.getImage(ImageResources.DETAIL_IMAGE_DERIVATE); + } + } + } + } + else if(element instanceof Sequence){ + return ImageResources.getImage(ImageResources.SEQUENCE_DERIVATE); + } + + else if(element instanceof SingleRead){ + if(multiLinkSingleReads.contains(element)){ + return ImageResources.getImage(ImageResources.SINGLE_READ_DERIVATE_MULTILINK); + } + else{ + return ImageResources.getImage(ImageResources.SINGLE_READ_DERIVATE); } } return super.getImage(element); } + /** + * @param multiLinkSingleReads2 + */ + public void setMultiLinkSingleReads(Set multiLinkSingleReads) { + this.multiLinkSingleReads = multiLinkSingleReads; + } + }