/* * Copyright 2015 - 2021 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. * 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; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr353.JSR353Module; import org.apache.velocity.app.VelocityEngine; import org.eclipse.jetty.util.URIUtil; import org.traccar.config.Config; import org.traccar.config.Keys; import org.traccar.database.AttributesManager; import org.traccar.database.BaseObjectManager; import org.traccar.database.CalendarManager; import org.traccar.database.CommandsManager; import org.traccar.database.ConnectionManager; import org.traccar.database.DataManager; import org.traccar.database.DeviceManager; import org.traccar.database.DriversManager; import org.traccar.database.GeofenceManager; import org.traccar.database.GroupsManager; import org.traccar.database.IdentityManager; import org.traccar.database.LdapProvider; import org.traccar.database.MailManager; import org.traccar.database.MaintenancesManager; import org.traccar.database.MediaManager; import org.traccar.database.NotificationManager; import org.traccar.database.OrderManager; import org.traccar.database.PermissionsManager; import org.traccar.database.UsersManager; import org.traccar.geocoder.Geocoder; import org.traccar.helper.Log; import org.traccar.helper.SanitizerModule; import org.traccar.model.Attribute; import org.traccar.model.BaseModel; import org.traccar.model.Calendar; import org.traccar.model.Command; 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.Notification; import org.traccar.model.Order; import org.traccar.model.User; import org.traccar.notification.EventForwarder; import org.traccar.notification.NotificatorManager; import org.traccar.reports.model.TripsConfig; import org.traccar.schedule.ScheduleManager; import org.traccar.sms.HttpSmsClient; import org.traccar.sms.SmsManager; import org.traccar.sms.SnsSmsClient; import org.traccar.web.WebServer; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.ext.ContextResolver; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Properties; public final class Context { private Context() { } private static Config config; public static Config getConfig() { return config; } private static ObjectMapper objectMapper; public static ObjectMapper getObjectMapper() { return objectMapper; } private static IdentityManager identityManager; public static IdentityManager getIdentityManager() { return identityManager; } private static DataManager dataManager; public static DataManager getDataManager() { return dataManager; } private static LdapProvider ldapProvider; public static LdapProvider getLdapProvider() { return ldapProvider; } private static MailManager mailManager; public static MailManager getMailManager() { return mailManager; } private static MediaManager mediaManager; public static MediaManager getMediaManager() { return mediaManager; } private static UsersManager usersManager; public static UsersManager getUsersManager() { return usersManager; } private static GroupsManager groupsManager; public static GroupsManager getGroupsManager() { return groupsManager; } private static DeviceManager deviceManager; public static DeviceManager getDeviceManager() { return deviceManager; } private static ConnectionManager connectionManager; public static ConnectionManager getConnectionManager() { return connectionManager; } private static PermissionsManager permissionsManager; public static PermissionsManager getPermissionsManager() { return permissionsManager; } public static Geocoder getGeocoder() { return Main.getInjector() != null ? Main.getInjector().getInstance(Geocoder.class) : null; } private static WebServer webServer; public static WebServer getWebServer() { return webServer; } private static ServerManager serverManager; public static ServerManager getServerManager() { return serverManager; } private static ScheduleManager scheduleManager; public static ScheduleManager getScheduleManager() { return scheduleManager; } private static GeofenceManager geofenceManager; public static GeofenceManager getGeofenceManager() { return geofenceManager; } private static CalendarManager calendarManager; public static CalendarManager getCalendarManager() { return calendarManager; } private static NotificationManager notificationManager; public static NotificationManager getNotificationManager() { return notificationManager; } private static NotificatorManager notificatorManager; public static NotificatorManager getNotificatorManager() { return notificatorManager; } private static VelocityEngine velocityEngine; public static VelocityEngine getVelocityEngine() { return velocityEngine; } private static Client client = ClientBuilder.newClient(); public static Client getClient() { return client; } private static EventForwarder eventForwarder; public static EventForwarder getEventForwarder() { return eventForwarder; } private static AttributesManager attributesManager; public static AttributesManager getAttributesManager() { return attributesManager; } private static DriversManager driversManager; public static DriversManager getDriversManager() { return driversManager; } private static CommandsManager commandsManager; public static CommandsManager getCommandsManager() { return commandsManager; } private static MaintenancesManager maintenancesManager; public static MaintenancesManager getMaintenancesManager() { return maintenancesManager; } private static OrderManager orderManager; public static OrderManager getOrderManager() { return orderManager; } private static SmsManager smsManager; public static SmsManager getSmsManager() { return smsManager; } private static TripsConfig tripsConfig; public static TripsConfig getTripsConfig() { return tripsConfig; } public static TripsConfig initTripsConfig() { return new TripsConfig( config.getLong(Keys.REPORT_TRIP_MINIMAL_TRIP_DISTANCE), config.getLong(Keys.REPORT_TRIP_MINIMAL_TRIP_DURATION) * 1000, config.getLong(Keys.REPORT_TRIP_MINIMAL_PARKING_DURATION) * 1000, config.getLong(Keys.REPORT_TRIP_MINIMAL_NO_DATA_DURATION) * 1000, config.getBoolean(Keys.REPORT_TRIP_USE_IGNITION), config.getBoolean(Keys.EVENT_MOTION_PROCESS_INVALID_POSITIONS), config.getDouble(Keys.EVENT_MOTION_SPEED_THRESHOLD)); } private static class ObjectMapperContextResolver implements ContextResolver { @Override public ObjectMapper getContext(Class clazz) { return objectMapper; } } public static void init(String configFile) throws Exception { try { config = new Config(configFile); Log.setupLogger(config); } catch (Exception e) { config = new Config(); Log.setupDefaultLogger(); throw e; } objectMapper = new ObjectMapper(); objectMapper.registerModule(new SanitizerModule()); objectMapper.registerModule(new JSR353Module()); objectMapper.setConfig( objectMapper.getSerializationConfig().without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)); client = ClientBuilder.newClient().register(new ObjectMapperContextResolver()); if (config.hasKey(Keys.DATABASE_URL)) { dataManager = new DataManager(config); } if (config.hasKey(Keys.LDAP_URL)) { ldapProvider = new LdapProvider(config); } mailManager = new MailManager(); mediaManager = new MediaManager(config.getString(Keys.MEDIA_PATH)); if (dataManager != null) { usersManager = new UsersManager(dataManager); groupsManager = new GroupsManager(dataManager); deviceManager = new DeviceManager(dataManager); } identityManager = deviceManager; if (config.hasKey(Keys.WEB_PORT)) { webServer = new WebServer(config); } permissionsManager = new PermissionsManager(dataManager, usersManager); connectionManager = new ConnectionManager(); tripsConfig = initTripsConfig(); if (config.hasKey(Keys.SMS_HTTP_URL)) { smsManager = new HttpSmsClient(); } else if (config.hasKey(Keys.SMS_AWS_REGION)) { smsManager = new SnsSmsClient(); } initEventsModule(); serverManager = new ServerManager(); scheduleManager = new ScheduleManager(); if (config.hasKey(Keys.EVENT_FORWARD_URL)) { eventForwarder = new EventForwarder(); } attributesManager = new AttributesManager(dataManager); driversManager = new DriversManager(dataManager); commandsManager = new CommandsManager(dataManager, config.getBoolean(Keys.COMMANDS_QUEUEING)); orderManager = new OrderManager(dataManager); } private static void initEventsModule() { geofenceManager = new GeofenceManager(dataManager); calendarManager = new CalendarManager(dataManager); maintenancesManager = new MaintenancesManager(dataManager); notificationManager = new NotificationManager(dataManager); notificatorManager = new NotificatorManager(); Properties velocityProperties = new Properties(); velocityProperties.setProperty("file.resource.loader.path", Context.getConfig().getString("templates.rootPath", "templates") + "/"); velocityProperties.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogChute"); String address; try { address = config.getString(Keys.WEB_ADDRESS, InetAddress.getLocalHost().getHostAddress()); } catch (UnknownHostException e) { address = "localhost"; } String webUrl = URIUtil.newURI("http", address, config.getInteger(Keys.WEB_PORT), "", ""); webUrl = Context.getConfig().getString("web.url", webUrl); velocityProperties.setProperty("web.url", webUrl); velocityEngine = new VelocityEngine(); velocityEngine.init(velocityProperties); } public static void init(IdentityManager testIdentityManager, MediaManager testMediaManager) { config = new Config(); objectMapper = new ObjectMapper(); objectMapper.registerModule(new JSR353Module()); client = ClientBuilder.newClient().register(new ObjectMapperContextResolver()); identityManager = testIdentityManager; mediaManager = testMediaManager; } public static BaseObjectManager getManager(Class clazz) { if (clazz.equals(Device.class)) { return (BaseObjectManager) deviceManager; } else if (clazz.equals(Group.class)) { return (BaseObjectManager) groupsManager; } else if (clazz.equals(User.class)) { return (BaseObjectManager) usersManager; } else if (clazz.equals(Calendar.class)) { return (BaseObjectManager) calendarManager; } else if (clazz.equals(Attribute.class)) { return (BaseObjectManager) attributesManager; } else if (clazz.equals(Geofence.class)) { return (BaseObjectManager) geofenceManager; } else if (clazz.equals(Driver.class)) { return (BaseObjectManager) driversManager; } else if (clazz.equals(Command.class)) { return (BaseObjectManager) commandsManager; } else if (clazz.equals(Maintenance.class)) { return (BaseObjectManager) maintenancesManager; } else if (clazz.equals(Notification.class)) { return (BaseObjectManager) notificationManager; } else if (clazz.equals(Order.class)) { return (BaseObjectManager) orderManager; } return null; } }