diff options
-rw-r--r-- | src/org/traccar/web/client/controller/DeviceController.java | 9 | ||||
-rw-r--r-- | src/org/traccar/web/server/model/DataServiceImpl.java | 102 |
2 files changed, 71 insertions, 40 deletions
diff --git a/src/org/traccar/web/client/controller/DeviceController.java b/src/org/traccar/web/client/controller/DeviceController.java index 94c81ed3..b884537b 100644 --- a/src/org/traccar/web/client/controller/DeviceController.java +++ b/src/org/traccar/web/client/controller/DeviceController.java @@ -28,6 +28,7 @@ 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.HideEvent; @@ -84,6 +85,10 @@ public class DeviceController implements ContentController, DeviceView.DeviceHan 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(); @@ -99,6 +104,10 @@ public class DeviceController implements ContentController, DeviceView.DeviceHan 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(); diff --git a/src/org/traccar/web/server/model/DataServiceImpl.java b/src/org/traccar/web/server/model/DataServiceImpl.java index 509bca4a..2c88800c 100644 --- a/src/org/traccar/web/server/model/DataServiceImpl.java +++ b/src/org/traccar/web/server/model/DataServiceImpl.java @@ -191,28 +191,26 @@ public class DataServiceImpl extends RemoteServiceServlet implements DataService if (currentUser.getAdmin()) { EntityManager entityManager = getSessionEntityManager(); synchronized (entityManager) { - entityManager.getTransaction().begin(); - try { - 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.persist(user); - entityManager.getTransaction().commit(); - return user; - } - else - { - throw new IllegalStateException(); - } - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; - } - } + + 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(); } @@ -301,34 +299,58 @@ public class DataServiceImpl extends RemoteServiceServlet implements DataService @Override public Device addDevice(Device device) { EntityManager entityManager = getSessionEntityManager(); - synchronized (entityManager) { + 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(); - entityManager.getTransaction().begin(); - try { - entityManager.persist(device); - user.getDevices().add(device); - entityManager.getTransaction().commit(); - return device; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; + + 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) { - entityManager.getTransaction().begin(); - try { - device = entityManager.merge(device); - entityManager.getTransaction().commit(); - return device; - } catch (RuntimeException e) { - entityManager.getTransaction().rollback(); - throw e; + + 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(); + + + if (results.isEmpty()) { + entityManager.getTransaction().begin(); + try { + device = entityManager.merge(device); + entityManager.getTransaction().commit(); + return device; + } catch (RuntimeException e) { + entityManager.getTransaction().rollback(); + throw e; + } } + else + { + throw new IllegalStateException(); + } } } |