aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/database/PermissionsManager.java30
-rw-r--r--src/org/traccar/reports/ReportUtils.java29
2 files changed, 33 insertions, 26 deletions
diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java
index 5313859df..0607a2141 100644
--- a/src/org/traccar/database/PermissionsManager.java
+++ b/src/org/traccar/database/PermissionsManager.java
@@ -25,6 +25,8 @@ import org.traccar.model.Server;
import org.traccar.model.User;
import org.traccar.model.UserPermission;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
@@ -395,4 +397,32 @@ public class PermissionsManager {
return users.get(usersTokens.get(token));
}
+ public Object lookupPreference(long userId, String key, Object defaultValue) {
+ String methodName = "get" + key.substring(0, 1).toUpperCase() + key.substring(1);
+ Object preference;
+ Object serverPreference = null;
+ Object userPreference = null;
+ try {
+ Method method = null;
+ method = User.class.getMethod(methodName, (Class<?>[]) null);
+ if (method != null) {
+ userPreference = method.invoke(users.get(userId), (Object[]) null);
+ }
+ method = null;
+ method = Server.class.getMethod(methodName, (Class<?>[]) null);
+ if (method != null) {
+ serverPreference = method.invoke(server, (Object[]) null);
+ }
+ } catch (NoSuchMethodException | SecurityException | IllegalAccessException
+ | IllegalArgumentException | InvocationTargetException exception) {
+ return defaultValue;
+ }
+ if (server.getForceSettings()) {
+ preference = serverPreference != null ? serverPreference : userPreference;
+ } else {
+ preference = userPreference != null ? userPreference : serverPreference;
+ }
+ return preference != null ? preference : defaultValue;
+ }
+
}
diff --git a/src/org/traccar/reports/ReportUtils.java b/src/org/traccar/reports/ReportUtils.java
index 9614ecf71..ed97c6857 100644
--- a/src/org/traccar/reports/ReportUtils.java
+++ b/src/org/traccar/reports/ReportUtils.java
@@ -32,38 +32,15 @@ public final class ReportUtils {
}
public static String getDistanceUnit(long userId) {
- String unit;
- String userUnit = Context.getPermissionsManager().getUser(userId).getDistanceUnit();
- String serverUnit = Context.getPermissionsManager().getServer().getDistanceUnit();
- if (Context.getPermissionsManager().getServer().getForceSettings()) {
- unit = serverUnit != null ? serverUnit : userUnit;
- } else {
- unit = userUnit != null ? userUnit : serverUnit;
- }
- return unit != null ? unit : "km";
+ return (String) Context.getPermissionsManager().lookupPreference(userId, "distanceUnit", "km");
}
public static String getSpeedUnit(long userId) {
- String unit;
- String userUnit = Context.getPermissionsManager().getUser(userId).getSpeedUnit();
- String serverUnit = Context.getPermissionsManager().getServer().getSpeedUnit();
- if (Context.getPermissionsManager().getServer().getForceSettings()) {
- unit = serverUnit != null ? serverUnit : userUnit;
- } else {
- unit = userUnit != null ? userUnit : serverUnit;
- }
- return unit != null ? unit : "kn";
+ return (String) Context.getPermissionsManager().lookupPreference(userId, "speedUnit", "kn");
}
public static TimeZone getTimezone(long userId) {
- String timezone;
- String userTimezone = Context.getPermissionsManager().getUser(userId).getTimezone();
- String serverTimezone = Context.getPermissionsManager().getServer().getTimezone();
- if (Context.getPermissionsManager().getServer().getForceSettings()) {
- timezone = serverTimezone != null ? serverTimezone : userTimezone;
- } else {
- timezone = userTimezone != null ? userTimezone : serverTimezone;
- }
+ String timezone = (String) Context.getPermissionsManager().lookupPreference(userId, "timezone", null);
return timezone != null ? TimeZone.getTimeZone(timezone) : TimeZone.getDefault();
}