X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FDeviceData.cc;h=790bcaef7140cbbc1abf1e186cc81f87ec7dc3a4;hb=3d2ca40bf3d475f7e2d7e67bd888bd33a94ca978;hp=d13287c3c087796da6a654b7e14090a4071f1211;hpb=af26b84b20b6d9d0e0ce690e8011a037e87dc5c8;p=lib1wire.git diff --git a/src/DeviceData.cc b/src/DeviceData.cc index d13287c..790bcae 100644 --- a/src/DeviceData.cc +++ b/src/DeviceData.cc @@ -25,86 +25,111 @@ using namespace plp; DeviceData::DeviceData(string device_id_param) { string base_dir; - device_config = Factory::get_device_config(device_id_param); - summary_calc_type = device_config->get_summary_calculation_type(); - device_id = device_id_param; - base_dir = DeviceConfig::get_base_dir_name(); - device_dir = W1Util::concat_paths(base_dir, device_id); - device_ch_dir = W1Util::concat_paths(base_dir, "cache"); - device_ch_dir = W1Util::concat_paths(device_ch_dir, device_id); + device_config = NULL; + device_id = device_id_param; + base_dir = DeviceConfig::get_base_dir_name(); + device_dir = W1Util::concat_paths(base_dir, device_id); + device_ch_dir = W1Util::concat_paths(base_dir, "cache"); + device_ch_dir = W1Util::concat_paths(device_ch_dir, device_id); } DeviceData::~DeviceData() { - delete(device_config); + if (device_config != NULL) { + delete(device_config); + device_config = NULL; + } } -Data *DeviceData::find_oldest_data(vector year_vector) { - unsigned int ii; - string year_dr; +Data *DeviceData::find_newest_data(string year_name_param) { + int ii; string mon_dr; vector mon_vcr; - vector dta_vcr; + vector d_vcr; string f_name; StoreDay *store; Data *ret_val; + string year_dr; + int size; ret_val = NULL; - if (year_vector.size() > 0) { - // dirs are alphabetically sorted - year_dr = year_vector.at(0); - year_dr = W1Util::concat_paths(device_dir, year_dr); - mon_vcr = W1Util::get_subdirectories(year_dr); - for (ii = 0; ii < mon_vcr.size(); ii++) { - mon_dr = mon_vcr.at(ii); - mon_dr = W1Util::concat_paths(year_dr, mon_dr); - // scan data files from month dir - dta_vcr = W1Util::get_data_files(mon_dr); - if (dta_vcr.size() > 0) { - f_name = dta_vcr.at(0); - f_name = W1Util::concat_paths(mon_dr, f_name); - store = new StoreDay(f_name); - ret_val = store->get_oldest_data(); - delete(store); - break; - } + year_dr = W1Util::concat_paths(device_dir, year_name_param); + mon_vcr = W1Util::get_subdirectories(year_dr); + for (ii = mon_vcr.size() - 1; ii >= 0; ii--) { + mon_dr = mon_vcr.at(ii); + mon_dr = W1Util::concat_paths(year_dr, mon_dr); + // scan data files from month dir + d_vcr = W1Util::get_data_files(mon_dr); + size = d_vcr.size(); + if (size > 0) { + f_name = d_vcr.at(size - 1); + f_name = W1Util::concat_paths(mon_dr, f_name); + store = new StoreDay(f_name); + ret_val = store->get_newest_data(); + delete(store); + break; } } return ret_val; } -Data *DeviceData::find_newest_data(vector year_vector) { - int ii; +Data *DeviceData::find_newest_data(vector year_name_vector_param) { + string year_name; + int size; + Data *ret_val; + + ret_val = NULL; + size = year_name_vector_param.size(); + if (size > 0) { + // dirs are alphabetically sorted + year_name = year_name_vector_param.at(size - 1); + ret_val = find_newest_data(year_name); + } + return ret_val; +} + +Data *DeviceData::find_oldest_data(string year_name_param) { + int size; + unsigned int ii; string year_dr; string mon_dr; vector mon_vcr; - vector d_vcr; + vector dta_vcr; string f_name; + StoreDay *store; Data *ret_val; - int size; - StoreDay *store; ret_val = NULL; - size = year_vector.size(); + year_dr = W1Util::concat_paths(device_dir, year_name_param); + mon_vcr = W1Util::get_subdirectories(year_dr); + for (ii = 0; ii < mon_vcr.size(); ii++) { + mon_dr = mon_vcr.at(ii); + mon_dr = W1Util::concat_paths(year_dr, mon_dr); + // scan data files from month dir + dta_vcr = W1Util::get_data_files(mon_dr); + size = dta_vcr.size(); + if (size > 0) { + f_name = dta_vcr.at(0); + f_name = W1Util::concat_paths(mon_dr, f_name); + store = new StoreDay(f_name); + ret_val = store->get_oldest_data(); + delete(store); + break; + } + } + return ret_val; +} + +Data *DeviceData::find_oldest_data(vector year_name_vector_param) { + int size; + string year_name; + Data *ret_val; + + ret_val = NULL; + size = year_name_vector_param.size(); if (size > 0) { // dirs are alphabetically sorted - year_dr = year_vector.at(size - 1); - year_dr = W1Util::concat_paths(device_dir, year_dr); - mon_vcr = W1Util::get_subdirectories(year_dr); - for (ii = mon_vcr.size() - 1; ii >= 0; ii--) { - mon_dr = mon_vcr.at(ii); - mon_dr = W1Util::concat_paths(year_dr, mon_dr); - // scan data files from month dir - d_vcr = W1Util::get_data_files(mon_dr); - size = d_vcr.size(); - if (size > 0) { - f_name = d_vcr.at(size - 1); - f_name = W1Util::concat_paths(mon_dr, f_name); - store = new StoreDay(f_name); - ret_val = store->get_newest_data(); - delete(store); - break; - } - } + year_name = year_name_vector_param.at(0); + ret_val = find_oldest_data(year_name); } return ret_val; } @@ -212,6 +237,47 @@ DataRange *DeviceData::get_summary(Date *date_param, return ret_val; } +DataRange *DeviceData::get_yearly_summary(Date *date, + EnumSummaryCalculationType calc_type_param) { + return get_summary(date, calc_type_param, PERIOD_YEARLY); +} + +DataRange *DeviceData::get_yearly_summary(Date *date) { + DataRange *ret_val; + + if (device_config == NULL) { + device_config = Factory::get_device_config(device_id); + summary_calc_type = device_config->get_summary_calculation_type(); + } + ret_val = get_yearly_summary(date, summary_calc_type); + return ret_val; +} + +DataRange *DeviceData::get_yearly_summary(Date *start_date, + Date *end_date) { + DataRange *ret_val; + DataRange *data; + Date *date; + + ret_val = NULL; + date = start_date->clone(); + while(date->before_or_equal_year(end_date)) { + data = get_yearly_summary(date); + if (data != NULL) { + if (ret_val == NULL) { + ret_val = new DataRange(data); + } + else { + ret_val->add(data); + } + delete(data); + } + date->next_year(); + } + delete(date); + return ret_val; +} + DataRange *DeviceData::get_monthly_summary(Date *date, EnumSummaryCalculationType calc_type_param) { return get_summary(date, calc_type_param, PERIOD_MONTHLY); @@ -220,6 +286,10 @@ DataRange *DeviceData::get_monthly_summary(Date *date, DataRange *DeviceData::get_monthly_summary(Date *date) { DataRange *ret_val; + if (device_config == NULL) { + device_config = Factory::get_device_config(device_id); + summary_calc_type = device_config->get_summary_calculation_type(); + } ret_val = get_monthly_summary(date, summary_calc_type); return ret_val; } @@ -257,6 +327,10 @@ DataRange *DeviceData::get_daily_summary(Date *date, DataRange *DeviceData::get_daily_summary(Date *date) { DataRange *ret_val; + if (device_config == NULL) { + device_config = Factory::get_device_config(device_id); + summary_calc_type = device_config->get_summary_calculation_type(); + } ret_val = get_daily_summary(date, summary_calc_type); return ret_val; } @@ -294,6 +368,10 @@ DataRange *DeviceData::get_hourly_summary(Date *date, DataRange *DeviceData::get_hourly_summary(Date *date) { DataRange *ret_val; + if (device_config == NULL) { + device_config = Factory::get_device_config(device_id); + summary_calc_type = device_config->get_summary_calculation_type(); + } ret_val = get_hourly_summary(date, summary_calc_type); return ret_val; } @@ -342,7 +420,7 @@ DataRange *DeviceData::get_data(Date *start_date, switch(period) { case PERIOD_YEARLY: log_debug("get yearly summary: %s - %s\n", start_date->to_string().c_str(), end_date->to_string().c_str()); - ret_val = get_monthly_summary(start_date, end_date); + ret_val = get_yearly_summary(start_date, end_date); break; case PERIOD_MONTHLY: log_debug("get monthly summary\n");