#include "inputdatareader.hh" #include "accesspointsreadercsv.hh" #include "topologyreadercsv.hh" #include "inputcsv.hh" #include "calibrationrequest.hh" #include "configuration.hh" #include "posexcept.hh" #include "stock.hh" #include using namespace std ; /* *** Constructors *** */ InputDataReader::InputDataReader() { read_access_points() ; read_topology() ; read_reference_points() ; } InputDataReader::~InputDataReader() { for (vector::const_iterator i = reference_points_media.begin() ; i != reference_points_media.end() ; ++i) delete *i ; reference_points_media.clear() ; } /* *** Access points *** */ void InputDataReader::read_access_points() { if (! Configuration::is_configured("data-input.ap-medium")) return ; initialise_access_points_media() ; } void InputDataReader::initialise_access_points_media() { const vector &media_names = Configuration::string_vector_value("data-input.ap-medium") ; for (vector::const_iterator i = media_names.begin() ; i != media_names.end() ; ++i) { if (*i == "CSV") initialise_access_points_csv() ; else throw bad_configuration( "Access points input medium type unknown « "+ *i +" »") ; } } void InputDataReader::initialise_access_points_csv() { if (! Configuration::is_configured("data-input.ap-csv-file")) throw missing_configuration( "No input CSV file specified for access points") ; AccessPointsReaderCSV( Configuration::string_value("data-input.ap-csv-file")) ; } /* *** Topology *** */ void InputDataReader::read_topology() { if (! Configuration::is_configured("data-input.topology-medium")) return ; initialise_topology_media() ; } void InputDataReader::initialise_topology_media() { const vector &media_names = Configuration::string_vector_value("data-input.topology-medium") ; for (vector::const_iterator i = media_names.begin() ; i != media_names.end() ; ++i) { if (*i == "CSV") initialise_topology_csv() ; else throw bad_configuration( "Topology input medium type unknown « "+ *i +" »") ; } } void InputDataReader::initialise_topology_csv() { if (! Configuration::is_configured("data-input.areas-csv-file")) throw missing_configuration( "No topology input CSV file specified for areas") ; if (! Configuration::is_configured("data-input.waypoints-csv-file")) throw missing_configuration( "No topology input CSV file specified for waypoints") ; TopologyReaderCSV( Configuration::string_value("data-input.areas-csv-file"), Configuration::string_value("data-input.waypoints-csv-file")) ; } /* *** Reference points *** */ void InputDataReader::read_reference_points() { if (! Configuration::is_configured("data-input.reference-points-medium")) return ; initialise_reference_points_media() ; read_from_reference_points_media() ; } void InputDataReader::initialise_reference_points_media() { const vector &media_names = Configuration::string_vector_value("data-input.reference-points-medium") ; for (vector::const_iterator i = media_names.begin() ; i != media_names.end() ; ++i) { if (*i == "CSV") initialise_reference_points_csv() ; else throw bad_configuration( "Reference points input medium type unknown « "+ *i +" »") ; } } void InputDataReader::initialise_reference_points_csv() { if (! Configuration::is_configured("data-input.reference-points-csv-file")) throw missing_configuration( "No reference points input CSV file is configured") ; reference_points_media.push_back( new InputCSV( Configuration::string_value("data-input.reference-points-csv-file"))) ; } void InputDataReader::read_from_reference_points_media() { for (vector::const_iterator i = reference_points_media.begin() ; i != reference_points_media.end() ; ++i) { while (! (*i)->eof()) { Request &request = const_cast((*i)->get_next_request()) ; if (! request) continue ; CalibrationRequest *calibration_request = dynamic_cast(&request) ; if (calibration_request == NULL) cerr << "Warning! Invalid calibration request at line " << (*i)->get_current_line_nb() << endl ; else stock_calibration_request(*calibration_request) ; } } } void InputDataReader:: stock_calibration_request(const CalibrationRequest &request) const { const CalibrationRequest &calibration_request = Stock::find_create_calibration_request(request) ; calibration_request.reference_point_backward_link() ; }