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.module.cropui;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.NodeData;
38 import info.magnolia.cms.gui.control.Button;
39 import info.magnolia.cms.gui.control.File;
40 import info.magnolia.cms.gui.control.Hidden;
41 import info.magnolia.cms.gui.dialog.DialogBox;
42 import info.magnolia.cms.gui.misc.CssConstants;
43 import org.apache.commons.lang3.StringUtils;
44
45 import javax.jcr.RepositoryException;
46 import javax.servlet.http.HttpServletRequest;
47 import javax.servlet.http.HttpServletResponse;
48 import java.io.IOException;
49 import java.io.Writer;
50
51
52
53
54
55
56
57 public class CropAndResizeControl extends DialogBox {
58 private Content configNode;
59
60 @Override
61 public void init(HttpServletRequest request, HttpServletResponse response, Content websiteNode, Content configNode) throws RepositoryException {
62 super.init(request, response, websiteNode, configNode);
63 this.configNode = configNode;
64 }
65
66 public Content getConfigNode() {
67 return configNode;
68 }
69
70 @Override
71 public void drawHtml(Writer out) throws IOException {
72 drawHtmlPre(out);
73
74
75 if (getWebsiteNode() != null) {
76 final String fileControlName = getConfigValue("fileControlName", null);
77 if (fileControlName == null) {
78 throw new IllegalStateException("Need a fileControlName config parameter to know which file control to use.");
79 }
80 final File fileControl = new File(fileControlName, getWebsiteNode());
81 final String imagePath = fileControl.getHandle() + "." + fileControl.getExtension();
82 final String cropperInfoControlName = getCropperInfoPropertyName(fileControlName);
83 final String previewId = cropperInfoControlName + "_previewZone";
84
85 out.write("\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">");
86
87 out.write("<tr><td class=\"" + CssConstants.CSSCLASS_FILEIMAGE + "\">");
88
89
90 final NodeData bin = getWebsiteNode().getNodeData(getTargetBinaryPropertyName(fileControlName));
91 out.write("<div id=\"");
92 out.write(previewId);
93 out.write("\">");
94 if (bin.isExist()) {
95 final File preview = new File(getTargetBinaryPropertyName(fileControlName), getWebsiteNode());
96 int previewHeight = -1;
97 try {
98 previewHeight = Integer.parseInt(preview.getImageHeight());
99 if (previewHeight > 100) {
100 previewHeight = 100;
101 }
102 } catch (NumberFormatException e) {
103
104 }
105
106 out.write("<img src=\"");
107 out.write(getRequest().getContextPath());
108 out.write(preview.getPath());
109 if (previewHeight > 0) {
110 out.write("\" height=\"");
111 out.write(String.valueOf(previewHeight));
112 }
113 out.write("\" />");
114 if (StringUtils.isNotEmpty(preview.getImageWidth())) {
115 out.write("<p><em style='white-space:nowrap'>");
116 out.write(getMessage("cropper.preview.widthheight", new String[]{preview.getImageWidth(), preview.getImageHeight()}));
117 out.write("</em></p>\n");
118 }
119 }
120 out.write("<p style=\"display: none;\" class=\"warning\">");
121 out.write(getMessage("cropper.preview.tobeprocessed"));
122 out.write("</p>");
123 out.write("</div>");
124
125 out.write("</td><td>");
126
127 final Hidden cropperInfo = new Hidden(cropperInfoControlName, getWebsiteNode());
128 cropperInfo.setId(cropperInfoControlName);
129 cropperInfo.setSaveInfo(true);
130
131 final String controlUUID = configNode.getUUID();
132 final Button button = new Button();
133 button.setLabel(getMessage("cropper.edit.button"));
134 button.setOnclick("new mgnl.cropui.ImageCropper.openCropper('" + cropperInfo.getId() + "', '" + controlUUID + "', '" + imagePath + "');");
135
136 out.write("<div class=\"");
137 out.write(CssConstants.CSSCLASS_DESCRIPTION);
138 out.write("\">");
139 out.write(button.getHtml());
140 out.write(cropperInfo.getHtml());
141 out.write("</div>");
142
143 out.write("</td></tr></table>");
144 }
145
146 drawHtmlPost(out);
147 }
148
149 public static String getCropperInfoPropertyName(String fileControlName) {
150 return fileControlName + "_cropperInfo";
151 }
152
153 public static String getTargetBinaryPropertyName(String fileControlName) {
154 return fileControlName + "_resized";
155 }
156 }