diff options
Diffstat (limited to 'src/org/traccar/database')
-rw-r--r-- | src/org/traccar/database/DataManager.java | 26 | ||||
-rw-r--r-- | src/org/traccar/database/DeviceManager.java | 4 | ||||
-rw-r--r-- | src/org/traccar/database/ExtendedObjectManager.java | 2 | ||||
-rw-r--r-- | src/org/traccar/database/GroupsManager.java | 6 | ||||
-rw-r--r-- | src/org/traccar/database/LdapProvider.java | 2 | ||||
-rw-r--r-- | src/org/traccar/database/MaintenancesManager.java | 27 | ||||
-rw-r--r-- | src/org/traccar/database/MediaManager.java | 33 | ||||
-rw-r--r-- | src/org/traccar/database/NotificationManager.java | 31 | ||||
-rw-r--r-- | src/org/traccar/database/PermissionsManager.java | 13 |
9 files changed, 98 insertions, 46 deletions
diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index f813426d3..84f8f0394 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -48,6 +48,7 @@ import org.traccar.model.Driver; import org.traccar.model.Event; import org.traccar.model.Geofence; import org.traccar.model.Group; +import org.traccar.model.Maintenance; import org.traccar.model.ManagedUser; import org.traccar.model.Notification; import org.traccar.model.Permission; @@ -242,12 +243,16 @@ public class DataManager { public String getQuery(String action, Class<?> owner, Class<?> property) { String queryName; - if (action.equals(ACTION_SELECT_ALL)) { - queryName = "database.select" + owner.getSimpleName() + property.getSimpleName() + "s"; - } else if (action.equals(ACTION_INSERT)) { - queryName = "database.link" + owner.getSimpleName() + property.getSimpleName(); - } else { - queryName = "database.unlink" + owner.getSimpleName() + property.getSimpleName(); + switch (action) { + case ACTION_SELECT_ALL: + queryName = "database.select" + owner.getSimpleName() + property.getSimpleName() + "s"; + break; + case ACTION_INSERT: + queryName = "database.link" + owner.getSimpleName() + property.getSimpleName(); + break; + default: + queryName = "database.unlink" + owner.getSimpleName() + property.getSimpleName(); + break; } String query = config.getString(queryName); if (query == null) { @@ -335,13 +340,6 @@ public class DataManager { .executeQuery(Position.class); } - public void addPosition(Position position) throws SQLException { - position.setId(QueryBuilder.create(dataSource, getQuery(ACTION_INSERT, Position.class), true) - .setObject(position) - .setDate("serverTime", new Date()) - .executeUpdate()); - } - public void updateLatestPosition(Position position) throws SQLException { QueryBuilder.create(dataSource, getQuery("database.updateLatestPosition")) .setDate("now", new Date()) @@ -408,6 +406,8 @@ public class DataManager { return Calendar.class; case "command": return Command.class; + case "maintenance": + return Maintenance.class; case "notification": return Notification.class; default: diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java index cb410b7c0..c59061b7f 100644 --- a/src/org/traccar/database/DeviceManager.java +++ b/src/org/traccar/database/DeviceManager.java @@ -65,7 +65,7 @@ public class DeviceManager extends BaseObjectManager<Device> implements Identity refreshLastPositions(); } - private void updateDeviceCache(boolean force) throws SQLException { + public void updateDeviceCache(boolean force) throws SQLException { long lastUpdate = devicesLastUpdate.get(); if ((force || System.currentTimeMillis() - lastUpdate > dataRefreshDelay) && devicesLastUpdate.compareAndSet(lastUpdate, System.currentTimeMillis())) { @@ -355,7 +355,7 @@ public class DeviceManager extends BaseObjectManager<Device> implements Identity Position last = positions.get(deviceTotalDistance.getDeviceId()); if (last != null) { last.getAttributes().put(Position.KEY_TOTAL_DISTANCE, deviceTotalDistance.getTotalDistance()); - getDataManager().addPosition(last); + getDataManager().addObject(last); updateLatestPosition(last); } else { throw new IllegalArgumentException(); diff --git a/src/org/traccar/database/ExtendedObjectManager.java b/src/org/traccar/database/ExtendedObjectManager.java index 16785cb37..c9e349136 100644 --- a/src/org/traccar/database/ExtendedObjectManager.java +++ b/src/org/traccar/database/ExtendedObjectManager.java @@ -95,7 +95,7 @@ public abstract class ExtendedObjectManager<T extends BaseModel> extends SimpleO long groupId = device.getGroupId(); while (groupId != 0) { getAllDeviceItems(device.getId()).addAll(getGroupItems(groupId)); - Group group = (Group) Context.getGroupsManager().getById(groupId); + Group group = Context.getGroupsManager().getById(groupId); if (group != null) { groupId = group.getGroupId(); } else { diff --git a/src/org/traccar/database/GroupsManager.java b/src/org/traccar/database/GroupsManager.java index c0456085b..262f15519 100644 --- a/src/org/traccar/database/GroupsManager.java +++ b/src/org/traccar/database/GroupsManager.java @@ -47,7 +47,7 @@ public class GroupsManager extends BaseObjectManager<Group> implements Managable } } - private void updateGroupCache(boolean force) throws SQLException { + public void updateGroupCache(boolean force) throws SQLException { long lastUpdate = groupsLastUpdate.get(); if ((force || System.currentTimeMillis() - lastUpdate > dataRefreshDelay) && groupsLastUpdate.compareAndSet(lastUpdate, System.currentTimeMillis())) { @@ -76,9 +76,9 @@ public class GroupsManager extends BaseObjectManager<Group> implements Managable } @Override - protected void updateCachedItem(Group group) { + public void updateItem(Group group) throws SQLException { checkGroupCycles(group); - super.updateCachedItem(group); + super.updateItem(group); } @Override diff --git a/src/org/traccar/database/LdapProvider.java b/src/org/traccar/database/LdapProvider.java index 2c4b7ceb1..44dd386ed 100644 --- a/src/org/traccar/database/LdapProvider.java +++ b/src/org/traccar/database/LdapProvider.java @@ -115,7 +115,7 @@ public class LdapProvider { SearchResult searchResult = null; if (results.hasMoreElements()) { - searchResult = (SearchResult) results.nextElement(); + searchResult = results.nextElement(); if (results.hasMoreElements()) { Log.warning("Matched multiple users for the accountName: " + accountName); return null; diff --git a/src/org/traccar/database/MaintenancesManager.java b/src/org/traccar/database/MaintenancesManager.java new file mode 100644 index 000000000..4e266cb78 --- /dev/null +++ b/src/org/traccar/database/MaintenancesManager.java @@ -0,0 +1,27 @@ +/* + * Copyright 2018 Anton Tananaev (anton@traccar.org) + * Copyright 2018 Andrey Kunitsyn (andrey@traccar.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.database; + +import org.traccar.model.Maintenance; + +public class MaintenancesManager extends ExtendedObjectManager<Maintenance> { + + public MaintenancesManager(DataManager dataManager) { + super(dataManager, Maintenance.class); + } + +} diff --git a/src/org/traccar/database/MediaManager.java b/src/org/traccar/database/MediaManager.java index 2c448a20c..482442735 100644 --- a/src/org/traccar/database/MediaManager.java +++ b/src/org/traccar/database/MediaManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 Anton Tananaev (anton@traccar.org) + * Copyright 2017 - 2018 Anton Tananaev (anton@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package org.traccar.database; import org.jboss.netty.buffer.ChannelBuffer; -import org.traccar.Config; import org.traccar.helper.Log; import java.io.File; @@ -34,8 +33,8 @@ public class MediaManager { private String path; - public MediaManager(Config config) { - path = config.getString("media.path"); + public MediaManager(String path) { + this.path = path; } private File createFile(String uniqueId, String name) throws IOException { @@ -48,19 +47,21 @@ public class MediaManager { } public String writeFile(String uniqueId, ChannelBuffer buf, String extension) { - int size = buf.readableBytes(); - String name = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + "." + extension; - try (FileOutputStream output = new FileOutputStream(createFile(uniqueId, name)); - FileChannel fileChannel = output.getChannel()) { - ByteBuffer byteBuffer = buf.toByteBuffer(); - int written = 0; - while (written < size) { - written += fileChannel.write(byteBuffer); + if (path != null) { + int size = buf.readableBytes(); + String name = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + "." + extension; + try (FileOutputStream output = new FileOutputStream(createFile(uniqueId, name)); + FileChannel fileChannel = output.getChannel()) { + ByteBuffer byteBuffer = buf.toByteBuffer(); + int written = 0; + while (written < size) { + written += fileChannel.write(byteBuffer); + } + fileChannel.force(false); + return name; + } catch (IOException e) { + Log.warning(e); } - fileChannel.force(false); - return name; - } catch (IOException e) { - Log.warning(e); } return null; } diff --git a/src/org/traccar/database/NotificationManager.java b/src/org/traccar/database/NotificationManager.java index 4e6114001..3bc048356 100644 --- a/src/org/traccar/database/NotificationManager.java +++ b/src/org/traccar/database/NotificationManager.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 - 2017 Anton Tananaev (anton@traccar.org) - * Copyright 2016 - 2017 Andrey Kunitsyn (andrey@traccar.org) + * Copyright 2016 - 2018 Anton Tananaev (anton@traccar.org) + * Copyright 2016 - 2018 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ package org.traccar.database; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.sql.SQLException; +import java.util.Date; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; @@ -26,6 +27,7 @@ import java.util.Set; import org.traccar.Context; import org.traccar.helper.Log; +import org.traccar.model.Calendar; import org.traccar.model.Event; import org.traccar.model.Notification; import org.traccar.model.Position; @@ -42,12 +44,16 @@ public class NotificationManager extends ExtendedObjectManager<Notification> { geocodeOnRequest = Context.getConfig().getBoolean("geocoder.onRequest"); } - private Set<Long> getEffectiveNotifications(long userId, long deviceId) { + private Set<Long> getEffectiveNotifications(long userId, long deviceId, Date time) { Set<Long> result = new HashSet<>(); Set<Long> deviceNotifications = getAllDeviceItems(deviceId); for (long itemId : getUserItems(userId)) { if (getById(itemId).getAlways() || deviceNotifications.contains(itemId)) { - result.add(itemId); + long calendarId = getById(itemId).getCalendarId(); + Calendar calendar = calendarId != 0 ? Context.getCalendarManager().getById(calendarId) : null; + if (calendar == null || calendar.checkMoment(time)) { + result.add(itemId); + } } } return result; @@ -67,13 +73,22 @@ public class NotificationManager extends ExtendedObjectManager<Notification> { long deviceId = event.getDeviceId(); Set<Long> users = Context.getPermissionsManager().getDeviceUsers(deviceId); + Set<Long> usersToForward = null; + if (Context.getEventForwarder() != null) { + usersToForward = new HashSet<>(); + } for (long userId : users) { - if (event.getGeofenceId() == 0 || Context.getGeofenceManager() != null - && Context.getGeofenceManager().checkItemPermission(userId, event.getGeofenceId())) { + if ((event.getGeofenceId() == 0 + || Context.getGeofenceManager().checkItemPermission(userId, event.getGeofenceId())) + && (event.getMaintenanceId() == 0 + || Context.getMaintenancesManager().checkItemPermission(userId, event.getMaintenanceId()))) { + if (usersToForward != null) { + usersToForward.add(userId); + } boolean sentWeb = false; boolean sentMail = false; boolean sentSms = Context.getSmppManager() == null; - for (long notificationId : getEffectiveNotifications(userId, deviceId)) { + for (long notificationId : getEffectiveNotifications(userId, deviceId, event.getServerTime())) { Notification notification = getById(notificationId); if (getById(notificationId).getType().equals(event.getType())) { if (!sentWeb && notification.getWeb()) { @@ -96,7 +111,7 @@ public class NotificationManager extends ExtendedObjectManager<Notification> { } } if (Context.getEventForwarder() != null) { - Context.getEventForwarder().forwardEvent(event, position); + Context.getEventForwarder().forwardEvent(event, position, usersToForward); } } diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index 60bda99ce..b5f062d2b 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org) + * Copyright 2015 - 2018 Anton Tananaev (anton@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import org.traccar.model.Device; import org.traccar.model.Driver; import org.traccar.model.Geofence; import org.traccar.model.Group; +import org.traccar.model.Maintenance; import org.traccar.model.ManagedUser; import org.traccar.model.Notification; import org.traccar.model.Permission; @@ -57,7 +58,7 @@ public class PermissionsManager { } public User getUser(long userId) { - return (User) usersManager.getById(userId); + return usersManager.getById(userId); } public Set<Long> getGroupPermissions(long userId) { @@ -337,6 +338,8 @@ public class PermissionsManager { manager = Context.getCalendarManager(); } else if (object.equals(Command.class)) { manager = Context.getCommandsManager(); + } else if (object.equals(Maintenance.class)) { + manager = Context.getMaintenancesManager(); } else if (object.equals(Notification.class)) { manager = Context.getNotificationManager(); } else { @@ -362,6 +365,7 @@ public class PermissionsManager { Context.getDriversManager().refreshUserItems(); Context.getAttributesManager().refreshUserItems(); Context.getCommandsManager().refreshUserItems(); + Context.getMaintenancesManager().refreshUserItems(); if (Context.getNotificationManager() != null) { Context.getNotificationManager().refreshUserItems(); } @@ -374,6 +378,7 @@ public class PermissionsManager { Context.getDriversManager().refreshExtendedPermissions(); Context.getAttributesManager().refreshExtendedPermissions(); Context.getCommandsManager().refreshExtendedPermissions(); + Context.getMaintenancesManager().refreshExtendedPermissions(); } public void refreshPermissions(Permission permission) { @@ -394,6 +399,8 @@ public class PermissionsManager { Context.getCalendarManager().refreshUserItems(); } else if (permission.getPropertyClass().equals(Command.class)) { Context.getCommandsManager().refreshUserItems(); + } else if (permission.getPropertyClass().equals(Maintenance.class)) { + Context.getMaintenancesManager().refreshUserItems(); } else if (permission.getPropertyClass().equals(Notification.class) && Context.getNotificationManager() != null) { Context.getNotificationManager().refreshUserItems(); @@ -407,6 +414,8 @@ public class PermissionsManager { Context.getAttributesManager().refreshExtendedPermissions(); } else if (permission.getPropertyClass().equals(Command.class)) { Context.getCommandsManager().refreshExtendedPermissions(); + } else if (permission.getPropertyClass().equals(Maintenance.class)) { + Context.getMaintenancesManager().refreshExtendedPermissions(); } else if (permission.getPropertyClass().equals(Notification.class) && Context.getNotificationManager() != null) { Context.getNotificationManager().refreshExtendedPermissions(); |