Project

General

Profile

Download (10.9 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.model.media;
2

    
3
import java.net.URISyntaxException;
4
import java.util.ArrayList;
5
import java.util.Collection;
6
import java.util.Map;
7
import java.util.UUID;
8

    
9
import org.junit.Assert;
10
import org.junit.Before;
11
import org.junit.Test;
12

    
13
import eu.etaxonomy.cdm.common.URI;
14

    
15
public class MediaUtilsTest {
16

    
17
    private Media mediaImage1;
18
    private Media mediaImage2;
19
    private Media mediaImage3;
20
    private Media mediaImage4;
21
    private Media mediaAudio1;
22
    private MediaRepresentation smallJPGRepresentation;
23
    private MediaRepresentation bigJPGRepresentation;
24
    private MediaRepresentation unknownDimensionJPGRepresentation;
25
    private MediaRepresentation smallPNGRepresentation;
26
    private MediaRepresentation bigPNGRepresentation;
27
    private MediaRepresentation bigMP3Representation;
28

    
29
    @Before
30
    public void setUp() throws Exception {
31

    
32
        ImageFile smallJPG = ImageFile.NewInstance(new URI("http://foo.bar.net/small.JPG"), 200 * 100, 100, 200);
33
        smallJPGRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
34
        smallJPGRepresentation.addRepresentationPart(smallJPG);
35

    
36
        ImageFile bigJPG = ImageFile.NewInstance(new URI("http://foo.bar.net/big.JPG"), 2000 * 1000, 1000, 2000);
37
        bigJPGRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
38
        bigJPGRepresentation.addRepresentationPart(bigJPG);
39

    
40
        ImageFile unknownDimensionJPG = ImageFile.NewInstance(new URI("http://foo.bar.net/unknownDimension.JPG"), null, null, null);
41
        unknownDimensionJPGRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
42
        unknownDimensionJPGRepresentation.addRepresentationPart(unknownDimensionJPG);
43

    
44
        ImageFile smallPNG = ImageFile.NewInstance(new URI("http://foo.bar.net/small.PNG"), 200 * 100, 100, 200);
45
        smallPNGRepresentation = MediaRepresentation.NewInstance("image/png", "png");
46
        smallPNGRepresentation.addRepresentationPart(smallPNG);
47

    
48
        ImageFile bigPNG = ImageFile.NewInstance(new URI("http://foo.bar.net/big.PNG"), 2000 * 1000, 1000, 2000);
49
        bigPNGRepresentation = MediaRepresentation.NewInstance("image/png", "png");
50
        bigPNGRepresentation.addRepresentationPart(bigPNG);
51

    
52
        AudioFile bigMP3 = AudioFile.NewInstance(new URI("http://foo.bar.net/big.mp3"), 40000);
53
        bigMP3Representation = MediaRepresentation.NewInstance("audio/mpeg", "mp3");
54
        bigMP3Representation.addRepresentationPart(bigMP3);
55

    
56

    
57
        mediaImage1 = Media.NewInstance();
58
        mediaImage1.addRepresentation(smallJPGRepresentation);
59
        mediaImage1.addRepresentation(bigJPGRepresentation);
60

    
61
        mediaImage4 = Media.NewInstance();
62
        mediaImage4.addRepresentation(smallJPGRepresentation);
63
        mediaImage4.addRepresentation(bigJPGRepresentation);
64
        mediaImage4.addRepresentation(unknownDimensionJPGRepresentation);
65

    
66
        mediaImage2 = Media.NewInstance();
67
        mediaImage2.addRepresentation(smallPNGRepresentation);
68

    
69
        mediaImage3 = Media.NewInstance();
70
        mediaImage3.addRepresentation(bigPNGRepresentation);
71

    
72
        mediaAudio1 = Media.NewInstance();
73
        mediaAudio1.addRepresentation(bigMP3Representation);
74
    }
75

    
76
    private Media findMediaByUUID(Collection<Media> mediaList, UUID uuid){
77
        for(Media media : mediaList){
78
            if(media.getUuid().equals(uuid)){
79
                return media;
80
            }
81
        }
82
        return null;
83
    }
84

    
85
    @Test
86
    public void testFindPreferredMedia(){
87

    
88
        ArrayList<Media> imageList = new ArrayList<>();
89
        imageList.add(mediaImage1);
90
        imageList.add(mediaImage2);
91
        imageList.add(mediaImage3);
92

    
93
        Map<Media, MediaRepresentation> filteredList = MediaUtils.findPreferredMedia(
94
                imageList, ImageFile.class, null, null, null, null, MediaUtils.MissingValueStrategy.MAX);
95

    
96
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage1.getUuid()));
97
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage2.getUuid()));
98
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage3.getUuid()));
99

    
100
        ArrayList<Media> mixedMediaList =  new ArrayList<>();
101
        mixedMediaList.add(mediaImage1);
102
        mixedMediaList.add(mediaImage2);
103
        mixedMediaList.add(mediaImage3);
104
        mixedMediaList.add(mediaAudio1);
105
        filteredList = MediaUtils.findPreferredMedia(mixedMediaList, null, null, null, null, null, MediaUtils.MissingValueStrategy.MAX);
106
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage1.getUuid()));
107
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage2.getUuid()));
108
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage3.getUuid()));
109
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaAudio1.getUuid()));
110

    
111
        filteredList = MediaUtils.findPreferredMedia(mixedMediaList, AudioFile.class, null, null, null, null, MediaUtils.MissingValueStrategy.MAX);
