Updated copyright notice
[pithos] / web_client / src / gr / grnet / pithos / web / client / MessagePanel.java
1 /*\r
2  * Copyright (c) 2011 Greek Research and Technology Network\r
3  */\r
4 package gr.grnet.pithos.web.client;\r
5 \r
6 import gr.grnet.pithos.web.client.animation.FadeIn;\r
7 import gr.grnet.pithos.web.client.animation.FadeOut;\r
8 \r
9 import com.google.gwt.core.client.GWT;\r
10 import com.google.gwt.event.dom.client.ClickEvent;\r
11 import com.google.gwt.event.dom.client.ClickHandler;\r
12 import com.google.gwt.resources.client.ClientBundle;\r
13 import com.google.gwt.resources.client.ImageResource;\r
14 import com.google.gwt.user.client.DOM;\r
15 import com.google.gwt.user.client.ui.AbstractImagePrototype;\r
16 import com.google.gwt.user.client.ui.Composite;\r
17 import com.google.gwt.user.client.ui.HTML;\r
18 import com.google.gwt.user.client.ui.HasHorizontalAlignment;\r
19 import com.google.gwt.user.client.ui.HasVerticalAlignment;\r
20 import com.google.gwt.user.client.ui.HorizontalPanel;\r
21 import com.google.gwt.user.client.ui.SimplePanel;\r
22 \r
23 /**\r
24  * A panel that displays various system messages.\r
25  */\r
26 public class MessagePanel extends Composite {\r
27         /**\r
28          * An image bundle for this widget's images.\r
29          */\r
30         public interface Images extends ClientBundle {\r
31                 @Source("gr/grnet/pithos/resources/messagebox_info.png")\r
32                 ImageResource info();\r
33 \r
34                 @Source("gr/grnet/pithos/resources/messagebox_warning.png")\r
35                 ImageResource warn();\r
36 \r
37                 @Source("gr/grnet/pithos/resources/messagebox_critical.png")\r
38                 ImageResource error();\r
39         }\r
40 \r
41         /**\r
42          * The widget's images.\r
43          */\r
44         public static Images images;\r
45 \r
46         /**\r
47          * The system message to be displayed.\r
48          */\r
49         private HTML message = new HTML(" ");\r
50 \r
51         /**\r
52          * A link to clear the displayed message.\r
53          */\r
54         private HTML clearMessageLink = new HTML("<a class='pithos-clearMessage' href='javascript:;'>Clear</a>");\r
55 \r
56         /**\r
57          * The panel that contains the messages.\r
58          */\r
59         private HorizontalPanel inner = new HorizontalPanel();\r
60 \r
61         /**\r
62          * The panel that enables special effects for this widget.\r
63          */\r
64         private SimplePanel simplePanel = new SimplePanel();\r
65 \r
66         /**\r
67          * The widget's constructor.\r
68          *\r
69          * @param newImages a bundle that provides the images for this widget\r
70          */\r
71         public MessagePanel(final Images newImages) {\r
72                 images = newImages;\r
73                 buildPanel();\r
74                 simplePanel.setStyleName("effectPanel");\r
75                 inner.setStyleName("effectPanel-inner");\r
76                 DOM.setStyleAttribute(simplePanel.getElement(), "zoom", "1");\r
77                 simplePanel.add(inner);\r
78                 initWidget(simplePanel);\r
79         }\r
80 \r
81         /**\r
82          * Build the panel that contains the icon, the message and the 'clear' link.\r
83          */\r
84         private void buildPanel() {\r
85                 inner.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);\r
86                 inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);\r
87                 inner.setSpacing(4);\r
88                 inner.add(message);\r
89                 inner.add(clearMessageLink);\r
90                 inner.setCellVerticalAlignment(message, HasVerticalAlignment.ALIGN_MIDDLE);\r
91                 clearMessageLink.addClickHandler(new ClickHandler() {\r
92 \r
93                         @Override\r
94                         public void onClick(ClickEvent event) {\r
95                                 FadeOut anim = new FadeOut(simplePanel){\r
96                                         @Override\r
97                                         protected void onComplete() {\r
98                                                 super.onComplete();\r
99                                                 hideMessage();\r
100                                         }\r
101                                 };\r
102                                 anim.run(500);\r
103                         }\r
104                 });\r
105         }\r
106 \r
107         /**\r
108          * Display an error message.\r
109          *\r
110          * @param msg the message to display\r
111          */\r
112         public void displayError(final String msg) {\r
113                 GWT.log(msg, null);\r
114                 message = new HTML("<table class='pithos-errorMessage'><tr><td>" + AbstractImagePrototype.create(images.error()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
115                 message.addClickHandler(new ClickHandler() {\r
116 \r
117                         @Override\r
118                         public void onClick(ClickEvent event) {\r
119                                 FadeOut anim = new FadeOut(simplePanel){\r
120 \r
121                                         @Override\r
122                                         protected void onComplete() {\r
123                                                 super.onComplete();\r
124                                                 hideMessage();\r
125                                         }\r
126                                 };\r
127                                 anim.run(500);\r
128                         }\r
129                 });\r
130                 buildPanel();\r
131                 setVisible(true);\r
132                 FadeIn anim = new FadeIn(simplePanel);\r
133                 anim.run(500);\r
134         }\r
135 \r
136         /**\r
137          * Display a warning message.\r
138          *\r
139          * @param msg the message to display\r
140          */\r
141         public void displayWarning(final String msg) {\r
142                 message = new HTML("<table class='pithos-warnMessage'><tr><td>" + AbstractImagePrototype.create(images.warn()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
143                 message.addClickHandler(new ClickHandler() {\r
144 \r
145                         @Override\r
146                         public void onClick(ClickEvent event) {\r
147                                 FadeOut anim = new FadeOut(simplePanel){\r
148 \r
149                                         @Override\r
150                                         protected void onComplete() {\r
151                                                 super.onComplete();\r
152                                                 hideMessage();\r
153                                         }\r
154                                 };\r
155                                 anim.run(500);\r
156                         }\r
157                 });\r
158 \r
159                 buildPanel();\r
160                 setVisible(true);\r
161                 FadeIn anim = new FadeIn(simplePanel);\r
162                 anim.run(500);\r
163         }\r
164 \r
165         /**\r
166          * Display an informational message.\r
167          *\r
168          * @param msg the message to display\r
169          */\r
170         public void displayInformation(final String msg) {\r
171                 message = new HTML("<table class='pithos-infoMessage'><tr><td>" + AbstractImagePrototype.create(images.info()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
172                 message.addClickHandler(new ClickHandler() {\r
173 \r
174                         @Override\r
175                         public void onClick(ClickEvent event) {\r
176                                 FadeOut anim = new FadeOut(simplePanel){\r
177 \r
178                                         @Override\r
179                                         protected void onComplete() {\r
180                                                 super.onComplete();\r
181                                                 hideMessage();\r
182                                         }\r
183                                 };\r
184                                 anim.run(500);\r
185                         }\r
186                 });\r
187 \r
188                 buildPanel();\r
189                 setVisible(true);\r
190                 FadeIn anim = new FadeIn(simplePanel);\r
191                 anim.run(500);\r
192         }\r
193 \r
194         /**\r
195          * Clear the displayed message and hide the panel.\r
196          */\r
197         public void hideMessage() {\r
198                 inner.clear();\r
199                 message = new HTML("&nbsp;");\r
200                 this.setVisible(false);\r
201         }\r
202 \r
203 }\r