1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.mediaeditor.field.image;
35
36
37 import java.awt.image.BufferedImage;
38 import java.io.ByteArrayInputStream;
39 import java.io.IOException;
40 import java.lang.reflect.Method;
41
42 import javax.imageio.ImageIO;
43
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
46
47 import com.vaadin.ui.Component;
48 import com.vaadin.ui.Image;
49 import com.vaadin.util.ReflectTools;
50
51
52
53
54 public class ViewImageField extends ImageMediaField {
55 private static final Logger log = LoggerFactory.getLogger(ViewImageField.class);
56
57 private Image image = new Image();
58
59 private BufferedImage bufferedImage;
60
61 @Override
62 public void refreshImageSource() {
63 try {
64 bufferedImage = ImageIO.read(new ByteArrayInputStream(getValue()));
65 fireEvent(new ImageResizeEvent(this, bufferedImage.getWidth(), bufferedImage.getHeight()));
66 image.setSource(createResourceFromValue());
67 } catch (IOException e) {
68 log.error("Error reading the image data: " + e.getMessage(), e);
69 }
70 }
71
72 public void addImageResizeListener(ImageSizeChangeListener listener) {
73 addListener(ImageSizeChangeListener.EVENT_ID, ImageResizeEvent.class, listener, ImageSizeChangeListener.EVENT_METHOD);
74 }
75
76 public void removeImageResizeListener(ImageSizeChangeListener listener) {
77 removeListener(ImageSizeChangeListener.EVENT_ID, ImageResizeEvent.class, listener);
78 }
79
80 @Override
81 protected Component createImage() {
82 return image;
83 }
84
85 @Override
86 public void attach() {
87 super.attach();
88 }
89
90
91
92
93 public static class ImageResizeEvent extends Event {
94
95 private int width;
96
97 private int height;
98
99 public ImageResizeEvent(Component source, int newWidth, int newHeight) {
100 super(source);
101 this.width = newWidth;
102 this.height = newHeight;
103 }
104
105 public int getWidth() {
106 return width;
107 }
108
109 public int getHeight() {
110 return height;
111 }
112 }
113
114
115
116
117
118 public interface ImageSizeChangeListener {
119 public static String EVENT_ID = "image_resize";
120 public static Method EVENT_METHOD =
121 ReflectTools.findMethod(ImageSizeChangeListener.class, "onSizeChanged", ImageResizeEvent.class);
122 void onSizeChanged(ImageResizeEvent e);
123 }
124 }