0ae053f6e108df31d6f766325192344395bd7d3b
[pithos-web-client] / src / gr / grnet / pithos / web / client / MessagePanel.java
1 /*\r
2  * Copyright 2011 GRNET S.A. All rights reserved.\r
3  *\r
4  * Redistribution and use in source and binary forms, with or\r
5  * without modification, are permitted provided that the following\r
6  * conditions are met:\r
7  *\r
8  *   1. Redistributions of source code must retain the above\r
9  *      copyright notice, this list of conditions and the following\r
10  *      disclaimer.\r
11  *\r
12  *   2. Redistributions in binary form must reproduce the above\r
13  *      copyright notice, this list of conditions and the following\r
14  *      disclaimer in the documentation and/or other materials\r
15  *      provided with the distribution.\r
16  *\r
17  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS\r
18  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR\r
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\r
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\r
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
28  * POSSIBILITY OF SUCH DAMAGE.\r
29  *\r
30  * The views and conclusions contained in the software and\r
31  * documentation are those of the authors and should not be\r
32  * interpreted as representing official policies, either expressed\r
33  * or implied, of GRNET S.A.\r
34  */\r
35 package gr.grnet.pithos.web.client;\r
36 \r
37 import gr.grnet.pithos.web.client.animation.FadeIn;\r
38 import gr.grnet.pithos.web.client.animation.FadeOut;\r
39 \r
40 import com.google.gwt.core.client.GWT;\r
41 import com.google.gwt.event.dom.client.ClickEvent;\r
42 import com.google.gwt.event.dom.client.ClickHandler;\r
43 import com.google.gwt.resources.client.ClientBundle;\r
44 import com.google.gwt.resources.client.ImageResource;\r
45 import com.google.gwt.user.client.ui.AbstractImagePrototype;\r
46 import com.google.gwt.user.client.ui.Composite;\r
47 import com.google.gwt.user.client.ui.HTML;\r
48 import com.google.gwt.user.client.ui.HasHorizontalAlignment;\r
49 import com.google.gwt.user.client.ui.HasVerticalAlignment;\r
50 import com.google.gwt.user.client.ui.HorizontalPanel;\r
51 import com.google.gwt.user.client.ui.SimplePanel;\r
52 import com.google.gwt.user.client.ui.VerticalPanel;\r
53 \r
54 /**\r
55  * A panel that displays various system messages.\r
56  */\r
57 public class MessagePanel extends Composite {\r
58         /**\r
59          * An image bundle for this widget's images.\r
60          */\r
61         public interface Images extends ClientBundle {\r
62                 @Source("gr/grnet/pithos/resources/messagebox_info.png")\r
63                 ImageResource info();\r
64 \r
65                 @Source("gr/grnet/pithos/resources/messagebox_warning.png")\r
66                 ImageResource warn();\r
67 \r
68                 @Source("gr/grnet/pithos/resources/messagebox_critical.png")\r
69                 ImageResource error();\r
70         }\r
71 \r
72         /**\r
73          * The widget's images.\r
74          */\r
75         public static Images images;\r
76 \r
77         /**\r
78          * The system message to be displayed.\r
79          */\r
80         private HTML message;\r
81 \r
82         /**\r
83          * The panel that contains the messages.\r
84          */\r
85         private HorizontalPanel inner;\r
86 \r
87         /**\r
88          * The panel that enables special effects for this widget.\r
89          */\r
90         protected SimplePanel simplePanel;\r
91 \r
92         /**\r
93          * A link to send feedBack about the error.\r
94          */\r
95         private HTML feedbackLink;\r
96         /**\r
97          * The widget's constructor.\r
98          *\r
99          * @param newImages a bundle that provides the images for this widget\r
100          */\r
101         public MessagePanel(final Pithos app, final Images newImages) {\r
102                 images = newImages;\r
103                 simplePanel = new SimplePanel();\r
104                 simplePanel.setStyleName("effectPanel");\r
105                 \r
106                 inner = new HorizontalPanel();\r
107                 inner.setStyleName("effectPanel-inner");\r
108                 inner.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);\r
109                 inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);\r
110                 \r
111                 message = new HTML(" ");\r
112                 message.addClickHandler(new ClickHandler() {\r
113 \r
114                         @Override\r
115                         public void onClick(ClickEvent event) {\r
116                                 FadeOut anim = new FadeOut(simplePanel){\r
117 \r
118                                         @Override\r
119                                         protected void onComplete() {\r
120                                                 super.onComplete();\r
121                                                 hideMessage();\r
122                                         }\r
123                                 };\r
124                                 anim.run(500);\r
125                         }\r
126                 });\r
127                 inner.add(message);\r
128                 inner.setCellVerticalAlignment(message, HasVerticalAlignment.ALIGN_MIDDLE);\r
129 \r
130                 VerticalPanel linkPanel = new VerticalPanel();\r
131                 linkPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);\r
132                 /**\r
133                  * A link to clear the displayed message.\r
134                  */\r
135                 HTML clearMessageLink = new HTML("<a class='pithos-clearMessage' href='javascript:;'>Clear</a>");\r
136                 clearMessageLink.addClickHandler(new ClickHandler() {\r
137 \r
138                         @Override\r
139                         public void onClick(ClickEvent event) {\r
140                                 FadeOut anim = new FadeOut(simplePanel){\r
141                                         @Override\r
142                                         protected void onComplete() {\r
143                                                 super.onComplete();\r
144                                                 hideMessage();\r
145                                         }\r
146                                 };\r
147                                 anim.run(500);\r
148                         }\r
149                 });\r
150                 linkPanel.add(clearMessageLink);\r
151 \r
152                 feedbackLink = new HTML("<a class='pithos-clearMessage' href='javascript:;'>Send feedback</a>");\r
153                 feedbackLink.addClickHandler(new ClickHandler() {\r
154                         \r
155                         @Override\r
156                         public void onClick(ClickEvent event) {\r
157                                 new FeedbackDialog(app, app.getErrorData()).center();\r
158                         }\r
159                 });\r
160                 feedbackLink.setVisible(false);\r
161                 linkPanel.add(feedbackLink);\r
162 \r
163                 inner.add(linkPanel);\r
164                 simplePanel.add(inner);\r
165                 \r
166                 initWidget(simplePanel);\r
167         }\r
168 \r
169         /**\r
170          * Display an error message.\r
171          *\r
172          * @param msg the message to display\r
173          */\r
174         public void displayError(final String msg) {\r
175                 GWT.log(msg, null);\r
176                 message.setHTML("<table class='pithos-errorMessage'><tr><td>" + AbstractImagePrototype.create(images.error()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
177                 feedbackLink.setVisible(true);\r
178                 setVisible(true);\r
179                 FadeIn anim = new FadeIn(simplePanel);\r
180                 anim.run(500);\r
181         }\r
182 \r
183         /**\r
184          * Display a warning message.\r
185          *\r
186          * @param msg the message to display\r
187          */\r
188         public void displayWarning(final String msg) {\r
189                 message.setHTML("<table class='pithos-warnMessage'><tr><td>" + AbstractImagePrototype.create(images.warn()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
190                 feedbackLink.setVisible(false);\r
191                 setVisible(true);\r
192                 FadeIn anim = new FadeIn(simplePanel);\r
193                 anim.run(500);\r
194         }\r
195 \r
196         /**\r
197          * Display an informational message.\r
198          *\r
199          * @param msg the message to display\r
200          */\r
201         public void displayInformation(final String msg) {\r
202                 message.setHTML("<table class='pithos-infoMessage'><tr><td>" + AbstractImagePrototype.create(images.info()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
203                 feedbackLink.setVisible(false);\r
204                 setVisible(true);\r
205                 FadeIn anim = new FadeIn(simplePanel);\r
206                 anim.run(500);\r
207         }\r
208 \r
209         /**\r
210          * Clear the displayed message and hide the panel.\r
211          */\r
212         public void hideMessage() {\r
213                 message = new HTML("&nbsp;");\r
214                 this.setVisible(false);\r
215         }\r
216 \r
217 }\r