X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/d6d61321d03286f62265c3939fc3f52e1035f9e5..5b852e5bab53b546a32b71de4ea5dbe5bd4c2d7f:/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 1b47155db..7ca576b65 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 @@ -1,4 +1,3 @@ -// $Id$ /** * Copyright (C) 2013 EDIT * European Distributed Institute of Taxonomy @@ -9,7 +8,13 @@ */ package eu.etaxonomy.taxeditor.view.derivateSearch; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.UUID; @@ -20,19 +25,26 @@ import org.hibernate.LazyInitializationException; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.service.IOccurrenceService; +import eu.etaxonomy.cdm.api.service.molecular.ISequenceService; +import eu.etaxonomy.cdm.common.CdmUtils; +import eu.etaxonomy.cdm.format.CdmFormatterFactory; +import eu.etaxonomy.cdm.format.ICdmFormatter.FormatKey; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.DefinedTerm; +import eu.etaxonomy.cdm.model.common.IdentifiableEntity; import eu.etaxonomy.cdm.model.common.Identifier; 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.name.SpecimenTypeDesignation; 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.cdm.strategy.cache.common.IdentifiableEntityDefaultCacheStrategy; import eu.etaxonomy.taxeditor.model.ImageResources; import eu.etaxonomy.taxeditor.store.CdmStore; @@ -49,7 +61,9 @@ public class DerivateLabelProvider extends ColumnLabelProvider { private static final String NO_SAMPLE_DESIGNATION = "[no sample designation]"; - private Set multiLinkSingleReads; + private static Set multiLinkSingleReads; + + private static Map> typeDesignations; private ConversationHolder conversation; @@ -120,7 +134,77 @@ public class DerivateLabelProvider extends ColumnLabelProvider { /** {@inheritDoc} */ @Override public String getText(Object element) { - return getDerivateText(element); + if(element instanceof TreeNode){ + element = ((TreeNode) element).getValue(); + } + String text = null; + + //check if collection code does not exist -> use collection name then + FormatKey collectionKey = FormatKey.COLLECTION_CODE; + text = CdmFormatterFactory.format(element,new FormatKey[]{FormatKey.COLLECTION_CODE}); + if(CdmUtils.isBlank(text)){ + collectionKey = FormatKey.COLLECTION_NAME; + } + + //Use titlecache for FieldUnits + if(element instanceof FieldUnit){ + return ((FieldUnit) element).getTitleCache(); + } + + else if(element instanceof MediaSpecimen){ + text = CdmFormatterFactory.format(element, + new FormatKey[]{ + FormatKey.MEDIA_TITLE_CACHE, FormatKey.SPACE, + collectionKey, FormatKey.SPACE, + FormatKey.MOST_SIGNIFICANT_IDENTIFIER, FormatKey.SPACE, + FormatKey.MEDIA_TITLE, FormatKey.SPACE, + FormatKey.MEDIA_ARTIST, FormatKey.SPACE, + }); + } + else if (element instanceof DnaSample) { + text = CdmFormatterFactory.format(element, + new FormatKey[] { + collectionKey, FormatKey.SPACE, + FormatKey.MOST_SIGNIFICANT_IDENTIFIER, FormatKey.SPACE, + FormatKey.SAMPLE_DESIGNATION, FormatKey.SPACE + }); + } + else if (element instanceof DerivedUnit) { + text = CdmFormatterFactory.format(element, + new FormatKey[] { + collectionKey, FormatKey.SPACE, + FormatKey.MOST_SIGNIFICANT_IDENTIFIER, FormatKey.SPACE + }); + } + else if (element instanceof Sequence) { + text = CdmFormatterFactory.format(element, + new FormatKey[] { + FormatKey.SEQUENCE_DNA_MARKER, FormatKey.SPACE + }); + } + else if (element instanceof SingleRead) { + text = CdmFormatterFactory.format(element, + new FormatKey[] { + FormatKey.SINGLE_READ_PHEROGRAM_TITLE_CACHE, FormatKey.SPACE, + FormatKey.AMPLIFICATION_LABEL, FormatKey.SPACE, + }); + } + else if(element instanceof IdentifiableEntity){ + + IdentifiableEntity identifiableEntity = (IdentifiableEntity) element; + if(identifiableEntity.isProtectedTitleCache()){ + text = identifiableEntity.getTitleCache(); + } + } + if(CdmUtils.isBlank(text) || text.equals(IdentifiableEntityDefaultCacheStrategy.TITLE_CACHE_GENERATION_NOT_IMPLEMENTED)){ + if(element instanceof CdmBase){ + text = ((CdmBase) element).getUuid().toString(); + } + else{ + text = element.toString(); + } + } + return text; } /** {@inheritDoc} */ @@ -152,7 +236,9 @@ public class DerivateLabelProvider extends ColumnLabelProvider { derivate = node.getValue(); } - conversation.bind(); + if(conversation!=null){ + conversation.bind(); + } final String emptyString = ""; final String separator = " "; @@ -164,10 +250,6 @@ public class DerivateLabelProvider extends ColumnLabelProvider { FieldUnit fieldUnit = (FieldUnit)derivate; if(fieldUnit.getGatheringEvent()!=null){ GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent(); - if(CdmStore.getService(IOccurrenceService.class).exists(fieldUnit.getUuid()) && !conversation.getSession().contains(gatheringEvent)){ - fieldUnit = (FieldUnit) CdmStore.getService(IOccurrenceService.class).load(fieldUnit.getUuid()); - gatheringEvent = fieldUnit.getGatheringEvent(); - } label += gatheringEvent.getCountry()!=null?gatheringEvent.getCountry().getLabel()+separator:emptyString; label += gatheringEvent.getLocality()!=null?gatheringEvent.getLocality().getText()+separator:emptyString; label += gatheringEvent.getGatheringDate()!=null?gatheringEvent.getGatheringDate()+separator:emptyString; @@ -220,21 +302,32 @@ public class DerivateLabelProvider extends ColumnLabelProvider { else if(derivate instanceof DerivedUnit){ DerivedUnit derivedUnit = (DerivedUnit)derivate; 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(); -// gatheringEvent = HibernateProxyHelper.deproxy(gatheringEvent, GatheringEvent.class); - if(gatheringEvent!=null){ - label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+separator:emptyString; + //check for type designation + if(typeDesignations.get(derivedUnit)==null){ + for (SpecimenTypeDesignation specimenTypeDesignation : derivedUnit.getSpecimenTypeDesignations()) { + addTypeDesignation(derivedUnit, specimenTypeDesignation); } - label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber()+separator:emptyString; } + //java.util.Collection fieldUnits = CdmStore.getService(IOccurrenceService.class).getFieldUnits(derivedUnit.getUuid()); + //TODO : This is not generic anymore for performance reasons + Set originals = derivedUnit.getOriginals(); + if(originals!=null && originals.size() ==1) { + SpecimenOrObservationBase specimen = originals.iterator().next(); + if(specimen instanceof FieldUnit) { + FieldUnit fieldUnit = (FieldUnit)specimen; + GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent(); + if(gatheringEvent!=null){ + label += gatheringEvent.getCollector()!=null?gatheringEvent.getCollector()+separator:emptyString; + } + label += fieldUnit.getFieldNumber()!=null?fieldUnit.getFieldNumber()+separator:emptyString; + } + } + eu.etaxonomy.cdm.model.occurrence.Collection collection = derivedUnit.getCollection(); if(collection!=null){ label += collection.getCode()!=null?"("+collection.getCode()+")"+separator:emptyString; } - String mostSignificantIdentifier = CdmStore.getService(IOccurrenceService.class).getMostSignificantIdentifier(derivedUnit); + String mostSignificantIdentifier = derivedUnit.getMostSignificantIdentifier(); label += mostSignificantIdentifier!=null?mostSignificantIdentifier+separator:emptyString; } else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.TissueSample){ @@ -292,9 +385,6 @@ public class DerivateLabelProvider extends ColumnLabelProvider { return label; } - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ColumnLabelProvider#getImage(java.lang.Object) - */ @Override public Image getImage(Object element) { if(element instanceof TreeNode){ @@ -305,7 +395,7 @@ public class DerivateLabelProvider extends ColumnLabelProvider { boolean hasCharacterData = false; if(cdmBase.isInstanceOf(SpecimenOrObservationBase.class)){ SpecimenOrObservationBase specimen = HibernateProxyHelper.deproxy(cdmBase, SpecimenOrObservationBase.class); - if(!CdmStore.getService(IOccurrenceService.class).getCharacterDataForSpecimen(specimen).isEmpty()){ + if(specimen.hasCharacterData()){ hasCharacterData = true; } } @@ -314,6 +404,7 @@ public class DerivateLabelProvider extends ColumnLabelProvider { } else if(cdmBase.isInstanceOf(DerivedUnit.class)){ DerivedUnit derivedUnit = HibernateProxyHelper.deproxy(element, DerivedUnit.class); + if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.FieldUnit){ return hasCharacterData?ImageResources.getImage(ImageResources.FIELD_UNIT_CHARACTER_DATA):ImageResources.getImage(ImageResources.FIELD_UNIT); } @@ -324,9 +415,13 @@ public class DerivateLabelProvider extends ColumnLabelProvider { return hasCharacterData?ImageResources.getImage(ImageResources.TISSUE_SAMPLE_DERIVATE_CHARACTER_DATA):ImageResources.getImage(ImageResources.TISSUE_SAMPLE_DERIVATE); } else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){ + if(typeDesignations.get(derivedUnit)!=null && !typeDesignations.get(derivedUnit).isEmpty()){ + return ImageResources.getImage(ImageResources.SPECIMEN_DERIVATE_TYPE); + } return hasCharacterData?ImageResources.getImage(ImageResources.SPECIMEN_DERIVATE_CHARACTER_DATA):ImageResources.getImage(ImageResources.SPECIMEN_DERIVATE); } - else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.Media){ + else if(derivedUnit.getRecordBasis().isMedia() + || derivedUnit.getRecordBasis().isKindOf(SpecimenOrObservationType.Media)){ if(derivedUnit.getKindOfUnit()!=null){ if(derivedUnit.getKindOfUnit().equals(getArtworkTerm())){ return hasCharacterData?ImageResources.getImage(ImageResources.ARTWORK_DERIVATE_CHARACTER_DATA):ImageResources.getImage(ImageResources.ARTWORK_DERIVATE); @@ -348,7 +443,7 @@ public class DerivateLabelProvider extends ColumnLabelProvider { } else if(cdmBase.isInstanceOf(SingleRead.class)){ - if(multiLinkSingleReads.contains(element)){ + if(multiLinkSingleReads!=null && multiLinkSingleReads.contains(element)){ return ImageResources.getImage(ImageResources.SINGLE_READ_DERIVATE_MULTILINK); } else{ @@ -356,7 +451,7 @@ public class DerivateLabelProvider extends ColumnLabelProvider { } } } - return super.getImage(element); + return ImageResources.getImage(ImageResources.DEFAULT_DERIVATIVE); } public static Identifier getCurrentSampleDesignation(CdmBase entity) { @@ -378,11 +473,47 @@ public class DerivateLabelProvider extends ColumnLabelProvider { return null; } - /** - * @param multiLinkSingleReads2 - */ - public void setMultiLinkSingleReads(Set multiLinkSingleReads) { - this.multiLinkSingleReads = multiLinkSingleReads; + private static void addTypeDesignation(DerivedUnit derivedUnit, SpecimenTypeDesignation typeDesignation){ + Collection list = typeDesignations.get(derivedUnit); + if(list==null){ + list = new ArrayList(); + } + list.add(typeDesignation); + typeDesignations.put(derivedUnit, list); + } + + public static Set getMultiLinkSingleReads() { + return multiLinkSingleReads; + } + + public void updateLabelCache(Collection> rootElements) { + multiLinkSingleReads = new HashSet(); + typeDesignations = new HashMap>(); + for(Entry> entry:CdmStore.getService(ISequenceService.class).getSingleReadSequencesMap().entrySet()){ + if(entry.getValue().size()>1){ + multiLinkSingleReads.add(entry.getKey()); + } + } + if(rootElements!=null){ + Collection derivedUnits = new ArrayList(); + for (SpecimenOrObservationBase specimenOrObservationBase : rootElements) { + List childUnits = CdmStore.getService(IOccurrenceService.class).getAllChildDerivatives(specimenOrObservationBase.getUuid()); + if (childUnits != null){ + derivedUnits.addAll(childUnits); + } + if(specimenOrObservationBase.isInstanceOf(DerivedUnit.class)){ + specimenOrObservationBase = CdmStore.getService(IOccurrenceService.class).load(specimenOrObservationBase.getUuid()); + if (specimenOrObservationBase != null){ + derivedUnits.add(HibernateProxyHelper.deproxy(specimenOrObservationBase, DerivedUnit.class)); + } + } + } + for (DerivedUnit derivedUnit : derivedUnits) { + if(!derivedUnit.getSpecimenTypeDesignations().isEmpty()){ + typeDesignations.put(derivedUnit, derivedUnit.getSpecimenTypeDesignations()); + } + } + } } }