import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;\r
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;\r
+import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;\r
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
*/\r
public Pager<Media> getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths);\r
\r
+ /**\r
+ * Returns all media attached to this occurence and its children. Also takes\r
+ * {@link MediaSpecimen} and molecular images into account.\r
+ *\r
+ * @param occurence the occurence and its children from which the media to get\r
+ * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)\r
+ * @param propertyPaths properties to initialize - see {@link IBeanInitializer#initialize(Object, List)}\r
+ * @return a Pager of media instances\r
+ */\r
+ public Pager<Media> getMediainHierarchy(SpecimenOrObservationBase rootOccurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths);\r
+\r
/**\r
* Returns a count of determinations that have been made for a given occurence and for a given taxon concept\r
*\r
return new DefaultPagerImpl<Media>(pageNumber, numberOfResults, pageSize, results);
}
+ @Override
+ public Pager<Media> getMediainHierarchy(SpecimenOrObservationBase rootOccurence, Integer pageSize,
+ Integer pageNumber, List<String> propertyPaths) {
+ List<Media> media = new ArrayList<Media>();
+ //media specimens
+ if(rootOccurence.isInstanceOf(MediaSpecimen.class)){
+ MediaSpecimen mediaSpecimen = HibernateProxyHelper.deproxy(rootOccurence, MediaSpecimen.class);
+ media.add(mediaSpecimen.getMediaSpecimen());
+ }
+ // pherograms & gelPhotos
+ if (rootOccurence.isInstanceOf(DnaSample.class)) {
+ DnaSample dnaSample = CdmBase.deproxy(rootOccurence, DnaSample.class);
+ Set<Sequence> sequences = dnaSample.getSequences();
+ //we do show only those gelPhotos which lead to a consensus sequence
+ for (Sequence sequence : sequences) {
+ Set<Media> dnaRelatedMedia = new HashSet<Media>();
+ for (SingleRead singleRead : sequence.getSingleReads()){
+ AmplificationResult amplification = singleRead.getAmplificationResult();
+ dnaRelatedMedia.add(amplification.getGelPhoto());
+ dnaRelatedMedia.add(singleRead.getPherogram());
+ dnaRelatedMedia.remove(null);
+ }
+ media.addAll(dnaRelatedMedia);
+ }
+ }
+ if(rootOccurence.isInstanceOf(DerivedUnit.class)){
+ DerivedUnit derivedUnit = HibernateProxyHelper.deproxy(rootOccurence, DerivedUnit.class);
+ for (DerivationEvent derivationEvent : derivedUnit.getDerivationEvents()) {
+ for (DerivedUnit childDerivative : derivationEvent.getDerivatives()) {
+ media.addAll(getMediainHierarchy(childDerivative, pageSize, pageNumber, propertyPaths).getRecords());
+ }
+ }
+ }
+ return new DefaultPagerImpl<Media>(pageNumber, media.size(), pageSize, media);
+ }
+
@Override
public Pager<SpecimenOrObservationBase> list(Class<? extends SpecimenOrObservationBase> type, TaxonBase determinedAs, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
Integer numberOfResults = dao.count(type, determinedAs);
import eu.etaxonomy.cdm.model.media.Media;\r
import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
import eu.etaxonomy.cdm.model.media.MediaUtils;\r
-import eu.etaxonomy.cdm.model.molecular.AmplificationResult;\r
-import eu.etaxonomy.cdm.model.molecular.DnaSample;\r
-import eu.etaxonomy.cdm.model.molecular.Sequence;\r
-import eu.etaxonomy.cdm.model.molecular.SingleRead;\r
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
import eu.etaxonomy.cdm.model.name.NameRelationship;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
@Autowired\r
private INameService nameService;\r
\r
+ @Autowired\r
+ private IOccurrenceService occurrenceService;\r
+\r
@Autowired\r
private ITaxonNodeService nodeService;\r
\r
}\r
}\r
\r
- // Collection\r
- //TODO why may collections have media attached? #\r
if (occurrence.isInstanceOf(DerivedUnit.class)) {\r
DerivedUnit derivedUnit = CdmBase.deproxy(occurrence, DerivedUnit.class);\r
+ // Collection\r
+ //TODO why may collections have media attached? #\r
if (derivedUnit.getCollection() != null){\r
taxonMedia.addAll(derivedUnit.getCollection().getMedia());\r
}\r
}\r
-\r
- // pherograms & gelPhotos\r
- if (occurrence.isInstanceOf(DnaSample.class)) {\r
- DnaSample dnaSample = CdmBase.deproxy(occurrence, DnaSample.class);\r
- Set<Sequence> sequences = dnaSample.getSequences();\r
- //we do show only those gelPhotos which lead to a consensus sequence\r
- for (Sequence sequence : sequences) {\r
- Set<Media> dnaRelatedMedia = new HashSet<Media>();\r
- for (SingleRead singleRead : sequence.getSingleReads()){\r
- AmplificationResult amplification = singleRead.getAmplificationResult();\r
- dnaRelatedMedia.add(amplification.getGelPhoto());\r
- dnaRelatedMedia.add(singleRead.getPherogram());\r
- dnaRelatedMedia.remove(null);\r
- }\r
- taxonMedia.addAll(dnaRelatedMedia);\r
- }\r
- }\r
-\r
+ //media in hierarchy\r
+ taxonMedia.addAll(occurrenceService.getMediainHierarchy(occurrence, null, null, propertyPath).getRecords());\r
}\r
}\r
\r