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 com.vaadin.ui.Component;
45 import com.vaadin.ui.Image;
46 import com.vaadin.util.ReflectTools;
47
48
49
50
51 public class ViewImageField extends ImageMediaField {
52
53 private Image image = new Image();
54
55 private BufferedImage bufferedImage;
56
57 @Override
58 public void refreshImageSource() {
59 try {
60 bufferedImage = ImageIO.read(new ByteArrayInputStream(getValue()));
61 fireEvent(new ImageResizeEvent(this, bufferedImage.getWidth(), bufferedImage.getHeight()));
62 image.setSource(createResourceFromValue());
63 } catch (IOException e) {
64 log.error("Error reading the image data: " + e.getMessage(), e);
65 }
66 }
67
68 public void addImageResizeListener(ImageSizeChangeListener listener) {
69 addListener(ImageSizeChangeListener.EVENT_ID, ImageResizeEvent.class, listener, ImageSizeChangeListener.EVENT_METHOD);
70 }
71
72 public void removeImageResizeListener(ImageSizeChangeListener listener) {
73 removeListener(ImageSizeChangeListener.EVENT_ID, ImageResizeEvent.class, listener);
74 }
75
76 @Override
77 protected Component createImage() {
78 return image;
79 }
80
81 @Override
82 public void attach() {
83 super.attach();
84 }
85
86
87
88
89 public static class ImageResizeEvent extends Component.Event {
90
91 private int width;
92
93 private int height;
94
95 public ImageResizeEvent(Component source, int newWidth, int newHeight) {
96 super(source);
97 this.width = newWidth;
98 this.height = newHeight;
99 }
100
101 public int getWidth() {
102 return width;
103 }
104
105 public int getHeight() {
106 return height;
107 }
108 }
109
110
111
112
113
114 public interface ImageSizeChangeListener {
115 public static String EVENT_ID = "image_resize";
116 public static Method EVENT_METHOD =
117 ReflectTools.findMethod(ImageSizeChangeListener.class, "onSizeChanged", ImageResizeEvent.class);
118 void onSizeChanged(ImageResizeEvent e);
119 }
120 }