ref #10156: add parameter for collecting original media
authorKatja Luther <k.luther@bgbm.org>
Thu, 29 Sep 2022 07:51:26 +0000 (09:51 +0200)
committerKatja Luther <k.luther@bgbm.org>
Thu, 29 Sep 2022 07:51:26 +0000 (09:51 +0200)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IOccurrenceService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java

index 2e430e87406d1446338524ecb960ccb475b56942..68e56cbf34f7552898648ba533948a47f33363b3 100644 (file)
@@ -28,6 +28,7 @@ import eu.etaxonomy.cdm.api.service.dto.DerivedUnitDTO;
 import eu.etaxonomy.cdm.api.service.dto.FieldUnitDTO;
 import eu.etaxonomy.cdm.api.service.dto.MediaDTO;
 import eu.etaxonomy.cdm.api.service.dto.RectangleDTO;
+
 import eu.etaxonomy.cdm.api.service.dto.SpecimenOrObservationBaseDTO;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.api.service.search.LuceneParseException;
@@ -791,4 +792,7 @@ public interface IOccurrenceService
 
     Pager<MediaDTO> getMediaDTOs(SpecimenOrObservationBase<?> occurence, Integer pageSize, Integer pageNumber);
 
+       Pager<Media> getMediaInHierarchy(SpecimenOrObservationBase<?> rootOccurence, boolean collectOriginalMedia, boolean collectDerivativeMedia,
+                       Integer pageSize, Integer pageNumber, List<String> propertyPaths);
+
 }
index 135519a164ce0943bffabc7cd68a8e3e37eba6f0..3dcfc20def4030488a2da91b1fb79cad77917b0b 100644 (file)
@@ -213,42 +213,60 @@ public class OccurrenceServiceImpl
                 );
         return new DefaultPagerImpl<>(pageNumber, numberOfResults, pageSize, mediaDTOs);
     }
-
+    @Override
+    public Pager<Media> getMediaInHierarchy(SpecimenOrObservationBase<?> rootOccurence, boolean collectOriginalMedia, boolean collectDerivateMedia, Integer pageSize,
+            Integer pageNumber, List<String> propertyPaths) {
+        List<Media> media = new ArrayList<>();
+         //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<>();
+                 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);
+             if (collectDerivateMedia) {
+                    for (DerivationEvent derivationEvent : derivedUnit.getDerivationEvents()) {
+                        for (DerivedUnit childDerivative : derivationEvent.getDerivatives()) {
+                                //collectOriginalMedia should only called for the first derived unit
+                            media.addAll(getMediaInHierarchy(childDerivative, false, true, pageSize, pageNumber, propertyPaths).getRecords());
+                        }
+                    }
+             }
+             if (collectOriginalMedia) {
+                for (SpecimenOrObservationBase original : derivedUnit.getOriginals()) {                                
+                                //collect media to the top of the tree 
+                            media.addAll(getMediaInHierarchy(original, true, false, pageSize, pageNumber, propertyPaths).getRecords());
+                    }
+                }
+         }
+         
+         
+         return new DefaultPagerImpl<>(pageNumber, Long.valueOf(media.size()), pageSize, media);
+    }
+    
+    
     @Override
     public Pager<Media> getMediaInHierarchy(SpecimenOrObservationBase<?> rootOccurence, Integer pageSize,
             Integer pageNumber, List<String> propertyPaths) {
-
-        List<Media> media = new ArrayList<>();
-        //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<>();
-                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<>(pageNumber, Long.valueOf(media.size()), pageSize, media);
+       return getMediaInHierarchy(rootOccurence, false, true, pageSize,
+                pageNumber, propertyPaths);
+       
     }
 
     @Override