]> pilppa.org Git - libplpdevicebus.git/blobdiff - src_server/DeviceManagerServer.cc
implement method for getting data between dates
[libplpdevicebus.git] / src_server / DeviceManagerServer.cc
index 9d96db7aa02d9559c08b1c6df14f9c28a6ac89c6..1a7e17296b85885fcff83793c91fc3d78260fdd7 100644 (file)
@@ -185,8 +185,8 @@ void decode_latest_data_to_busmessage(const BusMessage *ret_val,
        }
 }
 
-void decode_data_range_to_busmessage(const BusMessage *ret_val,
-                               DataRange *dr) {
+void decode_first_and_last_data_to_busmessage(const BusMessage *ret_val,
+                                               DataRange *dr) {
        Data    *data;
 
        data    = dr->get_first();
@@ -207,6 +207,28 @@ void decode_data_range_to_busmessage(const BusMessage *ret_val,
        }
 }
 
+void decode_data_range_to_busmessage(const BusMessage *ret_val,
+                               DataRange *dr) {
+       Data            *data;
+       int             ii;
+       int             count;
+       ostringstream   key;
+
+       count   = dr->get_count();
+       ((BusMessage *)ret_val)->add_int_parameter(RSP__COUNT, count);
+       for (ii = 0; ii < count; ii++) {
+               data    = dr->get(ii);
+               if (data != NULL) {
+                       key.str("");
+                       key << RSP__DATA_VALUE << ii;
+                       add_data_values_to_bus_message(ret_val,
+                                               data,
+                                               key.str());
+                       delete(data);
+               }
+       }
+}
+
 void DeviceManagerServer::get_latest_data(BusMessage *msg_req_param,
                                        const BusMessage *ret_val) {
        string                  id;
@@ -248,6 +270,49 @@ void DeviceManagerServer::get_data_range(BusMessage *msg_req_param,
                                reader  = sensor->get_datareader();
                                if (reader != NULL) {
                                        dr      = ((DataReader *)reader)->get_data_range();
+                                       if (dr != NULL) {
+                                               decode_first_and_last_data_to_busmessage(ret_val, dr);
+                                               delete(dr);
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+void DeviceManagerServer::get_data_between_dates(BusMessage *msg_req_param,
+                                       const BusMessage *ret_val) {
+       string                  id;
+       int                     err_flg;
+       Device                  *dev;
+       SensorDevice            *sensor;
+       ostringstream           key;
+       const DataReader        *reader;
+       DataRange               *dr;
+       string                  startdate_str;
+       string                  enddate_str;
+       Date                    sdate;
+       Date                    edate;
+
+       log_debug("started\n");
+       id              = msg_req_param->get_string_parameter(REQ__DEVICE_ID, &err_flg);
+       if (err_flg == PLP_OK)
+               startdate_str   = msg_req_param->get_string_parameter(REQ__DATE1, &err_flg);
+       if (err_flg == PLP_OK)
+               enddate_str     = msg_req_param->get_string_parameter(REQ__DATE2, &err_flg);
+       log_debug("id: %s, sdate: %s, edate: %s\n", id.c_str(), startdate_str.c_str(), enddate_str.c_str());
+       if (err_flg == PLP_OK) {
+               sdate   = Date::parse_date_str(startdate_str);
+               edate   = Date::parse_date_str(enddate_str);
+               log_debug("id: %s, sdate: %s, edate: %s\n", id.c_str(), startdate_str.c_str(), enddate_str.c_str());
+               dev     = (Device *)get_device_by_id(id);
+               if (dev != NULL) {
+                       sensor  = dynamic_cast<SensorDevice *>(dev);
+                       if (sensor != NULL) {
+                               reader  = sensor->get_datareader();
+                               if (reader != NULL) {
+                                       dr      = ((DataReader *)reader)->get_data(&sdate, &edate);
+                                       log_debug("dr.size: %d\n", dr->get_count());
                                        if (dr != NULL) {
                                                decode_data_range_to_busmessage(ret_val, dr);
                                                delete(dr);
@@ -256,4 +321,7 @@ void DeviceManagerServer::get_data_range(BusMessage *msg_req_param,
                        }
                }
        }
+       else {
+               log_error("Invalid request parameters.\n");
+       }
 }