+ /**
+ * @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<FieldUnit> 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){