aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/database/DataManager.java
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2016-07-20 23:03:09 +1200
committerGitHub <noreply@github.com>2016-07-20 23:03:09 +1200
commit73a7bbeb1f2c6caf7b1677e3616552ddb3eddeec (patch)
tree44b6ec5bcdf21990a3aff61a2cd556db0e8f463b /src/org/traccar/database/DataManager.java
parent8e4d44e045c6e0c800b3b353f6f55c64d731428c (diff)
parent56784bd167ddf0bbc124269519b7a93b346bd5cc (diff)
downloadtrackermap-server-73a7bbeb1f2c6caf7b1677e3616552ddb3eddeec.tar.gz
trackermap-server-73a7bbeb1f2c6caf7b1677e3616552ddb3eddeec.tar.bz2
trackermap-server-73a7bbeb1f2c6caf7b1677e3616552ddb3eddeec.zip
Merge pull request #2132 from Abyss777/move_groups_to_device_manager
Move groups related actions to DeviceManager
Diffstat (limited to 'src/org/traccar/database/DataManager.java')
-rw-r--r--src/org/traccar/database/DataManager.java94
1 files changed, 0 insertions, 94 deletions
diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java
index 0aecaf2e7..be77a3d36 100644
--- a/src/org/traccar/database/DataManager.java
+++ b/src/org/traccar/database/DataManager.java
@@ -20,16 +20,9 @@ import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.SQLException;
-import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.naming.InitialContext;
import javax.sql.DataSource;
@@ -43,7 +36,6 @@ import liquibase.resource.FileSystemResourceAccessor;
import liquibase.resource.ResourceAccessor;
import org.traccar.Config;
-import org.traccar.Context;
import org.traccar.helper.Log;
import org.traccar.model.Device;
import org.traccar.model.DevicePermission;
@@ -64,25 +56,15 @@ import com.zaxxer.hikari.HikariDataSource;
public class DataManager {
- public static final long DEFAULT_REFRESH_DELAY = 300;
-
private final Config config;
private DataSource dataSource;
- private final long dataRefreshDelay;
-
- private final ReadWriteLock groupsLock = new ReentrantReadWriteLock();
- private final Map<Long, Group> groupsById = new HashMap<>();
- private long groupsLastUpdate;
-
public DataManager(Config config) throws Exception {
this.config = config;
initDatabase();
initDatabaseSchema();
-
- dataRefreshDelay = config.getLong("database.refreshDelay", DEFAULT_REFRESH_DELAY) * 1000;
}
public DataSource getDataSource() {
@@ -131,54 +113,6 @@ public class DataManager {
}
}
- private void updateGroupCache(boolean force) throws SQLException {
- boolean needWrite;
- groupsLock.readLock().lock();
- try {
- needWrite = force || System.currentTimeMillis() - groupsLastUpdate > dataRefreshDelay;
- } finally {
- groupsLock.readLock().unlock();
- }
-
- if (needWrite) {
- groupsLock.writeLock().lock();
- try {
- if (force || System.currentTimeMillis() - groupsLastUpdate > dataRefreshDelay) {
- groupsById.clear();
- for (Group group : getAllGroups()) {
- groupsById.put(group.getId(), group);
- }
- groupsLastUpdate = System.currentTimeMillis();
- }
- } finally {
- groupsLock.writeLock().unlock();
- }
- }
- }
-
- public Group getGroupById(long id) {
- boolean forceUpdate;
- groupsLock.readLock().lock();
- try {
- forceUpdate = !groupsById.containsKey(id);
- } finally {
- groupsLock.readLock().unlock();
- }
-
- try {
- updateGroupCache(forceUpdate);
- } catch (SQLException e) {
- Log.warning(e);
- }
-
- groupsLock.readLock().lock();
- try {
- return groupsById.get(id);
- } finally {
- groupsLock.readLock().unlock();
- }
- }
-
private String getQuery(String key) {
String query = config.getString(key);
if (query == null) {
@@ -311,44 +245,16 @@ public class DataManager {
.executeQuery(Group.class);
}
- public Collection<Group> getGroups(long userId) throws SQLException {
- Collection<Group> groups = new ArrayList<>();
- for (long id : Context.getPermissionsManager().getGroupPermissions(userId)) {
- groups.add(getGroupById(id));
- }
- return groups;
- }
-
- private void checkGroupCycles(Group group) {
- groupsLock.readLock().lock();
- try {
- Set<Long> groups = new HashSet<>();
- while (group != null) {
- if (groups.contains(group.getId())) {
- throw new IllegalArgumentException("Cycle in group hierarchy");
- }
- groups.add(group.getId());
- group = groupsById.get(group.getGroupId());
- }
- } finally {
- groupsLock.readLock().unlock();
- }
- }
-
public void addGroup(Group group) throws SQLException {
- checkGroupCycles(group);
group.setId(QueryBuilder.create(dataSource, getQuery("database.insertGroup"), true)
.setObject(group)
.executeUpdate());
- updateGroupCache(true);
}
public void updateGroup(Group group) throws SQLException {
- checkGroupCycles(group);
QueryBuilder.create(dataSource, getQuery("database.updateGroup"))
.setObject(group)
.executeUpdate();
- updateGroupCache(true);
}
public void removeGroup(long groupId) throws SQLException {