aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debug.xml8
-rw-r--r--schema/changelog-3.8.xml6
-rw-r--r--src/org/traccar/api/resource/AttributeAliasResource.java15
-rw-r--r--src/org/traccar/database/AliasesManager.java42
4 files changed, 31 insertions, 40 deletions
diff --git a/debug.xml b/debug.xml
index 1823a4b28..6f2ccc738 100644
--- a/debug.xml
+++ b/debug.xml
@@ -333,16 +333,16 @@
</entry>
<entry key='database.selectAttributeAliases'>
- SELECT * FROM device_aliases;
+ SELECT * FROM attribute_aliases;
</entry>
<entry key='database.insertAttributeAlias'>
- INSERT INTO device_aliases (deviceId, attribute, alias)
+ INSERT INTO attribute_aliases (deviceId, attribute, alias)
VALUES (:deviceId, :attribute, :alias);
</entry>
<entry key='database.updateAttributeAlias'>
- UPDATE device_aliases SET
+ UPDATE attribute_aliases SET
deviceId = :deviceId,
attribute = :attribute,
alias = :alias
@@ -350,7 +350,7 @@
</entry>
<entry key='database.deleteAttributeAlias'>
- DELETE FROM device_aliases WHERE id = :id;
+ DELETE FROM attribute_aliases WHERE id = :id;
</entry>
<!-- PROTOCOL CONFIG -->
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 @@
<changeSet author="author" id="changelog-3.8">
- <createTable tableName="device_aliases">
+ <createTable tableName="attribute_aliases">
<column name="id" type="INT" autoIncrement="true">
<constraints primaryKey="true" />
</column>
@@ -23,8 +23,8 @@
</column>
</createTable>
- <addForeignKeyConstraint baseTableName="device_aliases" baseColumnNames="deviceid" constraintName="fk_device_aliases_deviceid" referencedTableName="devices" referencedColumnNames="id" onDelete="CASCADE" />
- <addUniqueConstraint tableName="device_aliases" columnNames="deviceid, attribute" constraintName="un_deviceid_attribute" />
+ <addForeignKeyConstraint baseTableName="attribute_aliases" baseColumnNames="deviceid" constraintName="fk_attribute_aliases_deviceid" referencedTableName="devices" referencedColumnNames="id" onDelete="CASCADE" />
+ <addUniqueConstraint tableName="attribute_aliases" columnNames="deviceid, attribute" constraintName="uk_deviceid_attribute" />
<update tableName="users">
<column name="map" type="VARCHAR(128)"/>
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<Long, Set<AttributeAlias>> deviceAliases = new ConcurrentHashMap<>();
private final Map<Long, AttributeAlias> aliasesById = new ConcurrentHashMap<>();
-
public AliasesManager(DataManager dataManager) {
this.dataManager = dataManager;
- refresh();
- }
-
- public Set<AttributeAlias> getDeviceAttributeAliases(long deviceId) {
- if (!deviceAliases.containsKey(deviceId)) {
- deviceAliases.put(deviceId, new HashSet<AttributeAlias>());
- }
- 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<AttributeAlias> getAttributeAliases(long deviceId) {
+ if (!deviceAliases.containsKey(deviceId)) {
+ deviceAliases.put(deviceId, new HashSet<AttributeAlias>());
+ }
+ 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<AttributeAlias> getUserDevicesAttributeAliases(long userId) {
+ public Collection<AttributeAlias> getAllAttributeAliases(long userId) {
Collection<AttributeAlias> 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);
}