1 package org.appfuse.webapp.services.impl;
2
3 import org.apache.tapestry5.Field;
4 import org.apache.tapestry5.MarkupWriter;
5 import org.apache.tapestry5.ValidationDecorator;
6 import org.apache.tapestry5.ValidationTracker;
7 import org.apache.tapestry5.dom.Element;
8 import org.apache.tapestry5.services.Environment;
9
10
11
12
13
14
15
16
17 public class BootstrapValidationDecorator implements ValidationDecorator {
18
19 private final Environment environment;
20 private final MarkupWriter markupWriter;
21
22 public BootstrapValidationDecorator(Environment environment, MarkupWriter markupWriter) {
23 this.environment = environment;
24 this.markupWriter = markupWriter;
25 }
26
27 public void insideField(Field field) {
28
29 }
30
31 public void beforeLabel(Field field) {
32
33 }
34
35 public void insideLabel(Field field, Element labelElement) {
36 if (inError(field)) {
37 Element parent = labelElement.getContainer();
38 parent.addClassName("error");
39 labelElement.addClassName("error");
40 }
41
42 if (field.isRequired()) {
43 labelElement.raw("<span class=\"required\"> *</span>");
44 }
45
46 }
47
48 public void afterLabel(Field field) {
49
50 }
51
52 public void beforeField(Field field) {
53
54 }
55
56 public void afterField(Field field) {
57 if (inError(field)) {
58 markupWriter.element("span",
59 "id", field.getClientId(),
60 "class", "help-inline");
61
62 String error = getError(field);
63 if (error == null) {
64 error = "";
65 }
66 markupWriter.writeRaw(error);
67 markupWriter.end();
68 }
69 }
70
71 private boolean inError(Field field) {
72 ValidationTracker tracker = environment.peekRequired(ValidationTracker.class);
73 return tracker.inError(field);
74 }
75
76 private String getError(Field field) {
77 ValidationTracker tracker = environment.peekRequired(ValidationTracker.class);
78 return tracker.getError(field);
79 }
80
81
82 }