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.poc.extensions.client;
35
36 import info.magnolia.poc.extensions.StringFieldValidationExtension;
37
38 import com.google.gwt.dom.client.Element;
39 import com.google.gwt.dom.client.Style;
40 import com.google.gwt.user.client.DOM;
41 import com.google.gwt.user.client.Event;
42 import com.google.gwt.user.client.ui.Widget;
43 import com.vaadin.client.ComponentConnector;
44 import com.vaadin.client.ServerConnector;
45 import com.vaadin.client.communication.StateChangeEvent;
46 import com.vaadin.client.extensions.AbstractExtensionConnector;
47 import com.vaadin.shared.AbstractComponentState;
48 import com.vaadin.shared.ui.Connect;
49
50 @Connect(StringFieldValidationExtension.class)
51 public class StringFieldValidationExtensionConnector extends AbstractExtensionConnector {
52
53 @Override
54 protected void extend(ServerConnector target) {
55 final ComponentConnector componentConnector = ((ComponentConnector) target);
56 Element div = DOM.createDiv();
57 DOM.sinkEvents(div, Event.ONCLICK | Event.ONFOCUS);
58 DOM.setEventListener(div, event -> {
59 div.getStyle().setDisplay(Style.Display.NONE);
60 });
61 StateChangeEvent.StateChangeHandler handler = (StateChangeEvent.StateChangeHandler) stateChangeEvent -> {
62 AbstractComponentState state = (AbstractComponentState) target.getState();
63 final Widget widget = componentConnector.getWidget();
64 final Element containerElement = DOM.getParent(widget.getElement()).getParentElement();
65 final Element labelDiv = containerElement.getFirstChildElement();
66 if (state.errorMessage == null || state.errorMessage.isEmpty()) {
67 DOM.getParent(widget.getElement()).removeChild(div);
68 labelDiv.getFirstChildElement().removeClassName("v-caption-error");
69 } else {
70 div.getStyle().setDisplay(Style.Display.BLOCK);
71 div.setInnerHTML(getValidationHtml(componentConnector.getState().errorMessage));
72 DOM.getParent(widget.getElement()).appendChild(div);
73 labelDiv.getFirstChildElement().addClassName("v-caption-error");
74 }
75 };
76 componentConnector.addStateChangeHandler("errorMessage", handler);
77
78 }
79
80 private String getValidationHtml(String errorMessages) {
81 return "<div class='validation-display'>" + errorMessages + "</div>";
82 }
83
84
85 }