/src/at/tomtasche/bloki/engine/client/register/Register.java

https://github.com/TomTasche/Bloki.engine · Java · 162 lines · 111 code · 15 blank · 36 comment · 2 complexity · b569ccaf9e0296dd36b0af2ec1b99cf5 MD5 · raw file

  1. package at.tomtasche.bloki.engine.client.register;
  2. import com.google.gwt.core.client.EntryPoint;
  3. import com.google.gwt.core.client.GWT;
  4. import com.google.gwt.event.dom.client.ClickEvent;
  5. import com.google.gwt.event.dom.client.ClickHandler;
  6. import com.google.gwt.event.dom.client.KeyCodes;
  7. import com.google.gwt.event.dom.client.KeyUpEvent;
  8. import com.google.gwt.event.dom.client.KeyUpHandler;
  9. import com.google.gwt.user.client.rpc.AsyncCallback;
  10. import com.google.gwt.user.client.ui.Button;
  11. import com.google.gwt.user.client.ui.DialogBox;
  12. import com.google.gwt.user.client.ui.HTML;
  13. import com.google.gwt.user.client.ui.HasHorizontalAlignment;
  14. import com.google.gwt.user.client.ui.Label;
  15. import com.google.gwt.user.client.ui.RootPanel;
  16. import com.google.gwt.user.client.ui.TextBox;
  17. import com.google.gwt.user.client.ui.VerticalPanel;
  18. /**
  19. * Entry point classes define <code>onModuleLoad()</code>.
  20. */
  21. public class Register implements EntryPoint {
  22. /**
  23. * The message displayed to the user when the server cannot be reached or
  24. * returns an error.
  25. */
  26. private static final String SERVER_ERROR = "An error occurred while "
  27. + "attempting to contact the server. Please check your network "
  28. + "connection and try again.";
  29. /**
  30. * Create a remote service proxy to talk to the server-side Greeting
  31. * service.
  32. */
  33. private final RegisterServiceAsync registerService = GWT
  34. .create(RegisterService.class);
  35. /**
  36. * This is the entry point method.
  37. */
  38. @Override
  39. public void onModuleLoad() {
  40. final Button sendButton = new Button("Register");
  41. final TextBox urlField = new TextBox();
  42. urlField.setText("Your domain...");
  43. final TextBox mailField = new TextBox();
  44. mailField.setText("Your mail address...");
  45. final Label errorLabel = new Label();
  46. // We can add style names to widgets
  47. sendButton.addStyleName("sendButton");
  48. // Add the nameField and sendButton to the RootPanel
  49. // Use RootPanel.get() to get the entire body element
  50. RootPanel.get("mailFieldContainer").add(mailField);
  51. RootPanel.get("urlFieldContainer").add(urlField);
  52. RootPanel.get("sendButtonContainer").add(sendButton);
  53. RootPanel.get("errorLabelContainer").add(errorLabel);
  54. // Focus the cursor on the name field when the app loads
  55. mailField.setFocus(true);
  56. mailField.selectAll();
  57. // Create the popup dialog box
  58. final DialogBox dialogBox = new DialogBox(true);
  59. dialogBox.setText("Registration");
  60. dialogBox.setAnimationEnabled(true);
  61. final Button closeButton = new Button("Close");
  62. // We can set the id of a widget by accessing its Element
  63. closeButton.getElement().setId("closeButton");
  64. final Label textToServerLabel = new Label();
  65. final HTML serverResponseLabel = new HTML();
  66. final VerticalPanel dialogVPanel = new VerticalPanel();
  67. dialogVPanel.addStyleName("dialogVPanel");
  68. dialogVPanel.add(new HTML("<b>Sending credentials to the server:</b>"));
  69. dialogVPanel.add(textToServerLabel);
  70. dialogVPanel.add(new HTML("<br><b>Server replies:</b>"));
  71. dialogVPanel.add(serverResponseLabel);
  72. dialogVPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
  73. dialogVPanel.add(closeButton);
  74. dialogBox.setWidget(dialogVPanel);
  75. // Add a handler to close the DialogBox
  76. closeButton.addClickHandler(new ClickHandler() {
  77. @Override
  78. public void onClick(final ClickEvent event) {
  79. dialogBox.hide();
  80. sendButton.setEnabled(true);
  81. sendButton.setFocus(true);
  82. }
  83. });
  84. // Create a handler for the sendButton and nameField
  85. class MyHandler implements ClickHandler, KeyUpHandler {
  86. /**
  87. * Fired when the user clicks on the sendButton.
  88. */
  89. @Override
  90. public void onClick(final ClickEvent event) {
  91. this.sendNameToServer();
  92. }
  93. /**
  94. * Fired when the user types in the nameField.
  95. */
  96. @Override
  97. public void onKeyUp(final KeyUpEvent event) {
  98. if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
  99. this.sendNameToServer();
  100. }
  101. }
  102. /**
  103. * Send the name from the nameField to the server and wait for a
  104. * response.
  105. */
  106. private void sendNameToServer() {
  107. // First, we validate the input.
  108. errorLabel.setText("");
  109. final String url = urlField.getText();
  110. final String mail = mailField.getText();
  111. // Then, we send the input to the server.
  112. sendButton.setEnabled(false);
  113. textToServerLabel.setText(url + " and " + mail);
  114. serverResponseLabel.setText("");
  115. Register.this.registerService.register(url, mail,
  116. new AsyncCallback<String>() {
  117. @Override
  118. public void onFailure(final Throwable caught) {
  119. // Show the RPC error message to the user
  120. dialogBox.setText("Registration - Failure");
  121. serverResponseLabel
  122. .addStyleName("serverResponseLabelError");
  123. serverResponseLabel
  124. .setHTML(Register.SERVER_ERROR
  125. + "<p>Please send me a mail to <a href='mailto:tomtasche%40gmail.com'>tomtasche@gmail.com</a> so I can find this issue's cause.</p>");
  126. dialogBox.center();
  127. closeButton.setFocus(true);
  128. }
  129. @Override
  130. public void onSuccess(final String result) {
  131. dialogBox.setText("Registration - Success");
  132. serverResponseLabel
  133. .removeStyleName("serverResponseLabelError");
  134. serverResponseLabel.setHTML(result);
  135. dialogBox.center();
  136. closeButton.setFocus(true);
  137. }
  138. });
  139. }
  140. }
  141. // Add a handler to send the name to the server
  142. final MyHandler handler = new MyHandler();
  143. sendButton.addClickHandler(handler);
  144. urlField.addKeyUpHandler(handler);
  145. mailField.addKeyUpHandler(handler);
  146. }
  147. }