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
-~----------~----~----~----~------~----~------~--~---

Reply via email to