aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/database
diff options
context:
space:
mode:
authorAbyss777 <abyss@fox5.ru>2017-07-26 17:52:27 +0500
committerAbyss777 <abyss@fox5.ru>2017-07-26 17:52:27 +0500
commitd31f68d80a8e3ae75fa0c2f02b9ca258486a3cad (patch)
treed44c13177de39aad1d0907a4150dfa6e440ab02f /src/org/traccar/database
parent82edf57e1b93d5a5ca34294dc62e3620889c2341 (diff)
downloadtraccar-server-d31f68d80a8e3ae75fa0c2f02b9ca258486a3cad.tar.gz
traccar-server-d31f68d80a8e3ae75fa0c2f02b9ca258486a3cad.tar.bz2
traccar-server-d31f68d80a8e3ae75fa0c2f02b9ca258486a3cad.zip
- Implement base manager classes as generics
- Remame getDeviceById and getDeviceByUniqueId functions
Diffstat (limited to 'src/org/traccar/database')
-rw-r--r--src/org/traccar/database/AttributesManager.java13
-rw-r--r--src/org/traccar/database/BaseObjectManager.java28
-rw-r--r--src/org/traccar/database/CalendarManager.java7
-rw-r--r--src/org/traccar/database/ConnectionManager.java2
-rw-r--r--src/org/traccar/database/DeviceManager.java34
-rw-r--r--src/org/traccar/database/DriversManager.java25
-rw-r--r--src/org/traccar/database/ExtendedObjectManager.java4
-rw-r--r--src/org/traccar/database/GeofenceManager.java7
-rw-r--r--src/org/traccar/database/GroupsManager.java19
-rw-r--r--src/org/traccar/database/IdentityManager.java4
-rw-r--r--src/org/traccar/database/PermissionsManager.java5
-rw-r--r--src/org/traccar/database/SimpleObjectManager.java5
-rw-r--r--src/org/traccar/database/UsersManager.java21
13 files changed, 66 insertions, 108 deletions
diff --git a/src/org/traccar/database/AttributesManager.java b/src/org/traccar/database/AttributesManager.java
index e80d57c4e..28816645a 100644
--- a/src/org/traccar/database/AttributesManager.java
+++ b/src/org/traccar/database/AttributesManager.java
@@ -17,23 +17,16 @@
package org.traccar.database;
import org.traccar.model.Attribute;
-import org.traccar.model.BaseModel;
-public class AttributesManager extends ExtendedObjectManager {
+public class AttributesManager extends ExtendedObjectManager<Attribute> {
public AttributesManager(DataManager dataManager) {
super(dataManager, Attribute.class);
}
@Override
- public Attribute getById(long calendarId) {
- return (Attribute) super.getById(calendarId);
- }
-
- @Override
- public void updateCachedItem(BaseModel item) {
- Attribute attribute = (Attribute) item;
- Attribute cachedAttribute = getById(item.getId());
+ public void updateCachedItem(Attribute attribute) {
+ Attribute cachedAttribute = getById(attribute.getId());
cachedAttribute.setDescription(attribute.getDescription());
cachedAttribute.setAttribute(attribute.getAttribute());
cachedAttribute.setExpression(attribute.getExpression());
diff --git a/src/org/traccar/database/BaseObjectManager.java b/src/org/traccar/database/BaseObjectManager.java
index 92cfd9b6b..cc1dbde5f 100644
--- a/src/org/traccar/database/BaseObjectManager.java
+++ b/src/org/traccar/database/BaseObjectManager.java
@@ -27,14 +27,14 @@ import java.util.concurrent.ConcurrentHashMap;
import org.traccar.helper.Log;
import org.traccar.model.BaseModel;
-public class BaseObjectManager {
+public class BaseObjectManager<T extends BaseModel> {
private final DataManager dataManager;
- private Map<Long, BaseModel> items;
- private Class<? extends BaseModel> baseClass;
+ private Map<Long, T> items;
+ private Class<T> baseClass;
- protected BaseObjectManager(DataManager dataManager, Class<? extends BaseModel> baseClass) {
+ protected BaseObjectManager(DataManager dataManager, Class<T> baseClass) {
this.dataManager = dataManager;
this.baseClass = baseClass;
refreshItems();
@@ -44,23 +44,23 @@ public class BaseObjectManager {
return dataManager;
}
- protected final Class<? extends BaseModel> getBaseClass() {
+ protected final Class<T> getBaseClass() {
return baseClass;
}
- public BaseModel getById(long itemId) {
+ public T getById(long itemId) {
return items.get(itemId);
}
public void refreshItems() {
if (dataManager != null) {
try {
- Collection<? extends BaseModel> databaseItems = dataManager.getObjects(baseClass);
+ Collection<T> databaseItems = dataManager.getObjects(baseClass);
if (items == null) {
items = new ConcurrentHashMap<>(databaseItems.size());
}
Set<Long> databaseItemIds = new HashSet<>();
- for (BaseModel item : databaseItems) {
+ for (T item : databaseItems) {
databaseItemIds.add(item.getId());
if (items.containsKey(item.getId())) {
updateCachedItem(item);
@@ -79,20 +79,20 @@ public class BaseObjectManager {
}
}
- protected void addNewItem(BaseModel item) {
+ protected void addNewItem(T item) {
items.put(item.getId(), item);
}
- public void addItem(BaseModel item) throws SQLException {
+ public void addItem(T item) throws SQLException {
dataManager.addObject(item);
addNewItem(item);
}
- protected void updateCachedItem(BaseModel item) {
+ protected void updateCachedItem(T item) {
items.put(item.getId(), item);
}
- public void updateItem(BaseModel item) throws SQLException {
+ public void updateItem(T item) throws SQLException {
dataManager.updateObject(item);
updateCachedItem(item);
}
@@ -109,10 +109,10 @@ public class BaseObjectManager {
}
}
- public final <T> Collection<T> getItems(Class<T> clazz, Set<Long> itemIds) {
+ public final Collection<T> getItems(Set<Long> itemIds) {
Collection<T> result = new LinkedList<>();
for (long itemId : itemIds) {
- result.add((T) getById(itemId));
+ result.add(getById(itemId));
}
return result;
}
diff --git a/src/org/traccar/database/CalendarManager.java b/src/org/traccar/database/CalendarManager.java
index b8d0914ee..44ced1082 100644
--- a/src/org/traccar/database/CalendarManager.java
+++ b/src/org/traccar/database/CalendarManager.java
@@ -18,15 +18,10 @@ package org.traccar.database;
import org.traccar.model.Calendar;
-public class CalendarManager extends SimpleObjectManager {
+public class CalendarManager extends SimpleObjectManager<Calendar> {
public CalendarManager(DataManager dataManager) {
super(dataManager, Calendar.class);
}
- @Override
- public Calendar getById(long calendarId) {
- return (Calendar) super.getById(calendarId);
- }
-
}
diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java
index 0baafb578..1445fb785 100644
--- a/src/org/traccar/database/ConnectionManager.java
+++ b/src/org/traccar/database/ConnectionManager.java
@@ -70,7 +70,7 @@ public class ConnectionManager {
}
public void updateDevice(final long deviceId, String status, Date time) {
- Device device = Context.getIdentityManager().getDeviceById(deviceId);
+ Device device = Context.getIdentityManager().getById(deviceId);
if (device == null) {
return;
}
diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java
index 1fe7ddfa5..4aafe6631 100644
--- a/src/org/traccar/database/DeviceManager.java
+++ b/src/org/traccar/database/DeviceManager.java
@@ -30,7 +30,6 @@ import org.traccar.BaseProtocol;
import org.traccar.Config;
import org.traccar.Context;
import org.traccar.helper.Log;
-import org.traccar.model.BaseModel;
import org.traccar.model.Command;
import org.traccar.model.CommandType;
import org.traccar.model.Device;
@@ -39,7 +38,7 @@ import org.traccar.model.Group;
import org.traccar.model.Position;
import org.traccar.model.Server;
-public class DeviceManager extends BaseObjectManager implements IdentityManager, ManagableObjects {
+public class DeviceManager extends BaseObjectManager<Device> implements IdentityManager, ManagableObjects {
public static final long DEFAULT_REFRESH_DELAY = 300;
@@ -73,12 +72,7 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
}
@Override
- public Device getDeviceById(long id) {
- return (Device) getById(id);
- }
-
- @Override
- public Device getDeviceByUniqueId(String uniqueId) throws SQLException {
+ public Device getByUniqueId(String uniqueId) throws SQLException {
boolean forceUpdate = !devicesByUniqueId.containsKey(uniqueId) && !config.getBoolean("database.ignoreUnknown");
updateDeviceCache(forceUpdate);
@@ -105,7 +99,7 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
}
public Collection<Device> getAllDevices() {
- return getItems(Device.class, getAllItems());
+ return getItems(getAllItems());
}
@Override
@@ -142,9 +136,8 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
}
@Override
- protected void addNewItem(BaseModel item) {
- super.addNewItem(item);
- Device device = (Device) item;
+ protected void addNewItem(Device device) {
+ super.addNewItem(device);
putUniqueDeviceId(device);
if (device.getPhone() != null && !device.getPhone().isEmpty()) {
putPhone(device);
@@ -158,9 +151,8 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
}
@Override
- protected void updateCachedItem(BaseModel item) {
- Device device = (Device) item;
- Device cachedDevice = getDeviceById(device.getId());
+ protected void updateCachedItem(Device device) {
+ Device cachedDevice = getById(device.getId());
cachedDevice.setName(device.getName());
cachedDevice.setGroupId(device.getGroupId());
cachedDevice.setCategory(device.getCategory());
@@ -182,7 +174,7 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
@Override
protected void removeCachedItem(long deviceId) {
- Device cachedDevice = getDeviceById(deviceId);
+ Device cachedDevice = getById(deviceId);
if (cachedDevice != null) {
String deviceUniqueId = cachedDevice.getUniqueId();
String phone = cachedDevice.getPhone();
@@ -197,7 +189,7 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
public void updateDeviceStatus(Device device) throws SQLException {
getDataManager().updateDeviceStatus(device);
- Device cachedDevice = getDeviceById(device.getId());
+ Device cachedDevice = getById(device.getId());
if (cachedDevice != null) {
cachedDevice.setStatus(device.getStatus());
}
@@ -226,7 +218,7 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
getDataManager().updateLatestPosition(position);
- Device device = getDeviceById(position.getDeviceId());
+ Device device = getById(position.getDeviceId());
if (device != null) {
device.setPositionId(position.getId());
}
@@ -305,7 +297,7 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
private String lookupAttribute(long deviceId, String attributeName, boolean lookupConfig) {
String result = null;
- Device device = getDeviceById(deviceId);
+ Device device = getById(deviceId);
if (device != null) {
result = device.getString(attributeName);
if (result == null && lookupGroupsAttribute) {
@@ -352,9 +344,9 @@ public class DeviceManager extends BaseObjectManager implements IdentityManager,
Position lastPosition = getLastPosition(deviceId);
if (lastPosition != null) {
BaseProtocol protocol = Context.getServerManager().getProtocol(lastPosition.getProtocol());
- protocol.sendTextCommand(getDeviceById(deviceId).getPhone(), command);
+ protocol.sendTextCommand(getById(deviceId).getPhone(), command);
} else if (command.getType().equals(Command.TYPE_CUSTOM)) {
- Context.getSmppManager().sendMessageSync(((Device) getById(deviceId)).getPhone(),
+ Context.getSmppManager().sendMessageSync(getById(deviceId).getPhone(),
command.getString(Command.KEY_DATA), true);
} else {
throw new RuntimeException("Command " + command.getType() + " is not supported");
diff --git a/src/org/traccar/database/DriversManager.java b/src/org/traccar/database/DriversManager.java
index 420824dbb..d3866a5f0 100644
--- a/src/org/traccar/database/DriversManager.java
+++ b/src/org/traccar/database/DriversManager.java
@@ -20,37 +20,30 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.traccar.model.Driver;
-import org.traccar.model.BaseModel;
-public class DriversManager extends ExtendedObjectManager {
+public class DriversManager extends ExtendedObjectManager<Driver> {
- private Map<String, Driver> driversByUniqueId;
+ private Map<String, Long> driversByUniqueId;
public DriversManager(DataManager dataManager) {
super(dataManager, Driver.class);
}
- @Override
- public Driver getById(long driverId) {
- return (Driver) super.getById(driverId);
- }
-
private void putUniqueDriverId(Driver driver) {
if (driversByUniqueId == null) {
- driversByUniqueId = new ConcurrentHashMap<>();
+ driversByUniqueId = new ConcurrentHashMap<>(getAllItems().size());
}
- driversByUniqueId.put(driver.getUniqueId(), driver);
+ driversByUniqueId.put(driver.getUniqueId(), driver.getId());
}
@Override
- protected void addNewItem(BaseModel item) {
- super.addNewItem(item);
- putUniqueDriverId((Driver) item);
+ protected void addNewItem(Driver driver) {
+ super.addNewItem(driver);
+ putUniqueDriverId(driver);
}
@Override
- protected void updateCachedItem(BaseModel item) {
- Driver driver = (Driver) item;
+ protected void updateCachedItem(Driver driver) {
Driver cachedDriver = getById(driver.getId());
cachedDriver.setName(driver.getName());
if (!driver.getUniqueId().equals(cachedDriver.getUniqueId())) {
@@ -72,6 +65,6 @@ public class DriversManager extends ExtendedObjectManager {
}
public Driver getDriverByUniqueId(String uniqueId) {
- return driversByUniqueId.get(uniqueId);
+ return getById(driversByUniqueId.get(uniqueId));
}
}
diff --git a/src/org/traccar/database/ExtendedObjectManager.java b/src/org/traccar/database/ExtendedObjectManager.java
index 19c9ca5b2..16785cb37 100644
--- a/src/org/traccar/database/ExtendedObjectManager.java
+++ b/src/org/traccar/database/ExtendedObjectManager.java
@@ -30,13 +30,13 @@ import org.traccar.model.Group;
import org.traccar.model.Permission;
import org.traccar.model.BaseModel;
-public abstract class ExtendedObjectManager extends SimpleObjectManager {
+public abstract class ExtendedObjectManager<T extends BaseModel> extends SimpleObjectManager<T> {
private final Map<Long, Set<Long>> deviceItems = new ConcurrentHashMap<>();
private final Map<Long, Set<Long>> deviceItemsWithGroups = new ConcurrentHashMap<>();
private final Map<Long, Set<Long>> groupItems = new ConcurrentHashMap<>();
- protected ExtendedObjectManager(DataManager dataManager, Class<? extends BaseModel> baseClass) {
+ protected ExtendedObjectManager(DataManager dataManager, Class<T> baseClass) {
super(dataManager, baseClass);
refreshExtendedPermissions();
}
diff --git a/src/org/traccar/database/GeofenceManager.java b/src/org/traccar/database/GeofenceManager.java
index 4bc3909cd..a32847cf9 100644
--- a/src/org/traccar/database/GeofenceManager.java
+++ b/src/org/traccar/database/GeofenceManager.java
@@ -23,18 +23,13 @@ import org.traccar.model.Device;
import org.traccar.model.Geofence;
import org.traccar.model.Position;
-public class GeofenceManager extends ExtendedObjectManager {
+public class GeofenceManager extends ExtendedObjectManager<Geofence> {
public GeofenceManager(DataManager dataManager) {
super(dataManager, Geofence.class);
}
@Override
- public Geofence getById(long geofenceId) {
- return (Geofence) super.getById(geofenceId);
- }
-
- @Override
public final void refreshExtendedPermissions() {
super.refreshExtendedPermissions();
recalculateDevicesGeofences();
diff --git a/src/org/traccar/database/GroupsManager.java b/src/org/traccar/database/GroupsManager.java
index 095e7a22c..20b403d55 100644
--- a/src/org/traccar/database/GroupsManager.java
+++ b/src/org/traccar/database/GroupsManager.java
@@ -26,7 +26,7 @@ import org.traccar.helper.Log;
import org.traccar.model.BaseModel;
import org.traccar.model.Group;
-public class GroupsManager extends BaseObjectManager implements ManagableObjects {
+public class GroupsManager extends BaseObjectManager<Group> implements ManagableObjects {
private AtomicLong groupsLastUpdate = new AtomicLong();
private final long dataRefreshDelay;
@@ -37,11 +37,6 @@ public class GroupsManager extends BaseObjectManager implements ManagableObjects
DeviceManager.DEFAULT_REFRESH_DELAY) * 1000;
}
- @Override
- public Group getById(long groupId) {
- return (Group) super.getById(groupId);
- }
-
private void checkGroupCycles(BaseModel group) {
Set<Long> groups = new HashSet<>();
while (group != null) {
@@ -76,15 +71,15 @@ public class GroupsManager extends BaseObjectManager implements ManagableObjects
}
@Override
- protected void addNewItem(BaseModel item) {
- checkGroupCycles(item);
- super.addNewItem(item);
+ protected void addNewItem(Group group) {
+ checkGroupCycles(group);
+ super.addNewItem(group);
}
@Override
- protected void updateCachedItem(BaseModel item) {
- checkGroupCycles(item);
- super.updateCachedItem(item);
+ protected void updateCachedItem(Group group) {
+ checkGroupCycles(group);
+ super.updateCachedItem(group);
}
@Override
diff --git a/src/org/traccar/database/IdentityManager.java b/src/org/traccar/database/IdentityManager.java
index c8c593a54..82d905963 100644
--- a/src/org/traccar/database/IdentityManager.java
+++ b/src/org/traccar/database/IdentityManager.java
@@ -20,9 +20,9 @@ import org.traccar.model.Position;
public interface IdentityManager {
- Device getDeviceById(long id);
+ Device getById(long id);
- Device getDeviceByUniqueId(String uniqueId) throws Exception;
+ Device getByUniqueId(String uniqueId) throws Exception;
Position getLastPosition(long deviceId);
diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java
index 54e5ed979..3b03c1900 100644
--- a/src/org/traccar/database/PermissionsManager.java
+++ b/src/org/traccar/database/PermissionsManager.java
@@ -18,6 +18,7 @@ package org.traccar.database;
import org.traccar.Context;
import org.traccar.helper.Log;
import org.traccar.model.Attribute;
+import org.traccar.model.BaseModel;
import org.traccar.model.Calendar;
import org.traccar.model.Device;
import org.traccar.model.Driver;
@@ -99,7 +100,7 @@ public class PermissionsManager {
devicePermissions.clear();
try {
GroupTree groupTree = new GroupTree(Context.getGroupsManager().getItems(
- Group.class, Context.getGroupsManager().getAllItems()),
+ Context.getGroupsManager().getAllItems()),
Context.getDeviceManager().getAllDevices());
for (Permission groupPermission : dataManager.getPermissions(User.class, Group.class)) {
Set<Long> userGroupPermissions = getGroupPermissions(groupPermission.getOwnerId());
@@ -284,7 +285,7 @@ public class PermissionsManager {
public void checkPermission(Class<?> object, long userId, long objectId)
throws SecurityException {
- SimpleObjectManager manager = null;
+ SimpleObjectManager<? extends BaseModel> manager = null;
if (object.equals(Device.class)) {
checkDevice(userId, objectId);
diff --git a/src/org/traccar/database/SimpleObjectManager.java b/src/org/traccar/database/SimpleObjectManager.java
index fa41f30b6..0b4d11378 100644
--- a/src/org/traccar/database/SimpleObjectManager.java
+++ b/src/org/traccar/database/SimpleObjectManager.java
@@ -28,11 +28,12 @@ import org.traccar.model.BaseModel;
import org.traccar.model.Permission;
import org.traccar.model.User;
-public abstract class SimpleObjectManager extends BaseObjectManager implements ManagableObjects {
+public abstract class SimpleObjectManager<T extends BaseModel> extends BaseObjectManager<T>
+ implements ManagableObjects {
private Map<Long, Set<Long>> userItems;
- protected SimpleObjectManager(DataManager dataManager, Class<? extends BaseModel> baseClass) {
+ protected SimpleObjectManager(DataManager dataManager, Class<T> baseClass) {
super(dataManager, baseClass);
}
diff --git a/src/org/traccar/database/UsersManager.java b/src/org/traccar/database/UsersManager.java
index e53409b4f..28e6a31b2 100644
--- a/src/org/traccar/database/UsersManager.java
+++ b/src/org/traccar/database/UsersManager.java
@@ -21,10 +21,9 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import org.traccar.model.BaseModel;
import org.traccar.model.User;
-public class UsersManager extends SimpleObjectManager {
+public class UsersManager extends SimpleObjectManager<User> {
private Map<String, Long> usersTokens;
@@ -32,11 +31,6 @@ public class UsersManager extends SimpleObjectManager {
super(dataManager, User.class);
}
- @Override
- public User getById(long userId) {
- return (User) super.getById(userId);
- }
-
private void putToken(User user) {
if (usersTokens == null) {
usersTokens = new ConcurrentHashMap<>();
@@ -47,16 +41,15 @@ public class UsersManager extends SimpleObjectManager {
}
@Override
- protected void addNewItem(BaseModel item) {
- super.addNewItem(item);
- putToken((User) item);
+ protected void addNewItem(User user) {
+ super.addNewItem(user);
+ putToken(user);
}
@Override
- protected void updateCachedItem(BaseModel item) {
- User user = (User) item;
- User cachedUser = getById(item.getId());
- super.updateCachedItem(item);
+ protected void updateCachedItem(User user) {
+ User cachedUser = getById(user.getId());
+ super.updateCachedItem(user);
if (user.getToken() != null) {
usersTokens.put(user.getToken(), user.getId());
}