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<string> year_vector) {
- unsigned int ii;
- string year_dr;
+Data *DeviceData::find_newest_data(string year_name_param) {
+ int ii;
string mon_dr;
vector<string> mon_vcr;
- vector<string> dta_vcr;
+ vector<string> 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<string> year_vector) {
- int ii;
+Data *DeviceData::find_newest_data(vector<string> 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<string> mon_vcr;
- vector<string> d_vcr;
+ vector<string> 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<string> 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;
}
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);
+}
+
+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;
+}
+
+DataRange *DeviceData::get_monthly_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_month(end_date)) {
+ data = get_monthly_summary(date);
+ if (data != NULL) {
+ if (ret_val == NULL) {
+ ret_val = new DataRange(data);
+ }
+ else {
+ ret_val->add(data);
+ }
+ delete(data);
+ }
+ date->next_month();
+ }
+ delete(date);
+ return ret_val;
+}
+
DataRange *DeviceData::get_daily_summary(Date *date,
EnumSummaryCalculationType calc_type_param) {
return get_summary(date, calc_type_param, PERIOD_DAILY);
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;
}
}
delete(data);
}
- date->tomorrow();
+ date->next_day();
}
delete(date);
return ret_val;
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;
}
delete(data);
}
}
- date->tomorrow();
+ date->next_day();
}
delete(date);
return ret_val;
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_daily_summary(start_date, end_date);
+ ret_val = get_yearly_summary(start_date, end_date);
break;
case PERIOD_MONTHLY:
log_debug("get monthly summary\n");
- ret_val = get_daily_summary(start_date, end_date);
+ ret_val = get_monthly_summary(start_date, end_date);
break;
case PERIOD_DAILY:
log_debug("get daily summary\n");