From 9dd22617c1b066195baca5b6e6ae141c54493107 Mon Sep 17 00:00:00 2001 From: Renaud Allard Date: Mon, 17 Oct 2016 09:55:53 +0200 Subject: Add a static filter. This will filter positions with speed = 0.0 --- src/org/traccar/FilterHandler.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/org/traccar/FilterHandler.java') diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index 5315bad9e..b6917cbfb 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -28,12 +28,13 @@ public class FilterHandler extends BaseDataHandler { private final boolean filterDuplicate; private final boolean filterFuture; private final boolean filterApproximate; + private final boolean filterStatic; private final int filterDistance; private final long filterLimit; public FilterHandler( boolean filterInvalid, boolean filterZero, boolean filterDuplicate, boolean filterFuture, - boolean filterApproximate, int filterDistance, long filterLimit) { + boolean filterApproximate, boolean filterStatic, int filterDistance, long filterLimit) { this.filterInvalid = filterInvalid; this.filterZero = filterZero; @@ -41,6 +42,7 @@ public class FilterHandler extends BaseDataHandler { this.filterDistance = filterDistance; this.filterFuture = filterFuture; this.filterApproximate = filterApproximate; + this.filterStatic = filterStatic; this.filterLimit = filterLimit; } @@ -52,6 +54,7 @@ public class FilterHandler extends BaseDataHandler { filterDuplicate = config.getBoolean("filter.duplicate"); filterFuture = config.getBoolean("filter.future"); filterApproximate = config.getBoolean("filter.approximate"); + filterStatic = config.getBoolean("filter.static"); filterDistance = config.getInteger("filter.distance"); filterLimit = config.getLong("filter.limit") * 1000; } @@ -93,6 +96,10 @@ public class FilterHandler extends BaseDataHandler { return filterApproximate && approximate != null && approximate; } + private boolean filterStatic(Position position) { + return filterStatic && position.getSpeed() == 0.0; + } + private boolean filterDistance(Position position) { if (filterDistance != 0) { Position last = getLastPosition(position.getDeviceId()); @@ -125,7 +132,8 @@ public class FilterHandler extends BaseDataHandler { private boolean filter(Position p) { boolean result = filterInvalid(p) || filterZero(p) || filterDuplicate(p) - || filterFuture(p) || filterApproximate(p) || filterDistance(p); + || filterFuture(p) || filterApproximate(p) || filterStatic(p) + || filterDistance(p); if (filterLimit(p)) { result = false; -- cgit v1.2.3 From 7e2698ea6d1933030cd7e7a2fb33e3c984166f78 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 17 Oct 2016 22:04:02 +1300 Subject: Fix style problem with filter handler --- src/org/traccar/FilterHandler.java | 65 +++++++++++++++++++++------------ test/org/traccar/FilterHandlerTest.java | 12 +++++- 2 files changed, 52 insertions(+), 25 deletions(-) (limited to 'src/org/traccar/FilterHandler.java') diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index b6917cbfb..1ce9e2460 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,40 +23,59 @@ public class FilterHandler extends BaseDataHandler { private static final long FILTER_FUTURE_LIMIT = 5 * 60 * 1000; - private final boolean filterInvalid; - private final boolean filterZero; - private final boolean filterDuplicate; - private final boolean filterFuture; - private final boolean filterApproximate; - private final boolean filterStatic; - private final int filterDistance; - private final long filterLimit; - - public FilterHandler( - boolean filterInvalid, boolean filterZero, boolean filterDuplicate, boolean filterFuture, - boolean filterApproximate, boolean filterStatic, int filterDistance, long filterLimit) { + private boolean filterInvalid; + private boolean filterZero; + private boolean filterDuplicate; + private boolean filterFuture; + private boolean filterApproximate; + private boolean filterStatic; + private int filterDistance; + private long filterLimit; + public void setFilterInvalid(boolean filterInvalid) { this.filterInvalid = filterInvalid; + } + + public void setFilterZero(boolean filterZero) { this.filterZero = filterZero; + } + + public void setFilterDuplicate(boolean filterDuplicate) { this.filterDuplicate = filterDuplicate; - this.filterDistance = filterDistance; + } + + public void setFilterFuture(boolean filterFuture) { this.filterFuture = filterFuture; + } + + public void setFilterApproximate(boolean filterApproximate) { this.filterApproximate = filterApproximate; + } + + public void setFilterStatic(boolean filterStatic) { this.filterStatic = filterStatic; + } + + public void setFilterDistance(int filterDistance) { + this.filterDistance = filterDistance; + } + + public void setFilterLimit(long filterLimit) { this.filterLimit = filterLimit; } public FilterHandler() { Config config = Context.getConfig(); - - filterInvalid = config.getBoolean("filter.invalid"); - filterZero = config.getBoolean("filter.zero"); - filterDuplicate = config.getBoolean("filter.duplicate"); - filterFuture = config.getBoolean("filter.future"); - filterApproximate = config.getBoolean("filter.approximate"); - filterStatic = config.getBoolean("filter.static"); - filterDistance = config.getInteger("filter.distance"); - filterLimit = config.getLong("filter.limit") * 1000; + if (config != null) { + filterInvalid = config.getBoolean("filter.invalid"); + filterZero = config.getBoolean("filter.zero"); + filterDuplicate = config.getBoolean("filter.duplicate"); + filterFuture = config.getBoolean("filter.future"); + filterApproximate = config.getBoolean("filter.approximate"); + filterStatic = config.getBoolean("filter.static"); + filterDistance = config.getInteger("filter.distance"); + filterLimit = config.getLong("filter.limit") * 1000; + } } private Position getLastPosition(long deviceId) { diff --git a/test/org/traccar/FilterHandlerTest.java b/test/org/traccar/FilterHandlerTest.java index b1e4fcb16..bb7e69dc0 100644 --- a/test/org/traccar/FilterHandlerTest.java +++ b/test/org/traccar/FilterHandlerTest.java @@ -15,8 +15,16 @@ public class FilterHandlerTest { @Before public void setUp() { - filtingHandler = new FilterHandler(true, true, true, true, true, 10, 10); - passingHandler = new FilterHandler(false, false, false, false, false, 0, 0); + passingHandler = new FilterHandler(); + filtingHandler = new FilterHandler(); + filtingHandler.setFilterInvalid(true); + filtingHandler.setFilterZero(true); + filtingHandler.setFilterDuplicate(true); + filtingHandler.setFilterFuture(true); + filtingHandler.setFilterApproximate(true); + filtingHandler.setFilterStatic(true); + filtingHandler.setFilterDistance(10); + filtingHandler.setFilterLimit(10); } @After -- cgit v1.2.3 From d5c07a40ab27e3e4021f1c8a881b64cc9e43ff00 Mon Sep 17 00:00:00 2001 From: Renaud Allard Date: Mon, 17 Oct 2016 18:14:34 +0200 Subject: Log which filters have been used --- src/org/traccar/FilterHandler.java | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src/org/traccar/FilterHandler.java') diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index 1ce9e2460..8acc06935 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -150,16 +150,40 @@ public class FilterHandler extends BaseDataHandler { private boolean filter(Position p) { + String filterType = ""; + boolean result = filterInvalid(p) || filterZero(p) || filterDuplicate(p) || filterFuture(p) || filterApproximate(p) || filterStatic(p) || filterDistance(p); + if (filterInvalid(p)) { + filterType = "Invalid "; + } + if (filterZero(p)) { + filterType = (filterType + "Zero "); + } + if (filterDuplicate(p)) { + filterType = (filterType + "Duplicate "); + } + if (filterFuture(p)) { + filterType = (filterType + "Future "); + } + if (filterApproximate(p)) { + filterType = (filterType + "Approximate "); + } + if (filterStatic(p)) { + filterType = (filterType + "Static "); + } + if (filterDistance(p)) { + filterType = (filterType + "Distance "); + } + if (filterLimit(p)) { result = false; } if (result) { - Log.info("Position filtered from " + p.getDeviceId()); + Log.info("Position filtered by " + filterType + "filters from " + p.getDeviceId()); } return result; -- cgit v1.2.3 From 4b47a62d2dc0dd7f1b7ced01a7e6c7887e3840ad Mon Sep 17 00:00:00 2001 From: Renaud Allard Date: Mon, 17 Oct 2016 23:30:07 +0200 Subject: Do not double check the filter results Some cleaning in the logic --- src/org/traccar/FilterHandler.java | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'src/org/traccar/FilterHandler.java') diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index 8acc06935..62df83378 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -150,36 +150,33 @@ public class FilterHandler extends BaseDataHandler { private boolean filter(Position p) { + boolean result = false; String filterType = ""; - boolean result = filterInvalid(p) || filterZero(p) || filterDuplicate(p) - || filterFuture(p) || filterApproximate(p) || filterStatic(p) - || filterDistance(p); - if (filterInvalid(p)) { - filterType = "Invalid "; + filterType = filterType + "Invalid "; } if (filterZero(p)) { - filterType = (filterType + "Zero "); + filterType = filterType + "Zero "; } if (filterDuplicate(p)) { - filterType = (filterType + "Duplicate "); + filterType = filterType + "Duplicate "; } if (filterFuture(p)) { - filterType = (filterType + "Future "); + filterType = filterType + "Future "; } if (filterApproximate(p)) { - filterType = (filterType + "Approximate "); + filterType = filterType + "Approximate "; } if (filterStatic(p)) { - filterType = (filterType + "Static "); + filterType = filterType + "Static "; } if (filterDistance(p)) { - filterType = (filterType + "Distance "); + filterType = filterType + "Distance "; } - if (filterLimit(p)) { - result = false; + if (!"".equals(filterType) && !filterLimit(p)) { + result = true; } if (result) { -- cgit v1.2.3 From 8756277141ff7549cb0a019e8f67bef58948bd59 Mon Sep 17 00:00:00 2001 From: Renaud Allard Date: Mon, 17 Oct 2016 23:42:17 +0200 Subject: Use StringBuilder for filter logging --- src/org/traccar/FilterHandler.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/org/traccar/FilterHandler.java') diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index 62df83378..725f9c429 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -151,36 +151,36 @@ public class FilterHandler extends BaseDataHandler { private boolean filter(Position p) { boolean result = false; - String filterType = ""; + StringBuilder filterType = new StringBuilder(8 + 5 + 10 + 7 + 12 + 7 + 9); if (filterInvalid(p)) { - filterType = filterType + "Invalid "; + filterType.append("Invalid "); } if (filterZero(p)) { - filterType = filterType + "Zero "; + filterType.append("Zero "); } if (filterDuplicate(p)) { - filterType = filterType + "Duplicate "; + filterType.append("Duplicate "); } if (filterFuture(p)) { - filterType = filterType + "Future "; + filterType.append("Future "); } if (filterApproximate(p)) { - filterType = filterType + "Approximate "; + filterType.append("Approximate "); } if (filterStatic(p)) { - filterType = filterType + "Static "; + filterType.append("Static "); } if (filterDistance(p)) { - filterType = filterType + "Distance "; + filterType.append("Distance "); } - if (!"".equals(filterType) && !filterLimit(p)) { + if (!"".equals(filterType.toString()) && !filterLimit(p)) { result = true; } if (result) { - Log.info("Position filtered by " + filterType + "filters from " + p.getDeviceId()); + Log.info("Position filtered by " + filterType.toString() + "filters from " + p.getDeviceId()); } return result; -- cgit v1.2.3 From 54d48825f34b1a211960b68c98a817eedcdbba9c Mon Sep 17 00:00:00 2001 From: Renaud Allard Date: Mon, 17 Oct 2016 23:54:53 +0200 Subject: Rework the circumvoluted logic in filter logging --- src/org/traccar/FilterHandler.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/org/traccar/FilterHandler.java') diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index 725f9c429..f1df7ce2c 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -175,10 +175,14 @@ public class FilterHandler extends BaseDataHandler { filterType.append("Distance "); } - if (!"".equals(filterType.toString()) && !filterLimit(p)) { + if (filterType.length() > 0) { result = true; } + if (filterLimit(p)) { + result = false; + } + if (result) { Log.info("Position filtered by " + filterType.toString() + "filters from " + p.getDeviceId()); } -- cgit v1.2.3 From c0acd034c1103cf5d38e94bd42ec183147678135 Mon Sep 17 00:00:00 2001 From: Renaud Allard Date: Tue, 18 Oct 2016 00:07:06 +0200 Subject: Rename variable p into position in filter checking --- src/org/traccar/FilterHandler.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/org/traccar/FilterHandler.java') diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index f1df7ce2c..e9e3245a6 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -148,30 +148,30 @@ public class FilterHandler extends BaseDataHandler { } } - private boolean filter(Position p) { + private boolean filter(Position position) { boolean result = false; StringBuilder filterType = new StringBuilder(8 + 5 + 10 + 7 + 12 + 7 + 9); - if (filterInvalid(p)) { + if (filterInvalid(position)) { filterType.append("Invalid "); } - if (filterZero(p)) { + if (filterZero(position)) { filterType.append("Zero "); } - if (filterDuplicate(p)) { + if (filterDuplicate(position)) { filterType.append("Duplicate "); } - if (filterFuture(p)) { + if (filterFuture(position)) { filterType.append("Future "); } - if (filterApproximate(p)) { + if (filterApproximate(position)) { filterType.append("Approximate "); } - if (filterStatic(p)) { + if (filterStatic(position)) { filterType.append("Static "); } - if (filterDistance(p)) { + if (filterDistance(position)) { filterType.append("Distance "); } @@ -179,12 +179,12 @@ public class FilterHandler extends BaseDataHandler { result = true; } - if (filterLimit(p)) { + if (filterLimit(position)) { result = false; } if (result) { - Log.info("Position filtered by " + filterType.toString() + "filters from " + p.getDeviceId()); + Log.info("Position filtered by " + filterType.toString() + "filters from " + position.getDeviceId()); } return result; -- cgit v1.2.3 From bc40685dca74e5026d529456ee01e6a7627fb85e Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 18 Oct 2016 20:27:42 +1300 Subject: Small modifications to filter handler --- src/org/traccar/FilterHandler.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) (limited to 'src/org/traccar/FilterHandler.java') diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index e9e3245a6..83d79a3c0 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -150,8 +150,7 @@ public class FilterHandler extends BaseDataHandler { private boolean filter(Position position) { - boolean result = false; - StringBuilder filterType = new StringBuilder(8 + 5 + 10 + 7 + 12 + 7 + 9); + StringBuilder filterType = new StringBuilder(); if (filterInvalid(position)) { filterType.append("Invalid "); @@ -175,19 +174,12 @@ public class FilterHandler extends BaseDataHandler { filterType.append("Distance "); } - if (filterType.length() > 0) { - result = true; - } - - if (filterLimit(position)) { - result = false; - } - - if (result) { + if (filterType.length() > 0 && !filterLimit(position)) { Log.info("Position filtered by " + filterType.toString() + "filters from " + position.getDeviceId()); + return true; } - return result; + return false; } @Override -- cgit v1.2.3