From 2b9469e85bf7da0905ac3a679554178532f51009 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 25 Feb 2019 22:00:30 -0800 Subject: Refactor engine hours handler --- src/org/traccar/BasePipelineFactory.java | 8 +--- src/org/traccar/EngineHoursHandler.java | 42 --------------------- src/org/traccar/MainModule.java | 22 +++++++++++ src/org/traccar/config/Keys.java | 6 +++ src/org/traccar/handler/EngineHoursHandler.java | 50 +++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 48 deletions(-) delete mode 100644 src/org/traccar/EngineHoursHandler.java create mode 100644 src/org/traccar/handler/EngineHoursHandler.java (limited to 'src/org/traccar') diff --git a/src/org/traccar/BasePipelineFactory.java b/src/org/traccar/BasePipelineFactory.java index cb60b20a7..1b3be36fc 100644 --- a/src/org/traccar/BasePipelineFactory.java +++ b/src/org/traccar/BasePipelineFactory.java @@ -37,6 +37,7 @@ import org.traccar.events.OverspeedEventHandler; import org.traccar.handler.ComputedAttributesHandler; import org.traccar.handler.CopyAttributesHandler; import org.traccar.handler.DistanceHandler; +import org.traccar.handler.EngineHoursHandler; import org.traccar.handler.FilterHandler; import org.traccar.handler.GeocoderHandler; import org.traccar.handler.GeolocationHandler; @@ -56,7 +57,6 @@ public abstract class BasePipelineFactory extends ChannelInitializer { private final TrackerServer server; private int timeout; - private EngineHoursHandler engineHoursHandler; private CopyAttributesHandler copyAttributesHandler; private ComputedAttributesHandler computedAttributesHandler; @@ -78,10 +78,6 @@ public abstract class BasePipelineFactory extends ChannelInitializer { timeout = Context.getConfig().getInteger(Keys.SERVER_TIMEOUT); } - if (Context.getConfig().getBoolean("processing.engineHours.enable")) { - engineHoursHandler = new EngineHoursHandler(); - } - if (Context.getConfig().getBoolean("processing.copyAttributes.enable")) { copyAttributesHandler = new CopyAttributesHandler(); } @@ -164,7 +160,7 @@ public abstract class BasePipelineFactory extends ChannelInitializer { Main.getInjector().getInstance(FilterHandler.class), Main.getInjector().getInstance(GeocoderHandler.class), Main.getInjector().getInstance(MotionHandler.class), - engineHoursHandler, + Main.getInjector().getInstance(EngineHoursHandler.class), copyAttributesHandler, computedAttributesHandler); diff --git a/src/org/traccar/EngineHoursHandler.java b/src/org/traccar/EngineHoursHandler.java deleted file mode 100644 index c9fbc186c..000000000 --- a/src/org/traccar/EngineHoursHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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; - -import io.netty.channel.ChannelHandler; -import org.traccar.model.Position; - -@ChannelHandler.Sharable -public class EngineHoursHandler extends BaseDataHandler { - - @Override - protected Position handlePosition(Position position) { - if (!position.getAttributes().containsKey(Position.KEY_HOURS)) { - Position last = Context.getIdentityManager().getLastPosition(position.getDeviceId()); - if (last != null) { - long hours = last.getLong(Position.KEY_HOURS); - if (last.getBoolean(Position.KEY_IGNITION) && position.getBoolean(Position.KEY_IGNITION)) { - hours += position.getFixTime().getTime() - last.getFixTime().getTime(); - } - if (hours != 0) { - position.set(Position.KEY_HOURS, hours); - } - } - } - return position; - } - -} diff --git a/src/org/traccar/MainModule.java b/src/org/traccar/MainModule.java index 0c3c5be51..cd5f2568e 100644 --- a/src/org/traccar/MainModule.java +++ b/src/org/traccar/MainModule.java @@ -44,7 +44,9 @@ import org.traccar.geolocation.MozillaGeolocationProvider; import org.traccar.geolocation.OpenCellIdGeolocationProvider; import org.traccar.geolocation.UnwiredGeolocationProvider; import org.traccar.handler.DistanceHandler; +import org.traccar.handler.EngineHoursHandler; import org.traccar.handler.FilterHandler; +import org.traccar.handler.GeocoderHandler; import org.traccar.handler.GeolocationHandler; import org.traccar.handler.HemisphereHandler; import org.traccar.handler.MotionHandler; @@ -209,12 +211,32 @@ public class MainModule extends AbstractModule { return null; } + @Singleton + @Provides + public static GeocoderHandler provideGeocoderHandler( + Config config, @Nullable Geocoder geocoder, IdentityManager identityManager, + StatisticsManager statisticsManager) { + if (geocoder != null) { + return new GeocoderHandler(config, geocoder, identityManager, statisticsManager); + } + return null; + } + @Singleton @Provides public static MotionHandler provideMotionHandler(TripsConfig tripsConfig) { return new MotionHandler(tripsConfig.getSpeedThreshold()); } + @Singleton + @Provides + public static EngineHoursHandler provideEngineHoursHandler(Config config, IdentityManager identityManager) { + if (config.getBoolean(Keys.PROCESSING_ENGINE_HOURS_ENABLE)) { + return new EngineHoursHandler(identityManager); + } + return null; + } + @Override protected void configure() { binder().requireExplicitBindings(); diff --git a/src/org/traccar/config/Keys.java b/src/org/traccar/config/Keys.java index 7449bfdf5..6c1225a9b 100644 --- a/src/org/traccar/config/Keys.java +++ b/src/org/traccar/config/Keys.java @@ -179,6 +179,12 @@ public final class Keys { public static final ConfigKey PROCESSING_REMOTE_ADDRESS_ENABLE = new ConfigKey( "processing.remoteAddress.enable", Boolean.class); + /** + * Enable engine hours calculation on the server side. It uses ignition value to determine engine state. + */ + public static final ConfigKey PROCESSING_ENGINE_HOURS_ENABLE = new ConfigKey( + "processing.engineHours.enable", Boolean.class); + /** * Boolean flag to enable or disable reverse geocoder. */ diff --git a/src/org/traccar/handler/EngineHoursHandler.java b/src/org/traccar/handler/EngineHoursHandler.java new file mode 100644 index 000000000..92da84e6b --- /dev/null +++ b/src/org/traccar/handler/EngineHoursHandler.java @@ -0,0 +1,50 @@ +/* + * Copyright 2018 - 2019 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.handler; + +import io.netty.channel.ChannelHandler; +import org.traccar.BaseDataHandler; +import org.traccar.database.IdentityManager; +import org.traccar.model.Position; + +@ChannelHandler.Sharable +public class EngineHoursHandler extends BaseDataHandler { + + private final IdentityManager identityManager; + + public EngineHoursHandler(IdentityManager identityManager) { + this.identityManager = identityManager; + } + + @Override + protected Position handlePosition(Position position) { + if (!position.getAttributes().containsKey(Position.KEY_HOURS)) { + Position last = identityManager.getLastPosition(position.getDeviceId()); + if (last != null) { + long hours = last.getLong(Position.KEY_HOURS); + if (last.getBoolean(Position.KEY_IGNITION) && position.getBoolean(Position.KEY_IGNITION)) { + hours += position.getFixTime().getTime() - last.getFixTime().getTime(); + } + if (hours != 0) { + position.set(Position.KEY_HOURS, hours); + } + } + } + return position; + } + +} -- cgit v1.2.3