package art.servers.fleetserver.configuration; import art.library.model.devices.vehicle.VehiclePosition; import art.library.osm.OSM; import art.servers.Shared; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonRootName; import java.util.ArrayList; import java.util.List; @JsonRootName(value = "Configuration bus action") public class ConfigurationBusAction { @JsonProperty("Controller") public String controller = null; /** * Special demand */ @JsonProperty("Demand") public int demand = -1; @JsonProperty("Latitude") public double latitude = 0d; @JsonProperty("Longitude") public double longitude = 0d; /** * K coefficient for time calculation */ @JsonProperty("K") public double K = 0d; /** * Minimum time in seconds */ @JsonProperty("Minimum time") public int minimumTime = 0; /** * Maximum time in seconds */ @JsonProperty("Maximum time") public int maximumTime = 0; /** * Minimum speed in km/h */ @JsonProperty("Minimum speed") public double minimumSpeed = 0d; /** * Maximum speed in km/h */ @JsonProperty("Maximum speed") public double maximumSpeed = 0d; /** * Minimum time between actions in seconds */ @JsonProperty("Minimum time between actions") public int minimumTimeBetweenActions = 0; /** * Activation area */ @JsonProperty("Activation area") public ConfigurationBusActionArea activationArea = null; /** * Cancelation area */ @JsonProperty("Cancelation area") public ConfigurationBusActionArea cancelationArea = null; /** * Schedulers */ @JsonProperty("Schedulers") public List lscheduler = new ArrayList(); public boolean isSelectionPosition(VehiclePosition position) { try { if ((position.speed < minimumSpeed) || (position.speed > maximumSpeed)) return(false); long lastAction = art.servers.fleetserver.Shared.hlastActionController.get(controller); if ((System.currentTimeMillis()-lastAction) < (minimumTimeBetweenActions*1000)) return(false); double distance = OSM.mercator.getDistance(position.latitude, position.longitude, activationArea.latitude, activationArea.longitude); if (distance > activationArea.radius) return(false); // Check angle if (activationArea.correctAngle(position) == false) return(false); if (existSchedulerActive() == false) return false; return(true); } catch (Exception exception) { Shared.printstack("ConfigurationBusAction", exception); } return(false); } public boolean isCancelPosition(VehiclePosition position) { try { if ((position.speed < minimumSpeed) || (position.speed > maximumSpeed)) return(false); long lastAction = art.servers.fleetserver.Shared.hlastActionController.get(controller); if ((System.currentTimeMillis()-lastAction) < (minimumTimeBetweenActions*1000)) return(false); double distance = OSM.mercator.getDistance(position.latitude, position.longitude, cancelationArea.latitude, cancelationArea.longitude); if (distance > cancelationArea.radius) return(false); // Check angle if (cancelationArea.correctAngle(position) == false) return(false); if (existSchedulerActive() == false) return false; return(true); } catch (Exception exception) { Shared.printstack("ConfigurationBusAction", exception); } return(false); } private boolean existSchedulerActive() { try { for (ConfigurationBusActionScheduler scheduler : lscheduler) { if (scheduler.active() == true) { return(true); } } } catch (Exception exception) { Shared.printstack("ConfigurationBusAction", exception); } return(false); } }