From baad910016f2f17e6bf89f9d5db17349c4a9a62a Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 21 Sep 2016 16:27:55 +0500 Subject: Add attributes aliases --- schema/changelog-3.8.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'schema') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index 97bc1c9a3..8cb6c0e04 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -8,6 +8,24 @@ + + + + + + + + + + + + + + + + + + map = 'osm' -- cgit v1.2.3 From c8816bdd85d62fb767795b2dc4d31326fdad9cd5 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 22 Sep 2016 10:44:29 +0500 Subject: - rename table and unique constraint - rename some functions - optimization and simplification --- debug.xml | 8 ++--- schema/changelog-3.8.xml | 6 ++-- .../api/resource/AttributeAliasResource.java | 15 ++++---- src/org/traccar/database/AliasesManager.java | 42 ++++++++++------------ 4 files changed, 31 insertions(+), 40 deletions(-) (limited to 'schema') diff --git a/debug.xml b/debug.xml index 1823a4b28..6f2ccc738 100644 --- a/debug.xml +++ b/debug.xml @@ -333,16 +333,16 @@ - SELECT * FROM device_aliases; + SELECT * FROM attribute_aliases; - INSERT INTO device_aliases (deviceId, attribute, alias) + INSERT INTO attribute_aliases (deviceId, attribute, alias) VALUES (:deviceId, :attribute, :alias); - UPDATE device_aliases SET + UPDATE attribute_aliases SET deviceId = :deviceId, attribute = :attribute, alias = :alias @@ -350,7 +350,7 @@ - DELETE FROM device_aliases WHERE id = :id; + DELETE FROM attribute_aliases WHERE id = :id; diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index 8cb6c0e04..304ac21d4 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -8,7 +8,7 @@ - + @@ -23,8 +23,8 @@ - - + + diff --git a/src/org/traccar/api/resource/AttributeAliasResource.java b/src/org/traccar/api/resource/AttributeAliasResource.java index 827b50c38..6dbcf6ce8 100644 --- a/src/org/traccar/api/resource/AttributeAliasResource.java +++ b/src/org/traccar/api/resource/AttributeAliasResource.java @@ -46,9 +46,9 @@ public class AttributeAliasResource extends BaseResource { if (!Context.getPermissionsManager().isAdmin(getUserId())) { Context.getPermissionsManager().checkDevice(getUserId(), deviceId); } - return Context.getAliasesManager().getDeviceAttributeAliases(deviceId); + return Context.getAliasesManager().getAttributeAliases(deviceId); } else { - return Context.getAliasesManager().getUserDevicesAttributeAliases(getUserId()); + return Context.getAliasesManager().getAllAttributeAliases(getUserId()); } } @@ -67,10 +67,8 @@ public class AttributeAliasResource extends BaseResource { public Response update(@PathParam("id") long id, AttributeAlias entity) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); if (!Context.getPermissionsManager().isAdmin(getUserId())) { - AttributeAlias oldAttrbuteAlias = Context.getAliasesManager().getAttributeAliasById(entity.getId()); - if (oldAttrbuteAlias != null && oldAttrbuteAlias.getDeviceId() != entity.getDeviceId()) { - Context.getPermissionsManager().checkDevice(getUserId(), oldAttrbuteAlias.getDeviceId()); - } + AttributeAlias oldEntity = Context.getAliasesManager().getAttributeAlias(entity.getId()); + Context.getPermissionsManager().checkDevice(getUserId(), oldEntity.getDeviceId()); Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId()); } Context.getAliasesManager().updateAttributeAlias(entity); @@ -82,9 +80,8 @@ public class AttributeAliasResource extends BaseResource { public Response remove(@PathParam("id") long id) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); if (!Context.getPermissionsManager().isAdmin(getUserId())) { - AttributeAlias attrbuteAlias = Context.getAliasesManager().getAttributeAliasById(id); - Context.getPermissionsManager().checkDevice(getUserId(), - attrbuteAlias != null ? attrbuteAlias.getDeviceId() : 0); + AttributeAlias entity = Context.getAliasesManager().getAttributeAlias(id); + Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId()); } Context.getAliasesManager().removeArrtibuteAlias(id); return Response.noContent().build(); diff --git a/src/org/traccar/database/AliasesManager.java b/src/org/traccar/database/AliasesManager.java index 0a9854385..6c09e8731 100644 --- a/src/org/traccar/database/AliasesManager.java +++ b/src/org/traccar/database/AliasesManager.java @@ -35,25 +35,12 @@ public class AliasesManager { private final Map> deviceAliases = new ConcurrentHashMap<>(); private final Map aliasesById = new ConcurrentHashMap<>(); - public AliasesManager(DataManager dataManager) { this.dataManager = dataManager; - refresh(); - } - - public Set getDeviceAttributeAliases(long deviceId) { - if (!deviceAliases.containsKey(deviceId)) { - deviceAliases.put(deviceId, new HashSet()); - } - return deviceAliases.get(deviceId); - } - - public final void refresh() { if (dataManager != null) { try { - deviceAliases.clear(); for (AttributeAlias attributeAlias : dataManager.getAttributeAliases()) { - getDeviceAttributeAliases(attributeAlias.getDeviceId()) + getAttributeAliases(attributeAlias.getDeviceId()) .add(attributeAlias); aliasesById.put(attributeAlias.getId(), attributeAlias); } @@ -63,8 +50,15 @@ public class AliasesManager { } } + public Set getAttributeAliases(long deviceId) { + if (!deviceAliases.containsKey(deviceId)) { + deviceAliases.put(deviceId, new HashSet()); + } + return deviceAliases.get(deviceId); + } + public void removeDevice(long deviceId) { - for (AttributeAlias attributeAlias : getDeviceAttributeAliases(deviceId)) { + for (AttributeAlias attributeAlias : getAttributeAliases(deviceId)) { aliasesById.remove(attributeAlias.getId()); } deviceAliases.remove(deviceId); @@ -73,16 +67,16 @@ public class AliasesManager { public void addAttributeAlias(AttributeAlias attributeAlias) throws SQLException { dataManager.addAttributeAlias(attributeAlias); aliasesById.put(attributeAlias.getId(), attributeAlias); - getDeviceAttributeAliases(attributeAlias.getDeviceId()).add(attributeAlias); + getAttributeAliases(attributeAlias.getDeviceId()).add(attributeAlias); } public void updateAttributeAlias(AttributeAlias attributeAlias) throws SQLException { dataManager.updateAttributeAlias(attributeAlias); AttributeAlias cachedAlias = aliasesById.get(attributeAlias.getId()); if (cachedAlias.getDeviceId() != attributeAlias.getDeviceId()) { - getDeviceAttributeAliases(cachedAlias.getDeviceId()).remove(cachedAlias); + getAttributeAliases(cachedAlias.getDeviceId()).remove(cachedAlias); cachedAlias.setDeviceId(attributeAlias.getDeviceId()); - getDeviceAttributeAliases(cachedAlias.getDeviceId()).add(cachedAlias); + getAttributeAliases(cachedAlias.getDeviceId()).add(cachedAlias); } cachedAlias.setAttribute(attributeAlias.getAttribute()); cachedAlias.setAlias(attributeAlias.getAlias()); @@ -91,12 +85,12 @@ public class AliasesManager { public void removeArrtibuteAlias(long attributeAliasId) throws SQLException { dataManager.removeAttributeAlias(attributeAliasId); AttributeAlias cachedAlias = aliasesById.get(attributeAliasId); - getDeviceAttributeAliases(cachedAlias.getDeviceId()).remove(cachedAlias); + getAttributeAliases(cachedAlias.getDeviceId()).remove(cachedAlias); aliasesById.remove(attributeAliasId); } - public AttributeAlias getDeviceAliasByAttribute(long deviceId, String attribute) { - for (AttributeAlias alias : getDeviceAttributeAliases(deviceId)) { + public AttributeAlias getAttributeAlias(long deviceId, String attribute) { + for (AttributeAlias alias : getAttributeAliases(deviceId)) { if (alias.getAttribute().equals(attribute)) { return alias; } @@ -104,15 +98,15 @@ public class AliasesManager { return null; } - public Collection getUserDevicesAttributeAliases(long userId) { + public Collection getAllAttributeAliases(long userId) { Collection userDevicesAliases = new ArrayList<>(); for (long deviceId : Context.getPermissionsManager().getDevicePermissions(userId)) { - userDevicesAliases.addAll(getDeviceAttributeAliases(deviceId)); + userDevicesAliases.addAll(getAttributeAliases(deviceId)); } return userDevicesAliases; } - public AttributeAlias getAttributeAliasById(long id) { + public AttributeAlias getAttributeAlias(long id) { return aliasesById.get(id); } -- cgit v1.2.3