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.cms.gui.control;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.NodeData;
38 import info.magnolia.cms.util.NodeDataUtil;
39 import info.magnolia.context.MgnlContext;
40 import info.magnolia.context.WebContext;
41 import info.magnolia.util.EscapeUtil;
42
43 import java.io.IOException;
44 import java.io.Writer;
45 import java.util.ArrayList;
46 import java.util.Hashtable;
47 import java.util.Iterator;
48 import java.util.List;
49 import java.util.Map;
50
51 import javax.jcr.PropertyType;
52 import javax.servlet.http.HttpServletRequest;
53
54 import org.apache.commons.lang.StringUtils;
55
56
57
58
59
60
61 public class ControlImpl implements Control {
62
63 public static final int BUTTONTYPE_PUSHBUTTON = 0;
64
65 public static final int BUTTONTYPE_CHECKBOX = 1;
66
67 public static final int BUTTONTYPE_RADIO = 2;
68
69 public static final int BUTTONSTATE_NORMAL = 0;
70
71 public static final int BUTTONSTATE_MOUSEOVER = 1;
72
73 public static final int BUTTONSTATE_MOUSEDOWN = 2;
74
75 public static final int BUTTONSTATE_PUSHED = 3;
76
77 public static final int BUTTONSTATE_DISABLED = 4;
78
79 public static final int VALUETYPE_SINGLE = 0;
80
81 public static final int VALUETYPE_MULTIPLE = 1;
82
83 public static final int ENCRYPTION_NO = 0;
84
85
86
87
88 @Deprecated
89 public static final int ENCODING_NO = ENCRYPTION_NO;
90
91 public static final int ENCRYPTION_NO_ENCODING_BASE64 = 1;
92
93 public static final int ENCRYPTION_HASH_SHA = 2;
94
95 public static final int ENCRYPTION_HASH_BCRYPT = 3;
96
97 public static final int RICHEDIT_NONE = 0;
98
99 public static final int RICHEDIT_KUPU = 1;
100
101 public static final int RICHEDIT_FCK = 2;
102
103 public static final String CSSCLASS_CONTROLBUTTON = "mgnlControlButton";
104
105 public static final String CSSCLASS_CONTROLBUTTONSMALL = "mgnlControlButtonSmall";
106
107 public static final String CSSCLASS_CONTROLBAR = "mgnlControlBar";
108
109 public static final String CSSCLASS_CONTROLBARSMALL = "mgnlControlBarSmall";
110
111 private int valueType = VALUETYPE_SINGLE;
112
113 private int encoding = ENCRYPTION_NO;
114
115 private int isRichEditValue = RICHEDIT_NONE;
116
117 private String label;
118
119 private String name;
120
121 private String id;
122
123 private String value;
124
125 private List values = new ArrayList();
126
127 private Map events = new Hashtable();
128
129 private Content websiteNode;
130
131 private String htmlPre;
132
133 private String htmlInter;
134
135 private String htmlPost;
136
137 private int type = PropertyType.STRING;
138
139 private boolean saveInfo = true;
140
141 private String cssClass = StringUtils.EMPTY;
142
143 private Map cssStyles = new Hashtable();
144
145 private String path;
146
147 private String nodeCollectionName;
148
149 private String nodeName;
150
151 private final String newLine;
152
153 public ControlImpl() {
154 this.newLine = System.getProperty("line.separator");
155 }
156
157 public ControlImpl(String name, String value) {
158 this();
159 this.setName(name);
160 this.setValue(value);
161 }
162
163 public ControlImpl(String name, List values) {
164 this();
165 this.setName(name);
166 this.setValues(values);
167 }
168
169 public ControlImpl(String name, Content websiteNode) {
170 this();
171 this.setName(name);
172 this.setWebsiteNode(websiteNode);
173 }
174
175 public void setPath(String path) {
176 this.path = path;
177 }
178
179 public String getPath() {
180 return this.path;
181 }
182
183 public void setNodeCollectionName(String nodeCollectionName) {
184 this.nodeCollectionName = nodeCollectionName;
185 }
186
187 public String getNodeCollectionName() {
188 return this.nodeCollectionName;
189 }
190
191 public String getNodeCollectionName(String nullOrEmptyValue) {
192 if (StringUtils.isEmpty(this.getNodeCollectionName())) {
193 return nullOrEmptyValue;
194 }
195
196 return this.getNodeCollectionName();
197 }
198
199 public void setNodeName(String nodeName) {
200 this.nodeName = nodeName;
201 }
202
203 public String getNodeName() {
204 return this.nodeName;
205 }
206
207 public String getNodeName(String nullOrEmptyValue) {
208 if (StringUtils.isEmpty(this.getNodeName())) {
209 return nullOrEmptyValue;
210 }
211
212 return this.getNodeName();
213 }
214
215
216
217
218 @Deprecated
219 public void setRequest(HttpServletRequest request) {
220 }
221
222
223
224
225 public HttpServletRequest getRequest() {
226 return ((WebContext)MgnlContext.getInstance()).getRequest();
227 }
228
229 public void setName(String s) {
230 this.name = EscapeUtil.escapeXss(s);
231 }
232
233 public String getName() {
234 return this.name;
235 }
236
237 public void setId(String s) {
238 this.id = s;
239 }
240
241 public String getId() {
242 return this.id;
243 }
244
245 public String getHtmlId() {
246 if (StringUtils.isNotEmpty(this.getId())) {
247 return " id=\"" + this.getId() + "\"";
248 }
249
250 return StringUtils.EMPTY;
251 }
252
253 public void setValue(String value) {
254 this.value = value;
255 }
256
257 public String getValue() {
258 if (this.value != null) {
259 return this.value;
260 }
261
262 try {
263 return this.getWebsiteNode().getNodeData(this.getName()).getString();
264 }
265 catch (Exception e) {
266 return StringUtils.EMPTY;
267 }
268
269 }
270
271 public void setValues(List values) {
272 this.values = values;
273 }
274
275 public List getValues() {
276 if (this.values.size() != 0) {
277 return this.values;
278 }
279 try {
280 NodeData node = this.getWebsiteNode().getNodeData(this.getName());
281 if(node.isMultiValue() != NodeData.MULTIVALUE_FALSE) {
282 return NodeDataUtil.getValuesStringList(node.getValues());
283 } else {
284 Iterator it = this.getWebsiteNode().getContent(this.getName()).getNodeDataCollection().iterator();
285 List l = new ArrayList();
286 while (it.hasNext()) {
287 NodeData data = (NodeData) it.next();
288 l.add(data.getString());
289 }
290 return l;
291 }
292 }
293 catch (Exception re) {
294 return this.values;
295 }
296 }
297
298 public void setWebsiteNode(Content c) {
299 this.websiteNode = c;
300 }
301
302 public Content getWebsiteNode() {
303 return this.websiteNode;
304 }
305
306 public void setLabel(String label) {
307 this.label = label;
308 }
309
310 public String getLabel() {
311 return this.label;
312 }
313
314 public void setEvent(String event, String action) {
315 setEvent(event, action, false);
316 }
317
318 public void setEvent(String event, String action, boolean removeExisting) {
319 String eventLower = event.toLowerCase();
320 String existing = null;
321 if (!removeExisting) {
322 existing = (String) this.getEvents().get(eventLower);
323 }
324 if (existing == null) {
325 existing = StringUtils.EMPTY;
326 }
327
328 this.getEvents().put(eventLower, existing + action);
329 }
330
331 public void setEvents(Map h) {
332 this.events = h;
333 }
334
335 public Map getEvents() {
336 return this.events;
337 }
338
339 public String getHtmlEvents() {
340 StringBuffer html = new StringBuffer();
341 Iterator en = this.getEvents().keySet().iterator();
342 while (en.hasNext()) {
343 String key = (String) en.next();
344 html.append(" " + key + "=\"" + this.getEvents().get(key) + "\"");
345 }
346 return html.toString();
347 }
348
349
350
351
352
353 @Override
354 public String getHtml() {
355 return StringUtils.EMPTY;
356 }
357
358 public void setHtmlPre(String s) {
359 this.htmlPre = s;
360 }
361
362 public String getHtmlPre() {
363 return this.getHtmlPre(StringUtils.EMPTY);
364 }
365
366 public String getHtmlPre(String nullValue) {
367 if (this.htmlPre != null) {
368 return this.htmlPre;
369 }
370
371 return nullValue;
372 }
373
374 public void setHtmlInter(String s) {
375 this.htmlInter = s;
376 }
377
378 public String getHtmlInter() {
379 return this.getHtmlInter(StringUtils.EMPTY);
380 }
381
382 public String getHtmlInter(String nullValue) {
383 if (this.htmlInter != null) {
384 return this.htmlInter;
385 }
386
387 return nullValue;
388 }
389
390 public void setHtmlPost(String s) {
391 this.htmlPost = s;
392 }
393
394 public String getHtmlPost() {
395 return this.getHtmlPost(StringUtils.EMPTY);
396 }
397
398 public String getHtmlPost(String nullValue) {
399 if (this.htmlPost != null) {
400 return this.htmlPost;
401 }
402
403 return nullValue;
404 }
405
406 public void setType(int i) {
407 this.type = i;
408 }
409
410 public void setType(String s) {
411 this.type = PropertyType.valueFromName(s);
412 }
413
414 public int getType() {
415 return this.type;
416 }
417
418 public void setSaveInfo(boolean b) {
419 this.saveInfo = b;
420 }
421
422 public boolean getSaveInfo() {
423 return this.saveInfo;
424 }
425
426 public void setCssClass(String s) {
427 this.cssClass = s;
428 }
429
430 public String getCssClass() {
431 return this.cssClass;
432 }
433
434 public String getHtmlCssClass() {
435 if (StringUtils.isNotEmpty(this.getCssClass())) {
436 return " class=\"" + this.getCssClass() + "\"";
437 }
438
439 return StringUtils.EMPTY;
440 }
441
442 public String getHtmlSaveInfo() {
443 StringBuffer html = new StringBuffer();
444 if (this.getSaveInfo()) {
445 html.append("<input type=\"hidden\"");
446 html.append(" name=\"mgnlSaveInfo\"");
447 html.append(" value=\""
448 + this.getName()
449 + ","
450 + PropertyType.nameFromValue(this.getType())
451 + ","
452 + this.getValueType()
453 + ","
454 + this.getIsRichEditValue()
455 + ","
456 + this.getEncoding()
457 + "\"");
458 html.append(" />");
459 }
460 return html.toString();
461 }
462
463 public void setCssStyles(Map h) {
464 this.cssStyles = h;
465 }
466
467 public void setCssStyles(String key, String value) {
468 this.getCssStyles().put(key, value);
469 }
470
471 public Map getCssStyles() {
472 return this.cssStyles;
473 }
474
475 public String getCssStyles(String key, String nullValue) {
476 if (this.getCssStyles().containsKey(key)) {
477 return (String) this.getCssStyles().get(key);
478 }
479 return nullValue;
480 }
481
482 public String getCssStyles(String key) {
483 return this.getCssStyles(key, StringUtils.EMPTY);
484 }
485
486 public String getHtmlCssStyles() {
487 StringBuffer html = new StringBuffer();
488 Iterator en = this.getCssStyles().keySet().iterator();
489 while (en.hasNext()) {
490 String key = (String) en.next();
491 html.append(key + ":" + this.getCssStyles().get(key) + ";");
492 }
493 if (html.length() > 0) {
494 return " style=\"" + html + "\"";
495 }
496 return StringUtils.EMPTY;
497 }
498
499 public void setValueType(int i) {
500 this.valueType = i;
501 }
502
503 public int getValueType() {
504 return this.valueType;
505 }
506
507 public void setEncoding(int i) {
508 this.encoding = i;
509 }
510
511 public int getEncoding() {
512 return this.encoding;
513 }
514
515 public void setIsRichEditValue(int i) {
516 this.isRichEditValue = i;
517 }
518
519 public int getIsRichEditValue() {
520 return this.isRichEditValue;
521 }
522
523
524
525
526
527
528 public static String escapeHTML(String str) {
529 return str.replace("&", "&").replace("\"", """).replace("<", "<").replace(">", ">");
530 }
531
532 protected void println(Writer out, String s) throws IOException {
533 out.write(s);
534 out.write(newLine);
535 }
536
537 }