});
public static final List<String> DERIVED_UNIT_INIT_STRATEGY = Arrays.asList(new String []{
- "derivedFrom.derivatives",
- "derivedFrom.originals",
+ "derivedFrom.derivatives.*",
+ "derivedFrom.originals.*",
"specimenTypeDesignations.*",
"specimenTypeDesignations.designationSource.citation.*",
"specimenTypeDesignations.homotypicalGroup.*",
"specimenTypeDesignations.typifiedNames",
- "collection.$"
+ "collection.$",
+ "derivationEvents.derivatives.*"
});
private static final List<String> EXTENSIONS_INIT_STRATEGY = Arrays.asList(new String []{
DerivedUnitDTO derivativeDTO;
if (!alreadyCollectedUnits.containsKey(unit.getUuid())){
DerivedUnit derivedUnit = (DerivedUnit)unit;
- derivativeDTO = (DerivedUnitDTO) SpecimenOrObservationDTOFactory.fromEntity(derivedUnit, null);
- if (unit instanceof DnaSample) {
- derivativeDTO = DNASampleDTO.fromEntity((DnaSample)unit);
- } else {
- derivativeDTO = DerivedUnitDTO.fromEntity(derivedUnit, null, null);
+ boolean isAssociated = true;
+ for (DeterminationEvent determination:derivedUnit.getDeterminations()) {
+ if (determination.getTaxonName().equals(taxon.getName()) || determination.getTaxon().equals(taxon)){
+ isAssociated = true;
+ break;
+ }else {
+ isAssociated = false;
+ }
}
+ if (!isAssociated) {
+ continue;
+ }
+ derivativeDTO = (DerivedUnitDTO) SpecimenOrObservationDTOFactory.fromEntity(derivedUnit, null);
alreadyCollectedUnits.put(derivativeDTO.getUuid(), derivativeDTO);
derivativeDTO.addAllDerivatives(getDerivedUnitDTOsFor(derivativeDTO, derivedUnit, alreadyCollectedUnits));
}
this.setSequences(seqDtos);
this.amplificationResults = dnaSample.getAmplificationResults();
this.dnaQuality = HibernateProxyHelper.deproxy(dnaSample.getDnaQuality(), DnaQuality.class);
+ this.setHasDna(true);
}
}
return derivateDataDTO;
}
+
+// private void updateDerivateTree(Set<DerivedUnitDTO> derivatives) {
+// for (DerivedUnitDTO childDerivate : derivatives) {
+// DerivationTreeSummaryDTO childTree = childDerivate.getDerivationTreeSummary();
+// for (Link link:childTree.detailImages) {
+// this.addDetailImage(null, null);
+// }
+// }
+//
+// // assemble molecular data
+// //pattern: DNAMarker [contig1, primer1_1, primer1_2, ...][contig2, primer2_1, ...]...
+// if (childDerivate instanceof DNASampleDTO) {
+// DNASampleDTO dna = (DNASampleDTO)childDerivate;
+// if (childDerivate.getRecordBase() == SpecimenOrObservationType.TissueSample) {
+// // TODO implement TissueSample assembly for web service
+// }
+// if (childDerivate.getRecordBase() == SpecimenOrObservationType.DnaSample) {
+//
+// for (SequenceDTO sequence : dna.getSequences()) {
+// URI boldUri = null;
+// try {
+// boldUri = sequence.getBoldUri();
+// } catch (URISyntaxException e1) {
+// // TODO consider better reporting of this incident
+// logger.error("Could not create BOLD URI", e1);
+// }
+// final String dnaMarker = sequence.getDnaMarker();
+// Link providerLink = null;
+// if(boldUri!=null && dnaMarker!=null){
+// providerLink = new DerivationTreeSummaryDTO.Link(boldUri, dnaMarker);
+// }
+// MolecularData molecularData = this.addProviderLink(providerLink);
+//
+// //contig file
+// ContigFile contigFile = null;
+// if (sequence.getContigFile() != null) {
+// MediaRepresentationPart contigMediaRepresentationPart = MediaUtils.getFirstMediaRepresentationPart(sequence.getContigFile());
+// if (contigMediaRepresentationPart != null) {
+// contigFile = molecularData.addContigFile(new Link(contigMediaRepresentationPart.getUri(), "contig"));
+// }
+// }
+// else{
+// contigFile = molecularData.addContigFile(null);
+// }
+// // primer files
+// if (sequence.getSingleReadAlignments() != null) {
+// int readCount = 1;
+// for (SingleReadAlignment singleRead : sequence.getSingleReadAlignments()) {
+// MediaRepresentationPart pherogramMediaRepresentationPart = MediaUtils.getFirstMediaRepresentationPart(singleRead.getSingleRead().getPherogram());
+// if (pherogramMediaRepresentationPart != null && contigFile != null) {
+// contigFile.addPrimerLink(pherogramMediaRepresentationPart.getUri(), "read"+readCount++);
+// }
+// }
+// }
+// }
+// }
+// }
+// // assemble media data
+// else if (childDerivate.hasDetailImage) {
+//
+//
+// // specimen scan
+// if (childDerivate.getKindOfUnit().getUuid().equals(DefinedTerm.uuidSpecimenScan)) {
+// this.addSpecimenScanUuid(childDerivate.get);
+// String imageLinkText = "scan of " + specimenIdentifier;
+// if(CdmUtils.isNotBlank(mediaSpecimen.getMostSignificantIdentifier())) {
+// imageLinkText = mediaSpecimen.getMostSignificantIdentifier();
+// }
+// if(CdmUtils.isNotBlank(mediaSpecimen.getMediaSpecimen().getTitleCache())) {
+// imageLinkText += " (" + mediaSpecimen.getMediaSpecimen().getTitleCache() + ")";
+// }
+// this.addSpecimenScan(mediaUri, imageLinkText.trim());
+// }
+// // detail image
+// else if (mediaSpecimen.getKindOfUnit().getUuid().equals(DefinedTerm.uuidDetailImage)) {
+// derivateDataDTO.addDetailImageUuid(mediaSpecimen.getMediaSpecimen().getUuid());
+// String motif = "detail image";
+// if (mediaSpecimen.getMediaSpecimen()!=null){
+// if(CdmUtils.isNotBlank(mediaSpecimen.getMediaSpecimen().getTitleCache())) {
+// motif = mediaSpecimen.getMediaSpecimen().getTitleCache();
+// }
+// }
+// derivateDataDTO.addDetailImage(mediaUri, motif);
+// }
+// }
+// }
+// }
+// }
@Deprecated
private static URI getMediaUri(MediaSpecimen mediaSpecimen) {
this.status.add(dto);
}
}
+ this.setDerivationTreeSummary(DerivationTreeSummaryDTO.fromEntity(derivedUnit, this.getSpecimenShortTitle()));
if(derivedUnit.getStoredUnder() != null) {
}
@Override
- protected void updateTreeDependantData() {
+ protected void updateTreeDependantData(Set<DerivedUnitDTO> derivatives) {
+ for (DerivedUnitDTO derivative: derivatives) {
+ this.setHasDna(this.isHasDna() || derivative.isHasDna());
+ this.setHasDetailImage(this.isHasDetailImage() || derivative.isHasDetailImage());
+ this.setHasSpecimenScan(isHasSpecimenScan()|| derivative.isHasSpecimenScan());
+ this.setHasCharacterData(isHasCharacterData()||derivative.isHasCharacterData());
+ }
+
// TODO DerivationTreeSummaryDTO should be updated here once it is refactored so that it can operate on dtos
}
}
\ No newline at end of file
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.stream.Collectors;
import org.joda.time.Partial;
}
@Override
- public void updateTreeDependantData() {
+ public void updateTreeDependantData(Set<DerivedUnitDTO> derivatives) {
TreeLabels treeLabels = assembleLablesFromTree(true, true);
setSummaryLabel(treeLabels.summaryLabel);
setCollectionStatistics(treeLabels.collectionsStatistics);
+ for (DerivedUnitDTO derivative: derivatives) {
+ this.setHasDna(this.isHasDna() || derivative.isHasDna());
+ this.setHasDetailImage(this.isHasDetailImage() || derivative.isHasDetailImage());
+ this.setHasSpecimenScan(isHasSpecimenScan()|| derivative.isHasSpecimenScan());
+ this.setHasCharacterData(isHasCharacterData()||derivative.isHasCharacterData());
+ }
}
/**
public void setDerivatives(Set<DerivedUnitDTO> derivatives) {
this.derivatives = derivatives;
- updateTreeDependantData();
+ updateTreeDependantData(derivatives);
}
public void addDerivative(DerivedUnitDTO derivate){
this.derivatives = new HashSet<>();
}
this.derivatives.add(derivate);
- updateTreeDependantData();
+ Set<DerivedUnitDTO> derivatives = new HashSet<>();
+ derivatives.add(derivate);
+ updateTreeDependantData(derivatives);
}
public void addAllDerivatives(Set<DerivedUnitDTO> derivatives){
if (this.derivatives == null){
this.derivatives = new HashSet<>();
}
this.derivatives.addAll(derivatives);
- updateTreeDependantData();
+ updateTreeDependantData(derivatives);
}
* To be overwritten by implementing classes to
* update data which depends on the derivation tree
*/
- protected abstract void updateTreeDependantData();
+ protected abstract void updateTreeDependantData(Set<DerivedUnitDTO> derivatives) ;
/**
* Recursively collects all derivatives from this.
}
if (doDescend && (includeTypes == null || includeTypes.contains(derivedUnit.getRecordBasis()))) {
- DerivedUnitDTO derivedUnitDTO = DerivedUnitDTO.fromEntity(derivedUnit, nextLevelMaxDepth, includeTypes);
- derivateDTOs.add(derivedUnitDTO);
+ SpecimenOrObservationBaseDTO derivedUnitDTO = SpecimenOrObservationDTOFactory.fromEntity(derivedUnit, nextLevelMaxDepth);
+ if (derivedUnitDTO instanceof DerivedUnitDTO) {
+ derivateDTOs.add((DerivedUnitDTO)derivedUnitDTO);
+ }
setHasCharacterData(isHasCharacterData() || derivedUnitDTO.isHasCharacterData());
// NOTE! the flags setHasDetailImage, setHasDna, setHasSpecimenScan are also set in
// setDerivateDataDTO(), see below