aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/database/DeviceManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/database/DeviceManager.java')
-rw-r--r--src/org/traccar/database/DeviceManager.java16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java
index c70e67231..a75b0616c 100644
--- a/src/org/traccar/database/DeviceManager.java
+++ b/src/org/traccar/database/DeviceManager.java
@@ -49,6 +49,7 @@ public class DeviceManager implements IdentityManager {
private AtomicLong devicesLastUpdate = new AtomicLong();
private Map<Long, Group> groupsById;
+ private Map<String, Group> groupsByName;
private AtomicLong groupsLastUpdate = new AtomicLong();
private final Map<Long, Position> positions = new ConcurrentHashMap<>();
@@ -245,6 +246,9 @@ public class DeviceManager implements IdentityManager {
if (groupsById == null) {
groupsById = new ConcurrentHashMap<>(databaseGroups.size());
}
+ if (groupsByName == null) {
+ groupsByName = new ConcurrentHashMap<>(databaseGroups.size());
+ }
Set<Long> databaseGroupsIds = new HashSet<>();
for (Group group : databaseGroups) {
databaseGroupsIds.add(group.getId());
@@ -254,6 +258,7 @@ public class DeviceManager implements IdentityManager {
cachedGroup.setGroupId(group.getGroupId());
} else {
groupsById.put(group.getId(), group);
+ groupsByName.put(group.getName(), group);
}
}
for (Long cachedGroupId : groupsById.keySet()) {
@@ -269,6 +274,10 @@ public class DeviceManager implements IdentityManager {
return groupsById.get(id);
}
+ public Group getGroupByName(String name) {
+ return groupsByName.get(name);
+ }
+
public Collection<Group> getAllGroups() {
boolean forceUpdate = groupsById.isEmpty();
@@ -304,17 +313,24 @@ public class DeviceManager implements IdentityManager {
checkGroupCycles(group);
dataManager.addGroup(group);
groupsById.put(group.getId(), group);
+ groupsByName.put(group.getName(), group);
}
public void updateGroup(Group group) throws SQLException {
+ String oldGroupName = groupsById.get(group.getId()).getName();
checkGroupCycles(group);
dataManager.updateGroup(group);
groupsById.put(group.getId(), group);
+ if (!oldGroupName.equals(group.getName())) {
+ groupsByName.remove(oldGroupName);
+ }
+ groupsByName.put(group.getName(), group);
}
public void removeGroup(long groupId) throws SQLException {
dataManager.removeGroup(groupId);
groupsById.remove(groupId);
+ groupsByName.remove(getGroupById(groupId).getName());
}
public boolean lookupAttributeBoolean(