2 #include <boost/lexical_cast.hpp>
3 #include <det/Detector.h>
4 #include <rdet/RStationListSQLManager.h>
5 #include <rdet/RManagerRegister.h>
6 #include <utl/UTCDateTime.h>
7 #include <utl/TimeStamp.h>
13 using namespace boost;
24 for (string::const_iterator it = str.begin(); it != str.end(); ++it) {
25 const int i = (
unsigned char) (*it);
30 if (it != str.end() && int((
unsigned char) (*it)) == 177)
38 if (32 <= i && i < 127)
57 const TimeStamp& curTime = Detector::GetInstance().GetTime();
58 if (Commissioned.IsInRange(curTime))
62 info <<
"Request station_list SQL Data for time: " << curTime;
66 fStationManager.ClearStationList();
69 TimeStamp maxValidTime(2147483647
U, 999999999.9999999);
74 "ellipsoid, zone, band, "
75 "northing, easting, altitude, "
78 "nChannels, firstChannelId, lastChannelId, "
79 "max(Commission), min(Decommission) "
80 "FROM RStation left join RHardWareAssociation using (RStationId) "
81 "left join utm_data using (utm_data_id) "
86 "GROUP BY RStationId ORDER BY RStationId ASC";
91 if (Query(query.str(), QueryInfoMessage(
"all station_list",
"station_list")) == eNotFound) {
92 const string err =
"No station_list SQL data found! Query: " + query.str();
102 vector<string> IdElZoBaNoEaAlNaIGNCFCLCCTDT;
103 while (FetchRow(IdElZoBaNoEaAlNaIGNCFCLCCTDT,
false) == eFound) {
108 station.
fId = lexical_cast<
int>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[0]);
109 if (!fStationManager.HasStationData(station.
fId)) {
110 station.
fEllipsoid = IdElZoBaNoEaAlNaIGNCFCLCCTDT[1];
111 station.
fZone = lexical_cast<
int>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[2]);
112 station.
fBand = IdElZoBaNoEaAlNaIGNCFCLCCTDT[3];
113 station.
fNorthing = lexical_cast<
double>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[4]);
114 station.
fEasting = lexical_cast<
double>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[5]);
115 station.
fAltitude = lexical_cast<
double>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[6]);
117 station.
fInGrid = lexical_cast<
int>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[8]);
118 station.
fNChannels = lexical_cast<
int>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[9]);
119 station.
fFirstChannelId = lexical_cast<
int>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[10]);
120 station.
fLastChannelId = lexical_cast<
int>(IdElZoBaNoEaAlNaIGNCFCLCCTDT[11]);
125 if (IdElZoBaNoEaAlNaIGNCFCLCCTDT[12].size() == 0) {
127 err <<
"No configuration for station-id " << station.
fId <<
" found -> station ignored";
130 if (IdElZoBaNoEaAlNaIGNCFCLCCTDT[12].size() < 19) {
133 warn <<
"Empty Comissioning-Time for station " << station.
fId <<
" now set to "
141 if (IdElZoBaNoEaAlNaIGNCFCLCCTDT[13].size() < 19) {
144 warn <<
"Empty Decomissioning-Time for station " << station.
fId <<
" now set to "
152 const bool ok = fStationManager.ConditionalAddStationData(station);
155 err <<
"problem adding station to list for station-id " << station.
fId
156 <<
"found in SQL configuration";
161 if (tmpTime > minValidTime) {
162 minValidTime = tmpTime;
164 tmpTime = boost::lexical_cast<UTCDateTime>(station.
fDecommissionTime).GetTimeStamp();
165 if (tmpTime < maxValidTime) {
166 maxValidTime = tmpTime;
174 query <<
"SELECT max(Decommission) "
176 "left join RHardWareAssociation using (RStationId) left join utm_data using (utm_data_id)"
177 "where Decommission<\""
179 if (Query(query.str(), QueryInfoMessage(
"all station_list",
"station_list")) == eNotFound) {
180 const string err =
"No decommissioned stations found before current time! Query: "
184 vector<string> sql_result;
185 if (FetchRow(sql_result,
false) == eFound) {
186 if (sql_result[0].size() >= 19) {
187 std::string temp = sql_result[0];
190 maxDecommission = boost::lexical_cast<
UTCDateTime>(temp).GetTimeStamp();
194 minValidTime =
max(maxDecommission, minValidTime);
196 TimeStamp minCommission = TimeStamp::Max();
199 query <<
"SELECT min(Commission) "
201 "left join RHardWareAssociation using (RStationId) left join utm_data using (utm_data_id)"
202 "where Commission>\""
204 if (Query(query.str(), QueryInfoMessage(
"all station_list",
"station_list")) == eNotFound) {
205 const string err =
"No now commissioned stations found after current time! Query: "
209 vector<string> sql_result2;
210 if (FetchRow(sql_result2,
false) == eFound) {
211 if (sql_result2[0].size() >= 19) {
212 std::string temp = sql_result2[0];
215 minCommission = boost::lexical_cast<
UTCDateTime>(temp).GetTimeStamp();
219 maxValidTime = min(minCommission, maxValidTime);
221 Commissioned.SetTimeRange(minValidTime, maxValidTime);
std::string fDecommissionTime
void Update(std::vector< double > &init, const std::vector< double > &res)
#define INFO(message)
Macro for logging informational messages.
std::string GetInMySQLFormat() const
void Init()
Initialise the registry.
string Utf8To7Bit(const string &str)
A TimeStamp holds GPS second and nanosecond for some event.
#define REGISTER_R_MANAGER(_name_, _Type_)
Exception to use in case requested data not found in the database with detailed printout.
Manager for SD description in SQL station lists.
std::string fCommissionTime
#define ERROR(message)
Macro for logging error messages.