Implemented ability to send error data along with user feedback in case of error
[pithos-web-client] / src / gr / grnet / pithos / web / client / MessagePanel.java
index 8ed1c9a..81aa361 100644 (file)
@@ -42,7 +42,6 @@ import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;\r
 import com.google.gwt.resources.client.ClientBundle;\r
 import com.google.gwt.resources.client.ImageResource;\r
-import com.google.gwt.user.client.DOM;\r
 import com.google.gwt.user.client.ui.AbstractImagePrototype;\r
 import com.google.gwt.user.client.ui.Composite;\r
 import com.google.gwt.user.client.ui.HTML;\r
@@ -50,6 +49,7 @@ import com.google.gwt.user.client.ui.HasHorizontalAlignment;
 import com.google.gwt.user.client.ui.HasVerticalAlignment;\r
 import com.google.gwt.user.client.ui.HorizontalPanel;\r
 import com.google.gwt.user.client.ui.SimplePanel;\r
+import com.google.gwt.user.client.ui.VerticalPanel;\r
 \r
 /**\r
  * A panel that displays various system messages.\r
@@ -77,54 +77,44 @@ public class MessagePanel extends Composite {
        /**\r
         * The system message to be displayed.\r
         */\r
-       private HTML message = new HTML(" ");\r
-\r
-       /**\r
-        * A link to clear the displayed message.\r
-        */\r
-       private HTML clearMessageLink = new HTML("<a class='pithos-clearMessage' href='javascript:;'>Clear</a>");\r
+       private HTML message;\r
 \r
        /**\r
         * The panel that contains the messages.\r
         */\r
-       private HorizontalPanel inner = new HorizontalPanel();\r
+       private HorizontalPanel inner;\r
 \r
        /**\r
         * The panel that enables special effects for this widget.\r
         */\r
-       protected SimplePanel simplePanel = new SimplePanel();\r
+       protected SimplePanel simplePanel;\r
 \r
        /**\r
+        * A link to send feedBack about the error.\r
+        */\r
+       private HTML feedbackLink;\r
+       /**\r
         * The widget's constructor.\r
         *\r
         * @param newImages a bundle that provides the images for this widget\r
         */\r
-       public MessagePanel(final Images newImages) {\r
+       public MessagePanel(final Pithos app, final Images newImages) {\r
                images = newImages;\r
-               buildPanel();\r
+               simplePanel = new SimplePanel();\r
                simplePanel.setStyleName("effectPanel");\r
+               \r
+               inner = new HorizontalPanel();\r
                inner.setStyleName("effectPanel-inner");\r
-               DOM.setStyleAttribute(simplePanel.getElement(), "zoom", "1");\r
-               simplePanel.add(inner);\r
-               initWidget(simplePanel);\r
-       }\r
-\r
-       /**\r
-        * Build the panel that contains the icon, the message and the 'clear' link.\r
-        */\r
-       private void buildPanel() {\r
-               inner.clear();\r
                inner.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);\r
                inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);\r
