From 02d84970e58aae0a0e81f6224cd3ce4a96702fb9 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 19 Nov 2012 23:21:53 +1300 Subject: Create login controller --- .../web/client/database/GlobalDatabaseService.java | 13 ++++ .../traccar/web/client/login/LoginController.java | 82 ++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 src/main/java/org/traccar/web/client/database/GlobalDatabaseService.java create mode 100644 src/main/java/org/traccar/web/client/login/LoginController.java (limited to 'src/main') diff --git a/src/main/java/org/traccar/web/client/database/GlobalDatabaseService.java b/src/main/java/org/traccar/web/client/database/GlobalDatabaseService.java new file mode 100644 index 0000000..138fa48 --- /dev/null +++ b/src/main/java/org/traccar/web/client/database/GlobalDatabaseService.java @@ -0,0 +1,13 @@ +package org.traccar.web.client.database; + +import com.google.gwt.core.client.GWT; + +public class GlobalDatabaseService { + + private static final DatabaseServiceAsync databaseService = GWT.create(DatabaseService.class); + + public static DatabaseServiceAsync getInstance() { + return databaseService; + } + +} diff --git a/src/main/java/org/traccar/web/client/login/LoginController.java b/src/main/java/org/traccar/web/client/login/LoginController.java new file mode 100644 index 0000000..42d6889 --- /dev/null +++ b/src/main/java/org/traccar/web/client/login/LoginController.java @@ -0,0 +1,82 @@ +package org.traccar.web.client.login; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.util.SC; +import org.traccar.web.client.database.GlobalDatabaseService; + +public class LoginController implements LoginDialog.LoginHandler { + + private LoginDialog dialog; + + public interface LoginHandler { + public void onLogin(); + } + + private LoginHandler loginHandler; + + public void login(LoginHandler loginHandler) { + this.loginHandler = loginHandler; + + dialog = new LoginDialog(); + dialog.setLoginHandler(this); + dialog.draw(); + dialog.centerInPage(); + } + + private boolean validate(String login, String password) { + if (login == null || login.isEmpty() || password == null || password.isEmpty()) { + SC.warn("Login and password fields must not be blank"); + return false; + } + return true; + } + + private static abstract class AsyncCallbackHandler implements AsyncCallback { + @Override + public void onFailure(Throwable caught) { + SC.warn("Remote procedure call error"); + } + } + + private final AsyncCallback loginCallback = new AsyncCallbackHandler() { + @Override + public void onSuccess(Boolean result) { + if (result) { + if (loginHandler != null) { + dialog.destroy(); + loginHandler.onLogin(); + } + } else { + SC.warn("Invalid login or password"); + } + } + }; + + @Override + public void onLogin(String login, String password) { + if (validate(login, password)) { + GlobalDatabaseService.getInstance().authenticate(login, password, loginCallback); + } + } + + private final AsyncCallback registerCallback = new AsyncCallbackHandler() { + @Override + public void onSuccess(Boolean result) { + if (result) { + if (loginHandler != null) { + dialog.destroy(); + loginHandler.onLogin(); + } + } else { + SC.warn("Registration failed"); + } + } + }; + + @Override + public void onRegister(String login, String password) { + if (validate(login, password)) { + GlobalDatabaseService.getInstance().register(login, password, registerCallback); + } + } +} -- cgit v1.2.3