#pragma once
#include <config.h>
#include "CommonHandler.h"
class RouteHandler : public CommonHandler {
public:
RouteHandler(const std::string& filename, const bool hardFail);
virtual ~RouteHandler();
bool beginParseAttributes(SumoXMLTag tag, const SUMOSAXAttributes& attrs);
void endParseAttributes();
void parseSumoBaseObject(CommonXMLStructure::SumoBaseObject* obj);
virtual bool postParserTasks() = 0;
virtual bool buildVType(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVTypeParameter& vTypeParameter) = 0;
virtual bool buildVTypeRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& vTypeID, const double probability) = 0;
virtual bool buildVTypeDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const int deterministic) = 0;
virtual bool buildRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, SUMOVehicleClass vClass,
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
const double probability, const Parameterised::Map& routeParameters) = 0;
virtual bool buildRouteRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& routeID, const double probability) = 0;
virtual bool buildRouteDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id) = 0;
virtual bool buildVehicleOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters) = 0;
virtual bool buildVehicleEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
const Parameterised::Map& routeParameters) = 0;
virtual bool buildFlowOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters) = 0;
virtual bool buildFlowEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
const Parameterised::Map& routeParameters) = 0;
virtual bool buildTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
const std::string& fromEdgeID, const std::string& toEdgeID) = 0;
virtual bool buildTripJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
const std::string& fromJunctionID, const std::string& toJunctionID) = 0;
virtual bool buildTripTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
const std::string& fromTazID, const std::string& toTazID) = 0;
virtual bool buildFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
const std::string& fromEdgeID, const std::string& toEdgeID) = 0;
virtual bool buildFlowJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
const std::string& fromJunctionID, const std::string& toJunctionID) = 0;
virtual bool buildFlowTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
const std::string& fromTAZID, const std::string& toTAZID) = 0;
virtual bool buildPerson(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personParameters) = 0;
virtual bool buildPersonFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personFlowParameters) = 0;
virtual bool buildPersonTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
const double arrivalPos, const std::vector<std::string>& types, const std::vector<std::string>& modes,
const std::vector<std::string>& lines, const double walkFactor, const std::string& group) = 0;
virtual bool buildWalk(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
const double arrivalPos, const double speed, const SUMOTime duration) = 0;
virtual bool buildRide(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group) = 0;
virtual bool buildContainer(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerParameters) = 0;
virtual bool buildContainerFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerFlowParameters) = 0;
virtual bool buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group) = 0;
virtual bool buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
const double arrivalPosition, const double departPosition, const double speed, const SUMOTime duration) = 0;
virtual bool buildStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
const SUMOVehicleParameter::Stop& stopParameters) = 0;
private:
const bool myHardFail;
SUMOTime myFlowBeginDefault;
SUMOTime myFlowEndDefault;
void parseVType(const SUMOSAXAttributes& attrs);
void parseVTypeRef(const SUMOSAXAttributes& attrs);
void parseVTypeDistribution(const SUMOSAXAttributes& attrs);
void parseRoute(const SUMOSAXAttributes& attrs);
void parseRouteRef(const SUMOSAXAttributes& attrs);
void parseRouteEmbedded(const SUMOSAXAttributes& attrs);
void parseRouteDistribution(const SUMOSAXAttributes& attrs);
void parseTrip(const SUMOSAXAttributes& attrs);
void parseVehicle(const SUMOSAXAttributes& attrs);
void parseFlow(const SUMOSAXAttributes& attrs);
void parseStop(const SUMOSAXAttributes& attrs);
void parsePerson(const SUMOSAXAttributes& attrs);
void parsePersonFlow(const SUMOSAXAttributes& attrs);
void parsePersonTrip(const SUMOSAXAttributes& attrs);
void parseWalk(const SUMOSAXAttributes& attrs);
void parseRide(const SUMOSAXAttributes& attrs);
void parseContainer(const SUMOSAXAttributes& attrs);
void parseContainerFlow(const SUMOSAXAttributes& attrs);
void parseTransport(const SUMOSAXAttributes& attrs);
void parseTranship(const SUMOSAXAttributes& attrs);
void parseInterval(const SUMOSAXAttributes& attrs);
bool parseNestedCFM(const SumoXMLTag tag, const SUMOSAXAttributes& attrs,
CommonXMLStructure::SumoBaseObject* vTypeObject);
bool parseStopParameters(SUMOVehicleParameter::Stop& stop, const SUMOSAXAttributes& attrs);
bool isOverFromToEdges(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
bool isOverFromToJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
bool isOverFromToTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
RouteHandler() = delete;
RouteHandler(const RouteHandler& s) = delete;
RouteHandler& operator=(const RouteHandler& s) = delete;
};