MediaUtils.findPreferredMedia() returns Map<Media, MediaRepresentation>
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 25 Jul 2012 12:37:42 +0000 (12:37 +0000)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 25 Jul 2012 12:37:42 +0000 (12:37 +0000)
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/MediaUtils.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/media/MediaUtilsTest.java
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonPortalController.java

index 30bc50163c498a41f2cf4ce36576046f33a4a40e..348cacd82ccd4c0a975403e4ebd41ee77a586322 100644 (file)
@@ -3,9 +3,11 @@ package eu.etaxonomy.cdm.model.media;
 import java.util.ArrayList;\r
 import java.util.Collection;\r
 import java.util.Collections;\r
+import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.Iterator;\r
 import java.util.List;\r
+import java.util.Map;\r
 import java.util.NoSuchElementException;\r
 import java.util.Set;\r
 import java.util.SortedMap;\r
@@ -65,7 +67,7 @@ public class MediaUtils {
      * @param size\r
      * @return\r
      */\r
-    public static List<Media> findPreferredMedia(List<Media> mediaList,\r
+    public static Map<Media, MediaRepresentation> findPreferredMedia(List<Media> mediaList,\r
             Class<? extends MediaRepresentationPart> representationPartType, String[] mimeTypes, String[] sizeTokens,\r
             Integer widthOrDuration, Integer height, Integer size) {\r
 \r
@@ -99,24 +101,10 @@ public class MediaUtils {
             }\r
         }\r
 \r
-        List<Media> returnMediaList = new ArrayList<Media>(mediaList.size());\r
+        Map<Media, MediaRepresentation> returnMediaList = new HashMap<Media, MediaRepresentation>(mediaList.size());\r
         if(mediaList != null){\r
-            Media mediaClone = null;\r
             for(Media media : mediaList){\r
 \r
-                // media objects will be modified by this method, so\r
-                // we clone the medias in order to prevent them\r
-                // from being stores accidentally\r
-                // cloning will remove the id\r
-                try {\r
-                    mediaClone = (Media) media.clone();\r
-                    mediaClone.setUuid(media.getUuid());\r
-                } catch (CloneNotSupportedException e) {\r
-                    // should never happen\r
-                    logger.error(e);\r
-                    continue;\r
-                }\r
-\r
                 Set<MediaRepresentation> candidateRepresentations = new HashSet<MediaRepresentation>();\r
                 candidateRepresentations.addAll(media.getRepresentations());\r
 \r
@@ -124,13 +112,7 @@ public class MediaUtils {
                     = filterAndOrderMediaRepresentations(candidateRepresentations, representationPartType, mimeTypes, size, widthOrDuration, height);\r
                 try {\r
                     if(prefRepresentations.size() > 0){\r
-                        // Media.representations is a set\r
-                        // so it cannot retain the sorting which has been found by filterAndOrderMediaRepresentations()\r
-                        // thus we take first one and remove all other representations\r
-\r
-                        mediaClone.getRepresentations().clear();\r
-                        mediaClone.addRepresentation(prefRepresentations.get(prefRepresentations.firstKey()));\r
-                        returnMediaList.add(mediaClone);\r
+                        returnMediaList.put(media, prefRepresentations.get(prefRepresentations.firstKey()));\r
                     }\r
                 } catch (NoSuchElementException nse) {\r
                     logger.debug(nse);\r
index 15cdd88a1fbcdc858105411e782c836e5b67cc1d..2723eef0dc2bc445c86af8579aa99ace94bd7d32 100644 (file)
@@ -2,7 +2,9 @@ package eu.etaxonomy.cdm.model.media;
 
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 import org.junit.Assert;
@@ -61,7 +63,7 @@ public class MediaUtilsTest {
 
     }
 
-    private Media findMediaByUUID(List<Media> mediaList, UUID uuid){
+    private Media findMediaByUUID(Collection<Media> mediaList, UUID uuid){
         for(Media media : mediaList){
             if(media.getUuid().equals(uuid)){
                 return media;
@@ -78,11 +80,11 @@ public class MediaUtilsTest {
         imageList.add(mediaImage2);
         imageList.add(mediaImage3);
 
-        List<Media> filteredList = MediaUtils.findPreferredMedia(imageList, ImageFile.class, null, null, null, null, null);
+       Map<Media, MediaRepresentation> filteredList = MediaUtils.findPreferredMedia(imageList, ImageFile.class, null, null, null, null, null);
 
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage1.getUuid()));
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage2.getUuid()));
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage3.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage1.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage2.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage3.getUuid()));
 
         ArrayList<Media> mixedMediaList =  new ArrayList<Media>();
         mixedMediaList.add(mediaImage1);
@@ -90,18 +92,18 @@ public class MediaUtilsTest {
         mixedMediaList.add(mediaImage3);
         mixedMediaList.add(mediaAudio1);
         filteredList = MediaUtils.findPreferredMedia(mixedMediaList, null, null, null, null, null, null);
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage1.getUuid()));
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage2.getUuid()));
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage3.getUuid()));
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaAudio1.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage1.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage2.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage3.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaAudio1.getUuid()));
 
         filteredList = MediaUtils.findPreferredMedia(mixedMediaList, AudioFile.class, null, null, null, null, null);
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaAudio1.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaAudio1.getUuid()));
 
         filteredList = MediaUtils.findPreferredMedia(mixedMediaList, ImageFile.class, null, null, null, null, null);
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage1.getUuid()));
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage2.getUuid()));
-        Assert.assertNotNull(findMediaByUUID(filteredList, mediaImage3.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage1.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage2.getUuid()));
+        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage3.getUuid()));
 
     }
 
index 42b21f4050af89cb52672a5dee6fd718dca87201..0e631e1a1f7eaa2da5254c0cd4e56b722e1e1a11 100644 (file)
@@ -68,6 +68,7 @@ import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
+import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
 import eu.etaxonomy.cdm.model.media.MediaUtils;\r
 import eu.etaxonomy.cdm.model.name.NameRelationship;\r
@@ -984,10 +985,16 @@ public class TaxonPortalController extends BaseController<TaxonBase, ITaxonServi
 \r
         List<Media> taxonGalleryMedia = service.listTaxonDescriptionMedia(taxon, false, TAXONDESCRIPTION_MEDIA_INIT_STRATEGY);\r
 \r
-        List<Media> returnMedia = MediaUtils.findPreferredMedia(taxonGalleryMedia, type,\r
+        Map<Media, MediaRepresentation> mediaRepresentationMap = MediaUtils.findPreferredMedia(taxonGalleryMedia, type,\r
                 mimeTypes, null, widthOrDuration, height, size);\r
 \r
-        return returnMedia;\r
+        List<Media> filteredMedia = new ArrayList<Media>(mediaRepresentationMap.size());\r
+        for(Media media : mediaRepresentationMap.keySet()){\r
+            media.getRepresentations().clear();\r
+            media.addRepresentation(mediaRepresentationMap.get(media));\r
+        }\r
+\r
+        return filteredMedia;\r
     }\r
 \r
 \r