Merge branch 'release/5.19.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / media / MediaViewLabelProvider.java
1 /**
2 * Copyright (C) 2017 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.taxeditor.editor.view.media;
10
11 import java.io.InputStream;
12 import java.util.List;
13 import java.util.Set;
14
15 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
16 import org.eclipse.jface.viewers.LabelProvider;
17 import org.eclipse.jface.viewers.StyledString;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.graphics.GC;
20 import org.eclipse.swt.graphics.Image;
21 import org.eclipse.swt.widgets.Display;
22
23 import eu.etaxonomy.cdm.common.URI;
24 import eu.etaxonomy.cdm.common.UriUtils;
25 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
26 import eu.etaxonomy.cdm.model.media.Media;
27 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
28 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
29 import eu.etaxonomy.cdm.model.media.MediaUtils;
30 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
31
32 /**
33 * @author k.luther
34 * @date 11.10.2017
35 */
36 public class MediaViewLabelProvider extends LabelProvider implements IStyledLabelProvider {
37
38 /**
39 * {@inheritDoc}
40 */
41 @Override
42 public String getText(Object element) {
43 return getStyledText(element).getString();
44 }
45
46 @Override
47 public StyledString getStyledText(Object element) {
48 if (element instanceof IdentifiableEntity) {
49 IdentifiableEntity<?> identifiableEntity= (IdentifiableEntity<?>) element;
50 if(identifiableEntity.getId()==0){
51 return new StyledString(identifiableEntity.generateTitle());
52 }
53 else{
54 return new StyledString(identifiableEntity.getTitleCache());
55 }
56 }
57 return null;
58 }
59
60 @Override
61 public Image getImage(Object element) {
62 Image image = null;
63 int scale = 50;
64 if (element instanceof Media && PreferencesUtil.isShowMediaPreview()){
65 Set<MediaRepresentation> representations = ((Media)element).getRepresentations();
66 if(representations.iterator().hasNext()){
67 MediaRepresentation rep = null;
68
69 MediaRepresentationPart smallestPart = null;
70 rep = MediaUtils.findBestMatchingRepresentation((Media)element, null, null, scale, scale, null, MediaUtils.MissingValueStrategy.MAX);
71 List<MediaRepresentationPart> parts = rep.getParts();
72 for (MediaRepresentationPart part: parts){
73 if (smallestPart != null){
74 if (smallestPart.getSize() != null && part.getSize() != null) {
75 if (smallestPart.getSize() > part.getSize()){
76 smallestPart = part;
77 }
78 }
79 }else{
80 smallestPart = part;
81 }
82
83 }
84 if (smallestPart != null){
85 URI uri = smallestPart.getUri();
86 if (uri == null){
87 return null;
88 }
89 InputStream imageStream;
90 try {
91 imageStream = UriUtils.getInputStream(uri);
92 image = new Image(Display.getCurrent(), imageStream);
93 int height = image.getBounds().height;
94 int width = image.getBounds().width;
95
96 if (height>width){
97 width = width/(height/scale);
98 height = scale;
99 }else{
100 height = height/(width/scale);
101 width = scale;
102 }
103 Image scaled = new Image(Display.getDefault(), scale, scale);
104
105 GC gc = new GC(scaled);
106 gc.setAntialias(SWT.ON);
107 gc.setInterpolation(SWT.HIGH);
108
109
110 gc.drawImage(image, 0, 0,
111 image.getBounds().width, image.getBounds().height,
112 0, 0, width, height);
113
114 gc.dispose();
115 image.dispose(); // don't forget about me!
116 return scaled;
117
118 } catch (Exception e) {
119 // TODO Auto-generated catch block
120 return null;
121 }
122
123 }else{
124 return null;
125 }
126
127 }
128
129 }
130 return image;
131 }
132
133 @Override
134 public void dispose() {
135 // garbage collection system resources
136
137 }
138
139
140
141 }