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<ConfigurationBusActionScheduler> lscheduler = new ArrayList<ConfigurationBusActionScheduler>();
|
|
|
|
|
|
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);
|
}
|
|
}
|