112
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaAudio1.getUuid()));
113

    
114
        filteredList = MediaUtils.findPreferredMedia(mixedMediaList, ImageFile.class, null, null, null, null, MediaUtils.MissingValueStrategy.MAX);
115
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage1.getUuid()));
116
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage2.getUuid()));
117
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage3.getUuid()));
118

    
119
    }
120

    
121
    @Test
122
    public void testfindBestMatchingRepresentation() {
123

    
124
        // Logger.getLogger(MediaUtils.class).setLevel(Level.DEBUG);
125

    
126
        String[] mimetypes = {".*"};
127

    
128
        Assert.assertEquals(unknownDimensionJPGRepresentation.getParts().get(0).getUuid(),
129
                MediaUtils.findBestMatchingRepresentation(
130
                        mediaImage4, ImageFile.class, null, Integer.MAX_VALUE, Integer.MAX_VALUE, null, MediaUtils.MissingValueStrategy.MAX).getParts().get(0).getUuid()
131
                );
132

    
133
        Assert.assertEquals(
134
                bigJPGRepresentation.getUuid(),
135
                MediaUtils.findBestMatchingRepresentation(
136
                mediaImage1, null,  null, Integer.MAX_VALUE, Integer.MAX_VALUE, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
137
                );
138

    
139
        Assert.assertEquals(smallJPGRepresentation.getUuid(),
140
                MediaUtils.findBestMatchingRepresentation(
141
                mediaImage1, null, null, 200, 300, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid());
142
        Assert.assertEquals(bigJPGRepresentation.getUuid(),
143
                MediaUtils.findBestMatchingRepresentation(
144
                mediaImage1, null, null, 1500, 1500, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
145
                );
146

    
147
        Assert.assertEquals(smallJPGRepresentation.getUuid(),
148
                MediaUtils.findBestMatchingRepresentation(
149
                mediaImage1, null, 300, null, null, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
150
                );
151
        Assert.assertEquals(bigJPGRepresentation.getUuid(),
152
                MediaUtils.findBestMatchingRepresentation(
153
                mediaImage1, null, bigJPGRepresentation.getParts().get(0).getSize() - 100, null, null, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
154
                );
155
        Assert.assertEquals(bigJPGRepresentation.getUuid(),
156
                MediaUtils.findBestMatchingRepresentation(
157
                mediaImage4, null, bigJPGRepresentation.getParts().get(0).getSize() + 2000, null, null, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
158
                );
159

    
160

    
161
    }
162

    
163
    /**
164
     * where some images are loading slow, in these cases the algorithm chooses
165
     * the high quality representation even if the thumbnail size perfectly fits
166
     * the preferred size
167
     *
168
     * Thumbnails with 150x96 available (=> product is 14400) Preferred size
169
     * 120x120 defined in setting of taxon gallery (=> product is 14400)
170
     *
171
     */
172
    @Test
173
    public void testIssue7093() throws URISyntaxException {
174

    
175
        // ---------- PhoenixTheophrasti25.jpg
176

    
177
        ImageFile thumbnail = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/thumbnail.JPG"), null, 150, 96);
178
        MediaRepresentation thumbnailRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
179
        thumbnailRepresentation.addRepresentationPart(thumbnail);
180

    
181
        ImageFile large = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/big.JPG"), null, 670, 1122);
182
        MediaRepresentation largeRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
183
        largeRepresentation.addRepresentationPart(large);
184

    
185
        ImageFile middle = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/middle.JPG"), null, 350,  586);
186
        MediaRepresentation middleRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
187
        middleRepresentation.addRepresentationPart(middle);
188

    
189
        Media media = Media.NewInstance();
190
        media.addRepresentation(largeRepresentation);
191
        media.addRepresentation(thumbnailRepresentation);
192

    
193
        String[] mimetypes = {".*"};
194

    
195
        Assert.assertEquals(thumbnailRepresentation, MediaUtils.findBestMatchingRepresentation(
196
                media, null,  null, 120, 120, mimetypes, MediaUtils.MissingValueStrategy.MAX));
197

    
198
        media.addRepresentation(middleRepresentation);
199

    
200
        Assert.assertEquals(thumbnailRepresentation, MediaUtils.findBestMatchingRepresentation(
201
                media, null,  null, 120, 120, mimetypes, MediaUtils.MissingValueStrategy.MAX));
202

    
203
        // ---- Phoenix_theophrasti_Turland_2009_0019.jpg, ...
204

    
205
        thumbnail = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/thumbnail.JPG"), null, 150, 96);
206
        thumbnailRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
207
        thumbnailRepresentation.addRepresentationPart(thumbnail);
208

    
209
        large = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/big.JPG"), null,  3787, 2535);
210
        largeRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
211
        largeRepresentation.addRepresentationPart(large);
212

    
213
        middle = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/middle.JPG"), null, 523, 350);
214
        middleRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
215
        middleRepresentation.addRepresentationPart(middle);
216

    
217
        media = Media.NewInstance();
218
        media.addRepresentation(largeRepresentation);
219
        media.addRepresentation(thumbnailRepresentation);
220

    
221
        Assert.assertEquals(thumbnailRepresentation, MediaUtils.findBestMatchingRepresentation(
222
                media, null,  null, 120, 120, mimetypes, MediaUtils.MissingValueStrategy.MAX));
223

    
224
        media.addRepresentation(middleRepresentation);
225

    
226
        Assert.assertEquals(thumbnailRepresentation, MediaUtils.findBestMatchingRepresentation(
227
                media, null,  null, 120, 120, mimetypes, MediaUtils.MissingValueStrategy.MAX));
228

    
229
    }
230

    
231
}
(2-2/2)