-//             inner.setSpacing(4);\r
-               inner.add(message);\r
-               inner.add(clearMessageLink);\r
-               inner.setCellVerticalAlignment(message, HasVerticalAlignment.ALIGN_MIDDLE);\r
-               clearMessageLink.addClickHandler(new ClickHandler() {\r
+               \r
+               message = new HTML("&nbsp;");\r
+               message.addClickHandler(new ClickHandler() {\r
 \r
                        @Override\r
                        public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
                                FadeOut anim = new FadeOut(simplePanel){\r
+\r
                                        @Override\r
                                        protected void onComplete() {\r
                                                super.onComplete();\r
@@ -134,22 +124,20 @@ public class MessagePanel extends Composite {
                                anim.run(500);\r
                        }\r
                });\r
-       }\r
+               inner.add(message);\r
+               inner.setCellVerticalAlignment(message, HasVerticalAlignment.ALIGN_MIDDLE);\r
 \r
-       /**\r
-        * Display an error message.\r
-        *\r
-        * @param msg the message to display\r
-        */\r
-       public void displayError(final String msg) {\r
-               GWT.log(msg, null);\r
-               message = new HTML("<table class='pithos-errorMessage'><tr><td>" + AbstractImagePrototype.create(images.error()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
-               message.addClickHandler(new ClickHandler() {\r
+               VerticalPanel linkPanel = new VerticalPanel();\r
+               linkPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);\r
+               /**\r
+                * A link to clear the displayed message.\r
+                */\r
+               HTML clearMessageLink = new HTML("<a class='pithos-clearMessage' href='javascript:;'>Clear</a>");\r
+               clearMessageLink.addClickHandler(new ClickHandler() {\r
 \r
                        @Override\r
                        public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
                                FadeOut anim = new FadeOut(simplePanel){\r
-\r
                                        @Override\r
                                        protected void onComplete() {\r
                                                super.onComplete();\r
@@ -159,7 +147,34 @@ public class MessagePanel extends Composite {
                                anim.run(500);\r
                        }\r
                });\r
-               buildPanel();\r
+               linkPanel.add(clearMessageLink);\r
+\r
+               feedbackLink = new HTML("<a class='pithos-clearMessage' href='javascript:;'>Send feedback</a>");\r
+               feedbackLink.addClickHandler(new ClickHandler() {\r
+                       \r
+                       @Override\r
+                       public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
+                               new FeedbackDialog(app, app.getErrorData()).center();\r
+                       }\r
+               });\r
+               feedbackLink.setVisible(false);\r
+               linkPanel.add(feedbackLink);\r
+\r
+               inner.add(linkPanel);\r
+               simplePanel.add(inner);\r
+               \r
+               initWidget(simplePanel);\r
+       }\r
+\r
+       /**\r
+        * Display an error message.\r
+        *\r
+        * @param msg the message to display\r
+        */\r
+       public void displayError(final String msg) {\r
+               GWT.log(msg, null);\r
+               message.setHTML("<table class='pithos-errorMessage'><tr><td>" + AbstractImagePrototype.create(images.error()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
+               feedbackLink.setVisible(true);\r
                setVisible(true);\r
                FadeIn anim = new FadeIn(simplePanel);\r
                anim.run(500);\r
@@ -171,24 +186,8 @@ public class MessagePanel extends Composite {
         * @param msg the message to display\r
         */\r
        public void displayWarning(final String msg) {\r
-               message = new HTML("<table class='pithos-warnMessage'><tr><td>" + AbstractImagePrototype.create(images.warn()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
-               message.addClickHandler(new ClickHandler() {\r
-\r
-                       @Override\r
-                       public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
-                               FadeOut anim = new FadeOut(simplePanel){\r
-\r
-                                       @Override\r
-                                       protected void onComplete() {\r
-                                               super.onComplete();\r
-                                               hideMessage();\r
-                                       }\r
-                               };\r
-                               anim.run(500);\r
-                       }\r
-               });\r
-\r
-               buildPanel();\r
+               message.setHTML("<table class='pithos-warnMessage'><tr><td>" + AbstractImagePrototype.create(images.warn()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
+               feedbackLink.setVisible(false);\r
                setVisible(true);\r
                FadeIn anim = new FadeIn(simplePanel);\r
                anim.run(500);\r
@@ -200,24 +199,8 @@ public class MessagePanel extends Composite {
         * @param msg the message to display\r
         */\r
        public void displayInformation(final String msg) {\r
-               message = new HTML("<table class='pithos-infoMessage'><tr><td>" + AbstractImagePrototype.create(images.info()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
-               message.addClickHandler(new ClickHandler() {\r
-\r
-                       @Override\r
-                       public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
-                               FadeOut anim = new FadeOut(simplePanel){\r
-\r
-                                       @Override\r
-                                       protected void onComplete() {\r
-                                               super.onComplete();\r
-                                               hideMessage();\r
-                                       }\r
-                               };\r
-                               anim.run(500);\r
-                       }\r
-               });\r
-\r
-               buildPanel();\r
+               message.setHTML("<table class='pithos-infoMessage'><tr><td>" + AbstractImagePrototype.create(images.info()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
+               feedbackLink.setVisible(false);\r
                setVisible(true);\r
                FadeIn anim = new FadeIn(simplePanel);\r
                anim.run(500);\r
@@ -227,7 +210,6 @@ public class MessagePanel extends Composite {
         * Clear the displayed message and hide the panel.\r
         */\r
        public void hideMessage() {\r
-               inner.clear();\r
                message = new HTML("&nbsp;");\r
                this.setVisible(false);\r
        }\r