From 8e996490b2ad0f322f5de52c268b00c88561ca1b Mon Sep 17 00:00:00 2001 From: Andreas Kohlbecker Date: Mon, 20 Jul 2020 13:52:49 +0200 Subject: [PATCH] ref #9134 preventing persistance of volatile modified media --- .../etaxonomy/cdm/model/media/MediaUtils.java | 23 +++++++++---------- .../remote/controller/util/MediaToolbox.java | 13 +++++------ .../etaxonomy/cdm/applicationContext-test.xml | 2 +- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/MediaUtils.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/MediaUtils.java index 418db00153..23f541f61f 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/MediaUtils.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/MediaUtils.java @@ -22,24 +22,23 @@ public class MediaUtils { private static final Logger logger = Logger.getLogger(MediaUtils.class); - /** - * - * @param media - * @param representationPartType - * @param size - * @param height - * @param widthOrDuration - * @param mimeTypes - * @param missingValStrategy - * @return - */ public static MediaRepresentation findBestMatchingRepresentation(Media media, Class representationPartType, Integer size, Integer height, Integer widthOrDuration, String[] mimeTypes, MissingValueStrategy missingValStrategy){ // find best matching representations of each media + Set representations = media.getRepresentations(); + return findBestMatchingRepresentation(representations, representationPartType, size, height, widthOrDuration, + mimeTypes, missingValStrategy); + } + + public static MediaRepresentation findBestMatchingRepresentation( + Set representations, Class representationPartType, Integer size, + Integer height, Integer widthOrDuration, String[] mimeTypes, + MissingValueStrategy missingValStrategy) { + SortedMap prefRepresentations - = filterAndOrderMediaRepresentations(media.getRepresentations(), representationPartType, mimeTypes, + = filterAndOrderMediaRepresentations(representations, representationPartType, mimeTypes, size, widthOrDuration, height, missingValStrategy); if(prefRepresentations.size() > 0){ MediaRepresentation prefOne = prefRepresentations.get(prefRepresentations.firstKey()); diff --git a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/util/MediaToolbox.java b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/util/MediaToolbox.java index fa40c7d86d..4454c19903 100644 --- a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/util/MediaToolbox.java +++ b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/util/MediaToolbox.java @@ -9,8 +9,10 @@ package eu.etaxonomy.cdm.remote.controller.util; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -86,18 +88,14 @@ public class MediaToolbox implements IMediaToolbox { MediaUriTransformationProcessor mediaTransformationProcessor = new MediaUriTransformationProcessor(); mediaTransformationProcessor.addAll(readTransformations()); - List newReprs = new ArrayList<>(); + Set newReprs = new HashSet<>(); for (MediaRepresentation repr : media.getRepresentations()) { for (MediaRepresentationPart part : repr.getParts()) { newReprs.addAll(mediaTransformationProcessor.makeNewMediaRepresentationsFor(part)); } } - for(MediaRepresentation r : newReprs) { - media.addRepresentation(r); - } - - return MediaUtils.findBestMatchingRepresentation(media, type, size, height, widthOrDuration, mimeTypes, - missingValStrategy); + newReprs.addAll(media.getRepresentations()); + return MediaUtils.findBestMatchingRepresentation(newReprs, type, size, height, widthOrDuration, mimeTypes, missingValStrategy); } @Override @@ -111,6 +109,7 @@ public class MediaToolbox implements IMediaToolbox { for (Media media : mediaRepresentationMap.keySet()) { media.getRepresentations().clear(); media.addRepresentation(mediaRepresentationMap.get(media)); + media.setId(0); // prevent from persisting the media entity accidentally filteredMedia.add(media); } return filteredMedia; diff --git a/cdmlib-remote/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml b/cdmlib-remote/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml index cf2e1ff00e..544b05bda4 100644 --- a/cdmlib-remote/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml +++ b/cdmlib-remote/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml @@ -13,7 +13,7 @@