Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / FeedbackDialog.java @ fa68c84d

History | View | Annotate | Download (5.8 kB)

1 29c80d38 Christos Stathis
/*
2 cae2a8db Christos Stathis
 * Copyright 2011-2012 GRNET S.A. All rights reserved.
3 29c80d38 Christos Stathis
 *
4 29c80d38 Christos Stathis
 * Redistribution and use in source and binary forms, with or
5 29c80d38 Christos Stathis
 * without modification, are permitted provided that the following
6 29c80d38 Christos Stathis
 * conditions are met:
7 29c80d38 Christos Stathis
 *
8 29c80d38 Christos Stathis
 *   1. Redistributions of source code must retain the above
9 29c80d38 Christos Stathis
 *      copyright notice, this list of conditions and the following
10 29c80d38 Christos Stathis
 *      disclaimer.
11 29c80d38 Christos Stathis
 *
12 29c80d38 Christos Stathis
 *   2. Redistributions in binary form must reproduce the above
13 29c80d38 Christos Stathis
 *      copyright notice, this list of conditions and the following
14 29c80d38 Christos Stathis
 *      disclaimer in the documentation and/or other materials
15 29c80d38 Christos Stathis
 *      provided with the distribution.
16 29c80d38 Christos Stathis
 *
17 29c80d38 Christos Stathis
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 29c80d38 Christos Stathis
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 29c80d38 Christos Stathis
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 29c80d38 Christos Stathis
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 29c80d38 Christos Stathis
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 29c80d38 Christos Stathis
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 29c80d38 Christos Stathis
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 29c80d38 Christos Stathis
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 29c80d38 Christos Stathis
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 29c80d38 Christos Stathis
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 29c80d38 Christos Stathis
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 29c80d38 Christos Stathis
 * POSSIBILITY OF SUCH DAMAGE.
29 29c80d38 Christos Stathis
 *
30 29c80d38 Christos Stathis
 * The views and conclusions contained in the software and
31 29c80d38 Christos Stathis
 * documentation are those of the authors and should not be
32 29c80d38 Christos Stathis
 * interpreted as representing official policies, either expressed
33 29c80d38 Christos Stathis
 * or implied, of GRNET S.A.
34 29c80d38 Christos Stathis
 */
35 29c80d38 Christos Stathis
package gr.grnet.pithos.web.client;
36 29c80d38 Christos Stathis
37 b432ea43 Christos Stathis
import com.google.gwt.core.client.Scheduler;
38 29c80d38 Christos Stathis
import com.google.gwt.dom.client.NativeEvent;
39 29c80d38 Christos Stathis
import com.google.gwt.event.dom.client.ClickEvent;
40 29c80d38 Christos Stathis
import com.google.gwt.event.dom.client.ClickHandler;
41 29c80d38 Christos Stathis
import com.google.gwt.event.dom.client.KeyCodes;
42 b432ea43 Christos Stathis
import com.google.gwt.http.client.Response;
43 a0a08c19 Christos Stathis
import com.google.gwt.i18n.client.Dictionary;
44 29c80d38 Christos Stathis
import com.google.gwt.user.client.Event.NativePreviewEvent;
45 0634d911 Christos KK Loverdos
import com.google.gwt.user.client.ui.*;
46 0634d911 Christos KK Loverdos
import gr.grnet.pithos.web.client.rest.PostRequest;
47 29c80d38 Christos Stathis
48 29c80d38 Christos Stathis
49 29c80d38 Christos Stathis
/**
50 29c80d38 Christos Stathis
 * A dialog box that displays info about invitations
51 29c80d38 Christos Stathis
 */
