Project

General

Profile

Download (11.1 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9
package eu.etaxonomy.cdm.model.media;
10

    
11
import java.net.URISyntaxException;
12
import java.util.ArrayList;
13
import java.util.Collection;
14
import java.util.List;
15
import java.util.Map;
16
import java.util.UUID;
17

    
18
import org.junit.Assert;
19
import org.junit.Before;
20
import org.junit.Test;
21

    
22
import eu.etaxonomy.cdm.common.URI;
23

    
24
public class MediaUtilsTest {
25

    
26
    private Media mediaImage1;
27
    private Media mediaImage2;
28
    private Media mediaImage3;
29
    private Media mediaImage4;
30
    private Media mediaAudio1;
31
    private MediaRepresentation smallJPGRepresentation;
32
    private MediaRepresentation bigJPGRepresentation;
33
    private MediaRepresentation unknownDimensionJPGRepresentation;
34
    private MediaRepresentation smallPNGRepresentation;
35
    private MediaRepresentation bigPNGRepresentation;
36
    private MediaRepresentation bigMP3Representation;
37

    
38
    @Before
39
    public void setUp() throws Exception {
40

    
41
        ImageFile smallJPG = ImageFile.NewInstance(new URI("http://foo.bar.net/small.JPG"), 200 * 100, 100, 200);
42
        smallJPGRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
43
        smallJPGRepresentation.addRepresentationPart(smallJPG);
44

    
45
        ImageFile bigJPG = ImageFile.NewInstance(new URI("http://foo.bar.net/big.JPG"), 2000 * 1000, 1000, 2000);
46
        bigJPGRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
47
        bigJPGRepresentation.addRepresentationPart(bigJPG);
48

    
49
        ImageFile unknownDimensionJPG = ImageFile.NewInstance(new URI("http://foo.bar.net/unknownDimension.JPG"), null, null, null);
50
        unknownDimensionJPGRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
51
        unknownDimensionJPGRepresentation.addRepresentationPart(unknownDimensionJPG);
52

    
53
        ImageFile smallPNG = ImageFile.NewInstance(new URI("http://foo.bar.net/small.PNG"), 200 * 100, 100, 200);
54
        smallPNGRepresentation = MediaRepresentation.NewInstance("image/png", "png");
55
        smallPNGRepresentation.addRepresentationPart(smallPNG);
56

    
57
        ImageFile bigPNG = ImageFile.NewInstance(new URI("http://foo.bar.net/big.PNG"), 2000 * 1000, 1000, 2000);
58
        bigPNGRepresentation = MediaRepresentation.NewInstance("image/png", "png");
59
        bigPNGRepresentation.addRepresentationPart(bigPNG);
60

    
61
        AudioFile bigMP3 = AudioFile.NewInstance(new URI("http://foo.bar.net/big.mp3"), 40000);
62
        bigMP3Representation = MediaRepresentation.NewInstance("audio/mpeg", "mp3");
63
        bigMP3Representation.addRepresentationPart(bigMP3);
64

    
65

    
66
        mediaImage1 = Media.NewInstance();
67
        mediaImage1.addRepresentation(smallJPGRepresentation);
68
        mediaImage1.addRepresentation(bigJPGRepresentation);
69

    
70
        mediaImage4 = Media.NewInstance();
71
        mediaImage4.addRepresentation(smallJPGRepresentation);
72
        mediaImage4.addRepresentation(bigJPGRepresentation);
73
        mediaImage4.addRepresentation(unknownDimensionJPGRepresentation);
74

    
75
        mediaImage2 = Media.NewInstance();
76
        mediaImage2.addRepresentation(smallPNGRepresentation);
77

    
78
        mediaImage3 = Media.NewInstance();
79
        mediaImage3.addRepresentation(bigPNGRepresentation);
80

    
81
        mediaAudio1 = Media.NewInstance();
82
        mediaAudio1.addRepresentation(bigMP3Representation);
83
    }
84

    
85
    private Media findMediaByUUID(Collection<Media> mediaList, UUID uuid){
86
        for(Media media : mediaList){
87
            if(media.getUuid().equals(uuid)){
88
                return media;
89
            }
90
        }
91
        return null;
92
    }
93

    
94
    @Test
95
    public void testFindPreferredMedia(){
96

    
97
        List<Media> imageList = new ArrayList<>();
98
        imageList.add(mediaImage1);
99
        imageList.add(mediaImage2);
100
        imageList.add(mediaImage3);
101

    
102
        Map<Media, MediaRepresentation> filteredList = MediaUtils.findPreferredMedia(
103
                imageList, ImageFile.class, null, null, null, null, MediaUtils.MissingValueStrategy.MAX);
104

    
105
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage1.getUuid()));
106
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage2.getUuid()));
107
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage3.getUuid()));
108

    
109
        List<Media> mixedMediaList =  new ArrayList<>();
110
        mixedMediaList.add(mediaImage1);
111
        mixedMediaList.add(mediaImage2);
112
        mixedMediaList.add(mediaImage3);
113
        mixedMediaList.add(mediaAudio1);
114
        filteredList = MediaUtils.findPreferredMedia(mixedMediaList, null, 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
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaAudio1.getUuid()));
119

    
120
        filteredList = MediaUtils.findPreferredMedia(mixedMediaList, AudioFile.class, null, null, null, null, MediaUtils.MissingValueStrategy.MAX);
121
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaAudio1.getUuid()));
122

    
123
        filteredList = MediaUtils.findPreferredMedia(mixedMediaList, ImageFile.class, null, null, null, null, MediaUtils.MissingValueStrategy.MAX);
