import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
import eu.etaxonomy.cdm.model.molecular.DnaSample;\r
import eu.etaxonomy.cdm.model.molecular.Sequence;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;\r
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
}\r
\r
private DerivateHierarchyDTO assembleDerivateHierarchyDTO(FieldUnit fieldUnit, Taxon associatedTaxon){\r
+ final String separator = ", ";\r
\r
DerivateHierarchyDTO dto = new DerivateHierarchyDTO();\r
+ Map<UUID, SpecimenTypeDesignation> typeSpecimenUUIDtoTypeDesignation = new HashMap<UUID, SpecimenTypeDesignation>();\r
\r
//types\r
- TaxonNameBase name = associatedTaxon.getName();\r
- dto.setHasType(!name.getTypeDesignations().isEmpty());\r
+ TaxonNameBase<?,?> name = associatedTaxon.getName();\r
+ Set<?> typeDesignations = name.getSpecimenTypeDesignations();\r
+ for (Object object : typeDesignations) {\r
+ if(object instanceof SpecimenTypeDesignation){\r
+ SpecimenTypeDesignation specimenTypeDesignation = (SpecimenTypeDesignation)object;\r
+ DerivedUnit typeSpecimen = specimenTypeDesignation.getTypeSpecimen();\r
+ typeSpecimenUUIDtoTypeDesignation.put(typeSpecimen.getUuid(), specimenTypeDesignation);\r
+ }\r
+ }\r
\r
if(fieldUnit.getGatheringEvent()!=null){\r
GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();\r
getDerivedUnitsFor(fieldUnit, derivedUnits);\r
//Herbaria map\r
Map<eu.etaxonomy.cdm.model.occurrence.Collection, Integer> collectionToCountMap = new HashMap<eu.etaxonomy.cdm.model.occurrence.Collection, Integer>();\r
+ //Type map\r
+ Map<String, List<String>> typeStatusToAccessionNumber = new HashMap<String, List<String>>();\r
\r
//iterate over sub derivates\r
for (DerivedUnit derivedUnit : derivedUnits) {\r
}\r
collectionToCountMap.put(collection, count);\r
}\r
+ //check if derived unit is a type\r
+ if(typeSpecimenUUIDtoTypeDesignation.keySet().contains(derivedUnit.getUuid())){\r
+ dto.setHasType(true);\r
+ SpecimenTypeDesignation specimenTypeDesignation = typeSpecimenUUIDtoTypeDesignation.get(derivedUnit.getUuid());\r
+ SpecimenTypeDesignationStatus specimenTypeDesignationStatus = specimenTypeDesignation.getTypeStatus();\r
+ String typeStatus = specimenTypeDesignationStatus.getLabel(Language.DEFAULT());\r
+ dto.addTypes(typeStatus, currentAccessionNumber);\r
+ }\r
//assemble molecular data\r
if(derivedUnit instanceof DnaSample){//.getRecordBasis()==SpecimenOrObservationType.DnaSample){\r
dto.setHasDna(true);\r
}\r
}\r
\r
- //citation\r
+ //assemble citation\r
String citation = "";\r
citation += dto.getCountry();\r
+ citation += separator;\r
if(fieldUnit.getGatheringEvent()!=null){\r
if(fieldUnit.getGatheringEvent().getLocality()!=null){\r
citation += fieldUnit.getGatheringEvent().getLocality().getText();\r
+ citation += separator;\r
}\r
if(fieldUnit.getGatheringEvent().getExactLocation()!=null\r
&& fieldUnit.getGatheringEvent().getExactLocation().getLatitude()!=null\r
&& fieldUnit.getGatheringEvent().getExactLocation().getLongitude()!=null){\r
citation += fieldUnit.getGatheringEvent().getExactLocation().getLatitude().toString();\r
- citation += ", ";\r
+ citation += separator;\r
citation += fieldUnit.getGatheringEvent().getExactLocation().getLongitude().toString();\r
+ citation += separator;\r
}\r
}\r
+ if(citation.endsWith(separator)){\r
+ citation = citation.substring(0, citation.length()-separator.length());\r
+ }\r
+ dto.setCitation(citation);\r
\r
//assemble herbaria string\r
String herbariaString = "";\r
- final String herbariaSeparator = ", ";\r
for(Entry<eu.etaxonomy.cdm.model.occurrence.Collection, Integer> e:collectionToCountMap.entrySet()){\r
eu.etaxonomy.cdm.model.occurrence.Collection collection = e.getKey();\r
if(collection.getCode()!=null){\r
if(e.getValue()>1){\r
herbariaString += "("+e.getValue()+")";\r
}\r
- herbariaString += herbariaSeparator;\r
+ herbariaString += separator;\r
}\r
- if(herbariaString.endsWith(herbariaSeparator)){\r
- herbariaString = herbariaString.substring(0, herbariaString.length()-herbariaSeparator.length());\r
+ if(herbariaString.endsWith(separator)){\r
+ herbariaString = herbariaString.substring(0, herbariaString.length()-separator.length());\r
}\r
dto.setHerbarium(herbariaString);\r
- dto.setCitation(citation);\r
return dto;\r
}\r
\r
private String taxonName;
private String protologue;
private String citation;
- private List<String> types;
+ private Map<String, List<String>> types;
private Map<String, String> specimenScans;
private Map<String, String> molecularData;
private Map<String, String> detailImages;
public void setCitation(String citation) {
this.citation = citation;
}
+
/**
- * @return the types
+ * @param types the types to set
*/
- public List<String> getTypes() {
- return types;
+ public void setTypes(Map<String, List<String>> types) {
+ this.types = types;
}
/**
- * @param types the types to set
+ * @return the types
*/
- public void setTypes(List<String> types) {
- this.types = types;
+ public Map<String, List<String>> getTypes() {
+ return types;
}
-
- public void addTypes(String uri){
+ public void addTypes(String typeStatus, String accessionNumber){
if(types==null){
- types = new ArrayList<String>();
+ types = new HashMap<String, List<String>>();
+ }
+ List<String> list = types.get(typeStatus);
+ if(list==null){
+ list = new ArrayList<String>();
}
- types.add(uri);
+ list.add(accessionNumber);
}
/**
* @return the specimenScans