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
* @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
}\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
= 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
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;
}
- 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;
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);
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()));
}
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
\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