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.field;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37
38 import org.apache.commons.lang3.ObjectUtils;
39
40 import com.vaadin.ui.CustomComponent;
41 import com.vaadin.ui.FormLayout;
42 import com.vaadin.ui.Label;
43 import com.vaadin.ui.VerticalLayout;
44
45
46
47
48
49
50 public class UploadFieldDetailComponent extends CustomComponent {
51
52 private final Label fileName;
53 private final Label fileSize;
54 private final Label fileFormat;
55 private VerticalLayout rootLayout;
56
57
58 public UploadFieldDetailComponent(SimpleTranslator i18n) {
59
60 this.rootLayout = new VerticalLayout();
61 this.rootLayout.setMargin(false);
62 setCompositionRoot(rootLayout);
63
64 fileName = new Label();
65 fileName.setCaption(i18n.translate("fields.uploadField.detail.filename.label"));
66
67 fileSize = new Label();
68 fileSize.setCaption(i18n.translate("fields.uploadField.detail.filesize.label"));
69
70 fileFormat = new Label();
71 fileFormat.setCaption(i18n.translate("fields.uploadField.detail.fileformat.label"));
72
73 FormLayout fileInfo = new FormLayout();
74 fileInfo.setSizeUndefined();
75 fileInfo.addStyleName("file-details");
76 fileInfo.addComponents(fileName, fileSize, fileFormat);
77 rootLayout.addComponent(fileInfo);
78 }
79
80 public void updateFileDetail(UploadField.FileInfo info) {
81 if (ObjectUtils.anyNotNull(fileName, fileSize, fileFormat)) {
82 this.fileName.setValue(info.getName());
83 this.fileSize.setValue(getFormattedSizeInfo(info));
84 this.fileFormat.setValue(info.getMimeType());
85 refreshRootLayout();
86 } else {
87 clearRootLayout();
88 }
89
90 }
91
92 protected void clearRootLayout() {
93 this.rootLayout.setVisible(false);
94 removeStyleName("done");
95 }
96
97 protected void refreshRootLayout() {
98 this.rootLayout.setVisible(true);
99 addStyleName("done");
100 }
101
102 private String getFormattedSizeInfo(UploadField.FileInfo info) {
103 long sizeInKb = info.getSizeInBytes() / 1024;
104 return info.getImageInfo()
105 .map(imageInfo -> String.format("%s x %s px, %s KB", imageInfo.getWidth(), imageInfo.getHeight(), sizeInKb))
106 .orElseGet(() -> String.format("%s KB", sizeInKb));
107 }
108
109 }