From c54a12152ccdbe04e4aa9b63b990a00f8702bce4 Mon Sep 17 00:00:00 2001 From: Shinryuken Date: Mon, 6 Nov 2017 21:48:54 +0100 Subject: Using templates for event forwarded messages --- .../notification/NotificationFormatter.java | 47 ++++++++++++++++------ 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'src/org/traccar/notification/NotificationFormatter.java') diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index 8da819430..56dbf7270 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -18,6 +18,7 @@ package org.traccar.notification; import java.io.StringWriter; import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; import java.util.Locale; import org.apache.velocity.Template; @@ -38,7 +39,11 @@ public final class NotificationFormatter { private NotificationFormatter() { } - public static VelocityContext prepareContext(long userId, Event event, Position position) { + public static VelocityContext prepareContext(Long userIdreq, Event event, Position position) { + + long userId = userIdreq != null ? userIdreq : (Long) Context.getPermissionsManager() + .getDeviceUsers(event.getDeviceId()).toArray()[0]; + User user = Context.getPermissionsManager().getUser(userId); Device device = Context.getIdentityManager().getById(event.getDeviceId()); @@ -68,31 +73,49 @@ public final class NotificationFormatter { } public static Template getTemplate(Event event, String path) { + + String templateFilePath; Template template; + try { - template = Context.getVelocityEngine().getTemplate(path + event.getType() + ".vm", - StandardCharsets.UTF_8.name()); + templateFilePath = Paths.get(path, event.getType() + ".vm").toString(); + template = Context.getVelocityEngine().getTemplate(templateFilePath, StandardCharsets.UTF_8.name()); } catch (ResourceNotFoundException error) { Log.warning(error); - template = Context.getVelocityEngine().getTemplate(path + "unknown.vm", - StandardCharsets.UTF_8.name()); + templateFilePath = Paths.get(path, "unknown.vm").toString(); + template = Context.getVelocityEngine().getTemplate(templateFilePath, StandardCharsets.UTF_8.name()); } return template; } public static MailMessage formatMailMessage(long userId, Event event, Position position) { + String templatePath = Context.getConfig().getString("mail.templatesPath", "mail"); VelocityContext velocityContext = prepareContext(userId, event, position); - StringWriter writer = new StringWriter(); - getTemplate(event, Context.getConfig().getString("mail.templatesPath", "mail") + "/") - .merge(velocityContext, writer); - return new MailMessage((String) velocityContext.get("subject"), writer.toString()); + String formattedMessage = formatterLogic(velocityContext, userId, event, position, templatePath); + + return new MailMessage((String) velocityContext.get("subject"), formattedMessage); } public static String formatSmsMessage(long userId, Event event, Position position) { - VelocityContext velocityContext = prepareContext(userId, event, position); + String templatePath = Context.getConfig().getString("sms.templatesPath", "sms"); + + return formatterLogic(null, userId, event, position, templatePath); + } + + public static String formatForwarderMessage(Event event, Position position) { + String templatePath = Context.getConfig().getString("forwarder.templatesPath", "forwarder"); + + return formatterLogic(null, null, event, position, templatePath); + } + + private static String formatterLogic(VelocityContext vc, Long userId, Event event, Position position, + String templatePath) { + + VelocityContext velocityContext = vc != null ? vc : prepareContext(userId, event, position); StringWriter writer = new StringWriter(); - getTemplate(event, Context.getConfig().getString("sms.templatesPath", "sms") + "/") - .merge(velocityContext, writer); + getTemplate(event, templatePath).merge(velocityContext, writer); + return writer.toString(); } + } -- cgit v1.2.3 From 80904fd5794b1eb3ef7644c52ce3d09facf9fd04 Mon Sep 17 00:00:00 2001 From: Shinryuken Date: Mon, 6 Nov 2017 23:04:40 +0100 Subject: Minor refactoring changes --- src/org/traccar/notification/NotificationFormatter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/org/traccar/notification/NotificationFormatter.java') diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index 56dbf7270..591f848d4 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -111,7 +111,10 @@ public final class NotificationFormatter { private static String formatterLogic(VelocityContext vc, Long userId, Event event, Position position, String templatePath) { - VelocityContext velocityContext = vc != null ? vc : prepareContext(userId, event, position); + VelocityContext velocityContext = vc; + if (velocityContext == null) { + velocityContext = prepareContext(userId, event, position); + } StringWriter writer = new StringWriter(); getTemplate(event, templatePath).merge(velocityContext, writer); -- cgit v1.2.3 From 0801b279a4fe91c8cb1d653676f43dfe6c26a6f2 Mon Sep 17 00:00:00 2001 From: Shinryuken Date: Tue, 7 Nov 2017 19:15:02 +0100 Subject: User defaults when no User is available - EventForwarder refactoring --- src/org/traccar/notification/EventForwarder.java | 63 +++++++++------------- .../notification/FormTypeEventForwarder.java | 24 +++++++++ .../notification/JsonTypeEventForwarder.java | 21 ++++++++ .../notification/NotificationFormatter.java | 10 ++-- 4 files changed, 76 insertions(+), 42 deletions(-) create mode 100644 src/org/traccar/notification/FormTypeEventForwarder.java create mode 100644 src/org/traccar/notification/JsonTypeEventForwarder.java (limited to 'src/org/traccar/notification/NotificationFormatter.java') diff --git a/src/org/traccar/notification/EventForwarder.java b/src/org/traccar/notification/EventForwarder.java index 7d3dc99ed..5b9af5f1f 100644 --- a/src/org/traccar/notification/EventForwarder.java +++ b/src/org/traccar/notification/EventForwarder.java @@ -33,19 +33,17 @@ import com.fasterxml.jackson.databind.ObjectWriter; import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder; import com.ning.http.client.FluentCaseInsensitiveStringsMap; -public final class EventForwarder { +public abstract class EventForwarder { private String url; private String header; - private boolean payloadAsParamMode; - private String payloadParamName; - private String additionalParams; - private boolean prettyPrinted; + private final String payloadParamName; + private final String additionalParams; + private final boolean prettyPrinted; public EventForwarder() { url = Context.getConfig().getString("event.forward.url", "http://localhost/"); header = Context.getConfig().getString("event.forward.header", ""); - payloadAsParamMode = Context.getConfig().getBoolean("event.forward.payloadAsParamMode"); payloadParamName = Context.getConfig().getString("event.forward.paramMode.payloadParamName", "payload"); additionalParams = Context.getConfig().getString("event.forward.paramMode.additionalParams", ""); prettyPrinted = Context.getConfig().getBoolean("event.forward.prettyPrintedPayload"); @@ -56,12 +54,12 @@ public final class EventForwarder { private static final String KEY_GEOFENCE = "geofence"; private static final String KEY_DEVICE = "device"; - public void forwardEvent(Event event, Position position) { + public final void forwardEvent(Event event, Position position) { BoundRequestBuilder requestBuilder = Context.getAsyncHttpClient().preparePost(url); requestBuilder.setBodyEncoding(StandardCharsets.UTF_8.name()); - setContentTypeFromMode(requestBuilder); + requestBuilder.addHeader("Content-Type", getContentType()); if (!header.equals("")) { FluentCaseInsensitiveStringsMap params = new FluentCaseInsensitiveStringsMap(); @@ -69,28 +67,11 @@ public final class EventForwarder { requestBuilder.setHeaders(params); } - if (payloadAsParamMode) { - setParamsPayload(event, position, requestBuilder); - } else { - setJsonPayload(event, position, requestBuilder); - } - + setContent(event, position, requestBuilder); requestBuilder.execute(); } - private void setJsonPayload(Event event, Position position, BoundRequestBuilder requestBuilder) { - requestBuilder.setBody(preparePayload(event, position)); - } - - private void setParamsPayload(Event event, Position position, BoundRequestBuilder requestBuilder) { - if (!additionalParams.equals("")) { - requestBuilder.setFormParams(splitParams(additionalParams, "=")); - } - requestBuilder.addFormParam(payloadParamName, - NotificationFormatter.formatForwarderMessage(event, position)); - } - - private Map> splitParams(String params, String separator) { + protected Map> splitParams(String params, String separator) { String[] splitedLine; Map> paramsMap = new HashMap<>(); @@ -105,15 +86,7 @@ public final class EventForwarder { return paramsMap; } - private void setContentTypeFromMode(BoundRequestBuilder requestBuilder) { - if (payloadAsParamMode) { - requestBuilder.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); - } else { - requestBuilder.addHeader("Content-Type", "application/json; charset=utf-8"); - } - } - - private String preparePayload(Event event, Position position) { + protected String prepareJsonPayload(Event event, Position position) { Map data = new HashMap<>(); data.put(KEY_EVENT, event); if (position != null) { @@ -139,10 +112,26 @@ public final class EventForwarder { } } - private ObjectWriter getObjectWriter() { + protected ObjectWriter getObjectWriter() { return prettyPrinted ? Context.getObjectWriterPrettyPrinter() : Context.getObjectMapper().writer(); } + + protected String getPayloadParamName() { + return payloadParamName; + } + protected String getAdditionalParams() { + return additionalParams; + } + protected boolean isPrettyPrinted() { + return prettyPrinted; + } + + + protected abstract String getContentType(); + + protected abstract void setContent(Event event, Position position, BoundRequestBuilder requestBuilder); + } diff --git a/src/org/traccar/notification/FormTypeEventForwarder.java b/src/org/traccar/notification/FormTypeEventForwarder.java new file mode 100644 index 000000000..d2c4aa691 --- /dev/null +++ b/src/org/traccar/notification/FormTypeEventForwarder.java @@ -0,0 +1,24 @@ +package org.traccar.notification; + +import org.traccar.model.Event; +import org.traccar.model.Position; + +import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder; + +public class FormTypeEventForwarder extends EventForwarder { + + @Override + protected String getContentType() { + return "application/x-www-form-urlencoded; charset=UTF-8"; + } + + @Override + protected void setContent(Event event, Position position, BoundRequestBuilder requestBuilder) { + if (!getAdditionalParams().equals("")) { + requestBuilder.setFormParams(splitParams(getAdditionalParams(), "=")); + } + requestBuilder.addFormParam(getPayloadParamName(), + NotificationFormatter.formatForwarderMessage(event, position)); + } + +} diff --git a/src/org/traccar/notification/JsonTypeEventForwarder.java b/src/org/traccar/notification/JsonTypeEventForwarder.java new file mode 100644 index 000000000..196a4eca5 --- /dev/null +++ b/src/org/traccar/notification/JsonTypeEventForwarder.java @@ -0,0 +1,21 @@ +package org.traccar.notification; + +import org.traccar.model.Event; +import org.traccar.model.Position; + +import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder; + +public class JsonTypeEventForwarder extends EventForwarder { + + @Override + protected String getContentType() { + + return "application/json; charset=utf-8"; + } + + @Override + protected void setContent(Event event, Position position, BoundRequestBuilder requestBuilder) { + requestBuilder.setBody(prepareJsonPayload(event, position)); + } + +} diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index 591f848d4..bd919cce0 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -39,16 +39,16 @@ public final class NotificationFormatter { private NotificationFormatter() { } - public static VelocityContext prepareContext(Long userIdreq, Event event, Position position) { - - long userId = userIdreq != null ? userIdreq : (Long) Context.getPermissionsManager() - .getDeviceUsers(event.getDeviceId()).toArray()[0]; + public static VelocityContext prepareContext(Long userId, Event event, Position position) { User user = Context.getPermissionsManager().getUser(userId); Device device = Context.getIdentityManager().getById(event.getDeviceId()); VelocityContext velocityContext = new VelocityContext(); - velocityContext.put("user", user); + + if (user != null) { + velocityContext.put("user", user); + } velocityContext.put("device", device); velocityContext.put("event", event); if (position != null) { -- cgit v1.2.3 From fbc49050c626ccd3d25370031204cc64e5a8f5c2 Mon Sep 17 00:00:00 2001 From: Srk Date: Sat, 18 Nov 2017 19:40:10 +0100 Subject: Removing notification templates references --- src/org/traccar/notification/NotificationFormatter.java | 6 ------ 1 file changed, 6 deletions(-) (limited to 'src/org/traccar/notification/NotificationFormatter.java') diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index bd919cce0..385f117ea 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -102,12 +102,6 @@ public final class NotificationFormatter { return formatterLogic(null, userId, event, position, templatePath); } - public static String formatForwarderMessage(Event event, Position position) { - String templatePath = Context.getConfig().getString("forwarder.templatesPath", "forwarder"); - - return formatterLogic(null, null, event, position, templatePath); - } - private static String formatterLogic(VelocityContext vc, Long userId, Event event, Position position, String templatePath) { -- cgit v1.2.3 From e6ae0f1de880ab887d84aa31fe88b2e1eb67bad8 Mon Sep 17 00:00:00 2001 From: Srk Date: Sat, 18 Nov 2017 19:52:34 +0100 Subject: Rollback number as primitive type --- src/org/traccar/notification/NotificationFormatter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org/traccar/notification/NotificationFormatter.java') diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index 385f117ea..c537a64e0 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -39,7 +39,7 @@ public final class NotificationFormatter { private NotificationFormatter() { } - public static VelocityContext prepareContext(Long userId, Event event, Position position) { + public static VelocityContext prepareContext(long userId, Event event, Position position) { User user = Context.getPermissionsManager().getUser(userId); Device device = Context.getIdentityManager().getById(event.getDeviceId()); -- cgit v1.2.3 From 7d2f57e2f45b8e3f92324eb4f9fd1cdd975d311c Mon Sep 17 00:00:00 2001 From: Srk Date: Sat, 18 Nov 2017 20:10:33 +0100 Subject: Rollback getting defaults without having an user instance --- src/org/traccar/notification/NotificationFormatter.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/org/traccar/notification/NotificationFormatter.java') diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index c537a64e0..ba3fdbecb 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -45,10 +45,7 @@ public final class NotificationFormatter { Device device = Context.getIdentityManager().getById(event.getDeviceId()); VelocityContext velocityContext = new VelocityContext(); - - if (user != null) { - velocityContext.put("user", user); - } + velocityContext.put("user", user); velocityContext.put("device", device); velocityContext.put("event", event); if (position != null) { -- cgit v1.2.3 From 0daa91ca51ecbb23a7f962fd64bfe5817f8eaa29 Mon Sep 17 00:00:00 2001 From: Srk Date: Mon, 20 Nov 2017 19:55:11 +0100 Subject: Minor refactoring --- src/org/traccar/Context.java | 10 +++++----- src/org/traccar/notification/EventForwarder.java | 10 +++++----- src/org/traccar/notification/JsonTypeEventForwarder.java | 1 - src/org/traccar/notification/NotificationFormatter.java | 6 +++--- 4 files changed, 13 insertions(+), 14 deletions(-) (limited to 'src/org/traccar/notification/NotificationFormatter.java') diff --git a/src/org/traccar/Context.java b/src/org/traccar/Context.java index a03b14b1b..d77b6878f 100644 --- a/src/org/traccar/Context.java +++ b/src/org/traccar/Context.java @@ -325,7 +325,7 @@ public final class Context { objectMapper = new ObjectMapper(); objectMapper.setConfig( objectMapper.getSerializationConfig().without(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)); - if (Context.getConfig().getBoolean("config.mapper.prettyPrintedJson")) { + if (Context.getConfig().getBoolean("mapper.prettyPrintedJson")) { objectMapper.enable(SerializationFeature.INDENT_OUTPUT); } @@ -354,7 +354,7 @@ public final class Context { } if (config.getBoolean("geolocation.enable")) { - initLocationResolutionSystem(); + initGeolocationModule(); } if (config.getBoolean("web.enable")) { @@ -368,7 +368,7 @@ public final class Context { tripsConfig = initTripsConfig(); if (config.getBoolean("event.enable")) { - initEventsSubsystem(); + initEventsModule(); } serverManager = new ServerManager(); @@ -395,7 +395,7 @@ public final class Context { } - private static void initLocationResolutionSystem() { + private static void initGeolocationModule() { String type = config.getString("geolocation.type", "mozilla"); String url = config.getString("geolocation.url"); @@ -417,7 +417,7 @@ public final class Context { } } - private static void initEventsSubsystem() { + private static void initEventsModule() { geofenceManager = new GeofenceManager(dataManager); calendarManager = new CalendarManager(dataManager); diff --git a/src/org/traccar/notification/EventForwarder.java b/src/org/traccar/notification/EventForwarder.java index d7e0eca19..1a10d7ca2 100644 --- a/src/org/traccar/notification/EventForwarder.java +++ b/src/org/traccar/notification/EventForwarder.java @@ -15,11 +15,10 @@ */ package org.traccar.notification; -import java.nio.charset.StandardCharsets; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.traccar.Context; import org.traccar.helper.Log; @@ -28,8 +27,9 @@ import org.traccar.model.Event; import org.traccar.model.Geofence; import org.traccar.model.Position; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; import com.ning.http.client.FluentCaseInsensitiveStringsMap; public abstract class EventForwarder { diff --git a/src/org/traccar/notification/JsonTypeEventForwarder.java b/src/org/traccar/notification/JsonTypeEventForwarder.java index 196a4eca5..c1e4220d0 100644 --- a/src/org/traccar/notification/JsonTypeEventForwarder.java +++ b/src/org/traccar/notification/JsonTypeEventForwarder.java @@ -9,7 +9,6 @@ public class JsonTypeEventForwarder extends EventForwarder { @Override protected String getContentType() { - return "application/json; charset=utf-8"; } diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index ba3fdbecb..114825a83 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -88,7 +88,7 @@ public final class NotificationFormatter { public static MailMessage formatMailMessage(long userId, Event event, Position position) { String templatePath = Context.getConfig().getString("mail.templatesPath", "mail"); VelocityContext velocityContext = prepareContext(userId, event, position); - String formattedMessage = formatterLogic(velocityContext, userId, event, position, templatePath); + String formattedMessage = formatMessage(velocityContext, userId, event, position, templatePath); return new MailMessage((String) velocityContext.get("subject"), formattedMessage); } @@ -96,10 +96,10 @@ public final class NotificationFormatter { public static String formatSmsMessage(long userId, Event event, Position position) { String templatePath = Context.getConfig().getString("sms.templatesPath", "sms"); - return formatterLogic(null, userId, event, position, templatePath); + return formatMessage(null, userId, event, position, templatePath); } - private static String formatterLogic(VelocityContext vc, Long userId, Event event, Position position, + private static String formatMessage(VelocityContext vc, Long userId, Event event, Position position, String templatePath) { VelocityContext velocityContext = vc; -- cgit v1.2.3