I'm just getting into GWT and getting back into Java after a 9 year absence. As I'm creating my first project it was pretty clear that I never wanted to write login & session handling code ever again so I've been trying to create a reusable class for all of this that I can (mostly) drop into future projects.
I was hoping to have the class able to alert any other classes and panels on the site when the user logs in asynchronously. Listeners and Handlers didn't seem to be the right tool for the job. And I really don't want to put all the other classes for this site under the LoginManager. What would be the preferred way of having external classes know when the results of an Ajax call come through? ------------------------------------------------------------------------------------------------------------------------------------------------------------------- import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.Response; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DeckPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Hyperlink; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PasswordTextBox; import com.google.gwt.user.client.ui.TextBox; public class LoginManager{ private DeckPanel cMainDeckPanel; private VerticalPanel NewAccountPanel; private VerticalPanel VPLogin; private VerticalPanel VPUser; private String sSessionID; private Label username; private Label failLabel; private final String loginURL; private final String logoutURL; private final String newUserURL; //private String newUserConnectionResults; private boolean loggedin; private final String hiddenpassword; public LoginManager(){ sSessionID = ""; loginURL = "serversays//login.py"; logoutURL = "serversays//logout.py"; newUserURL = "serversays//newuser.py"; hiddenpassword = "youshouldchangethis"; loggedin = false; } public DeckPanel getDeckPanel() { // the interface for the class // page 1 - login panel // page 2 - logged in panel // page 3 - create a new user panel cMainDeckPanel = new DeckPanel(); VPLogin = new VerticalPanel(); VPUser = new VerticalPanel(); // interface for not logged in failLabel = new Label(); failLabel.setText(""); VPLogin.add(failLabel); final TextBox nameField = new TextBox(); final Label nameLabel = new Label(); final PasswordTextBox passwordField = new PasswordTextBox(); final Label passwordLabel = new Label(); final Button sendButton = new Button("Send"); final Hyperlink newAccount = new Hyperlink("Create Account", ""); //TODO link to handler nameLabel.setText("Name:"); passwordLabel.setText("Password:"); //nameField.setFocus(true); //set handler for new account newAccount.addClickHandler(new ClickHandler(){ public void onClick(ClickEvent sender) { cMainDeckPanel.showWidget(2); } }); //set handler for login sendButton.addClickHandler(new ClickHandler(){ public void onClick(ClickEvent sender) { login(nameField.getText(), passwordField.getText()); } }); nameField.addKeyPressHandler(new KeyPressHandler() { public void onKeyPress(KeyPressEvent event) { if(event.getCharCode()== 13){ //char code for enter passwordField.setFocus(true); } } }); passwordField.addKeyPressHandler(new KeyPressHandler() { public void onKeyPress(KeyPressEvent event) { if(event.getCharCode()== 13){ //char code for enter login(nameField.getText(), passwordField.getText()); } } }); // add to Vert Panel VPLogin.add(nameLabel); VPLogin.add(nameField); VPLogin.add(passwordLabel); VPLogin.add(passwordField); VPLogin.add(sendButton); VPLogin.add(newAccount); // interface for logged in username = new Label(); final Hyperlink logoutLink = new Hyperlink(); logoutLink.setText("logout"); logoutLink.getElement().setId("logoutlink"); VPUser.add(username); VPUser.add(logoutLink); //set handler for logout logoutLink.addClickHandler(new ClickHandler(){ public void onClick(ClickEvent sender) { logout(nameField.getText()); } }); // create new account NewAccountPanel = new VerticalPanel(); final Label newUserNameLabel = new Label(); final Label newUserPasswordLabel = new Label(); final TextBox newUserNameField = new TextBox(); final PasswordTextBox newUserPasswordField = new PasswordTextBox(); final TextBox emailField = new TextBox(); final Label emailLabel = new Label(); final Button newUserSendButton = new Button("Send"); newUserNameLabel.setText("Name:"); newUserPasswordLabel.setText("Password:"); emailLabel.setText("email:"); //nameField.setFocus(true); //set handler for login newUserSendButton.addClickHandler(new ClickHandler(){ public void onClick(ClickEvent sender) { CreateNewUser(newUserNameField.getText(), newUserPasswordField.getText(), emailField.getText()); } }); NewAccountPanel.add(newUserNameLabel); NewAccountPanel.add(newUserNameField); NewAccountPanel.add(newUserPasswordLabel); NewAccountPanel.add(newUserPasswordField); NewAccountPanel.add(emailLabel); NewAccountPanel.add(emailField); NewAccountPanel.add(newUserSendButton); //add panels to to login deck cMainDeckPanel.add(VPLogin); cMainDeckPanel.add(VPUser); cMainDeckPanel.add(NewAccountPanel); cMainDeckPanel.showWidget(0); return cMainDeckPanel; } public Void CreateNewUser(String name, String pw, String email){ try{ RequestBuilder requestBuilder = new RequestBuilder( RequestBuilder.POST, GWT.getModuleBaseURL() + newUserURL + "?name=" + name + "&hpw=" + hiddenpassword + "&email=" + email); requestBuilder.sendRequest(null, new RequestCallback(){ @Override public void onError(Request request, Throwable exception) { // TODO Auto-generated method stub } @Override public void onResponseReceived(Request request, Response response) { // it seems to me this is where we really know if the user is logged in or not // this is where I'd like to get the rest of the classes know that the user is logged in // newUserConnectionResults = response.getText(); } } ); }catch( Exception e){ //ignored } return null; } public String getSessionID(){ return sSessionID; } public void login(final String name, String pw){ try{ RequestBuilder requestBuilder = new RequestBuilder( RequestBuilder.POST, GWT.getModuleBaseURL() + loginURL + "?name=" + name + "&pw=" + pw + "&hpw=" + hiddenpassword); requestBuilder.sendRequest(null, new RequestCallback(){ @Override public void onError(Request request, Throwable exception) { // TODO Auto-generated method stub } @Override public void onResponseReceived(Request request, Response response) { sSessionID = response.getText(); if( sSessionID.length() > 0){ username.setText(name); cMainDeckPanel.showWidget(1); loggedin = true; failLabel.setText(""); return; } failLabel.setText("Sorry. That login/PW failed."); loggedin = false; return; } } ); }catch( Exception e){ //ignored } } public void logout(String name){ try{ RequestBuilder requestBuilder = new RequestBuilder( RequestBuilder.POST, GWT.getModuleBaseURL() + logoutURL + "?name=" + name + "&hpw=" + hiddenpassword + "&sid=" + sSessionID); requestBuilder.sendRequest(null, new RequestCallback(){ @Override public void onError(Request request, Throwable exception) { // TODO Auto-generated method stub } @Override public void onResponseReceived(Request request, Response response) { if(response.getText().compareTo("true") == 0){ sSessionID = ""; } if( sSessionID.length() == 0){ cMainDeckPanel.showWidget(0); loggedin = false; return; } return; } } ); }catch( Exception e){ //ignored } } public boolean getLoggedin(){ return loggedin; } } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en -~----------~----~----~----~------~----~------~--~---