diff options
Diffstat (limited to 'src/org/traccar')
54 files changed, 0 insertions, 4377 deletions
diff --git a/src/org/traccar/web/Traccar.gwt.xml b/src/org/traccar/web/Traccar.gwt.xml deleted file mode 100644 index 0f717663..00000000 --- a/src/org/traccar/web/Traccar.gwt.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.0//EN" - "http://google-web-toolkit.googlecode.com/svn/tags/2.5.0/distro-source/core/src/gwt-module.dtd"> - -<module rename-to='traccar'> - - <inherits name='com.google.gwt.user.User'/> - <inherits name="com.google.gwt.logging.Logging"/> - <inherits name="com.google.gwt.xml.XML"/> - <inherits name='com.sencha.gxt.ui.GXT'/> - <inherits name='org.gwtopenmaps.openlayers.OpenLayers' /> - - <set-property name="gwt.logging.enabled" value="FALSE"/> - <set-property name="gwt.logging.consoleHandler" value="DISABLED"/> - - <entry-point class='org.traccar.web.client.Traccar'/> - - <source path='client'/> - <source path='shared'/> - -</module> diff --git a/src/org/traccar/web/client/Application.java b/src/org/traccar/web/client/Application.java deleted file mode 100644 index cd3424dd..00000000 --- a/src/org/traccar/web/client/Application.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client; - -import java.util.logging.Logger; - -import org.traccar.web.client.controller.ArchiveController; -import org.traccar.web.client.controller.DeviceController; -import org.traccar.web.client.controller.MapController; -import org.traccar.web.client.controller.SettingsController; -import org.traccar.web.client.controller.StateController; -import org.traccar.web.client.model.BaseStoreHandlers; -import org.traccar.web.client.model.DataService; -import org.traccar.web.client.model.DataServiceAsync; -import org.traccar.web.client.view.ApplicationView; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.RootPanel; -import com.sencha.gxt.data.shared.event.StoreAddEvent; -import com.sencha.gxt.data.shared.event.StoreHandlers; -import com.sencha.gxt.data.shared.event.StoreRemoveEvent; - -public class Application { - - private static final DataServiceAsync dataService = GWT.create(DataService.class); - - public static DataServiceAsync getDataService() { - return dataService; - } - - private static Logger logger = Logger.getLogger(""); - - public static Logger getLogger() { - return logger; - } - - private final SettingsController settingsController; - private final DeviceController deviceController; - private final StateController stateController; - private final MapController mapController; - private final ArchiveController archiveController; - - private ApplicationView view; - - public Application() { - settingsController = new SettingsController(); - deviceController = new DeviceController(deviceHandler, settingsController); - deviceController.getDeviceStore().addStoreHandlers(deviceStoreHandler); - stateController = new StateController(); - mapController = new MapController(mapHandler); - archiveController = new ArchiveController(archiveHanlder, deviceController.getDeviceStore()); - archiveController.getPositionStore().addStoreHandlers(archiveStoreHandler); - - view = new ApplicationView( - deviceController.getView(), stateController.getView(), mapController.getView(), archiveController.getView()); - } - - public void run() { - RootPanel.get().add(view); - - deviceController.run(); - stateController.run(); - mapController.run(); - archiveController.run(); - } - - private DeviceController.DeviceHandler deviceHandler = new DeviceController.DeviceHandler() { - - private Device selected; - - @Override - public void onSelected(Device device) { - if (selected != null) { - mapController.unregisterPositionUpdate(selected); - } - if (device != null) { - mapController.registerPositionUpdate(device, positionUpdateHandler); - } - selected = device; - mapController.selectDevice(device); - } - - }; - - private MapController.PositionUpdateHandler positionUpdateHandler = new MapController.PositionUpdateHandler() { - - @Override - public void onUpdate(Position position) { - stateController.showState(position); - } - - }; - - private MapController.MapHandler mapHandler = new MapController.MapHandler() { - - @Override - public void onDeviceSelected(Device device) { - deviceController.selectDevice(device); - } - - @Override - public void onArchivePositionSelected(Position position) { - archiveController.selectPosition(position); - } - - }; - - private ArchiveController.ArchiveHandler archiveHanlder = new ArchiveController.ArchiveHandler() { - - @Override - public void onSelected(Position position) { - mapController.selectArchivePosition(position); - } - - }; - - private StoreHandlers<Device> deviceStoreHandler = new BaseStoreHandlers<Device>() { - - @Override - public void onAdd(StoreAddEvent<Device> event) { - mapController.update(); - } - - @Override - public void onRemove(StoreRemoveEvent<Device> event) { - mapController.update(); - } - - }; - - private StoreHandlers<Position> archiveStoreHandler = new BaseStoreHandlers<Position>() { - - @Override - public void onAnything() { - mapController.showArchivePositions(archiveController.getPositionStore().getAll()); - } - - }; - -} diff --git a/src/org/traccar/web/client/ApplicationContext.java b/src/org/traccar/web/client/ApplicationContext.java deleted file mode 100644 index 80b8998d..00000000 --- a/src/org/traccar/web/client/ApplicationContext.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.traccar.web.client; - -import org.traccar.web.shared.model.ApplicationSettings; -import org.traccar.web.shared.model.User; -import org.traccar.web.shared.model.UserSettings; - -public class ApplicationContext { - - private static final ApplicationContext context = new ApplicationContext(); - - public static ApplicationContext getInstance() { - return context; - } - - private FormatterUtil formatterUtil; - - public void setFormatterUtil(FormatterUtil formatterUtil) { - this.formatterUtil = formatterUtil; - } - - public FormatterUtil getFormatterUtil() { - if (formatterUtil == null) { - formatterUtil = new FormatterUtil(); - } - return formatterUtil; - } - - private ApplicationSettings applicationSettings; - - public void setApplicationSettings(ApplicationSettings applicationSettings) { - this.applicationSettings = applicationSettings; - } - - public ApplicationSettings getApplicationSettings() { - if (applicationSettings != null) { - return applicationSettings; - } else { - return new ApplicationSettings(); // default settings - } - } - - private User user; - - public void setUser(User user) { - this.user = user; - } - - public User getUser() { - return user; - } - - public void setUserSettings(UserSettings userSettings) { - if (user != null) { - user.setUserSettings(userSettings); - } - } - - public UserSettings getUserSettings() { - if (user != null && user.getUserSettings() != null) { - return user.getUserSettings(); - } else { - return new UserSettings(); // default settings - } - } - -} diff --git a/src/org/traccar/web/client/FormatterUtil.java b/src/org/traccar/web/client/FormatterUtil.java deleted file mode 100644 index 36c24dcb..00000000 --- a/src/org/traccar/web/client/FormatterUtil.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.traccar.web.client; - -import com.google.gwt.i18n.client.CurrencyList; -import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.i18n.client.NumberFormat; - -public class FormatterUtil { - - public DateTimeFormat getTimeFormat() { - return DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss"); - } - - private class SpeedNumberFormat extends NumberFormat { - - private final String unit; - private final double factor; - - public SpeedNumberFormat(String unit, double factor) { - super("0.##", CurrencyList.get().getDefault(), true); - this.unit = unit; - this.factor = factor; - } - - @Override - public String format(double number) { - return super.format(number * factor) + " " + unit; - } - - } - - public NumberFormat getSpeedFormat() { - switch (ApplicationContext.getInstance().getUserSettings().getSpeedUnit()) { - case kilometersPerHour: - return new SpeedNumberFormat("km/h", 1.852); - case milesPerHour: - return new SpeedNumberFormat("mph", 1.150779); - default: - return new SpeedNumberFormat("kn", 1); - } - } - -} diff --git a/src/org/traccar/web/client/Traccar.java b/src/org/traccar/web/client/Traccar.java deleted file mode 100644 index d775bb4a..00000000 --- a/src/org/traccar/web/client/Traccar.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client; - -import org.traccar.web.client.controller.LoginController; -import org.traccar.web.client.model.BaseAsyncCallback; -import org.traccar.web.shared.model.ApplicationSettings; - -import com.google.gwt.core.client.EntryPoint; - -public class Traccar implements EntryPoint, LoginController.LoginHandler { - - @Override - public void onModuleLoad() { - Application.getDataService().updateApplicationSettings(null, new BaseAsyncCallback<ApplicationSettings>() { - @Override - public void onSuccess(ApplicationSettings result) { - ApplicationContext.getInstance().setApplicationSettings(result); - new LoginController().login(Traccar.this); - } - }); - } - - @Override - public void onLogin() { - new Application().run(); - } - -} diff --git a/src/org/traccar/web/client/controller/ArchiveController.java b/src/org/traccar/web/client/controller/ArchiveController.java deleted file mode 100644 index 9a0c18d0..00000000 --- a/src/org/traccar/web/client/controller/ArchiveController.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.controller; - -import java.util.Date; -import java.util.List; - -import org.traccar.web.client.Application; -import org.traccar.web.client.model.BaseAsyncCallback; -import org.traccar.web.client.model.PositionProperties; -import org.traccar.web.client.view.ArchiveView; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; - -import com.google.gwt.core.client.GWT; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.widget.core.client.ContentPanel; -import com.sencha.gxt.widget.core.client.box.AlertMessageBox; - -public class ArchiveController implements ContentController, ArchiveView.ArchiveHandler { - - public interface ArchiveHandler { - public void onSelected(Position position); - } - - private ArchiveHandler archiveHandler; - - private ListStore<Position> positionStore; - - private ArchiveView archiveView; - - public ArchiveController(ArchiveHandler archiveHandler, ListStore<Device> deviceStore) { - this.archiveHandler = archiveHandler; - PositionProperties positionProperties = GWT.create(PositionProperties.class); - positionStore = new ListStore<Position>(positionProperties.id()); - archiveView = new ArchiveView(this, positionStore, deviceStore); - } - - public ListStore<Position> getPositionStore() { - return positionStore; - } - - @Override - public ContentPanel getView() { - return archiveView.getView(); - } - - @Override - public void run() { - } - - @Override - public void onSelected(Position position) { - archiveHandler.onSelected(position); - } - - @Override - public void onLoad(Device device, Date from, Date to) { - if (device != null && from != null && to != null) { - Application.getDataService().getPositions(device, from, to, new BaseAsyncCallback<List<Position>>() { - @Override - public void onSuccess(List<Position> result) { - positionStore.clear(); - if (result.isEmpty()) { - new AlertMessageBox("Error", "No results found for selected period").show(); - } else { - positionStore.addAll(result); - } - } - }); - } else { - new AlertMessageBox("Error", "All form fields must be filled first").show(); - } - } - - @Override - public void onClear() { - positionStore.clear(); - } - - public void selectPosition(Position position) { - archiveView.selectPosition(position); - } - -} diff --git a/src/org/traccar/web/client/controller/ContentController.java b/src/org/traccar/web/client/controller/ContentController.java deleted file mode 100644 index 4fdea7c8..00000000 --- a/src/org/traccar/web/client/controller/ContentController.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -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 deleted file mode 100644 index 599f7565..00000000 --- a/src/org/traccar/web/client/controller/DeviceController.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -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.model.DeviceProperties; -import org.traccar.web.client.view.DeviceDialog; -import org.traccar.web.client.view.DeviceView; -import org.traccar.web.shared.model.Device; - -import com.google.gwt.core.client.GWT; -import com.sencha.gxt.data.shared.ListStore; -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.AlertMessageBox; -import com.sencha.gxt.widget.core.client.box.ConfirmMessageBox; -import com.sencha.gxt.widget.core.client.event.DialogHideEvent; - -public class DeviceController implements ContentController, DeviceView.DeviceHandler { - - public interface DeviceHandler { - public void onSelected(Device device); - } - - private DeviceHandler deviceHandler; - - private ListStore<Device> deviceStore; - - private DeviceView deviceView; - - public DeviceController(DeviceHandler deviceHandler, DeviceView.SettingsHandler settingsHandler) { - this.deviceHandler = deviceHandler; - DeviceProperties deviceProperties = GWT.create(DeviceProperties.class); - deviceStore = new ListStore<Device>(deviceProperties.id()); - deviceView = new DeviceView(this, settingsHandler, deviceStore); - } - - public ListStore<Device> getDeviceStore() { - return deviceStore; - } - - @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) { - deviceStore.addAll(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) { - deviceStore.add(result); - } - @Override - public void onFailure(Throwable caught) { - new AlertMessageBox("Error", "Device with this Unique ID already exists").show(); - } - }); - } - }).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) { - deviceStore.update(result); - } - @Override - public void onFailure(Throwable caught) { - new AlertMessageBox("Error", "Device with this Unique ID already exists").show(); - } - }); - } - }).show(); - } - - @Override - public void onRemove(final Device device) { - final ConfirmMessageBox dialog = new ConfirmMessageBox("Confirm", "Are you sure you want remove device?"); - dialog.addDialogHideHandler(new DialogHideEvent.DialogHideHandler() { - @Override - public void onDialogHide(DialogHideEvent event) { - if (event.getHideButton() == PredefinedButton.YES) { - Application.getDataService().removeDevice(device, new BaseAsyncCallback<Device>() { - @Override - public void onSuccess(Device result) { - deviceStore.remove(device); - } - }); - } - } - }); - dialog.show(); - } - - public void selectDevice(Device device) { - deviceView.selectDevice(device); - } - -} diff --git a/src/org/traccar/web/client/controller/LoginController.java b/src/org/traccar/web/client/controller/LoginController.java deleted file mode 100644 index 1aa152b8..00000000 --- a/src/org/traccar/web/client/controller/LoginController.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.controller; - -import org.traccar.web.client.Application; -import org.traccar.web.client.ApplicationContext; -import org.traccar.web.client.model.BaseAsyncCallback; -import org.traccar.web.client.view.LoginDialog; -import org.traccar.web.shared.model.User; - -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<User>() { - @Override - public void onSuccess(User result) { - ApplicationContext.getInstance().setUser(result); - loginHandler.onLogin(); - } - @Override - public void onFailure(Throwable caught) { - 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().login(login, password, new BaseAsyncCallback<User>() { - @Override - public void onSuccess(User result) { - ApplicationContext.getInstance().setUser(result); - if (loginHandler != null) { - dialog.hide(); - loginHandler.onLogin(); - } - } - @Override - public void onFailure(Throwable caught) { - 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<User>() { - @Override - public void onSuccess(User result) { - ApplicationContext.getInstance().setUser(result); - if (loginHandler != null) { - dialog.hide(); - loginHandler.onLogin(); - } - } - @Override - public void onFailure(Throwable caught) { - new AlertMessageBox("Error", "Username is already taken").show(); - } - }); - } - } - -} diff --git a/src/org/traccar/web/client/controller/MapController.java b/src/org/traccar/web/client/controller/MapController.java deleted file mode 100644 index 13c736f5..00000000 --- a/src/org/traccar/web/client/controller/MapController.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.controller; - -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import org.traccar.web.client.Application; -import org.traccar.web.client.view.MapView; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; - -import com.google.gwt.user.client.Timer; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.sencha.gxt.widget.core.client.ContentPanel; - -public class MapController implements ContentController, MapView.MapHandler { - - private static final int UPDATE_INTERVAL = 15000; - - public interface MapHandler { - public void onDeviceSelected(Device device); - public void onArchivePositionSelected(Position position); - } - - private MapHandler mapHandler; - - private MapView mapView; - - public MapController(MapHandler mapHandler) { - this.mapHandler = mapHandler; - mapView = new MapView(this); - } - - @Override - public ContentPanel getView() { - return mapView.getView(); - } - - private Timer updateTimer; - - @Override - public void run() { - updateTimer = new Timer() { - @Override - public void run() { - update(); - } - }; - update(); - } - - private Map<Long, Position> latestPositionMap = new HashMap<Long, Position>(); - - public void update() { - updateTimer.cancel(); - Application.getDataService().getLatestPositions(new AsyncCallback<List<Position>>() { - @Override - public void onSuccess(List<Position> result) { - mapView.showLatestPositions(result); - for (Position position : result) { - latestPositionMap.put(position.getDevice().getId(), position); - } - for (Map.Entry<Long, PositionUpdateHandler> entry : positionUpdateMap.entrySet()) { - entry.getValue().onUpdate(latestPositionMap.get(entry.getKey())); - } - updateTimer.schedule(UPDATE_INTERVAL); - } - @Override - public void onFailure(Throwable caught) { - updateTimer.schedule(UPDATE_INTERVAL); - } - }); - } - - public void selectDevice(Device device) { - mapView.selectDevice(device); - } - - public void showArchivePositions(List<Position> positions) { - List<Position> sortedPositions = new LinkedList<Position>(positions); - Collections.sort(sortedPositions, new Comparator<Position>() { - @Override - public int compare(Position o1, Position o2) { - return o1.getTime().compareTo(o2.getTime()); - } - }); - mapView.showArchivePositions(sortedPositions); - } - - public void selectArchivePosition(Position position) { - mapView.selectArchivePosition(position); - } - - public interface PositionUpdateHandler { - public void onUpdate(Position position); - } - - private Map<Long, PositionUpdateHandler> positionUpdateMap = new HashMap<Long, PositionUpdateHandler>(); - - - public void registerPositionUpdate(Device device, PositionUpdateHandler handler) { - positionUpdateMap.put(device.getId(), handler); - handler.onUpdate(latestPositionMap.get(device.getId())); - } - - public void unregisterPositionUpdate(Device device) { - positionUpdateMap.remove(device.getId()); - } - - @Override - public void onPositionSelected(Position position) { - mapHandler.onDeviceSelected(position.getDevice()); - } - - @Override - public void onArchivePositionSelected(Position position) { - mapHandler.onArchivePositionSelected(position); - } - -} diff --git a/src/org/traccar/web/client/controller/SettingsController.java b/src/org/traccar/web/client/controller/SettingsController.java deleted file mode 100644 index bd20288b..00000000 --- a/src/org/traccar/web/client/controller/SettingsController.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.controller; - -import java.util.List; - -import org.traccar.web.client.Application; -import org.traccar.web.client.ApplicationContext; -import org.traccar.web.client.model.BaseAsyncCallback; -import org.traccar.web.client.model.UserProperties; -import org.traccar.web.client.view.ApplicationSettingsDialog; -import org.traccar.web.client.view.DeviceView; -import org.traccar.web.client.view.UserDialog; -import org.traccar.web.client.view.UserSettingsDialog; -import org.traccar.web.client.view.UsersDialog; -import org.traccar.web.shared.model.ApplicationSettings; -import org.traccar.web.shared.model.User; -import org.traccar.web.shared.model.UserSettings; - -import com.google.gwt.core.client.GWT; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.widget.core.client.Dialog.PredefinedButton; -import com.sencha.gxt.widget.core.client.box.AlertMessageBox; -import com.sencha.gxt.widget.core.client.box.ConfirmMessageBox; -import com.sencha.gxt.widget.core.client.event.DialogHideEvent; - -public class SettingsController implements DeviceView.SettingsHandler { - - @Override - public void onAccountSelected() { - new UserDialog( - ApplicationContext.getInstance().getUser(), - new UserDialog.UserHandler() { - @Override - public void onSave(User user) { - Application.getDataService().updateUser(user, new BaseAsyncCallback<User>() { - @Override - public void onSuccess(User result) { - ApplicationContext.getInstance().setUser(result); - } - }); - } - }).show(); - } - - @Override - public void onPreferencesSelected() { - new UserSettingsDialog( - ApplicationContext.getInstance().getUserSettings(), - new UserSettingsDialog.UserSettingsHandler() { - @Override - public void onSave(UserSettings userSettings) { - ApplicationContext.getInstance().setUserSettings(userSettings); - User user = ApplicationContext.getInstance().getUser(); - Application.getDataService().updateUser(user, new BaseAsyncCallback<User>() { - @Override - public void onSuccess(User result) { - ApplicationContext.getInstance().setUser(result); - } - }); - } - }).show(); - } - - @Override - public void onUsersSelected() { - Application.getDataService().getUsers(new BaseAsyncCallback<List<User>>() { - @Override - public void onSuccess(List<User> result) { - UserProperties userProperties = GWT.create(UserProperties.class); - final ListStore<User> userStore = new ListStore<User>(userProperties.id()); - userStore.addAll(result); - - new UsersDialog(userStore, new UsersDialog.UserHandler() { - - @Override - public void onAdd() { - new UserDialog( - new User(), - new UserDialog.UserHandler() { - @Override - public void onSave(User user) { - Application.getDataService().addUser(user, new BaseAsyncCallback<User>() { - @Override - public void onSuccess(User result) { - userStore.add(result); - } - @Override - public void onFailure(Throwable caught) { - new AlertMessageBox("Error", "Username is already taken").show(); - } - }); - } - }).show(); - } - - @Override - public void onRemove(final User user) { - final ConfirmMessageBox dialog = new ConfirmMessageBox("Confirm", "Are you sure you want remove user?"); - dialog.addDialogHideHandler(new DialogHideEvent.DialogHideHandler() { - @Override - public void onDialogHide(DialogHideEvent event) { - if (event.getHideButton() == PredefinedButton.YES) { - Application.getDataService().removeUser(user, new BaseAsyncCallback<User>() { - @Override - public void onSuccess(User result) { - userStore.remove(user); - } - }); - } - } - }); - dialog.show(); - } - - }).show(); - } - }); - } - - @Override - public void onApplicationSelected() { - new ApplicationSettingsDialog( - ApplicationContext.getInstance().getApplicationSettings(), - new ApplicationSettingsDialog.ApplicationSettingsHandler() { - @Override - public void onSave(ApplicationSettings applicationSettings) { - Application.getDataService().updateApplicationSettings(applicationSettings, new BaseAsyncCallback<ApplicationSettings>() { - @Override - public void onSuccess(ApplicationSettings result) { - ApplicationContext.getInstance().setApplicationSettings(result); - } - }); - } - }).show(); - } - -} diff --git a/src/org/traccar/web/client/controller/StateController.java b/src/org/traccar/web/client/controller/StateController.java deleted file mode 100644 index a19bec81..00000000 --- a/src/org/traccar/web/client/controller/StateController.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.controller; - -import org.traccar.web.client.model.StateItem; -import org.traccar.web.client.model.StateItemProperties; -import org.traccar.web.client.model.StateReader; -import org.traccar.web.client.view.StateView; -import org.traccar.web.shared.model.Position; - -import com.google.gwt.core.client.GWT; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.widget.core.client.ContentPanel; - -public class StateController implements ContentController { - - private ListStore<StateItem> stateStore; - - private StateView stateView; - - public StateController() { - StateItemProperties stateItemProperties = GWT.create(StateItemProperties.class); - stateStore = new ListStore<StateItem>(stateItemProperties.id()); - stateView = new StateView(stateStore); - } - - @Override - public ContentPanel getView() { - return stateView.getView(); - } - - @Override - public void run() { - } - - public void showState(Position position) { - if (position != null) { - stateStore.replaceAll(StateReader.getState(position)); - } else { - stateStore.clear(); - } - } - -} diff --git a/src/org/traccar/web/client/model/ApplicationSettingsProperties.java b/src/org/traccar/web/client/model/ApplicationSettingsProperties.java deleted file mode 100644 index b30572e5..00000000 --- a/src/org/traccar/web/client/model/ApplicationSettingsProperties.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import org.traccar.web.shared.model.ApplicationSettings; - -import com.sencha.gxt.core.client.ValueProvider; -import com.sencha.gxt.data.shared.ModelKeyProvider; -import com.sencha.gxt.data.shared.PropertyAccess; - -public interface ApplicationSettingsProperties extends PropertyAccess<ApplicationSettings> { - - ModelKeyProvider<ApplicationSettings> id(); - - ValueProvider<ApplicationSettings, Boolean> registrationEnabled(); - -} diff --git a/src/org/traccar/web/client/model/BaseAsyncCallback.java b/src/org/traccar/web/client/model/BaseAsyncCallback.java deleted file mode 100644 index cb0c4792..00000000 --- a/src/org/traccar/web/client/model/BaseAsyncCallback.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.sencha.gxt.widget.core.client.box.AlertMessageBox; - -public class BaseAsyncCallback<T> implements AsyncCallback<T> { - - @Override - public void onFailure(Throwable caught) { - new AlertMessageBox("Error", "Remote procedure call error").show(); - } - - @Override - public void onSuccess(T result) { - } - -} diff --git a/src/org/traccar/web/client/model/BaseStoreHandlers.java b/src/org/traccar/web/client/model/BaseStoreHandlers.java deleted file mode 100644 index f34ff3a3..00000000 --- a/src/org/traccar/web/client/model/BaseStoreHandlers.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import com.sencha.gxt.data.shared.event.StoreAddEvent; -import com.sencha.gxt.data.shared.event.StoreClearEvent; -import com.sencha.gxt.data.shared.event.StoreDataChangeEvent; -import com.sencha.gxt.data.shared.event.StoreFilterEvent; -import com.sencha.gxt.data.shared.event.StoreHandlers; -import com.sencha.gxt.data.shared.event.StoreRecordChangeEvent; -import com.sencha.gxt.data.shared.event.StoreRemoveEvent; -import com.sencha.gxt.data.shared.event.StoreSortEvent; -import com.sencha.gxt.data.shared.event.StoreUpdateEvent; - -public class BaseStoreHandlers<T> implements StoreHandlers<T> { - - @Override - public void onAdd(StoreAddEvent<T> event) { - onAnything(); - } - - @Override - public void onRemove(StoreRemoveEvent<T> event) { - onAnything(); - } - - @Override - public void onFilter(StoreFilterEvent<T> event) { - onAnything(); - } - - @Override - public void onClear(StoreClearEvent<T> event) { - onAnything(); - } - - @Override - public void onUpdate(StoreUpdateEvent<T> event) { - onAnything(); - } - - @Override - public void onDataChange(StoreDataChangeEvent<T> event) { - onAnything(); - } - - @Override - public void onRecordChange(StoreRecordChangeEvent<T> event) { - onAnything(); - } - - @Override - public void onSort(StoreSortEvent<T> event) { - onAnything(); - } - - public void onAnything() { - } - -} diff --git a/src/org/traccar/web/client/model/DataService.java b/src/org/traccar/web/client/model/DataService.java deleted file mode 100644 index a693b6e6..00000000 --- a/src/org/traccar/web/client/model/DataService.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import java.util.Date; -import java.util.List; - -import org.traccar.web.shared.model.ApplicationSettings; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; -import org.traccar.web.shared.model.User; - -import com.google.gwt.user.client.rpc.RemoteService; -import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; - -@RemoteServiceRelativePath("dataService") -public interface DataService extends RemoteService { - - User authenticated() throws IllegalStateException; - - User login(String login, String password); - - boolean logout(); - - User register(String login, String password); - - List<User> getUsers(); - - User addUser(User user); - - User updateUser(User user); - - User removeUser(User user); - - List<Device> getDevices(); - - Device addDevice(Device device); - - Device updateDevice(Device device); - - Device removeDevice(Device device); - - List<Position> getPositions(Device device, Date from, Date to); - - List<Position> getLatestPositions(); - - ApplicationSettings updateApplicationSettings(ApplicationSettings applicationSettings); - -} diff --git a/src/org/traccar/web/client/model/DataServiceAsync.java b/src/org/traccar/web/client/model/DataServiceAsync.java deleted file mode 100644 index b1830639..00000000 --- a/src/org/traccar/web/client/model/DataServiceAsync.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import java.util.Date; -import java.util.List; - -import org.traccar.web.shared.model.ApplicationSettings; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; -import org.traccar.web.shared.model.User; - -import com.google.gwt.user.client.rpc.AsyncCallback; - -public interface DataServiceAsync { - - void authenticated(AsyncCallback<User> callback); - - void login(String login, String password, AsyncCallback<User> callback); - - void logout(AsyncCallback<Boolean> callback); - - void register(String login, String password, AsyncCallback<User> callback); - - void getUsers(AsyncCallback<List<User>> callback); - - void addUser(User user, AsyncCallback<User> callback); - - void updateUser(User user, AsyncCallback<User> callback); - - void removeUser(User user, AsyncCallback<User> callback); - - void getDevices(AsyncCallback<List<Device>> callback); - - void addDevice(Device device, AsyncCallback<Device> callback); - - void updateDevice(Device device, AsyncCallback<Device> callback); - - void removeDevice(Device device, AsyncCallback<Device> callback); - - void getLatestPositions(AsyncCallback<List<Position>> callback); - - void getPositions(Device device, Date from, Date to, AsyncCallback<List<Position>> callback); - - void updateApplicationSettings(ApplicationSettings applicationSettings, AsyncCallback<ApplicationSettings> callback); - -} diff --git a/src/org/traccar/web/client/model/DeviceProperties.java b/src/org/traccar/web/client/model/DeviceProperties.java deleted file mode 100644 index 35f946a2..00000000 --- a/src/org/traccar/web/client/model/DeviceProperties.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import org.traccar.web.shared.model.Device; - -import com.google.gwt.editor.client.Editor.Path; -import com.sencha.gxt.core.client.ValueProvider; -import com.sencha.gxt.data.shared.LabelProvider; -import com.sencha.gxt.data.shared.ModelKeyProvider; -import com.sencha.gxt.data.shared.PropertyAccess; - -public interface DeviceProperties extends PropertyAccess<Device> { - - ModelKeyProvider<Device> id(); - - ValueProvider<Device, String> uniqueId(); - - ValueProvider<Device, String> name(); - - @Path("name") - LabelProvider<Device> label(); - -} diff --git a/src/org/traccar/web/client/model/EnumKeyProvider.java b/src/org/traccar/web/client/model/EnumKeyProvider.java deleted file mode 100644 index c41d420e..00000000 --- a/src/org/traccar/web/client/model/EnumKeyProvider.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.traccar.web.client.model; - -import com.sencha.gxt.data.shared.ModelKeyProvider; - - -public class EnumKeyProvider<T extends Enum<T>> implements ModelKeyProvider<T> { - - @Override - public String getKey(T item) { - return String.valueOf(item.ordinal()); - } - -} diff --git a/src/org/traccar/web/client/model/PositionProperties.java b/src/org/traccar/web/client/model/PositionProperties.java deleted file mode 100644 index 86ab5327..00000000 --- a/src/org/traccar/web/client/model/PositionProperties.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import java.util.Date; - -import org.traccar.web.shared.model.Position; - -import com.sencha.gxt.core.client.ValueProvider; -import com.sencha.gxt.data.shared.ModelKeyProvider; -import com.sencha.gxt.data.shared.PropertyAccess; - -public interface PositionProperties extends PropertyAccess<Position> { - - ModelKeyProvider<Position> id(); - - ValueProvider<Position, Date> time(); - - ValueProvider<Position, Boolean> valid(); - - ValueProvider<Position, Double> latitude(); - - ValueProvider<Position, Double> longitude(); - - ValueProvider<Position, Double> altitude(); - - ValueProvider<Position, Double> speed(); - - ValueProvider<Position, Double> course(); - - ValueProvider<Position, Double> power(); - - ValueProvider<Position, String> address(); - -} diff --git a/src/org/traccar/web/client/model/StateItem.java b/src/org/traccar/web/client/model/StateItem.java deleted file mode 100644 index 651d2a24..00000000 --- a/src/org/traccar/web/client/model/StateItem.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.traccar.web.client.model; - - -public class StateItem { - - public StateItem(String name, String value) { - this.name = name; - this.value = value; - } - - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - private String value; - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - -} diff --git a/src/org/traccar/web/client/model/StateItemProperties.java b/src/org/traccar/web/client/model/StateItemProperties.java deleted file mode 100644 index e3700a52..00000000 --- a/src/org/traccar/web/client/model/StateItemProperties.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.traccar.web.client.model; - -import com.google.gwt.editor.client.Editor.Path; -import com.sencha.gxt.core.client.ValueProvider; -import com.sencha.gxt.data.shared.ModelKeyProvider; -import com.sencha.gxt.data.shared.PropertyAccess; - -public interface StateItemProperties extends PropertyAccess<StateItem> { - - @Path("name") - ModelKeyProvider<StateItem> id(); - - ValueProvider<StateItem, String> name(); - - ValueProvider<StateItem, String> value(); - -} diff --git a/src/org/traccar/web/client/model/StateReader.java b/src/org/traccar/web/client/model/StateReader.java deleted file mode 100644 index 10ed9809..00000000 --- a/src/org/traccar/web/client/model/StateReader.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.traccar.web.client.model; - -import java.util.LinkedList; -import java.util.List; - -import org.traccar.web.client.ApplicationContext; -import org.traccar.web.shared.model.Position; - -import com.google.gwt.xml.client.Node; -import com.google.gwt.xml.client.NodeList; -import com.google.gwt.xml.client.XMLParser; - -public class StateReader { - - private static String toString(Object object) { - if (object != null) { - return object.toString(); - } - return null; - } - - public static List<StateItem> getState(Position position) { - List<StateItem> state = new LinkedList<StateItem>(); - - state.add(new StateItem("valid", toString(position.getValid()))); - state.add(new StateItem("time", ApplicationContext.getInstance().getFormatterUtil().getTimeFormat().format(position.getTime()))); - state.add(new StateItem("latitude", toString(position.getLatitude()))); - state.add(new StateItem("longitude", toString(position.getLongitude()))); - state.add(new StateItem("altitude", toString(position.getAltitude()))); - state.add(new StateItem("speed", ApplicationContext.getInstance().getFormatterUtil().getSpeedFormat().format(position.getSpeed()))); - state.add(new StateItem("course", toString(position.getCourse()))); - state.add(new StateItem("power", toString(position.getPower()))); - state.add(new StateItem("address", position.getAddress())); - - String other = position.getOther(); - if (other != null) { - try { - NodeList nodes = XMLParser.parse(other).getFirstChild().getChildNodes(); - for (int i = 0; i < nodes.getLength(); i++) { - Node node = nodes.item(i); - state.add(new StateItem(node.getNodeName(), node.getFirstChild().getNodeValue())); - } - } catch (Exception error) { - } - } - - return state; - } - -} diff --git a/src/org/traccar/web/client/model/UserProperties.java b/src/org/traccar/web/client/model/UserProperties.java deleted file mode 100644 index cba2996f..00000000 --- a/src/org/traccar/web/client/model/UserProperties.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import org.traccar.web.shared.model.User; - -import com.sencha.gxt.core.client.ValueProvider; -import com.sencha.gxt.data.shared.ModelKeyProvider; -import com.sencha.gxt.data.shared.PropertyAccess; - -public interface UserProperties extends PropertyAccess<User> { - - ModelKeyProvider<User> id(); - - ValueProvider<User, String> login(); - - ValueProvider<User, String> password(); - - ValueProvider<User, Boolean> admin(); - -} diff --git a/src/org/traccar/web/client/model/UserSettingsProperties.java b/src/org/traccar/web/client/model/UserSettingsProperties.java deleted file mode 100644 index dad7111d..00000000 --- a/src/org/traccar/web/client/model/UserSettingsProperties.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.model; - -import org.traccar.web.shared.model.UserSettings; -import org.traccar.web.shared.model.UserSettings.SpeedUnit; - -import com.sencha.gxt.core.client.ValueProvider; -import com.sencha.gxt.data.shared.LabelProvider; -import com.sencha.gxt.data.shared.ModelKeyProvider; -import com.sencha.gxt.data.shared.PropertyAccess; - -public interface UserSettingsProperties extends PropertyAccess<UserSettings> { - - ModelKeyProvider<UserSettings> id(); - - ValueProvider<UserSettings, UserSettings.SpeedUnit> speedUnit(); - - public static class SpeedUnitLabelProvider implements LabelProvider<UserSettings.SpeedUnit> { - - @Override - public String getLabel(SpeedUnit item) { - switch (item) { - case kilometersPerHour: - return "km/h"; - case knots: - return "knots"; - case milesPerHour: - return "mph"; - default: - return null; - } - } - - } - -} diff --git a/src/org/traccar/web/client/view/ApplicationSettingsDialog.java b/src/org/traccar/web/client/view/ApplicationSettingsDialog.java deleted file mode 100644 index 24b9f96d..00000000 --- a/src/org/traccar/web/client/view/ApplicationSettingsDialog.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import org.traccar.web.shared.model.ApplicationSettings; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.editor.client.Editor; -import com.google.gwt.editor.client.SimpleBeanEditorDriver; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.widget.core.client.Window; -import com.sencha.gxt.widget.core.client.event.SelectEvent; -import com.sencha.gxt.widget.core.client.form.CheckBox; - -public class ApplicationSettingsDialog implements Editor<ApplicationSettings> { - - private static ApplicationSettingsDialogUiBinder uiBinder = GWT.create(ApplicationSettingsDialogUiBinder.class); - - interface ApplicationSettingsDialogUiBinder extends UiBinder<Widget, ApplicationSettingsDialog> { - } - - private ApplicationSettingsDriver driver = GWT.create(ApplicationSettingsDriver.class); - - interface ApplicationSettingsDriver extends SimpleBeanEditorDriver<ApplicationSettings, ApplicationSettingsDialog> { - } - - public interface ApplicationSettingsHandler { - public void onSave(ApplicationSettings applicationSettings); - } - - private ApplicationSettingsHandler applicationSettingsHandler; - - @UiField - Window window; - - @UiField - CheckBox registrationEnabled; - - public ApplicationSettingsDialog(ApplicationSettings applicationSettings, ApplicationSettingsHandler applicationSettingsHandler) { - this.applicationSettingsHandler = applicationSettingsHandler; - uiBinder.createAndBindUi(this); - driver.initialize(this); - driver.edit(applicationSettings); - } - - public void show() { - window.show(); - } - - public void hide() { - window.hide(); - } - - @UiHandler("saveButton") - public void onLoginClicked(SelectEvent event) { - window.hide(); - applicationSettingsHandler.onSave(driver.flush()); - } - - @UiHandler("cancelButton") - public void onRegisterClicked(SelectEvent event) { - window.hide(); - } - -} diff --git a/src/org/traccar/web/client/view/ApplicationSettingsDialog.ui.xml b/src/org/traccar/web/client/view/ApplicationSettingsDialog.ui.xml deleted file mode 100644 index effdc4ad..00000000 --- a/src/org/traccar/web/client/view/ApplicationSettingsDialog.ui.xml +++ /dev/null @@ -1,33 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:form="urn:import:com.sencha.gxt.widget.core.client.form" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button"> - - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="verticalLayoutData"> - <ui:attributes width="1" height="-1" /> - </ui:with> - - <gxt:Window ui:field="window" pixelSize="300, 110" modal="true" headingText="Global Settings" focusWidget="{saveButton}"> - <container:VerticalLayoutContainer> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="Registration"> - <form:widget> - <form:CheckBox ui:field="registrationEnabled" /> - </form:widget> - </form:FieldLabel> - </container:child> - </container:VerticalLayoutContainer> - - <gxt:button> - <button:TextButton ui:field="saveButton" text="Save" /> - </gxt:button> - <gxt:button> - <button:TextButton ui:field="cancelButton" text="Cancel" /> - </gxt:button> - </gxt:Window> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/ApplicationView.java b/src/org/traccar/web/client/view/ApplicationView.java deleted file mode 100644 index dfa5335d..00000000 --- a/src/org/traccar/web/client/view/ApplicationView.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.widget.core.client.ContentPanel; - -public class ApplicationView extends Composite { - - private static ApplicationViewUiBinder uiBinder = GWT.create(ApplicationViewUiBinder.class); - - interface ApplicationViewUiBinder extends UiBinder<Widget, ApplicationView> { - } - - @UiField(provided = true) - ContentPanel devicePanel; - - @UiField(provided = true) - ContentPanel statePanel; - - @UiField(provided = true) - ContentPanel mapPanel; - - @UiField(provided = true) - ContentPanel archivePanel; - - public ApplicationView(ContentPanel deviceView, ContentPanel stateView, ContentPanel mapView, ContentPanel archiveView) { - devicePanel = deviceView; - statePanel = stateView; - mapPanel = mapView; - archivePanel = archiveView; - initWidget(uiBinder.createAndBindUi(this)); - } - -} diff --git a/src/org/traccar/web/client/view/ApplicationView.ui.xml b/src/org/traccar/web/client/view/ApplicationView.ui.xml deleted file mode 100644 index 0b05ab9b..00000000 --- a/src/org/traccar/web/client/view/ApplicationView.ui.xml +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client"> - - <ui:with type="com.sencha.gxt.core.client.util.Margins" field="topMargins"> - <ui:attributes top="5" right="0" bottom="0" left="0" /> - </ui:with> - <ui:with type="com.sencha.gxt.core.client.util.Margins" field="westMargins"> - <ui:attributes top="5" right="5" bottom="0" left="5" /> - </ui:with> - <ui:with type="com.sencha.gxt.core.client.util.Margins" field="centerMargins"> - <ui:attributes top="5" right="5" bottom="0" left="0" /> - </ui:with> - <ui:with type="com.sencha.gxt.core.client.util.Margins" field="southMargins"> - <ui:attributes top="5" right="5" bottom="5" left="5" /> - </ui:with> - - <ui:with type="com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData" field="westData"> - <ui:attributes size="0.15" maxSize="2147483647" margins="{westMargins}" split="true" /> - </ui:with> - <ui:with type="com.sencha.gxt.widget.core.client.container.MarginData" field="centerData"> - <ui:attributes margins="{centerMargins}" /> - </ui:with> - <ui:with type="com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData" field="southData"> - <ui:attributes size="0.25" maxSize="2147483647" margins="{southMargins}" split="true" /> - </ui:with> - - <ui:with type="com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData" field="bottomData"> - <ui:attributes size="0.5" maxSize="2147483647" margins="{topMargins}" split="true" /> - </ui:with> - - <container:Viewport> - <container:BorderLayoutContainer> - <container:west layoutData="{westData}"> - <container:BorderLayoutContainer> - <container:center> - <gxt:ContentPanel ui:field="devicePanel" /> - </container:center> - <container:south layoutData="{bottomData}"> - <gxt:ContentPanel ui:field="statePanel" /> - </container:south> - </container:BorderLayoutContainer> - </container:west> - <container:center layoutData="{centerData}"> - <gxt:ContentPanel ui:field="mapPanel" /> - </container:center> - <container:south layoutData="{southData}"> - <gxt:ContentPanel ui:field="archivePanel" /> - </container:south> - </container:BorderLayoutContainer> - </container:Viewport> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/ArchiveView.java b/src/org/traccar/web/client/view/ArchiveView.java deleted file mode 100644 index 9cc579f8..00000000 --- a/src/org/traccar/web/client/view/ArchiveView.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import java.util.Date; -import java.util.LinkedList; -import java.util.List; - -import org.traccar.web.client.ApplicationContext; -import org.traccar.web.client.model.BaseStoreHandlers; -import org.traccar.web.client.model.DeviceProperties; -import org.traccar.web.client.model.PositionProperties; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; - -import com.google.gwt.cell.client.DateCell; -import com.google.gwt.core.client.GWT; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.cell.core.client.NumberCell; -import com.sencha.gxt.core.client.Style.SelectionMode; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.data.shared.event.StoreHandlers; -import com.sencha.gxt.widget.core.client.ContentPanel; -import com.sencha.gxt.widget.core.client.event.SelectEvent; -import com.sencha.gxt.widget.core.client.form.ComboBox; -import com.sencha.gxt.widget.core.client.form.DateField; -import com.sencha.gxt.widget.core.client.form.TimeField; -import com.sencha.gxt.widget.core.client.grid.ColumnConfig; -import com.sencha.gxt.widget.core.client.grid.ColumnModel; -import com.sencha.gxt.widget.core.client.grid.Grid; -import com.sencha.gxt.widget.core.client.selection.SelectionChangedEvent; - -public class ArchiveView implements SelectionChangedEvent.SelectionChangedHandler<Position> { - - private static ArchiveViewUiBinder uiBinder = GWT.create(ArchiveViewUiBinder.class); - - interface ArchiveViewUiBinder extends UiBinder<Widget, ArchiveView> { - } - - public interface ArchiveHandler { - public void onSelected(Position position); - public void onLoad(Device device, Date from, Date to); - public void onClear(); - } - - private ArchiveHandler archiveHandler; - - @UiField - ContentPanel contentPanel; - - public ContentPanel getView() { - return contentPanel; - } - - ListStore<Device> deviceStore; - - @UiField - DateField fromDate; - - @UiField - TimeField fromTime; - - @UiField - DateField toDate; - - @UiField - TimeField toTime; - - @UiField(provided = true) - ComboBox<Device> deviceCombo; - - @UiField(provided = true) - ColumnModel<Position> columnModel; - - @UiField(provided = true) - ListStore<Position> positionStore; - - @UiField - Grid<Position> grid; - - public ArchiveView(ArchiveHandler archiveHandler, ListStore<Position> positionStore, ListStore<Device> deviceStore) { - this.archiveHandler = archiveHandler; - this.positionStore = positionStore; - deviceStore.addStoreHandlers(deviceStoreHandlers); - this.deviceStore = deviceStore; - - DeviceProperties deviceProperties = GWT.create(DeviceProperties.class); - deviceCombo = new ComboBox<Device>(deviceStore, deviceProperties.label()); - - PositionProperties positionProperties = GWT.create(PositionProperties.class); - - List<ColumnConfig<Position, ?>> columnConfigList = new LinkedList<ColumnConfig<Position, ?>>(); - - columnConfigList.add(new ColumnConfig<Position, Boolean>(positionProperties.valid(), 0, "Valid")); - - ColumnConfig<Position, Date> columnConfigDate = new ColumnConfig<Position, Date>(positionProperties.time(), 0, "Time"); - columnConfigDate.setCell(new DateCell(ApplicationContext.getInstance().getFormatterUtil().getTimeFormat())); - columnConfigList.add(columnConfigDate); - - columnConfigList.add(new ColumnConfig<Position, Double>(positionProperties.latitude(), 0, "Latitude")); - columnConfigList.add(new ColumnConfig<Position, Double>(positionProperties.longitude(), 0, "Longitude")); - columnConfigList.add(new ColumnConfig<Position, Double>(positionProperties.altitude(), 0, "Altitude")); - - ColumnConfig<Position, Double> columnConfigDouble = new ColumnConfig<Position, Double>(positionProperties.speed(), 0, "Speed"); - columnConfigDouble.setCell(new NumberCell<Double>(ApplicationContext.getInstance().getFormatterUtil().getSpeedFormat())); - columnConfigList.add(columnConfigDouble); - - columnConfigList.add(new ColumnConfig<Position, Double>(positionProperties.course(), 0, "Course")); - columnConfigList.add(new ColumnConfig<Position, Double>(positionProperties.power(), 0, "Power")); - - columnModel = new ColumnModel<Position>(columnConfigList); - - uiBinder.createAndBindUi(this); - - grid.getSelectionModel().addSelectionChangedHandler(this); - grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); - - // Initialize with current time - long min = 60 * 1000; - Date now = new Date(); - Date to = new Date(((now.getTime() + 15 * min) / (15 * min)) * 15 * min); - Date from = new Date(to.getTime() - 60 * min); - fromDate.setValue(from); - fromTime.setValue(from); - toDate.setValue(to); - toTime.setValue(to); - } - - @Override - public void onSelectionChanged(SelectionChangedEvent<Position> event) { - if (event.getSelection().isEmpty()) { - archiveHandler.onSelected(null); - } else { - archiveHandler.onSelected(event.getSelection().get(0)); - } - } - - @SuppressWarnings("deprecation") - private static Date getCombineDate(DateField dateField, TimeField timeField) { - Date result = null; - Date date = dateField.getValue(); - Date time = timeField.getValue(); - if (date != null && time != null) { - result = new Date( - date.getYear(), date.getMonth(), date.getDate(), - time.getHours(), time.getMinutes(), time.getSeconds()); - } - return result; - } - - @UiHandler("loadButton") - public void onLoadClicked(SelectEvent event) { - archiveHandler.onLoad( - deviceCombo.getValue(), - getCombineDate(fromDate, fromTime), - getCombineDate(toDate, toTime)); - } - - @UiHandler("clearButton") - public void onClearClicked(SelectEvent event) { - archiveHandler.onClear(); - } - - private StoreHandlers<Device> deviceStoreHandlers = new BaseStoreHandlers<Device>() { - - @Override - public void onAnything() { - Device oldDevice = deviceCombo.getValue(); - if (oldDevice != null) { - deviceCombo.setValue(deviceStore.findModel(oldDevice)); - } - } - - }; - - public void selectPosition(Position position) { - grid.getSelectionModel().select(positionStore.findModel(position), false); - } - -} diff --git a/src/org/traccar/web/client/view/ArchiveView.ui.xml b/src/org/traccar/web/client/view/ArchiveView.ui.xml deleted file mode 100644 index f27d38ff..00000000 --- a/src/org/traccar/web/client/view/ArchiveView.ui.xml +++ /dev/null @@ -1,62 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:toolbar="urn:import:com.sencha.gxt.widget.core.client.toolbar" - xmlns:grid="urn:import:com.sencha.gxt.widget.core.client.grid" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button" - xmlns:form="urn:import:com.sencha.gxt.widget.core.client.form"> - - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="toolBarRowData"> - <ui:attributes width="1" height="-1" /> - </ui:with> - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="layoutData"> - <ui:attributes width="1" height="1" /> - </ui:with> - - <ui:with type="com.sencha.gxt.data.shared.ListStore" field="positionStore" /> - <ui:with type="com.sencha.gxt.widget.core.client.grid.ColumnModel" field="columnModel" /> - - <ui:with type="com.sencha.gxt.widget.core.client.grid.GridView" field="view"> - <ui:attributes stripeRows="true" autoFill="true" /> - </ui:with> - - <gxt:ContentPanel ui:field="contentPanel" headingText="Archive"> - <container:VerticalLayoutContainer> - - <container:child layoutData="{toolBarRowData}"> - <toolbar:ToolBar> - - <toolbar:LabelToolItem label="Device:" /> - <form:ComboBox ui:field="deviceCombo" editable="false" triggerAction="ALL" /> - <toolbar:SeparatorToolItem /> - - <toolbar:LabelToolItem label="From:" /> - <form:DateField width="125" ui:field="fromDate" /> - <toolbar:LabelToolItem width="5" /> - <form:TimeField width="75" ui:field="fromTime" triggerAction="ALL" /> - <toolbar:SeparatorToolItem /> - - <toolbar:LabelToolItem label="To:" /> - <form:DateField width="125" ui:field="toDate" /> - <toolbar:LabelToolItem width="5" /> - <form:TimeField width="75" ui:field="toTime" triggerAction="ALL" /> - <toolbar:SeparatorToolItem /> - - <button:TextButton ui:field="loadButton" text="Load" /> - <toolbar:FillToolItem /> - <button:TextButton ui:field="clearButton" text="Clear" /> - - </toolbar:ToolBar> - </container:child> - - <container:child layoutData="{layoutData}"> - <grid:Grid ui:field="grid" store="{positionStore}" cm="{columnModel}" view="{view}" /> - </container:child> - - </container:VerticalLayoutContainer> - </gxt:ContentPanel> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/DeviceDialog.java b/src/org/traccar/web/client/view/DeviceDialog.java deleted file mode 100644 index 9e94e963..00000000 --- a/src/org/traccar/web/client/view/DeviceDialog.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import org.traccar.web.shared.model.Device; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.editor.client.Editor; -import com.google.gwt.editor.client.SimpleBeanEditorDriver; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.widget.core.client.Window; -import com.sencha.gxt.widget.core.client.event.SelectEvent; -import com.sencha.gxt.widget.core.client.form.TextField; - -public class DeviceDialog implements Editor<Device> { - - private static DeviceDialogUiBinder uiBinder = GWT.create(DeviceDialogUiBinder.class); - - interface DeviceDialogUiBinder extends UiBinder<Widget, DeviceDialog> { - } - - private DeviceDriver driver = GWT.create(DeviceDriver.class); - - interface DeviceDriver extends SimpleBeanEditorDriver<Device, DeviceDialog> { - } - - public interface DeviceHandler { - public void onSave(Device device); - } - - private DeviceHandler deviceHandler; - - @UiField - Window window; - - @UiField - TextField name; - - @UiField - TextField uniqueId; - - public DeviceDialog(Device device, DeviceHandler deviceHandler) { - this.deviceHandler = deviceHandler; - uiBinder.createAndBindUi(this); - driver.initialize(this); - driver.edit(device); - } - - public void show() { - window.show(); - } - - public void hide() { - window.hide(); - } - - @UiHandler("saveButton") - public void onLoginClicked(SelectEvent event) { - window.hide(); - deviceHandler.onSave(driver.flush()); - } - - @UiHandler("cancelButton") - public void onRegisterClicked(SelectEvent event) { - window.hide(); - } - -} diff --git a/src/org/traccar/web/client/view/DeviceDialog.ui.xml b/src/org/traccar/web/client/view/DeviceDialog.ui.xml deleted file mode 100644 index 4f7ccc56..00000000 --- a/src/org/traccar/web/client/view/DeviceDialog.ui.xml +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:form="urn:import:com.sencha.gxt.widget.core.client.form" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button"> - - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="verticalLayoutData"> - <ui:attributes width="1" height="-1" /> - </ui:with> - - <gxt:Window ui:field="window" pixelSize="300, 130" modal="true" headingText="Device" focusWidget="{saveButton}"> - <container:VerticalLayoutContainer> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="Name"> - <form:widget> - <form:TextField ui:field="name" /> - </form:widget> - </form:FieldLabel> - </container:child> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="Unique Identifier"> - <form:widget> - <form:TextField ui:field="uniqueId" /> - </form:widget> - </form:FieldLabel> - </container:child> - </container:VerticalLayoutContainer> - - <gxt:button> - <button:TextButton ui:field="saveButton" text="Save" /> - </gxt:button> - <gxt:button> - <button:TextButton ui:field="cancelButton" text="Cancel" /> - </gxt:button> - </gxt:Window> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/DeviceView.java b/src/org/traccar/web/client/view/DeviceView.java deleted file mode 100644 index 21d906c8..00000000 --- a/src/org/traccar/web/client/view/DeviceView.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import java.util.LinkedList; -import java.util.List; - -import org.traccar.web.client.Application; -import org.traccar.web.client.ApplicationContext; -import org.traccar.web.client.model.BaseAsyncCallback; -import org.traccar.web.client.model.DeviceProperties; -import org.traccar.web.shared.model.Device; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.logical.shared.SelectionEvent; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.core.client.Style.SelectionMode; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.widget.core.client.ContentPanel; -import com.sencha.gxt.widget.core.client.button.TextButton; -import com.sencha.gxt.widget.core.client.event.SelectEvent; -import com.sencha.gxt.widget.core.client.grid.ColumnConfig; -import com.sencha.gxt.widget.core.client.grid.ColumnModel; -import com.sencha.gxt.widget.core.client.grid.Grid; -import com.sencha.gxt.widget.core.client.menu.Item; -import com.sencha.gxt.widget.core.client.menu.MenuItem; -import com.sencha.gxt.widget.core.client.selection.SelectionChangedEvent; - -public class DeviceView implements SelectionChangedEvent.SelectionChangedHandler<Device> { - - private static DeviceViewUiBinder uiBinder = GWT.create(DeviceViewUiBinder.class); - - interface DeviceViewUiBinder extends UiBinder<Widget, DeviceView> { - } - - public interface DeviceHandler { - public void onSelected(Device device); - public void onAdd(); - public void onEdit(Device device); - public void onRemove(Device device); - } - - private DeviceHandler deviceHandler; - - @UiField - ContentPanel contentPanel; - - public ContentPanel getView() { - return contentPanel; - } - - @UiField - TextButton addButton; - - @UiField - TextButton editButton; - - @UiField - TextButton removeButton; - - @UiField(provided = true) - ColumnModel<Device> columnModel; - - @UiField(provided = true) - ListStore<Device> deviceStore; - - @UiField - Grid<Device> grid; - - @UiField - MenuItem settingsUsers; - - @UiField - MenuItem settingsGlobal; - - public DeviceView(DeviceHandler deviceHandler, SettingsHandler settingsHandler, ListStore<Device> deviceStore) { - this.deviceHandler = deviceHandler; - this.settingsHandler = settingsHandler; - this.deviceStore = deviceStore; - - DeviceProperties deviceProperties = GWT.create(DeviceProperties.class); - - List<ColumnConfig<Device, ?>> columnConfigList = new LinkedList<ColumnConfig<Device, ?>>(); - columnConfigList.add(new ColumnConfig<Device, String>(deviceProperties.name(), 0, "Name")); - columnConfigList.add(new ColumnConfig<Device, String>(deviceProperties.uniqueId(), 0, "Unique Identifier")); - columnModel = new ColumnModel<Device>(columnConfigList); - - uiBinder.createAndBindUi(this); - - grid.getSelectionModel().addSelectionChangedHandler(this); - grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); - - if (ApplicationContext.getInstance().getUser().getAdmin()) { - settingsUsers.enable(); - settingsGlobal.enable(); - } - } - - @Override - public void onSelectionChanged(SelectionChangedEvent<Device> event) { - editButton.setEnabled(!event.getSelection().isEmpty()); - removeButton.setEnabled(!event.getSelection().isEmpty()); - - if (event.getSelection().isEmpty()) { - deviceHandler.onSelected(null); - } else { - deviceHandler.onSelected(event.getSelection().get(0)); - } - } - - @UiHandler("addButton") - public void onAddClicked(SelectEvent event) { - deviceHandler.onAdd(); - } - - @UiHandler("editButton") - public void onEditClicked(SelectEvent event) { - deviceHandler.onEdit(grid.getSelectionModel().getSelectedItem()); - } - - @UiHandler("removeButton") - public void onRemoveClicked(SelectEvent event) { - deviceHandler.onRemove(grid.getSelectionModel().getSelectedItem()); - } - - @UiHandler("logoutButton") - public void onLogoutClicked(SelectEvent event) { - Application.getDataService().logout(new BaseAsyncCallback<Boolean>() { - @Override - public void onSuccess(Boolean result) { - Window.Location.reload(); - } - }); - } - - public void selectDevice(Device device) { - grid.getSelectionModel().select(deviceStore.findModel(device), false); - } - - public interface SettingsHandler { - public void onAccountSelected(); - public void onPreferencesSelected(); - public void onUsersSelected(); - public void onApplicationSelected(); - } - - private SettingsHandler settingsHandler; - - @UiHandler("settingsAccount") - public void onSettingsAccountSelected(SelectionEvent<Item> event) { - settingsHandler.onAccountSelected(); - } - - @UiHandler("settingsPreferences") - public void onSettingsPreferencesSelected(SelectionEvent<Item> event) { - settingsHandler.onPreferencesSelected(); - } - - @UiHandler("settingsUsers") - public void onSettingsUsersSelected(SelectionEvent<Item> event) { - settingsHandler.onUsersSelected(); - } - - @UiHandler("settingsGlobal") - public void onSettingsGlobalSelected(SelectionEvent<Item> event) { - settingsHandler.onApplicationSelected(); - } - -} diff --git a/src/org/traccar/web/client/view/DeviceView.ui.xml b/src/org/traccar/web/client/view/DeviceView.ui.xml deleted file mode 100644 index 38721ca0..00000000 --- a/src/org/traccar/web/client/view/DeviceView.ui.xml +++ /dev/null @@ -1,57 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:toolbar="urn:import:com.sencha.gxt.widget.core.client.toolbar" - xmlns:grid="urn:import:com.sencha.gxt.widget.core.client.grid" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button" - xmlns:menu="urn:import:com.sencha.gxt.widget.core.client.menu"> - - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="toolBarRowData"> - <ui:attributes width="1" height="-1" /> - </ui:with> - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="layoutData"> - <ui:attributes width="1" height="1" /> - </ui:with> - - <ui:with type="com.sencha.gxt.data.shared.ListStore" field="deviceStore" /> - <ui:with type="com.sencha.gxt.widget.core.client.grid.ColumnModel" field="columnModel" /> - - <ui:with type="com.sencha.gxt.widget.core.client.grid.GridView" field="view"> - <ui:attributes stripeRows="true" autoFill="true" /> - </ui:with> - - <gxt:ContentPanel ui:field="contentPanel" headingText="Devices"> - <container:VerticalLayoutContainer> - - <container:child layoutData="{toolBarRowData}"> - <toolbar:ToolBar> - <button:TextButton ui:field="addButton" text="Add" /> - <button:TextButton ui:field="editButton" text="Edit" enabled="false" /> - <button:TextButton ui:field="removeButton" text="Remove" enabled="false" /> - <toolbar:FillToolItem /> - <toolbar:SeparatorToolItem /> - <button:TextButton ui:field="settingsButton" text="Settings"> - <button:menu> - <menu:Menu> - <menu:MenuItem text="Account" ui:field="settingsAccount" /> - <menu:MenuItem text="Preferences" ui:field="settingsPreferences" /> - <menu:MenuItem text="Users" ui:field="settingsUsers" enabled="false" /> - <menu:MenuItem text="Global" ui:field="settingsGlobal" enabled="false" /> - </menu:Menu> - </button:menu> - </button:TextButton> - <button:TextButton ui:field="logoutButton" text="Logout" /> - </toolbar:ToolBar> - </container:child> - - <container:child layoutData="{layoutData}"> - <grid:Grid ui:field="grid" store="{deviceStore}" cm="{columnModel}" view="{view}" /> - </container:child> - - </container:VerticalLayoutContainer> - </gxt:ContentPanel> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/LoginDialog.java b/src/org/traccar/web/client/view/LoginDialog.java deleted file mode 100644 index 59b46239..00000000 --- a/src/org/traccar/web/client/view/LoginDialog.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import org.traccar.web.client.ApplicationContext; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.widget.core.client.Window; -import com.sencha.gxt.widget.core.client.button.TextButton; -import com.sencha.gxt.widget.core.client.event.SelectEvent; -import com.sencha.gxt.widget.core.client.form.PasswordField; -import com.sencha.gxt.widget.core.client.form.TextField; - -public class LoginDialog { - - private static LoginDialogUiBinder uiBinder = GWT.create(LoginDialogUiBinder.class); - - interface LoginDialogUiBinder extends UiBinder<Widget, LoginDialog> { - } - - public interface LoginHandler { - public void onLogin(String login, String password); - public void onRegister(String login, String password); - } - - private LoginHandler loginHandler; - - @UiField - Window window; - - @UiField - TextField login; - - @UiField - PasswordField password; - - @UiField - TextButton registerButton; - - public LoginDialog(LoginHandler loginHandler) { - this.loginHandler = loginHandler; - uiBinder.createAndBindUi(this); - - if (ApplicationContext.getInstance().getApplicationSettings().getRegistrationEnabled()) { - registerButton.enable(); - } - } - - public void show() { - window.show(); - } - - public void hide() { - window.hide(); - } - - @UiHandler("loginButton") - public void onLoginClicked(SelectEvent event) { - loginHandler.onLogin(login.getText(), password.getText()); - } - - @UiHandler("registerButton") - public void onRegisterClicked(SelectEvent event) { - loginHandler.onRegister(login.getText(), password.getText()); - } - -} diff --git a/src/org/traccar/web/client/view/LoginDialog.ui.xml b/src/org/traccar/web/client/view/LoginDialog.ui.xml deleted file mode 100644 index c9314430..00000000 --- a/src/org/traccar/web/client/view/LoginDialog.ui.xml +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:form="urn:import:com.sencha.gxt.widget.core.client.form" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button"> - - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="verticalLayoutData"> - <ui:attributes width="1" height="-1" /> - </ui:with> - - <gxt:Window ui:field="window" pixelSize="300, 130" modal="true" closable="false" headingText="Authentication" focusWidget="{loginButton}"> - <container:VerticalLayoutContainer> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="User"> - <form:widget> - <form:TextField ui:field="login" /> - </form:widget> - </form:FieldLabel> - </container:child> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="Password"> - <form:widget> - <form:PasswordField ui:field="password" /> - </form:widget> - </form:FieldLabel> - </container:child> - </container:VerticalLayoutContainer> - - <gxt:button> - <button:TextButton ui:field="loginButton" text="Login" /> - </gxt:button> - <gxt:button> - <button:TextButton ui:field="registerButton" text="Register" enabled="false" /> - </gxt:button> - </gxt:Window> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/MapPositionRenderer.java b/src/org/traccar/web/client/view/MapPositionRenderer.java deleted file mode 100644 index 15ba082e..00000000 --- a/src/org/traccar/web/client/view/MapPositionRenderer.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.gwtopenmaps.openlayers.client.Icon; -import org.gwtopenmaps.openlayers.client.Marker; -import org.gwtopenmaps.openlayers.client.event.EventHandler; -import org.gwtopenmaps.openlayers.client.event.EventObject; -import org.gwtopenmaps.openlayers.client.feature.VectorFeature; -import org.gwtopenmaps.openlayers.client.geometry.LineString; -import org.gwtopenmaps.openlayers.client.geometry.Point; -import org.gwtopenmaps.openlayers.client.layer.Markers; -import org.gwtopenmaps.openlayers.client.layer.Vector; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; - -import com.google.gwt.dom.client.Style; -import com.google.gwt.user.client.ui.RootPanel; - - -public class MapPositionRenderer { - - public interface SelectHandler { - public void onSelected(Position position); - } - - private final MapView mapView; - private final MarkerIconFactory.IconType iconType; - - protected Vector getVectorLayer() { - return mapView.getVectorLayer(); - } - - protected Markers getMarkerLayer() { - return mapView.getMarkerLayer(); - } - - private SelectHandler selectHandler; - - public MapPositionRenderer(MapView mapView, MarkerIconFactory.IconType iconType, SelectHandler selectHandler) { - this.mapView = mapView; - this.iconType = iconType; - this.selectHandler = selectHandler; - } - - private void addSelectEvent(Marker marker, final Position position) { - if (selectHandler != null) { - marker.getEvents().register("click", marker, new EventHandler() { - @Override - public void onHandle(EventObject eventObject) { - selectHandler.onSelected(position); - } - }); - marker.getEvents().register("mouseover", marker, new EventHandler() { - @Override - public void onHandle(EventObject eventObject) { - RootPanel.get().getElement().getStyle().setCursor(Style.Cursor.SE_RESIZE); - } - }); - marker.getEvents().register("mouseout", marker, new EventHandler() { - @Override - public void onHandle(EventObject eventObject) { - RootPanel.get().getElement().getStyle().setCursor(Style.Cursor.AUTO); - } - }); - } - } - - private void changeMarkerIcon(Long positionId, Icon icon) { - Marker oldMarker = markerMap.get(positionId); - Marker newMarker = new Marker(oldMarker.getLonLat(), icon); - addSelectEvent(newMarker, positionMap.get(positionId)); - markerMap.put(positionId, newMarker); - getMarkerLayer().addMarker(newMarker); - getMarkerLayer().removeMarker(oldMarker); - } - - private Map<Long, Marker> markerMap = new HashMap<Long, Marker>(); // Position.id -> Marker - private Map<Long, Long> deviceMap = new HashMap<Long, Long>(); // Device.id -> Position.id - private Map<Long, Position> positionMap = new HashMap<Long, Position>(); // Position.id -> Position - - private Long selectedPositionId; - private Long selectedDeviceId; - - public void showPositions(List<Position> positions) { - for (Marker marker : markerMap.values()) { - getMarkerLayer().removeMarker(marker); - } - markerMap.clear(); - deviceMap.clear(); - positionMap.clear(); - - for (Position position : positions) { - Marker marker = new Marker( - mapView.createLonLat(position.getLongitude(), position.getLatitude()), - MarkerIconFactory.getIcon(iconType, false)); - markerMap.put(position.getId(), marker); - deviceMap.put(position.getDevice().getId(), position.getId()); - positionMap.put(position.getId(), position); - addSelectEvent(marker, position); - getMarkerLayer().addMarker(marker); - } - - if (selectedPositionId != null) { - if (!selectPosition(null, selectedPositionId, false)) { - selectedPositionId = null; - } - } - - if (selectedDeviceId != null) { - if (!selectPosition(null, deviceMap.get(selectedDeviceId), false)) { - selectedDeviceId = null; - } - } - } - - public void showTrack(List<Position> positions) { - getVectorLayer().destroyFeatures(); - - if (!positions.isEmpty()) { - Point[] linePoints = new Point[positions.size()]; - - int i = 0; - for (Position position : positions) { - linePoints[i++] = mapView.createPoint(position.getLongitude(), position.getLatitude()); - } - - LineString lineString = new LineString(linePoints); - getVectorLayer().addFeature(new VectorFeature(lineString)); - //mapView.getMap().zoomToExtent(lineString.getBounds()); - } - } - - public void selectPosition(Position position, boolean center) { - Long oldPositionId = selectedPositionId; - Long newPositionId = (position != null) ? position.getId() : null; - if (selectPosition(oldPositionId, newPositionId, center)) { - selectedPositionId = position.getId(); - } else { - selectedPositionId = null; - } - } - - public void selectDevice(Device device, boolean center) { - Long oldPositionId = (selectedDeviceId != null) ? deviceMap.get(selectedDeviceId) : null; - Long newPositionId = (device != null) ? deviceMap.get(device.getId()) : null; - if (selectPosition(oldPositionId, newPositionId, center)) { - selectedDeviceId = device.getId(); - } else { - selectedDeviceId = null; - } - } - - private boolean selectPosition(Long oldPositionId, Long newPositionId, boolean center) { - if (oldPositionId != null && markerMap.containsKey(oldPositionId)) { - changeMarkerIcon(oldPositionId, MarkerIconFactory.getIcon(iconType, false)); - } - if (newPositionId != null && markerMap.containsKey(newPositionId)) { - changeMarkerIcon(newPositionId, MarkerIconFactory.getIcon(iconType, true)); - if (center) { - mapView.getMap().panTo(markerMap.get(newPositionId).getLonLat()); - } - return true; - } - return false; - } - -} diff --git a/src/org/traccar/web/client/view/MapView.java b/src/org/traccar/web/client/view/MapView.java deleted file mode 100644 index db51cd36..00000000 --- a/src/org/traccar/web/client/view/MapView.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import java.util.List; - -import org.gwtopenmaps.openlayers.client.LonLat; -import org.gwtopenmaps.openlayers.client.Map; -import org.gwtopenmaps.openlayers.client.MapOptions; -import org.gwtopenmaps.openlayers.client.MapWidget; -import org.gwtopenmaps.openlayers.client.Projection; -import org.gwtopenmaps.openlayers.client.Style; -import org.gwtopenmaps.openlayers.client.control.LayerSwitcher; -import org.gwtopenmaps.openlayers.client.control.ScaleLine; -import org.gwtopenmaps.openlayers.client.geometry.Point; -import org.gwtopenmaps.openlayers.client.layer.Bing; -import org.gwtopenmaps.openlayers.client.layer.BingOptions; -import org.gwtopenmaps.openlayers.client.layer.BingType; -import org.gwtopenmaps.openlayers.client.layer.GoogleV3; -import org.gwtopenmaps.openlayers.client.layer.GoogleV3MapType; -import org.gwtopenmaps.openlayers.client.layer.GoogleV3Options; -import org.gwtopenmaps.openlayers.client.layer.Markers; -import org.gwtopenmaps.openlayers.client.layer.MarkersOptions; -import org.gwtopenmaps.openlayers.client.layer.OSM; -import org.gwtopenmaps.openlayers.client.layer.Vector; -import org.gwtopenmaps.openlayers.client.layer.VectorOptions; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; - -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.event.logical.shared.ResizeEvent; -import com.google.gwt.event.logical.shared.ResizeHandler; -import com.google.gwt.user.client.Command; -import com.sencha.gxt.widget.core.client.ContentPanel; - -public class MapView { - - public interface MapHandler { - public void onPositionSelected(Position position); - public void onArchivePositionSelected(Position position); - } - - private MapHandler mapHandler; - - private ContentPanel contentPanel; - - public ContentPanel getView() { - return contentPanel; - } - - private MapWidget mapWidget; - private Map map; - private Vector vectorLayer; - private Markers markerLayer; - - public Map getMap() { - return map; - } - - public Vector getVectorLayer() { - return vectorLayer; - } - - public Markers getMarkerLayer() { - return markerLayer; - } - - public LonLat createLonLat(double longitude, double latitude) { - LonLat lonLat = new LonLat(longitude, latitude); - lonLat.transform(new Projection("EPSG:4326").getProjectionCode(), map.getProjection()); - return lonLat; - } - - public Point createPoint(double x, double y) { - Point point = new Point(x, y); - point.transform(new Projection("EPSG:4326"), new Projection(map.getProjection())); - return point; - } - - private void initMapLayers(Map map) { - map.addLayer(OSM.Mapnik("OpenStreetMap")); - - GoogleV3Options gHybridOptions = new GoogleV3Options(); - gHybridOptions.setNumZoomLevels(20); - gHybridOptions.setType(GoogleV3MapType.G_HYBRID_MAP); - map.addLayer(new GoogleV3("Google Hybrid", gHybridOptions)); - - GoogleV3Options gNormalOptions = new GoogleV3Options(); - gNormalOptions.setNumZoomLevels(22); - gNormalOptions.setType(GoogleV3MapType.G_NORMAL_MAP); - map.addLayer(new GoogleV3("Google Normal", gNormalOptions)); - - GoogleV3Options gSatelliteOptions = new GoogleV3Options(); - gSatelliteOptions.setNumZoomLevels(20); - gSatelliteOptions.setType(GoogleV3MapType.G_SATELLITE_MAP); - map.addLayer(new GoogleV3("Google Satellite", gSatelliteOptions)); - - GoogleV3Options gTerrainOptions = new GoogleV3Options(); - gTerrainOptions.setNumZoomLevels(16); - gTerrainOptions.setType(GoogleV3MapType.G_TERRAIN_MAP); - map.addLayer(new GoogleV3("Google Terrain", gTerrainOptions)); - - final String bingKey = "AseEs0DLJhLlTNoxbNXu7DGsnnH4UoWuGue7-irwKkE3fffaClwc9q_Mr6AyHY8F"; - map.addLayer(new Bing(new BingOptions("Bing Road", bingKey, BingType.ROAD))); - map.addLayer(new Bing(new BingOptions("Bing Hybrid", bingKey, BingType.HYBRID))); - map.addLayer(new Bing(new BingOptions("Bing Aerial", bingKey, BingType.AERIAL))); - } - - public MapView(MapHandler mapHandler) { - this.mapHandler = mapHandler; - contentPanel = new ContentPanel(); - contentPanel.setHeadingText("Map"); - - MapOptions defaultMapOptions = new MapOptions(); - - mapWidget = new MapWidget("100%", "100%", defaultMapOptions); - map = mapWidget.getMap(); - - Style style = new Style(); - style.setStrokeColor("blue"); - style.setStrokeWidth(3); - style.setFillOpacity(1); - - VectorOptions vectorOptions = new VectorOptions(); - vectorOptions.setStyle(style); - vectorLayer = new Vector("Vector", vectorOptions); - - MarkersOptions markersOptions = new MarkersOptions(); - markerLayer = new Markers("Markers", markersOptions); - - initMapLayers(map); - - map.addLayer(vectorLayer); - map.addLayer(markerLayer); - - map.addControl(new LayerSwitcher()); - map.addControl(new ScaleLine()); - map.setCenter(createLonLat(12.5, 41.9), 1); - - contentPanel.add(mapWidget); - - // Update map size - contentPanel.addResizeHandler(new ResizeHandler() { - @Override - public void onResize(ResizeEvent event) { - Scheduler.get().scheduleDeferred(new Command() { - @Override - public void execute() { - map.updateSize(); - } - }); - } - }); - - latestPositionRenderer = new MapPositionRenderer(this, MarkerIconFactory.IconType.iconLatest, latestPositionSelectHandler); - archivePositionRenderer = new MapPositionRenderer(this, MarkerIconFactory.IconType.iconArchive, archivePositionSelectHandler); - } - - private final MapPositionRenderer latestPositionRenderer; - - private final MapPositionRenderer archivePositionRenderer; - - public void showLatestPositions(List<Position> positions) { - latestPositionRenderer.showPositions(positions); - } - - public void showArchivePositions(List<Position> positions) { - archivePositionRenderer.showTrack(positions); - archivePositionRenderer.showPositions(positions); - } - - public void selectDevice(Device device) { - latestPositionRenderer.selectDevice(device, true); - } - - public void selectArchivePosition(Position position) { - archivePositionRenderer.selectPosition(position, true); - } - - private MapPositionRenderer.SelectHandler latestPositionSelectHandler = new MapPositionRenderer.SelectHandler() { - - @Override - public void onSelected(Position position) { - mapHandler.onPositionSelected(position); - } - - }; - - private MapPositionRenderer.SelectHandler archivePositionSelectHandler = new MapPositionRenderer.SelectHandler() { - - @Override - public void onSelected(Position position) { - mapHandler.onArchivePositionSelected(position); - } - - }; - -} diff --git a/src/org/traccar/web/client/view/MarkerIconFactory.java b/src/org/traccar/web/client/view/MarkerIconFactory.java deleted file mode 100644 index 46965d57..00000000 --- a/src/org/traccar/web/client/view/MarkerIconFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import org.gwtopenmaps.openlayers.client.Icon; -import org.gwtopenmaps.openlayers.client.Pixel; -import org.gwtopenmaps.openlayers.client.Size; - -class MarkerIconFactory { - - private static final Size iconSize = new Size(21, 25); - private static final Pixel iconOffset = new Pixel(-10.5f, -25.0f); - - private static final String iconUrl = "http://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1/img/"; - private static final String iconRed = iconUrl + "marker.png"; - private static final String iconBlue = iconUrl + "marker-blue.png"; - private static final String iconGreen = iconUrl + "marker-green.png"; - private static final String iconGold = iconUrl + "marker-gold.png"; - - public static enum IconType { - iconLatest, - iconArchive - }; - - public static String getIconUrl(IconType type, boolean selected) { - if (type == IconType.iconLatest) { - return selected ? iconGreen : iconRed; - } else if (type == IconType.iconArchive) { - return selected ? iconGold : iconBlue; - } - return null; - } - - public static Icon getIcon(IconType type, boolean selected) { - return new Icon(getIconUrl(type, selected), iconSize, iconOffset); - } - -} diff --git a/src/org/traccar/web/client/view/StateView.java b/src/org/traccar/web/client/view/StateView.java deleted file mode 100644 index 700d55a6..00000000 --- a/src/org/traccar/web/client/view/StateView.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.traccar.web.client.view; - -import java.util.LinkedList; -import java.util.List; - -import org.traccar.web.client.model.StateItem; -import org.traccar.web.client.model.StateItemProperties; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.widget.core.client.ContentPanel; -import com.sencha.gxt.widget.core.client.grid.ColumnConfig; -import com.sencha.gxt.widget.core.client.grid.ColumnModel; -import com.sencha.gxt.widget.core.client.grid.Grid; - -public class StateView { - - private static StateViewUiBinder uiBinder = GWT.create(StateViewUiBinder.class); - - interface StateViewUiBinder extends UiBinder<Widget, StateView> { - } - - @UiField - ContentPanel contentPanel; - - public ContentPanel getView() { - return contentPanel; - } - - @UiField(provided = true) - ColumnModel<StateItem> columnModel; - - @UiField(provided = true) - ListStore<StateItem> stateStore; - - @UiField - Grid<StateItem> grid; - - public StateView(ListStore<StateItem> stateStore) { - this.stateStore = stateStore; - - StateItemProperties stateItemProperties = GWT.create(StateItemProperties.class); - - List<ColumnConfig<StateItem, ?>> columnConfigList = new LinkedList<ColumnConfig<StateItem, ?>>(); - columnConfigList.add(new ColumnConfig<StateItem, String>(stateItemProperties.name(), 0, "Attribute")); - columnConfigList.add(new ColumnConfig<StateItem, String>(stateItemProperties.value(), 0, "Value")); - columnModel = new ColumnModel<StateItem>(columnConfigList); - - uiBinder.createAndBindUi(this); - - grid.getSelectionModel().setLocked(true); - } - -} - diff --git a/src/org/traccar/web/client/view/StateView.ui.xml b/src/org/traccar/web/client/view/StateView.ui.xml deleted file mode 100644 index 2a7c2ac9..00000000 --- a/src/org/traccar/web/client/view/StateView.ui.xml +++ /dev/null @@ -1,22 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:toolbar="urn:import:com.sencha.gxt.widget.core.client.toolbar" - xmlns:grid="urn:import:com.sencha.gxt.widget.core.client.grid" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button"> - - <ui:with type="com.sencha.gxt.data.shared.ListStore" field="stateStore" /> - <ui:with type="com.sencha.gxt.widget.core.client.grid.ColumnModel" field="columnModel" /> - - <ui:with type="com.sencha.gxt.widget.core.client.grid.GridView" field="view"> - <ui:attributes stripeRows="true" autoFill="true" /> - </ui:with> - - <gxt:ContentPanel ui:field="contentPanel" headingText="State"> - <grid:Grid ui:field="grid" store="{stateStore}" cm="{columnModel}" view="{view}" /> - </gxt:ContentPanel> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/UserDialog.java b/src/org/traccar/web/client/view/UserDialog.java deleted file mode 100644 index ac2eca32..00000000 --- a/src/org/traccar/web/client/view/UserDialog.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import org.traccar.web.client.ApplicationContext; -import org.traccar.web.shared.model.User; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.editor.client.Editor; -import com.google.gwt.editor.client.SimpleBeanEditorDriver; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.widget.core.client.Window; -import com.sencha.gxt.widget.core.client.event.SelectEvent; -import com.sencha.gxt.widget.core.client.form.CheckBox; -import com.sencha.gxt.widget.core.client.form.PasswordField; -import com.sencha.gxt.widget.core.client.form.TextField; - -public class UserDialog implements Editor<User> { - - private static UserDialogUiBinder uiBinder = GWT.create(UserDialogUiBinder.class); - - interface UserDialogUiBinder extends UiBinder<Widget, UserDialog> { - } - - private UserDriver driver = GWT.create(UserDriver.class); - - interface UserDriver extends SimpleBeanEditorDriver<User, UserDialog> { - } - - public interface UserHandler { - public void onSave(User user); - } - - private UserHandler userHandler; - - @UiField - Window window; - - @UiField - TextField login; - - @UiField - PasswordField password; - - @UiField - CheckBox admin; - - public UserDialog(User user, UserHandler userHandler) { - this.userHandler = userHandler; - uiBinder.createAndBindUi(this); - - if (ApplicationContext.getInstance().getUser().getAdmin()) { - admin.setEnabled(true); - } - - driver.initialize(this); - driver.edit(user); - } - - public void show() { - window.show(); - } - - public void hide() { - window.hide(); - } - - @UiHandler("saveButton") - public void onLoginClicked(SelectEvent event) { - window.hide(); - userHandler.onSave(driver.flush()); - } - - @UiHandler("cancelButton") - public void onRegisterClicked(SelectEvent event) { - window.hide(); - } - -} diff --git a/src/org/traccar/web/client/view/UserDialog.ui.xml b/src/org/traccar/web/client/view/UserDialog.ui.xml deleted file mode 100644 index 9f7fe21d..00000000 --- a/src/org/traccar/web/client/view/UserDialog.ui.xml +++ /dev/null @@ -1,47 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:form="urn:import:com.sencha.gxt.widget.core.client.form" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button"> - - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="verticalLayoutData"> - <ui:attributes width="1" height="-1" /> - </ui:with> - - <gxt:Window ui:field="window" pixelSize="300, 150" modal="true" headingText="Account" focusWidget="{saveButton}"> - <container:VerticalLayoutContainer> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="User"> - <form:widget> - <form:TextField ui:field="login" /> - </form:widget> - </form:FieldLabel> - </container:child> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="Password"> - <form:widget> - <form:PasswordField ui:field="password" /> - </form:widget> - </form:FieldLabel> - </container:child> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="Administrator"> - <form:widget> - <form:CheckBox ui:field="admin" enabled="false" /> - </form:widget> - </form:FieldLabel> - </container:child> - </container:VerticalLayoutContainer> - - <gxt:button> - <button:TextButton ui:field="saveButton" text="Save" /> - </gxt:button> - <gxt:button> - <button:TextButton ui:field="cancelButton" text="Cancel" /> - </gxt:button> - </gxt:Window> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/UserSettingsDialog.java b/src/org/traccar/web/client/view/UserSettingsDialog.java deleted file mode 100644 index be13eca8..00000000 --- a/src/org/traccar/web/client/view/UserSettingsDialog.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import java.util.Arrays; - -import org.traccar.web.client.model.EnumKeyProvider; -import org.traccar.web.client.model.UserSettingsProperties; -import org.traccar.web.shared.model.UserSettings; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.editor.client.Editor; -import com.google.gwt.editor.client.SimpleBeanEditorDriver; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.widget.core.client.Window; -import com.sencha.gxt.widget.core.client.event.SelectEvent; -import com.sencha.gxt.widget.core.client.form.ComboBox; - -public class UserSettingsDialog implements Editor<UserSettings> { - - private static UserSettingsDialogUiBinder uiBinder = GWT.create(UserSettingsDialogUiBinder.class); - - interface UserSettingsDialogUiBinder extends UiBinder<Widget, UserSettingsDialog> { - } - - private UserSettingsDriver driver = GWT.create(UserSettingsDriver.class); - - interface UserSettingsDriver extends SimpleBeanEditorDriver<UserSettings, UserSettingsDialog> { - } - - public interface UserSettingsHandler { - public void onSave(UserSettings userSettings); - } - - private UserSettingsHandler userSettingsHandler; - - @UiField - Window window; - - @UiField(provided = true) - ComboBox<UserSettings.SpeedUnit> speedUnit; - - public UserSettingsDialog(UserSettings userSettings, UserSettingsHandler userSettingsHandler) { - this.userSettingsHandler = userSettingsHandler; - - ListStore<UserSettings.SpeedUnit> speedUnitStore = new ListStore<UserSettings.SpeedUnit>( - new EnumKeyProvider<UserSettings.SpeedUnit>()); - speedUnitStore.addAll(Arrays.asList(UserSettings.SpeedUnit.values())); - - speedUnit = new ComboBox<UserSettings.SpeedUnit>( - speedUnitStore, new UserSettingsProperties.SpeedUnitLabelProvider()); - speedUnit.setForceSelection(true); - speedUnit.setTriggerAction(TriggerAction.ALL); - - uiBinder.createAndBindUi(this); - driver.initialize(this); - driver.edit(userSettings); - } - - public void show() { - window.show(); - } - - public void hide() { - window.hide(); - } - - @UiHandler("saveButton") - public void onLoginClicked(SelectEvent event) { - window.hide(); - userSettingsHandler.onSave(driver.flush()); - } - - @UiHandler("cancelButton") - public void onRegisterClicked(SelectEvent event) { - window.hide(); - } - -} diff --git a/src/org/traccar/web/client/view/UserSettingsDialog.ui.xml b/src/org/traccar/web/client/view/UserSettingsDialog.ui.xml deleted file mode 100644 index db6c6932..00000000 --- a/src/org/traccar/web/client/view/UserSettingsDialog.ui.xml +++ /dev/null @@ -1,33 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:form="urn:import:com.sencha.gxt.widget.core.client.form" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button"> - - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="verticalLayoutData"> - <ui:attributes width="1" height="-1" /> - </ui:with> - - <gxt:Window ui:field="window" pixelSize="300, 110" modal="true" headingText="Preferences" focusWidget="{saveButton}"> - <container:VerticalLayoutContainer> - <container:child layoutData="{verticalLayoutData}"> - <form:FieldLabel text="Speed Units"> - <form:widget> - <form:ComboBox ui:field="speedUnit" /> - </form:widget> - </form:FieldLabel> - </container:child> - </container:VerticalLayoutContainer> - - <gxt:button> - <button:TextButton ui:field="saveButton" text="Save" /> - </gxt:button> - <gxt:button> - <button:TextButton ui:field="cancelButton" text="Cancel" /> - </gxt:button> - </gxt:Window> - -</ui:UiBinder> diff --git a/src/org/traccar/web/client/view/UsersDialog.java b/src/org/traccar/web/client/view/UsersDialog.java deleted file mode 100644 index 3da8979b..00000000 --- a/src/org/traccar/web/client/view/UsersDialog.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.client.view; - -import java.util.LinkedList; -import java.util.List; - -import org.traccar.web.client.model.UserProperties; -import org.traccar.web.shared.model.User; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Widget; -import com.sencha.gxt.core.client.Style.SelectionMode; -import com.sencha.gxt.data.shared.ListStore; -import com.sencha.gxt.widget.core.client.Window; -import com.sencha.gxt.widget.core.client.button.TextButton; -import com.sencha.gxt.widget.core.client.event.SelectEvent; -import com.sencha.gxt.widget.core.client.grid.ColumnConfig; -import com.sencha.gxt.widget.core.client.grid.ColumnModel; -import com.sencha.gxt.widget.core.client.grid.Grid; -import com.sencha.gxt.widget.core.client.selection.SelectionChangedEvent; - -public class UsersDialog implements SelectionChangedEvent.SelectionChangedHandler<User> { - - private static UsersDialogUiBinder uiBinder = GWT.create(UsersDialogUiBinder.class); - - interface UsersDialogUiBinder extends UiBinder<Widget, UsersDialog> { - } - - public interface UserHandler { - public void onAdd(); - public void onRemove(User user); - } - - private UserHandler userHandler; - - @UiField - Window window; - - @UiField - TextButton addButton; - - @UiField - TextButton removeButton; - - @UiField(provided = true) - ColumnModel<User> columnModel; - - @UiField(provided = true) - ListStore<User> userStore; - - @UiField - Grid<User> grid; - - public UsersDialog(ListStore<User> userStore, UserHandler userHandler) { - this.userStore = userStore; - this.userHandler = userHandler; - - UserProperties userProperties = GWT.create(UserProperties.class); - - List<ColumnConfig<User, ?>> columnConfigList = new LinkedList<ColumnConfig<User, ?>>(); - columnConfigList.add(new ColumnConfig<User, String>(userProperties.login(), 0, "Name")); - columnConfigList.add(new ColumnConfig<User, Boolean>(userProperties.admin(), 0, "Administrator")); - columnModel = new ColumnModel<User>(columnConfigList); - - uiBinder.createAndBindUi(this); - - grid.getSelectionModel().addSelectionChangedHandler(this); - grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); - } - - public void show() { - window.show(); - } - - public void hide() { - window.hide(); - } - - @Override - public void onSelectionChanged(SelectionChangedEvent<User> event) { - removeButton.setEnabled(!event.getSelection().isEmpty()); - } - @UiHandler("addButton") - public void onAddClicked(SelectEvent event) { - userHandler.onAdd(); - } - - @UiHandler("removeButton") - public void onRemoveClicked(SelectEvent event) { - userHandler.onRemove(grid.getSelectionModel().getSelectedItem()); - } - -} diff --git a/src/org/traccar/web/client/view/UsersDialog.ui.xml b/src/org/traccar/web/client/view/UsersDialog.ui.xml deleted file mode 100644 index 2110e760..00000000 --- a/src/org/traccar/web/client/view/UsersDialog.ui.xml +++ /dev/null @@ -1,50 +0,0 @@ -<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> -<ui:UiBinder - xmlns:ui="urn:ui:com.google.gwt.uibinder" - xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:gxt="urn:import:com.sencha.gxt.widget.core.client" - xmlns:container="urn:import:com.sencha.gxt.widget.core.client.container" - xmlns:form="urn:import:com.sencha.gxt.widget.core.client.form" - xmlns:toolbar="urn:import:com.sencha.gxt.widget.core.client.toolbar" - xmlns:grid="urn:import:com.sencha.gxt.widget.core.client.grid" - xmlns:button="urn:import:com.sencha.gxt.widget.core.client.button" - xmlns:menu="urn:import:com.sencha.gxt.widget.core.client.menu"> - - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="toolBarRowData"> - <ui:attributes width="1" height="-1" /> - </ui:with> - <ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="layoutData"> - <ui:attributes width="1" height="1" /> - </ui:with> - - <ui:with type="com.sencha.gxt.data.shared.ListStore" field="userStore" /> - <ui:with type="com.sencha.gxt.widget.core.client.grid.ColumnModel" field="columnModel" /> - - <ui:with type="com.sencha.gxt.widget.core.client.grid.GridView" field="view"> - <ui:attributes stripeRows="true" autoFill="true" /> - </ui:with> - - <gxt:Window ui:field="window" pixelSize="640, 480" modal="true" headingText="Users"> - <container:VerticalLayoutContainer> - <container:child layoutData="{layoutData}"> - <gxt:ContentPanel ui:field="contentPanel" headerVisible="false"> - <container:VerticalLayoutContainer> - - <container:child layoutData="{toolBarRowData}"> - <toolbar:ToolBar> - <button:TextButton ui:field="addButton" text="Add" /> - <button:TextButton ui:field="removeButton" text="Remove" enabled="false" /> - </toolbar:ToolBar> - </container:child> - - <container:child layoutData="{layoutData}"> - <grid:Grid ui:field="grid" store="{userStore}" cm="{columnModel}" view="{view}" /> - </container:child> - - </container:VerticalLayoutContainer> - </gxt:ContentPanel> - </container:child> - </container:VerticalLayoutContainer> - </gxt:Window> - -</ui:UiBinder> diff --git a/src/org/traccar/web/server/model/DataServiceImpl.java b/src/org/traccar/web/server/model/DataServiceImpl.java deleted file mode 100644 index f8d44fc0..00000000 --- a/src/org/traccar/web/server/model/DataServiceImpl.java +++ /dev/null @@ -1,467 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.server.model; - -import java.util.Date; -import java.util.LinkedList; -import java.util.List; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; -import javax.persistence.Query; -import javax.persistence.TypedQuery; -import javax.servlet.ServletException; -import javax.servlet.http.HttpSession; - -import org.traccar.web.client.model.DataService; -import org.traccar.web.shared.model.ApplicationSettings; -import org.traccar.web.shared.model.Device; -import org.traccar.web.shared.model.Position; -import org.traccar.web.shared.model.User; - -import com.google.gwt.user.server.rpc.RemoteServiceServlet; - -public class DataServiceImpl extends RemoteServiceServlet implements DataService { - - private static final long serialVersionUID = 1; - - private static final String PERSISTENCE_DATASTORE = "java:/DefaultDS"; - private static final String PERSISTENCE_UNIT_DEBUG = "debug"; - private static final String PERSISTENCE_UNIT_RELEASE = "release"; - private static final String ATTRIBUTE_USER = "traccar.user"; - private static final String ATTRIBUTE_ENTITYMANAGER = "traccar.entitymanager"; - - private EntityManagerFactory entityManagerFactory; - - @Override - public void init() throws ServletException { - super.init(); - - String persistenceUnit; - try { - Context context = new InitialContext(); - context.lookup(PERSISTENCE_DATASTORE); - persistenceUnit = PERSISTENCE_UNIT_RELEASE; - } catch (NamingException e) { - persistenceUnit = PERSISTENCE_UNIT_DEBUG; - } - - entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnit); - - // Create Administrator account - EntityManager entityManager = getServletEntityManager(); - TypedQuery<User> query = entityManager.createQuery("SELECT x FROM User x WHERE x.login = 'admin'", User.class); - List<User> results = query.getResultList(); - if (results.isEmpty()) { - User user = new User(); - user.setLogin("admin"); - user.setPassword("admin"); - user.setAdmin(true); - createUser(entityManager, user); - } - } - - private EntityManager servletEntityManager; - - private EntityManager getServletEntityManager() { - if (servletEntityManager == null) { - servletEntityManager = entityManagerFactory.createEntityManager(); - } - return servletEntityManager; - } - - private EntityManager getSessionEntityManager() { - HttpSession session = getThreadLocalRequest().getSession(); - EntityManager entityManager = (EntityManager) session.getAttribute(ATTRIBUTE_ENTITYMANAGER); - if (entityManager == null) { - entityManager = entityManagerFactory.createEntityManager(); - session.setAttribute(ATTRIBUTE_ENTITYMANAGER, entityManager); - } - return entityManager; - } - - private void setSessionUser(User user) { - HttpSession session = getThreadLocalRequest().getSession(); - if (user != null) { - session.setAttribute(ATTRIBUTE_USER, user); - } else { - session.removeAttribute(ATTRIBUTE_USER); - } - } - - private User getSessionUser() { - HttpSession session = getThreadLocalRequest().getSession(); - User user = (User) session.getAttribute(ATTRIBUTE_USER); - if (user == null) { - throw new IllegalStateException(); - } - return user; - } - - @Override - public User authenticated() throws IllegalStateException { - return getSessionUser(); - } - - @Override - public User login(String login, String password) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - TypedQuery<User> query = entityManager.createQuery( - "SELECT x FROM User x WHERE x.login = :login", User.class); - query.setParameter("login", login); - List<User> results = query.getResultList(); - - if (!results.isEmpty() && password.equals(results.get(0).getPassword())) { - User user = results.get(0); - setSessionUser(user); - return user; - } - throw new IllegalStateException(); - } - } - - @Override - public boolean logout() { - setSessionUser(null); - return true; - } - - @Override - public User register(String login, String password) { - if (getApplicationSettings().getRegistrationEnabled()) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - - TypedQuery<User> query = entityManager.createQuery( - "SELECT x FROM User x WHERE x.login = :login", User.class); - query.setParameter("login", login); - List<User> results = query.getResultList(); - if (results.isEmpty()) { - User user = new User(); - user.setLogin(login); - user.setPassword(password); - createUser(getSessionEntityManager(), user); - setSessionUser(user); - return user; - } - else - { - throw new IllegalStateException(); - } - } - } else { - throw new SecurityException(); - } - } - - @Override - public List<User> getUsers() { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - List<User> users = new LinkedList<User>(); - users.addAll(entityManager.createQuery("SELECT x FROM User x", User.class).getResultList()); - return users; - } - } - - @Override - public User addUser(User user) { - User currentUser = getSessionUser(); - if (user.getLogin().isEmpty() || user.getPassword().isEmpty()) { - throw new IllegalArgumentException(); - } - if (currentUser.getAdmin()) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - - String login = user.getLogin(); - TypedQuery<User> query = entityManager.createQuery("SELECT x FROM User x WHERE x.login = :login", User.class); - query.setParameter("login", login); - List<User> results = query.getResultList(); - - if (results.isEmpty()) { - entityManager.getTransaction().begin(); - try { - entityManager.persist(user); - entityManager.getTransaction().commit(); - return user; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } else { - throw new IllegalStateException(); - } - } - } else { - throw new SecurityException(); - } - } - - @Override - public User updateUser(User user) { - User currentUser = getSessionUser(); - if (user.getLogin().isEmpty() || user.getPassword().isEmpty()) { - throw new IllegalArgumentException(); - } - if (currentUser.getAdmin() || (currentUser.getId() == user.getId() && !user.getAdmin())) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - entityManager.getTransaction().begin(); - try { - // TODO: better solution? - if (currentUser.getId() == user.getId()) { - currentUser.setLogin(user.getLogin()); - currentUser.setPassword(user.getPassword()); - currentUser.setUserSettings(user.getUserSettings()); - currentUser.setAdmin(user.getAdmin()); - entityManager.merge(currentUser); - user = currentUser; - } else { - // TODO: handle other users - } - - entityManager.getTransaction().commit(); - setSessionUser(user); - return user; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } - } else { - throw new SecurityException(); - } - } - - @Override - public User removeUser(User user) { - User currentUser = getSessionUser(); - if (currentUser.getAdmin()) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - entityManager.getTransaction().begin(); - try { - user = entityManager.merge(user); - user.getDevices().clear(); - entityManager.remove(user); - entityManager.getTransaction().commit(); - return user; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } - } else { - throw new SecurityException(); - } - } - - private void createUser(EntityManager entityManager, User user) { - synchronized (entityManager) { - entityManager.getTransaction().begin(); - try { - entityManager.persist(user); - entityManager.getTransaction().commit(); - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } - } - - @Override - public List<Device> getDevices() { - List<Device> devices = new LinkedList<Device>(); - User user = getSessionUser(); - devices.addAll(user.getDevices()); - return devices; - } - - @Override - public Device addDevice(Device device) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - TypedQuery<Device> query = entityManager.createQuery("SELECT x FROM Device x WHERE x.uniqueId = :id", Device.class); - query.setParameter("id", device.getUniqueId()); - List<Device> results = query.getResultList(); - - User user = getSessionUser(); - - if (results.isEmpty()) { - entityManager.getTransaction().begin(); - try { - entityManager.persist(device); - user.getDevices().add(device); - entityManager.getTransaction().commit(); - return device; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } - else - { - throw new IllegalStateException(); - } - } - } - - - @Override - public Device updateDevice(Device device) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - - TypedQuery<Device> query = entityManager.createQuery("SELECT x FROM Device x WHERE x.uniqueId = :id AND x.id <> :primary_id", Device.class); - query.setParameter("primary_id", device.getId()); - query.setParameter("id", device.getUniqueId()); - List<Device> results = query.getResultList(); - - if (results.isEmpty()) { - entityManager.getTransaction().begin(); - try { - Device tmp_device = entityManager.find(Device.class, device.getId()); - tmp_device.setName(device.getName()); - tmp_device.setUniqueId(device.getUniqueId()); - entityManager.getTransaction().commit(); - return tmp_device; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } - else - { - throw new IllegalStateException(); - } - } - } - - @Override - public Device removeDevice(Device device) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - User user = getSessionUser(); - entityManager.getTransaction().begin(); - try { - device = entityManager.merge(device); - user.getDevices().remove(device); - device.setLatestPosition(null); - entityManager.flush(); - Query query = entityManager.createQuery("DELETE FROM Position x WHERE x.device = :device"); - query.setParameter("device", device); - query.executeUpdate(); - entityManager.remove(device); - entityManager.getTransaction().commit(); - return device; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } - } - - @Override - public List<Position> getPositions(Device device, Date from, Date to) { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - List<Position> positions = new LinkedList<Position>(); - TypedQuery<Position> query = entityManager.createQuery( - "SELECT x FROM Position x WHERE x.device = :device AND x.time BETWEEN :from AND :to", Position.class); - query.setParameter("device", device); - query.setParameter("from", from); - query.setParameter("to", to); - positions.addAll(query.getResultList()); - return positions; - } - } - - @Override - public List<Position> getLatestPositions() { - EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { - List<Position> positions = new LinkedList<Position>(); - User user = getSessionUser(); - if (user.getDevices() != null && !user.getDevices().isEmpty()) { - TypedQuery<Position> query = entityManager.createQuery( - "SELECT x FROM Position x WHERE x.id IN (" + - "SELECT y.latestPosition FROM Device y WHERE y IN (:devices))", Position.class); - query.setParameter("devices", user.getDevices()); - positions.addAll(query.getResultList()); - } - return positions; - } - } - - private ApplicationSettings applicationSettings; - - private ApplicationSettings getApplicationSettings() { - if (applicationSettings == null) { - EntityManager entityManager = getServletEntityManager(); - synchronized (entityManager) { - TypedQuery<ApplicationSettings> query = entityManager.createQuery("SELECT x FROM ApplicationSettings x", ApplicationSettings.class); - List<ApplicationSettings> resultList = query.getResultList(); - if (resultList == null || resultList.isEmpty()) { - applicationSettings = new ApplicationSettings(); - entityManager.getTransaction().begin(); - try { - entityManager.persist(applicationSettings); - entityManager.getTransaction().commit(); - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } else { - applicationSettings = resultList.get(0); - } - } - } - return applicationSettings; - } - - @Override - public ApplicationSettings updateApplicationSettings(ApplicationSettings applicationSettings) { - if (applicationSettings == null) { - return getApplicationSettings(); - } else { - EntityManager entityManager = getServletEntityManager(); - synchronized (entityManager) { - User user = getSessionUser(); - if (user.getAdmin()) { - entityManager.getTransaction().begin(); - try { - entityManager.merge(applicationSettings); - entityManager.getTransaction().commit(); - this.applicationSettings = applicationSettings; - return applicationSettings; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } else { - throw new SecurityException(); - } - } - } - } - -} diff --git a/src/org/traccar/web/shared/model/ApplicationSettings.java b/src/org/traccar/web/shared/model/ApplicationSettings.java deleted file mode 100644 index 6f5bfe5c..00000000 --- a/src/org/traccar/web/shared/model/ApplicationSettings.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.traccar.web.shared.model; - -import java.io.Serializable; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name="application_settings") -public class ApplicationSettings implements Serializable { - - private static final long serialVersionUID = 1; - - @Id - @GeneratedValue - private long id; - - public ApplicationSettings() { - registrationEnabled = true; - } - - private boolean registrationEnabled; - - public void setRegistrationEnabled(boolean registrationEnabled) { - this.registrationEnabled = registrationEnabled; - } - - public boolean getRegistrationEnabled() { - return registrationEnabled; - } - -} diff --git a/src/org/traccar/web/shared/model/Device.java b/src/org/traccar/web/shared/model/Device.java deleted file mode 100644 index 6f6d6c57..00000000 --- a/src/org/traccar/web/shared/model/Device.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.shared.model; - -import java.io.Serializable; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.OneToOne; -import javax.persistence.Table; - -@Entity -@Table(name = "devices") -public class Device implements Serializable { - - private static final long serialVersionUID = 1; - - public Device() { - } - - public Device(Device device) { - id = device.id; - uniqueId = device.uniqueId; - name = device.name; - } - - @Id - @GeneratedValue - private long id; - - public long getId() { - return id; - } - - @OneToOne(fetch = FetchType.EAGER) - private Position latestPosition; - - public void setLatestPosition(Position latestPosition) { - this.latestPosition = latestPosition; - } - - public Position getLatestPosition() { - return latestPosition; - } - - @Column(unique = true) - private String uniqueId; - - public void setUniqueId(String uniqueId) { - this.uniqueId = uniqueId; - } - - public String getUniqueId() { - return uniqueId; - } - - private String name; - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - -} diff --git a/src/org/traccar/web/shared/model/Position.java b/src/org/traccar/web/shared/model/Position.java deleted file mode 100644 index d9ec3b3f..00000000 --- a/src/org/traccar/web/shared/model/Position.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.shared.model; - -import java.io.Serializable; -import java.util.Date; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.persistence.Table; - -import org.hibernate.annotations.Index; - -@Entity -@Table(name = "positions") -public class Position implements Serializable, Cloneable { - - private static final long serialVersionUID = 1; - - public Position() { - } - - public Position(Position position) { - id = position.id; - device = position.device; - time = position.time; - valid = position.valid; - latitude = position.latitude; - longitude = position.longitude; - altitude = position.altitude; - speed = position.speed; - course = position.course; - power = position.power; - address = position.address; - other = position.other; - } - - @Id - @GeneratedValue - private long id; - - public long getId() { - return id; - } - - @ManyToOne(fetch = FetchType.EAGER) - @Index(name = "positionsIndex") - private Device device; - - public Device getDevice() { - return device; - } - - @Index(name = "positionsIndex") - private Date time; - - public Date getTime() { - return time; - } - - private Boolean valid; - - public Boolean getValid() { - return valid; - } - - private Double latitude; - - public Double getLatitude() { - return latitude; - } - - private Double longitude; - - public Double getLongitude() { - return longitude; - } - - private Double altitude; - - public Double getAltitude() { - return altitude; - } - - private Double speed; - - public Double getSpeed() { - return speed; - } - - private Double course; - - public Double getCourse() { - return course; - } - - private Double power; - - public Double getPower() { - return power; - } - - private String address; - - public String getAddress() { - return address; - } - - private String other; - - public String getOther() { - return other; - } - -} diff --git a/src/org/traccar/web/shared/model/User.java b/src/org/traccar/web/shared/model/User.java deleted file mode 100644 index 20adc12a..00000000 --- a/src/org/traccar/web/shared/model/User.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.web.shared.model; - -import java.io.Serializable; -import java.util.LinkedList; -import java.util.List; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.Table; - -import com.google.gwt.user.client.rpc.GwtTransient; - -@Entity -@Table(name="users") -public class User implements Serializable, Cloneable { - - private static final long serialVersionUID = 1; - - public User() { - admin = false; - } - - public User(User user) { - id = user.id; - login = user.login; - password = user.password; - admin = user.admin; - } - - @Id - @GeneratedValue - private long id; - - public long getId() { - return id; - } - - @Column(unique = true) - private String login; - - public void setLogin(String login) { - this.login = login; - } - - public String getLogin() { - return login; - } - - private String password; - - public void setPassword(String password) { - this.password = password; - } - - public String getPassword() { - return password; - } - - // TODO temporary nullable to migrate from old database - private Boolean admin; - - public void setAdmin(boolean admin) { - this.admin = admin; - } - - public boolean getAdmin() { - // TODO temporary nullable to migrate from old database - return (admin == null) ? false : admin; - } - - @GwtTransient - @OneToMany(fetch = FetchType.EAGER) - private List<Device> devices = new LinkedList<Device>(); - - public void setDevices(List<Device> devices) { - this.devices = devices; - } - - public List<Device> getDevices() { - return devices; - } - - @OneToOne(cascade = CascadeType.ALL) - private UserSettings userSettings; - - public void setUserSettings(UserSettings userSettings) { - this.userSettings = userSettings; - } - - public UserSettings getUserSettings() { - return userSettings; - } - -} diff --git a/src/org/traccar/web/shared/model/UserSettings.java b/src/org/traccar/web/shared/model/UserSettings.java deleted file mode 100644 index 3f6deeaf..00000000 --- a/src/org/traccar/web/shared/model/UserSettings.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.traccar.web.shared.model; - -import java.io.Serializable; - -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name="user_settings") -public class UserSettings implements Serializable { - - private static final long serialVersionUID = 1; - - @Id - @GeneratedValue - private long id; - - public UserSettings() { - speedUnit = SpeedUnit.knots; - } - - public enum SpeedUnit { - knots, - kilometersPerHour, - milesPerHour - } - - @Enumerated(EnumType.STRING) - private SpeedUnit speedUnit; - - public void setSpeedUnit(SpeedUnit speedUnit) { - this.speedUnit = speedUnit; - } - - public SpeedUnit getSpeedUnit() { - return speedUnit; - } - -} |