aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/web/client/controller
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2013-01-09 20:32:40 +1300
committerAnton Tananaev <anton.tananaev@gmail.com>2013-01-09 20:32:40 +1300
commitf0b99fd68cb3b6b484d50c1f9ebc0e77997fd2dd (patch)
treecd9beb89c07dbeacbb26d9df8a1a42502d206c74 /src/org/traccar/web/client/controller
parenta7c6a5f03c0ac94603b5238c59a275a239d16b73 (diff)
downloadetbsa-traccar-web-f0b99fd68cb3b6b484d50c1f9ebc0e77997fd2dd.tar.gz
etbsa-traccar-web-f0b99fd68cb3b6b484d50c1f9ebc0e77997fd2dd.tar.bz2
etbsa-traccar-web-f0b99fd68cb3b6b484d50c1f9ebc0e77997fd2dd.zip
Completely rewritten project
Diffstat (limited to 'src/org/traccar/web/client/controller')
-rw-r--r--src/org/traccar/web/client/controller/ArchiveController.java44
-rw-r--r--src/org/traccar/web/client/controller/ContentController.java11
-rw-r--r--src/org/traccar/web/client/controller/DeviceController.java109
-rw-r--r--src/org/traccar/web/client/controller/LoginController.java81
-rw-r--r--src/org/traccar/web/client/controller/MapController.java56
5 files changed, 301 insertions, 0 deletions
diff --git a/src/org/traccar/web/client/controller/ArchiveController.java b/src/org/traccar/web/client/controller/ArchiveController.java
new file mode 100644
index 0000000..598a744
--- /dev/null
+++ b/src/org/traccar/web/client/controller/ArchiveController.java
@@ -0,0 +1,44 @@
+package org.traccar.web.client.controller;
+
+import java.util.Collection;
+
+import org.traccar.web.client.view.ArchiveView;
+import org.traccar.web.shared.model.Device;
+import org.traccar.web.shared.model.Position;
+
+import com.sencha.gxt.widget.core.client.ContentPanel;
+
+public class ArchiveController implements ContentController, ArchiveView.ArchiveHandler {
+
+ public interface ArchiveHandler {
+ public void onSelected(Position position);
+ }
+
+ private ArchiveHandler archiveHandler;
+
+ private ArchiveView archiveView;
+
+ public ArchiveController(ArchiveHandler archiveHandler) {
+ this.archiveHandler = archiveHandler;
+ archiveView = new ArchiveView(this);
+ }
+
+ @Override
+ public ContentPanel getView() {
+ return archiveView.getView();
+ }
+
+ @Override
+ public void run() {
+ }
+
+ public void updateDevices(Collection<Device> devices) {
+
+ }
+
+ @Override
+ public void onSelected(Position position) {
+ archiveHandler.onSelected(position);
+ }
+
+}
diff --git a/src/org/traccar/web/client/controller/ContentController.java b/src/org/traccar/web/client/controller/ContentController.java
new file mode 100644
index 0000000..7e8d677
--- /dev/null
+++ b/src/org/traccar/web/client/controller/ContentController.java
@@ -0,0 +1,11 @@
+package org.traccar.web.client.controller;
+
+import com.sencha.gxt.widget.core.client.ContentPanel;
+
+public interface ContentController {
+
+ public ContentPanel getView();
+
+ public void run();
+
+}
diff --git a/src/org/traccar/web/client/controller/DeviceController.java b/src/org/traccar/web/client/controller/DeviceController.java
new file mode 100644
index 0000000..b24c205
--- /dev/null
+++ b/src/org/traccar/web/client/controller/DeviceController.java
@@ -0,0 +1,109 @@
+package org.traccar.web.client.controller;
+
+import java.util.List;
+
+import org.traccar.web.client.Application;
+import org.traccar.web.client.model.BaseAsyncCallback;
+import org.traccar.web.client.view.DeviceDialog;
+import org.traccar.web.client.view.DeviceView;
+import org.traccar.web.shared.model.Device;
+
+import com.sencha.gxt.widget.core.client.ContentPanel;
+import com.sencha.gxt.widget.core.client.Dialog.PredefinedButton;
+import com.sencha.gxt.widget.core.client.box.ConfirmMessageBox;
+import com.sencha.gxt.widget.core.client.event.HideEvent;
+import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler;
+
+public class DeviceController implements ContentController, DeviceView.DeviceHandler {
+
+ public interface DeviceHandler {
+ public void onLoad(List<Device> devices);
+ public void onSelected(Device device);
+ public void onAdd(Device device);
+ public void onUpdate(Device device);
+ public void onRemove(Device device);
+ }
+
+ private DeviceHandler deviceHandler;
+
+ private DeviceView deviceView;
+
+ public DeviceController(DeviceHandler deviceHandler) {
+ this.deviceHandler = deviceHandler;
+ deviceView = new DeviceView(this);
+ }
+
+ @Override
+ public ContentPanel getView() {
+ return deviceView.getView();
+ }
+
+ @Override
+ public void run() {
+ Application.getDataService().getDevices(new BaseAsyncCallback<List<Device>>() {
+ @Override
+ public void onSuccess(List<Device> result) {
+ deviceView.load(result);
+ deviceHandler.onLoad(result);
+ }
+ });
+ }
+
+ @Override
+ public void onSelected(Device device) {
+ deviceHandler.onSelected(device);
+ }
+
+ @Override
+ public void onAdd() {
+ new DeviceDialog(new Device(), new DeviceDialog.DeviceHandler() {
+ @Override
+ public void onSave(Device device) {
+ Application.getDataService().addDevice(device, new BaseAsyncCallback<Device>() {
+ @Override
+ public void onSuccess(Device result) {
+ deviceView.add(result);
+ deviceHandler.onAdd(result);
+ }
+ });
+ }
+ }).show();
+ }
+
+ @Override
+ public void onEdit(Device device) {
+ new DeviceDialog(new Device(device), new DeviceDialog.DeviceHandler() {
+ @Override
+ public void onSave(Device device) {
+ Application.getDataService().updateDevice(device, new BaseAsyncCallback<Device>() {
+ @Override
+ public void onSuccess(Device result) {
+ deviceView.update(result);
+ deviceHandler.onUpdate(result);
+ }
+ });
+ }
+ }).show();
+ }
+
+ @Override
+ public void onRemove(final Device device) {
+ final ConfirmMessageBox dialog = new ConfirmMessageBox("Confirm", "Are you sure you want remove device?");
+ dialog.addHideHandler(new HideHandler() {
+ @Override
+ public void onHide(HideEvent event) {
+ if (dialog.getHideButton() == dialog.getButtonById(PredefinedButton.YES.name())) {
+ Application.getDataService().removeDevice(device, new BaseAsyncCallback<Device>() {
+ @Override
+ public void onSuccess(Device result) {
+ deviceView.remove(device);
+ deviceHandler.onRemove(device);
+ }
+ });
+ }
+ }
+ });
+ dialog.show();
+ }
+
+}
diff --git a/src/org/traccar/web/client/controller/LoginController.java b/src/org/traccar/web/client/controller/LoginController.java
new file mode 100644
index 0000000..ceda85c
--- /dev/null
+++ b/src/org/traccar/web/client/controller/LoginController.java
@@ -0,0 +1,81 @@
+package org.traccar.web.client.controller;
+
+import org.traccar.web.client.Application;
+import org.traccar.web.client.model.BaseAsyncCallback;
+import org.traccar.web.client.view.LoginDialog;
+
+import com.sencha.gxt.widget.core.client.box.AlertMessageBox;
+
+public class LoginController implements LoginDialog.LoginHandler {
+
+ private LoginDialog dialog;
+
+ public interface LoginHandler {
+ public void onLogin();
+ }
+
+ private LoginHandler loginHandler;
+
+ public void login(final LoginHandler loginHandler) {
+ this.loginHandler = loginHandler;
+
+ Application.getDataService().authenticated(new BaseAsyncCallback<Boolean>() {
+ @Override
+ public void onSuccess(Boolean result) {
+ if (result) {
+ loginHandler.onLogin();
+ } else {
+ dialog = new LoginDialog(LoginController.this);
+ dialog.show();
+ }
+ }
+ });
+ }
+
+ private boolean validate(String login, String password) {
+ if (login == null || login.isEmpty() || password == null || password.isEmpty()) {
+ new AlertMessageBox("Error", "User name and password must not be empty").show();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void onLogin(String login, String password) {
+ if (validate(login, password)) {
+ Application.getDataService().authenticate(login, password, new BaseAsyncCallback<Boolean>() {
+ @Override
+ public void onSuccess(Boolean result) {
+ if (result) {
+ if (loginHandler != null) {
+ dialog.hide();
+ loginHandler.onLogin();
+ }
+ } else {
+ new AlertMessageBox("Error", "User name or password is invalid").show();
+ }
+ }
+ });
+ }
+ }
+
+ @Override
+ public void onRegister(String login, String password) {
+ if (validate(login, password)) {
+ Application.getDataService().register(login, password, new BaseAsyncCallback<Boolean>() {
+ @Override
+ public void onSuccess(Boolean result) {
+ if (result) {
+ if (loginHandler != null) {
+ dialog.hide();
+ loginHandler.onLogin();
+ }
+ } else {
+ new AlertMessageBox("Error", "Registration error").show();
+ }
+ }
+ });
+ }
+ }
+
+}
diff --git a/src/org/traccar/web/client/controller/MapController.java b/src/org/traccar/web/client/controller/MapController.java
new file mode 100644
index 0000000..5a53cf2
--- /dev/null
+++ b/src/org/traccar/web/client/controller/MapController.java
@@ -0,0 +1,56 @@
+package org.traccar.web.client.controller;
+
+import org.traccar.web.client.view.MapView;
+import org.traccar.web.shared.model.Device;
+
+import com.google.gwt.user.client.Timer;
+import com.sencha.gxt.widget.core.client.ContentPanel;
+
+public class MapController implements ContentController {
+
+ private static final int UPDATE_INTERVAL = 10000;
+
+ private MapView mapView;
+
+ public MapController() {
+ mapView = new MapView();
+ }
+
+ @Override
+ public ContentPanel getView() {
+ return mapView.getView();
+ }
+
+ private Timer updateTimer;
+
+ @Override
+ public void run() {
+ updateTimer = new Timer() {
+ @Override
+ public void run() {
+ update();
+ }
+ };
+ update();
+ }
+
+ public void update() {
+ updateTimer.cancel();
+ /*Application.getDataService().getLatestPositions(new AsyncCallback<List<Position>>() {
+ @Override
+ public void onSuccess(List<Position> result) {
+ mapView.showPositions(result);
+ updateTimer.schedule(UPDATE_INTERVAL);
+ }
+ @Override
+ public void onFailure(Throwable caught) {
+ updateTimer.schedule(UPDATE_INTERVAL);
+ }
+ });*/
+ }
+
+ public void select(Device device) {
+ mapView.select(device, true);
+ }
+
+}