diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2022-02-15 22:55:53 -0800 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2022-02-15 22:55:53 -0800 |
commit | dd8dbbf6fca2c61726431a8552640f2c1499b4a2 (patch) | |
tree | 838d5d85067824443d762171644c8d785e9ca635 /src/main/java/org/traccar/storage/DatabaseStorage.java | |
parent | 17d8ffe18170c422ac2c6dccef8361e1ca684548 (diff) | |
download | trackermap-server-dd8dbbf6fca2c61726431a8552640f2c1499b4a2.tar.gz trackermap-server-dd8dbbf6fca2c61726431a8552640f2c1499b4a2.tar.bz2 trackermap-server-dd8dbbf6fca2c61726431a8552640f2c1499b4a2.zip |
Migrate permissions queries
Diffstat (limited to 'src/main/java/org/traccar/storage/DatabaseStorage.java')
-rw-r--r-- | src/main/java/org/traccar/storage/DatabaseStorage.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/main/java/org/traccar/storage/DatabaseStorage.java b/src/main/java/org/traccar/storage/DatabaseStorage.java index 2c893ebbc..d73dc7b25 100644 --- a/src/main/java/org/traccar/storage/DatabaseStorage.java +++ b/src/main/java/org/traccar/storage/DatabaseStorage.java @@ -1,5 +1,6 @@ package org.traccar.storage; +import org.traccar.model.Permission; import org.traccar.storage.query.Columns; import org.traccar.storage.query.Condition; import org.traccar.storage.query.Limit; @@ -29,6 +30,7 @@ public class DatabaseStorage extends Storage { query.append(" FROM ").append(getTableName(clazz)); query.append(formatCondition(request.getCondition())); query.append(formatOrder(request.getOrder())); + query.append(formatLimit(request.getLimit())); try { QueryBuilder builder = QueryBuilder.create(dataSource, query.toString()); for (Map.Entry<String, Object> variable : getConditionVariables(request.getCondition()).entrySet()) { @@ -93,6 +95,54 @@ public class DatabaseStorage extends Storage { } } + @Override + public List<Permission> getPermissions(Class<?> ownerClass, Class<?> propertyClass) throws StorageException { + StringBuilder query = new StringBuilder("SELECT * FROM "); + query.append(Permission.getStorageName(ownerClass, propertyClass)); + try { + QueryBuilder builder = QueryBuilder.create(dataSource, query.toString()); + return builder.executePermissionsQuery(); + } catch (SQLException e) { + throw new StorageException(e); + } + } + + @Override + public void addPermission(Permission permission) throws StorageException { + StringBuilder query = new StringBuilder("INSERT INTO "); + query.append(permission.getStorageName()); + query.append(" VALUES ("); + query.append(permission.get().keySet().stream().map(key -> ':' + key).collect(Collectors.joining(", "))); + query.append(")"); + try { + QueryBuilder builder = QueryBuilder.create(dataSource, query.toString(), true); + for (var entry : permission.get().entrySet()) { + builder.setLong(entry.getKey(), entry.getValue()); + } + builder.executeUpdate(); + } catch (SQLException e) { + throw new StorageException(e); + } + } + + @Override + public void removePermission(Permission permission) throws StorageException { + StringBuilder query = new StringBuilder("DELETE FROM "); + query.append(permission.getStorageName()); + query.append(" WHERE "); + query.append(permission + .get().keySet().stream().map(key -> key + " = :" + key).collect(Collectors.joining(" AND "))); + try { + QueryBuilder builder = QueryBuilder.create(dataSource, query.toString(), true); + for (var entry : permission.get().entrySet()) { + builder.setLong(entry.getKey(), entry.getValue()); + } + builder.executeUpdate(); + } catch (SQLException e) { + throw new StorageException(e); + } + } + private String getTableName(Class<?> clazz) throws StorageException { StorageName storageName = clazz.getAnnotation(StorageName.class); if (storageName == null) { |