*/
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.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.<br>
+ * <br>
+ * <b>Note:</b> 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}.
*/
public class DerivateLabelProvider extends ColumnLabelProvider {
+ private Set<SingleRead> multiLinkSingleReads;
+
+ 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<DefinedTerm> 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) {
return getDerivateText(element);
}
- private String getDerivateText(Object element){
- if(element instanceof SpecimenOrObservationBase){
+ /**
+ *
+ * @param element
+ * @return
+ */
+ public static String getDerivateText(Object element){
+ TreeNode parentNode = null;
+ if(element instanceof TreeNode){
+ parentNode = ((TreeNode) element).getParent();
+ //unwrap specimen from TreeNode
+ element = ((TreeNode) element).getValue();
+ }
+
+ String label = "";
+ if(element instanceof FieldUnit){
+ FieldUnit fieldUnit = (FieldUnit)element;
+ GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
+ if(gatheringEvent!=null){
+ 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;
+ label += mediaSpecimen.getMediaSpecimen().getTitle()!=null?mediaSpecimen.getMediaSpecimen().getTitle().getText()+", ":"[no motif]";
+ label += mediaSpecimen.getMediaSpecimen().getArtist()!=null?mediaSpecimen.getMediaSpecimen().getArtist()+", ":"";
+ eu.etaxonomy.cdm.model.occurrence.Collection collection = mediaSpecimen.getCollection();
+ if(collection!=null){
+ label += collection.getName()!=null?collection.getName()+" ":"";
+ label += collection.getCode()!=null?"("+collection.getCode()+"), ":"";
+ }
+ label += mediaSpecimen.getAccessionNumber()!=null?mediaSpecimen.getAccessionNumber()+", ":"";
+ }
+ else if(element instanceof DnaSample
+ || (element instanceof DerivedUnit
+ && ((SpecimenOrObservationBase<?>) element).getRecordBasis()==SpecimenOrObservationType.DnaSample)){
+ label += "[no sample designation]";
+
+ }
+ else if(element instanceof DerivedUnit){
+ DerivedUnit derivedUnit = (DerivedUnit)element;
+ if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
+ java.util.Collection<FieldUnit> fieldUnits = CdmStore.getService(IOccurrenceService.class).getFieldUnits(derivedUnit.getUuid());
+ if(fieldUnits!=null && !fieldUnits.isEmpty()){
+ FieldUnit fieldUnit = fieldUnits.iterator().next();
+ GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();
+// gatheringEvent = HibernateProxyHelper.deproxy(gatheringEvent, GatheringEvent.class);
+ if(gatheringEvent!=null){
+ label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+", ":"";
+ }
+ label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber()+", ":"";
+ }
+ eu.etaxonomy.cdm.model.occurrence.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
+ label += "kindofTissue? + [no sample designation]";
+ }
+ }
+ else if(element instanceof Sequence){
+ Sequence sequence = (Sequence)element;
+ label += "[no sample designation]"+", ";
+ label += sequence.getDnaMarker()!=null?sequence.getDnaMarker():"";
+ }
+ else if(element instanceof SingleRead){
+ SingleRead singleRead = (SingleRead)element;
+ label += "[no sample designation]"+", ";
+ label += singleRead.getPrimer()!=null?singleRead.getPrimer().getLabel()+", ":"";
+ if(parentNode!=null && parentNode.getValue() instanceof Sequence){
+ Sequence sequence = (Sequence) parentNode.getValue();
+ label += sequence.getDnaMarker()!=null?sequence.getDnaMarker():"";
+ }
+ }
+ 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)
*/
@Override
public Image getImage(Object element) {
+ if(element instanceof TreeNode){
+ element = ((TreeNode) element).getValue();
+ }
if(element instanceof FieldUnit){
return ImageResources.getImage(ImageResources.FIELD_UNIT);
}
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<SingleRead> multiLinkSingleReads) {
+ this.multiLinkSingleReads = multiLinkSingleReads;
+ }
+
}