52 29c80d38 Christos Stathis
public class FeedbackDialog extends DialogBox {
53 29c80d38 Christos Stathis
54 0634d911 Christos KK Loverdos
    Dictionary otherProperties = Dictionary.getDictionary("otherProperties");
55 0634d911 Christos KK Loverdos
56 0634d911 Christos KK Loverdos
    Pithos app;
57 0634d911 Christos KK Loverdos
58 0634d911 Christos KK Loverdos
    String appData;
59 0634d911 Christos KK Loverdos
60 0634d911 Christos KK Loverdos
    TextArea msg;
61 0634d911 Christos KK Loverdos
62 0634d911 Christos KK Loverdos
    /**
63 0634d911 Christos KK Loverdos
     * The widget constructor.
64 0634d911 Christos KK Loverdos
     */
65 0634d911 Christos KK Loverdos
    public FeedbackDialog(final Pithos _app, final String _appData) {
66 0634d911 Christos KK Loverdos
        app = _app;
67 0634d911 Christos KK Loverdos
        appData = _appData;
68 0634d911 Christos KK Loverdos
69 0634d911 Christos KK Loverdos
        // Set the dialog's caption.
70 0634d911 Christos KK Loverdos
        Anchor close = new Anchor("close");
71 0634d911 Christos KK Loverdos
        close.addStyleName("close");
72 0634d911 Christos KK Loverdos
        close.addClickHandler(new ClickHandler() {
73 0634d911 Christos KK Loverdos
74 0634d911 Christos KK Loverdos
            @Override
75 0634d911 Christos KK Loverdos
            public void onClick(ClickEvent event) {
76 0634d911 Christos KK Loverdos
                hide();
77 0634d911 Christos KK Loverdos
            }
78 0634d911 Christos KK Loverdos
        });
79 0634d911 Christos KK Loverdos
        setText("Send feedback");
80 0634d911 Christos KK Loverdos
        setGlassEnabled(true);
81 0634d911 Christos KK Loverdos
82 0634d911 Christos KK Loverdos
        setStyleName("pithos-DialogBox");
83 0634d911 Christos KK Loverdos
84 0634d911 Christos KK Loverdos
        VerticalPanel outer = new VerticalPanel();
85 0634d911 Christos KK Loverdos
        outer.add(close);
86 0634d911 Christos KK Loverdos
87 0634d911 Christos KK Loverdos
        VerticalPanel inner = new VerticalPanel();
88 0634d911 Christos KK Loverdos
        inner.addStyleName("inner");
89 0634d911 Christos KK Loverdos
        // Create the text and set a style name so we can style it with CSS.
90 0634d911 Christos KK Loverdos
        HTML text = new HTML("Pithos+ is currently in alpha test and we would appreciate any<br>" + "kind of feedback. We welcome any suggestions, questions and<br>" + " bug reports you may have.");
91 0634d911 Christos KK Loverdos
        text.setStyleName("pithos-credentialsText");
92 0634d911 Christos KK Loverdos
        inner.add(text);
93 0634d911 Christos KK Loverdos
        FlexTable table = new FlexTable();
94 0634d911 Christos KK Loverdos
        table.setText(0, 0, "Please describe your problem here, provide as many details as possible");
95 0634d911 Christos KK Loverdos
        msg = new TextArea();
96 0634d911 Christos KK Loverdos
        msg.setWidth("100%");
97 0634d911 Christos KK Loverdos
        msg.setHeight("100px");
98 0634d911 Christos KK Loverdos
        table.setWidget(1, 0, msg);
99 0634d911 Christos KK Loverdos
100 0634d911 Christos KK Loverdos
        table.getFlexCellFormatter().setStyleName(0, 0, "props-labels");
101 0634d911 Christos KK Loverdos
        table.getFlexCellFormatter().setStyleName(0, 1, "props-values");
102 0634d911 Christos KK Loverdos
        inner.add(table);
103 0634d911 Christos KK Loverdos
104 0634d911 Christos KK Loverdos
        // Create the 'OK' button, along with a listener that hides the dialog
105 0634d911 Christos KK Loverdos
        // when the button is clicked.
106 0634d911 Christos KK Loverdos
        Button confirm = new Button("Submit feedback", new ClickHandler() {
107 0634d911 Christos KK Loverdos
            @Override
108 0634d911 Christos KK Loverdos
            public void onClick(ClickEvent event) {
109 0634d911 Christos KK Loverdos
                sendFeedback();
110 0634d911 Christos KK Loverdos
                hide();
111 0634d911 Christos KK Loverdos
            }
112 0634d911 Christos KK Loverdos
        });
113 0634d911 Christos KK Loverdos
        confirm.addStyleName("button");
114 0634d911 Christos KK Loverdos
        inner.add(confirm);
115 0634d911 Christos KK Loverdos
        outer.add(inner);
116 0634d911 Christos KK Loverdos
        outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
117 0634d911 Christos KK Loverdos
        setWidget(outer);
118 0634d911 Christos KK Loverdos
    }
119 0634d911 Christos KK Loverdos
120 0634d911 Christos KK Loverdos
    @Override
121 0634d911 Christos KK Loverdos
    protected void onPreviewNativeEvent(NativePreviewEvent preview) {
122 0634d911 Christos KK Loverdos
        super.onPreviewNativeEvent(preview);
123 0634d911 Christos KK Loverdos
        NativeEvent evt = preview.getNativeEvent();
124 0634d911 Christos KK Loverdos
        if(evt.getType().equals("keydown")) {
125 0634d911 Christos KK Loverdos
            // Use the popup's key preview hooks to close the dialog when
126 0634d911 Christos KK Loverdos
            // either enter or escape is pressed.
127 0634d911 Christos KK Loverdos
            switch(evt.getKeyCode()) {
128 0634d911 Christos KK Loverdos
                case KeyCodes.KEY_ENTER:
129 0634d911 Christos KK Loverdos
                    sendFeedback();
130 0634d911 Christos KK Loverdos
                    hide();
131 0634d911 Christos KK Loverdos
                    break;
132 0634d911 Christos KK Loverdos
                case KeyCodes.KEY_ESCAPE:
133 0634d911 Christos KK Loverdos
                    hide();
134 0634d911 Christos KK Loverdos
                    break;
135 0634d911 Christos KK Loverdos
            }
136 0634d911 Christos KK Loverdos
        }
137 0634d911 Christos KK Loverdos
    }
138 0634d911 Christos KK Loverdos
139 0634d911 Christos KK Loverdos
    /**
140 0634d911 Christos KK Loverdos
     */
141 0634d911 Christos KK Loverdos
    void sendFeedback() {
142 0634d911 Christos KK Loverdos
        final String feedbackURL = otherProperties.get("feedbackUrl");
143 0634d911 Christos KK Loverdos
        PostRequest sendFeedback = new PostRequest("", "", feedbackURL, "feedback_msg=" + msg.getText() + "&feedback_data=" + appData + "&auth=" + app.getUserToken()) {
144 0634d911 Christos KK Loverdos
145 0634d911 Christos KK Loverdos
            @Override
146 0634d911 Christos KK Loverdos
            protected void onUnauthorized(Response response) {
147 0634d911 Christos KK Loverdos
                app.sessionExpired();
148 0634d911 Christos KK Loverdos
            }
149 0634d911 Christos KK Loverdos
150 0634d911 Christos KK Loverdos
            @Override
151 0634d911 Christos KK Loverdos
            public void onSuccess(Resource result) {
152 0634d911 Christos KK Loverdos
                app.displayInformation("Feedback sent");
153 0634d911 Christos KK Loverdos
            }
154 0634d911 Christos KK Loverdos
155 0634d911 Christos KK Loverdos
            @Override
156 0634d911 Christos KK Loverdos
            public void onError(Throwable t) {
157 0634d911 Christos KK Loverdos
                app.displayError("Could not send feedback");
158 0634d911 Christos KK Loverdos
            }
159 0634d911 Christos KK Loverdos
        };
160 0634d911 Christos KK Loverdos
        sendFeedback.setHeader("X-Auth-Token", app.getUserToken());
161 0634d911 Christos KK Loverdos
        Scheduler.get().scheduleDeferred(sendFeedback);
162 0634d911 Christos KK Loverdos
    }
163 29c80d38 Christos Stathis
}