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