124
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage1.getUuid()));
125
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage2.getUuid()));
126
        Assert.assertNotNull(findMediaByUUID(filteredList.keySet(), mediaImage3.getUuid()));
127
    }
128

    
129
    @Test
130
    public void testfindBestMatchingRepresentation() {
131

    
132
        // LogUtils.setLevel(MediaUtils.class, Level.DEBUG);
133

    
134
        String[] mimetypes = {".*"};
135

    
136
        Assert.assertEquals(unknownDimensionJPGRepresentation.getParts().get(0).getUuid(),
137
                MediaUtils.findBestMatchingRepresentation(
138
                        mediaImage4, ImageFile.class, null, Integer.MAX_VALUE, Integer.MAX_VALUE, null, MediaUtils.MissingValueStrategy.MAX).getParts().get(0).getUuid()
139
                );
140

    
141
        Assert.assertEquals(
142
                bigJPGRepresentation.getUuid(),
143
                MediaUtils.findBestMatchingRepresentation(
144
                mediaImage1, null,  null, Integer.MAX_VALUE, Integer.MAX_VALUE, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
145
                );
146

    
147
        Assert.assertEquals(smallJPGRepresentation.getUuid(),
148
                MediaUtils.findBestMatchingRepresentation(
149
                mediaImage1, null, null, 200, 300, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid());
150
        Assert.assertEquals(bigJPGRepresentation.getUuid(),
151
                MediaUtils.findBestMatchingRepresentation(
152
                mediaImage1, null, null, 1500, 1500, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
153
                );
154

    
155
        Assert.assertEquals(smallJPGRepresentation.getUuid(),
156
                MediaUtils.findBestMatchingRepresentation(
157
                mediaImage1, null, 300, null, null, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
158
                );
159
        Assert.assertEquals(bigJPGRepresentation.getUuid(),
160
                MediaUtils.findBestMatchingRepresentation(
161
                mediaImage1, null, bigJPGRepresentation.getParts().get(0).getSize() - 100, null, null, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
162
                );
163
        Assert.assertEquals(bigJPGRepresentation.getUuid(),
164
                MediaUtils.findBestMatchingRepresentation(
165
                mediaImage4, null, bigJPGRepresentation.getParts().get(0).getSize() + 2000, null, null, mimetypes, MediaUtils.MissingValueStrategy.MAX).getUuid()
166
                );
167

    
168

    
169
    }
170

    
171
    /**
172
     * where some images are loading slow, in these cases the algorithm chooses
173
     * the high quality representation even if the thumbnail size perfectly fits
174
     * the preferred size
175
     *
176
     * Thumbnails with 150x96 available (=> product is 14400) Preferred size
177
     * 120x120 defined in setting of taxon gallery (=> product is 14400)
178
     *
179
     */
180
    @Test
181
    public void testIssue7093() throws URISyntaxException {
182

    
183
        // ---------- PhoenixTheophrasti25.jpg
184

    
185
        ImageFile thumbnail = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/thumbnail.JPG"), null, 150, 96);
186
        MediaRepresentation thumbnailRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
187
        thumbnailRepresentation.addRepresentationPart(thumbnail);
188

    
189
        ImageFile large = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/big.JPG"), null, 670, 1122);
190
        MediaRepresentation largeRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
191
        largeRepresentation.addRepresentationPart(large);
192

    
193
        ImageFile middle = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/middle.JPG"), null, 350,  586);
194
        MediaRepresentation middleRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
195
        middleRepresentation.addRepresentationPart(middle);
196

    
197
        Media media = Media.NewInstance();
198
        media.addRepresentation(largeRepresentation);
199
        media.addRepresentation(thumbnailRepresentation);
200

    
201
        String[] mimetypes = {".*"};
202

    
203
        Assert.assertEquals(thumbnailRepresentation, MediaUtils.findBestMatchingRepresentation(
204
                media, null,  null, 120, 120, mimetypes, MediaUtils.MissingValueStrategy.MAX));
205

    
206
        media.addRepresentation(middleRepresentation);
207

    
208
        Assert.assertEquals(thumbnailRepresentation, MediaUtils.findBestMatchingRepresentation(
209
                media, null,  null, 120, 120, mimetypes, MediaUtils.MissingValueStrategy.MAX));
210

    
211
        // ---- Phoenix_theophrasti_Turland_2009_0019.jpg, ...
212

    
213
        thumbnail = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/thumbnail.JPG"), null, 150, 96);
214
        thumbnailRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
215
        thumbnailRepresentation.addRepresentationPart(thumbnail);
216

    
217
        large = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/big.JPG"), null,  3787, 2535);
218
        largeRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
219
        largeRepresentation.addRepresentationPart(large);
220

    
221
        middle = ImageFile.NewInstance(new URI("http://foo.bar.net/issue7093/middle.JPG"), null, 523, 350);
222
        middleRepresentation = MediaRepresentation.NewInstance("image/jpg", "jpg");
223
        middleRepresentation.addRepresentationPart(middle);
224

    
225
        media = Media.NewInstance();
226
        media.addRepresentation(largeRepresentation);
227
        media.addRepresentation(thumbnailRepresentation);
228

    
229
        Assert.assertEquals(thumbnailRepresentation, MediaUtils.findBestMatchingRepresentation(
230
                media, null,  null, 120, 120, mimetypes, MediaUtils.MissingValueStrategy.MAX));
231

    
232
        media.addRepresentation(middleRepresentation);
233

    
234
        Assert.assertEquals(thumbnailRepresentation, MediaUtils.findBestMatchingRepresentation(
235
                media, null,  null, 120, 120, mimetypes, MediaUtils.MissingValueStrategy.MAX));
236

    
237
    }
238

    
239
}
(2-2/2)