From 839e741653c9b61e573fa1cdd0dad0641c79bcec Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 21 Jul 2017 09:59:27 +0500 Subject: Abolish permissions classes and get permissions as Map from DB --- src/org/traccar/database/AttributesManager.java | 5 +--- src/org/traccar/database/CalendarManager.java | 3 +- src/org/traccar/database/DataManager.java | 8 ++++++ src/org/traccar/database/DriversManager.java | 5 +--- .../traccar/database/ExtendedObjectManager.java | 33 ++++++++-------------- src/org/traccar/database/GeofenceManager.java | 5 +--- src/org/traccar/database/PermissionsManager.java | 24 ++++++++-------- src/org/traccar/database/QueryBuilder.java | 25 ++++++++++++++++ src/org/traccar/database/SimpleObjectManager.java | 23 +++++++++------ 9 files changed, 74 insertions(+), 57 deletions(-) (limited to 'src/org/traccar/database') diff --git a/src/org/traccar/database/AttributesManager.java b/src/org/traccar/database/AttributesManager.java index 6531019d1..266fc5526 100644 --- a/src/org/traccar/database/AttributesManager.java +++ b/src/org/traccar/database/AttributesManager.java @@ -18,16 +18,13 @@ package org.traccar.database; import java.sql.SQLException; -import org.traccar.model.AttributePermission; import org.traccar.model.Attribute; -import org.traccar.model.DeviceAttribute; -import org.traccar.model.GroupAttribute; import org.traccar.model.BaseModel; public class AttributesManager extends ExtendedObjectManager { public AttributesManager(DataManager dataManager) { - super(dataManager, Attribute.class, AttributePermission.class, DeviceAttribute.class, GroupAttribute.class); + super(dataManager, Attribute.class); refreshItems(); refreshExtendedPermissions(); } diff --git a/src/org/traccar/database/CalendarManager.java b/src/org/traccar/database/CalendarManager.java index e00b4faa6..80bb79db2 100644 --- a/src/org/traccar/database/CalendarManager.java +++ b/src/org/traccar/database/CalendarManager.java @@ -17,12 +17,11 @@ package org.traccar.database; import org.traccar.model.Calendar; -import org.traccar.model.CalendarPermission; public class CalendarManager extends SimpleObjectManager { public CalendarManager(DataManager dataManager) { - super(dataManager, Calendar.class, CalendarPermission.class); + super(dataManager, Calendar.class); refreshItems(); } diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index 7497294a1..39ffe6552 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -285,6 +285,14 @@ public class DataManager { return QueryBuilder.create(dataSource, getQuery(query)).executeQuery(clazz); } + public Collection> getPermissions(String owner, String property) throws SQLException { + String query = "database.select" + + owner.substring(0, 1).toUpperCase() + owner.substring(1) + + property.substring(0, 1).toUpperCase() + property.substring(1) + + "s"; + return QueryBuilder.create(dataSource, getQuery(query)).executeMapQuery(Long.class); + } + public void addObject(BaseModel entity) throws SQLException { String query = "database.insert" + entity.getClass().getSimpleName(); entity.setId(QueryBuilder.create(dataSource, getQuery(query), true) diff --git a/src/org/traccar/database/DriversManager.java b/src/org/traccar/database/DriversManager.java index dba06a37f..8c35f3ddf 100644 --- a/src/org/traccar/database/DriversManager.java +++ b/src/org/traccar/database/DriversManager.java @@ -21,10 +21,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.traccar.helper.Log; -import org.traccar.model.DeviceDriver; import org.traccar.model.Driver; -import org.traccar.model.DriverPermission; -import org.traccar.model.GroupDriver; import org.traccar.model.BaseModel; public class DriversManager extends ExtendedObjectManager { @@ -32,7 +29,7 @@ public class DriversManager extends ExtendedObjectManager { private final Map driversByUniqueId = new ConcurrentHashMap<>(); public DriversManager(DataManager dataManager) { - super(dataManager, Driver.class, DriverPermission.class, DeviceDriver.class, GroupDriver.class); + super(dataManager, Driver.class); refreshItems(); refreshExtendedPermissions(); } diff --git a/src/org/traccar/database/ExtendedObjectManager.java b/src/org/traccar/database/ExtendedObjectManager.java index caad989c2..fce32fb41 100644 --- a/src/org/traccar/database/ExtendedObjectManager.java +++ b/src/org/traccar/database/ExtendedObjectManager.java @@ -25,9 +25,6 @@ import java.util.concurrent.ConcurrentHashMap; import org.traccar.Context; import org.traccar.helper.Log; -import org.traccar.model.BaseDevicePermission; -import org.traccar.model.BaseGroupPermission; -import org.traccar.model.BaseUserPermission; import org.traccar.model.Device; import org.traccar.model.BaseModel; @@ -37,17 +34,9 @@ public abstract class ExtendedObjectManager extends SimpleObjectManager { private final Map> deviceItemsWithGroups = new ConcurrentHashMap<>(); private final Map> groupItems = new ConcurrentHashMap<>(); - private Class devicePermissionClass; - private Class groupPermissionClass; - protected ExtendedObjectManager(DataManager dataManager, - Class baseClass, - Class permissionClass, - Class devicePermissionClass, - Class groupPermissionClass) { - super(dataManager, baseClass, permissionClass); - this.devicePermissionClass = devicePermissionClass; - this.groupPermissionClass = groupPermissionClass; + Class baseClass) { + super(dataManager, baseClass); } public final Set getGroupItems(long groupId) { @@ -89,24 +78,24 @@ public abstract class ExtendedObjectManager extends SimpleObjectManager { if (getDataManager() != null) { try { - Collection databaseGroupPermissions = - getDataManager().getObjects(groupPermissionClass); + Collection> databaseGroupPermissions = + getDataManager().getPermissions("Group", getBaseClassName()); clearGroupItems(); - for (BaseGroupPermission groupPermission : databaseGroupPermissions) { - getGroupItems(groupPermission.getGroupId()).add(groupPermission.getSlaveId()); + for (Map groupPermission : databaseGroupPermissions) { + getGroupItems(groupPermission.get("groupId")).add(groupPermission.get(getBaseClassIdName())); } - Collection databaseDevicePermissions = - getDataManager().getObjects(devicePermissionClass); + Collection> databaseDevicePermissions = + getDataManager().getPermissions("Device", getBaseClassName()); Collection allDevices = Context.getDeviceManager().getAllDevices(); clearDeviceItems(); deviceItemsWithGroups.clear(); - for (BaseDevicePermission devicePermission : databaseDevicePermissions) { - getDeviceItems(devicePermission.getDeviceId()).add(devicePermission.getSlaveId()); - getAllDeviceItems(devicePermission.getDeviceId()).add(devicePermission.getSlaveId()); + for (Map devicePermission : databaseDevicePermissions) { + getDeviceItems(devicePermission.get("deviceId")).add(devicePermission.get(getBaseClassIdName())); + getAllDeviceItems(devicePermission.get("deviceId")).add(devicePermission.get(getBaseClassIdName())); } for (Device device : allDevices) { diff --git a/src/org/traccar/database/GeofenceManager.java b/src/org/traccar/database/GeofenceManager.java index ed1f26f78..bc2c27a65 100644 --- a/src/org/traccar/database/GeofenceManager.java +++ b/src/org/traccar/database/GeofenceManager.java @@ -20,16 +20,13 @@ import java.util.List; import org.traccar.Context; import org.traccar.model.Device; -import org.traccar.model.DeviceGeofence; import org.traccar.model.Geofence; -import org.traccar.model.GeofencePermission; -import org.traccar.model.GroupGeofence; import org.traccar.model.Position; public class GeofenceManager extends ExtendedObjectManager { public GeofenceManager(DataManager dataManager) { - super(dataManager, Geofence.class, GeofencePermission.class, DeviceGeofence.class, GroupGeofence.class); + super(dataManager, Geofence.class); refreshItems(); refreshExtendedPermissions(); } diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index caae86b84..4646071aa 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -18,12 +18,9 @@ package org.traccar.database; import org.traccar.Context; import org.traccar.helper.Log; import org.traccar.model.Device; -import org.traccar.model.DevicePermission; import org.traccar.model.Group; -import org.traccar.model.GroupPermission; import org.traccar.model.Server; import org.traccar.model.User; -import org.traccar.model.UserPermission; import java.lang.reflect.Method; import java.sql.SQLException; @@ -112,8 +109,8 @@ public class PermissionsManager { public final void refreshUserPermissions() { userPermissions.clear(); try { - for (UserPermission permission : dataManager.getObjects(UserPermission.class)) { - getUserPermissions(permission.getUserId()).add(permission.getManagedUserId()); + for (Map permission : dataManager.getPermissions("User", "Permission")) { + getUserPermissions(permission.get("userId")).add(permission.get("managedUserId")); } } catch (SQLException error) { Log.warning(error); @@ -126,19 +123,20 @@ public class PermissionsManager { try { GroupTree groupTree = new GroupTree(Context.getDeviceManager().getAllGroups(), Context.getDeviceManager().getAllDevices()); - for (GroupPermission permission : dataManager.getObjects(GroupPermission.class)) { - Set userGroupPermissions = getGroupPermissions(permission.getUserId()); - Set userDevicePermissions = getDevicePermissions(permission.getUserId()); - userGroupPermissions.add(permission.getGroupId()); - for (Group group : groupTree.getGroups(permission.getGroupId())) { + for (Map groupPermission : dataManager.getPermissions("Group", "Permission")) { + Set userGroupPermissions = getGroupPermissions(groupPermission.get("userId")); + Set userDevicePermissions = getDevicePermissions(groupPermission.get("userId")); + userGroupPermissions.add(groupPermission.get("groupId")); + for (Group group : groupTree.getGroups(groupPermission.get("groupId"))) { userGroupPermissions.add(group.getId()); } - for (Device device : groupTree.getDevices(permission.getGroupId())) { + for (Device device : groupTree.getDevices(groupPermission.get("groupId"))) { userDevicePermissions.add(device.getId()); } } - for (DevicePermission permission : dataManager.getObjects(DevicePermission.class)) { - getDevicePermissions(permission.getUserId()).add(permission.getDeviceId()); + + for (Map devicePermission : dataManager.getPermissions("Device", "Permission")) { + getDevicePermissions(devicePermission.get("userId")).add(devicePermission.get("deviceId")); } groupDevices.clear(); diff --git a/src/org/traccar/database/QueryBuilder.java b/src/org/traccar/database/QueryBuilder.java index a24e6f0bf..440690a76 100644 --- a/src/org/traccar/database/QueryBuilder.java +++ b/src/org/traccar/database/QueryBuilder.java @@ -35,6 +35,7 @@ import java.sql.Types; import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -487,4 +488,28 @@ public final class QueryBuilder { return 0; } + public Collection> executeMapQuery(Class clazz) throws SQLException { + List> result = new LinkedList<>(); + if (query != null) { + try { + try (ResultSet resultSet = statement.executeQuery()) { + ResultSetMetaData resultMetaData = resultSet.getMetaData(); + while (resultSet.next()) { + LinkedHashMap map = new LinkedHashMap<>(); + for (int i = 1; i <= resultMetaData.getColumnCount(); i++) { + String label = resultMetaData.getColumnLabel(i); + map.put(label, resultSet.getObject(label, clazz)); + } + result.add(map); + } + } + } finally { + statement.close(); + connection.close(); + } + } + + return result; + } + } diff --git a/src/org/traccar/database/SimpleObjectManager.java b/src/org/traccar/database/SimpleObjectManager.java index aae407b56..c4fc0e97a 100644 --- a/src/org/traccar/database/SimpleObjectManager.java +++ b/src/org/traccar/database/SimpleObjectManager.java @@ -26,7 +26,6 @@ import java.util.concurrent.ConcurrentHashMap; import org.traccar.Context; import org.traccar.helper.Log; -import org.traccar.model.BaseUserPermission; import org.traccar.model.BaseModel; public abstract class SimpleObjectManager { @@ -37,14 +36,14 @@ public abstract class SimpleObjectManager { private final Map> userItems = new ConcurrentHashMap<>(); private Class baseClass; - private Class permissionClass; + private String baseClassName; + private String baseClassIdName; - protected SimpleObjectManager(DataManager dataManager, - Class baseClass, - Class permissionClass) { + protected SimpleObjectManager(DataManager dataManager, Class baseClass) { this.dataManager = dataManager; this.baseClass = baseClass; - this.permissionClass = permissionClass; + baseClassName = baseClass.getSimpleName(); + baseClassIdName = baseClassName.substring(0, 1).toLowerCase() + baseClassName.substring(1) + "Id"; } protected final DataManager getDataManager() { @@ -55,6 +54,14 @@ public abstract class SimpleObjectManager { return baseClass; } + protected final String getBaseClassName() { + return baseClassName; + } + + protected final String getBaseClassIdName() { + return baseClassIdName; + } + public final BaseModel getById(long itemId) { return items.get(itemId); } @@ -104,8 +111,8 @@ public abstract class SimpleObjectManager { if (dataManager != null) { try { clearUserItems(); - for (BaseUserPermission permission : dataManager.getObjects(this.permissionClass)) { - getUserItems(permission.getUserId()).add(permission.getSlaveId()); + for (Map permission : dataManager.getPermissions(baseClassName, "Permission")) { + getUserItems(permission.get("userId")).add(permission.get(baseClassIdName)); } } catch (SQLException error) { Log.warning(error); -- cgit v1.2.3