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.form.field;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.ui.imageprovider.ImageProvider;
38 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
39
40 import javax.jcr.Node;
41 import javax.jcr.RepositoryException;
42
43 import org.apache.commons.lang3.StringUtils;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
46
47 import com.vaadin.server.ExternalResource;
48 import com.vaadin.ui.Component;
49 import com.vaadin.ui.Image;
50 import com.vaadin.v7.shared.ui.label.ContentMode;
51 import com.vaadin.v7.ui.CustomField;
52 import com.vaadin.v7.ui.Field;
53 import com.vaadin.v7.ui.HorizontalLayout;
54 import com.vaadin.v7.ui.Label;
55
56
57
58
59
60 public class ThumbnailField extends CustomField<String> {
61 private static final Logger log = LoggerFactory.getLogger(ThumbnailField.class);
62 private HorizontalLayout layout;
63 private Label label;
64 protected Image embedded = new Image();
65
66 private ImageProvider imageThumbnailProvider;
67 private String workspace;
68
69 private String currentIdentifier = "";
70
71 public ThumbnailField(ImageProvider imageThumbnailProvider, String workspace) {
72 this.imageThumbnailProvider = imageThumbnailProvider;
73 this.workspace = workspace;
74 this.layout = new HorizontalLayout();
75
76 label = new Label("", ContentMode.HTML);
77 label.addStyleName("thumbnail-info");
78
79 addStyleName("thumbnail-field");
80 setSizeUndefined();
81
82 }
83
84 @Override
85 protected Component initContent() {
86 layout.addComponent(label);
87 layout.addComponent(embedded);
88 return layout;
89 }
90
91 @Override
92 public Class<String> getType() {
93 return String.class;
94 }
95
96
97
98
99 public void ValueChangeListener(Field<?> field) {
100 field.addValueChangeListener(new ValueChangeListener() {
101 @Override
102 public void valueChange(com.vaadin.v7.data.Property.ValueChangeEvent event) {
103 setLabelAndImage(event.getProperty().getValue().toString());
104 }
105 });
106 }
107
108
109
110
111 public void setLabelAndImage(String nodePath) {
112 try {
113 if (StringUtils.isEmpty(nodePath)) {
114 return;
115 }
116 Node parentNode = MgnlContext.getJCRSession(workspace).getNode(nodePath);
117 String uuid = parentNode.getIdentifier();
118
119 if (!currentIdentifier.equals(uuid)) {
120
121 label.setValue(createFieldDetail(parentNode));
122
123 String path = imageThumbnailProvider.getPortraitPath(new JcrNodeAdapter(parentNode));
124 if (layout.getComponentIndex(embedded) != -1) {
125 layout.removeComponent(embedded);
126 }
127 embedded = path != null ? new Image("", new ExternalResource(path)) : new Image(null);
128 layout.addComponent(embedded);
129 }
130 } catch (RepositoryException e) {
131 log.warn("Not able to refresh the Thumbnail Field view for the following Node path: {}", nodePath, e);
132 }
133 }
134
135
136
137
138 public String createFieldDetail(Node parentNode) throws RepositoryException {
139 return "";
140 }
141 }