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.vaadin.dialog;
35
36 import com.vaadin.ui.AbstractComponent;
37 import com.vaadin.ui.AbstractSingleComponentContainer;
38 import com.vaadin.ui.Component;
39 import com.vaadin.ui.HasComponents;
40 import com.vaadin.ui.HorizontalLayout;
41 import com.vaadin.ui.VerticalLayout;
42 import info.magnolia.ui.vaadin.gwt.client.dialog.connector.BaseDialogState;
43 import info.magnolia.ui.vaadin.gwt.client.dialog.rpc.DialogServerRpc;
44
45 import java.util.ArrayList;
46 import java.util.Collections;
47 import java.util.Iterator;
48 import java.util.List;
49
50
51
52
53
54
55 public class BaseDialog extends AbstractComponent implements HasComponents {
56
57 public static final String CANCEL_ACTION_NAME = "cancel";
58
59 public static final String COMMIT_ACTION_NAME = "commit";
60
61 public BaseDialog() {
62 super();
63 setImmediate(true);
64 setContent(createDefaultContent());
65 registerRpc(new DialogServerRpc() {
66
67 @Override
68 public void closeSelf() {
69 BaseDialog.this.closeSelf();
70 }
71
72 @Override
73 public void setDescriptionVisibility(boolean isVisible) {
74 BaseDialog.this.setDescriptionVisibility(isVisible);
75 }
76 });
77 }
78
79 @Override
80 protected BaseDialogState getState() {
81 return (BaseDialogState) super.getState();
82 }
83
84 public void closeSelf() {
85 fireEvent(new DialogCloseEvent(this, this));
86 }
87
88 public void setDescriptionVisibility(boolean isVisible) {
89 fireEvent(new DescriptionVisibilityEvent(this, isVisible));
90 }
91
92 public void setDialogDescription(String description) {
93 getState().componentDescription = description;
94 }
95
96
97
98 @Override
99 public Iterator<Component> iterator() {
100 List<Component> components = new ArrayList<Component>() {
101 @Override
102 public boolean add(Component c) {
103 if (c != null) {
104 return super.add(c);
105 }
106 return false;
107 };
108 };
109
110 Collections.addAll(components, (Component) getState().content, (Component) getState().headerToolbar, (Component) getState().footerToolbar);
111 return components.iterator();
112 }
113
114 public void setContent(Component newContent) {
115 final Component actualContent = newContent == null ? createDefaultContent() : newContent;
116 if (getState().content != null) {
117 ((Component)getState().content).setParent(null);
118 }
119 getState().content = actualContent;
120 adoptComponent((Component) getState().content);
121 }
122
123 public void setHeaderToolbar(Component newHeader) {
124 final Component actualHeader = newHeader == null ? createDefaultHeader() : newHeader;
125 if (getState().headerToolbar != null) {
126 ((Component)getState().headerToolbar).setParent(null);
127 }
128 getState().headerToolbar = actualHeader;
129 adoptComponent((Component) getState().headerToolbar);
130 }
131
132 public void setFooterToolbar(Component newFooter) {
133 final Component actualFooter = newFooter == null ? createDefaultFooter() : newFooter;
134 if (getState().footerToolbar != null) {
135 ((Component)getState().footerToolbar).setParent(null);
136 }
137 getState().footerToolbar = actualFooter;
138 adoptComponent((Component) getState().footerToolbar);
139 }
140
141
142
143
144
145
146
147
148
149
150 protected void adoptComponent(Component newContent) {
151 if (newContent != null) {
152
153 if (newContent.getParent() != null) {
154 if (newContent.getParent() == this) {
155 newContent.setParent(null);
156 } else {
157
158 AbstractSingleComponentContainer
159 .removeFromParent(newContent);
160 }
161 }
162 newContent.setParent(this);
163 }
164 markAsDirty();
165
166 }
167
168 public Component getContent() {
169 return (Component) getState().content;
170 }
171
172 @Override
173 public void setCaption(String caption) {
174 super.setCaption(caption);
175 getContent().setCaption(caption);
176 }
177
178 protected Component createDefaultContent() {
179 return new VerticalLayout();
180 }
181
182 protected Component createDefaultHeader() {
183 return new HorizontalLayout();
184 }
185
186 protected Component createDefaultFooter() {
187 return new HorizontalLayout();
188 }
189
190 public void showCloseButton() {
191 getState().hasCloseButton = true;
192 }
193
194 public void addDescriptionVisibilityHandler(DescriptionVisibilityEvent.Handler handler) {
195 addListener("descriptionVisibilityEvent", DescriptionVisibilityEvent.class, handler, DescriptionVisibilityEvent.ON_DESCRIPTION_VISIBILITY_CHANGED);
196 }
197
198 public void removeDescriptionVisibilityHandler(DescriptionVisibilityEvent.Handler handler) {
199 removeListener("descriptionVisibilityEvent", DescriptionVisibilityEvent.class, handler);
200 }
201
202
203 public void addDialogCloseHandler(DialogCloseEvent.Handler handler) {
204 addListener("dialogCloseEvent", DialogCloseEvent.class, handler, DialogCloseEvent.ON_DIALOG_CLOSE);
205 }
206
207 public void removeDialogCloseHandler(DialogCloseEvent.Handler handler) {
208 removeListener("dialogCloseEvent", DialogCloseEvent.class, handler);
209 }
210
211
212
213
214
215 public static class DialogCloseEvent extends com.vaadin.ui.Component.Event {
216
217
218
219
220 public interface Handler {
221 void onClose(DialogCloseEvent event);
222 }
223
224 public static final java.lang.reflect.Method ON_DIALOG_CLOSE;
225
226 public BaseDialog dialog;
227
228 static {
229 try {
230 ON_DIALOG_CLOSE = DialogCloseEvent.Handler.class.getDeclaredMethod("onClose", new Class[] { DialogCloseEvent.class });
231 } catch (final java.lang.NoSuchMethodException e) {
232 throw new java.lang.RuntimeException(e);
233 }
234 }
235
236 public DialogCloseEvent(Component source, BaseDialog dialog) {
237 super(source);
238 this.dialog = dialog;
239 }
240
241 public BaseDialog getDialog() {
242 return dialog;
243 }
244 }
245
246
247
248
249 public static class DescriptionVisibilityEvent extends com.vaadin.ui.Component.Event {
250
251
252
253 public interface Handler {
254 void onDescriptionVisibilityChanged(DescriptionVisibilityEvent event);
255 }
256
257 public static final java.lang.reflect.Method ON_DESCRIPTION_VISIBILITY_CHANGED;
258
259 private boolean isVisible;
260
261 static {
262 try {
263 ON_DESCRIPTION_VISIBILITY_CHANGED = DescriptionVisibilityEvent.Handler.class.getDeclaredMethod("onDescriptionVisibilityChanged", new Class[] { DescriptionVisibilityEvent.class });
264 } catch (final java.lang.NoSuchMethodException e) {
265 throw new java.lang.RuntimeException(e);
266 }
267 }
268
269 public DescriptionVisibilityEvent(Component source, boolean isVisible) {
270 super(source);
271 this.isVisible = isVisible;
272 }
273
274 public boolean isVisible() {
275 return isVisible;
276 }
277 }
278
279 }