00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "service.hpp"
00024 #include <algorithm>
00025 #include <cassert>
00026 #include <iostream>
00027
00028 using namespace std;
00029
00030 class FilterItem : public ItemFunctor {
00031 KitModel& m_model;
00032 public:
00033 FilterItem(KitModel& model) : ItemFunctor(), m_model(model) {}
00034 bool operator()(Item& item) {
00035 return m_model.filter(item.get_checked());
00036 }
00037
00038 };
00039
00040
00044 Service::Service(KitListDao& dao) : m_dao(dao), m_model(0) {
00045 m_model = load_model();
00046 }
00047
00048
00049 Service::~Service() {
00050 if (m_model)
00051 delete m_model;
00052 }
00053
00054
00058 KitModel* Service::load_model() {
00059 return m_dao.get_model();
00060 }
00061
00062
00070 void Service::open_as_xml(const Glib::ustring& filename) {
00071 #ifdef XML_DAO
00072 delete m_model;
00073 m_model = ((XmlDao&) m_dao).get_model(filename);
00074 #endif
00075 }
00076
00077
00083 void Service::create_default_model() {
00084 delete m_model;
00085 #ifdef XML_DAO
00086 ((XmlDao&) m_dao).set_filename("");
00087 m_model = m_dao.get_model();
00088 #else
00089 m_model = new KitModel();
00090 m_model->reset();
00091 #endif
00092 }
00093
00094
00098 void Service::save() {
00099 assert(m_model);
00100 m_dao.save_model(m_model);
00101 }
00102
00103
00111 void Service::save_as_xml(const Glib::ustring& filename) {
00112 #ifdef XML_DAO
00113 ((XmlDao&) m_dao).save_model(m_model, filename);
00114 #else
00115
00116 XmlDao xmldao;
00117 xmldao.save_model(m_model, filename);
00118 #endif
00119 }
00120
00121
00125 ModelItem* Service::find_item(long id) {
00126 return m_model->find_item(id);
00127 }
00128
00129
00133 ModelCategory* Service::find_category(long cat_id) {
00134 return m_model->find_category(cat_id);
00135 }
00136
00137
00144 void Service::copy_items(const ModelItemContainer& items, long cat_id) {
00145 assert(m_model);
00146 m_model->set_dirty(true);
00147 m_model->copy_items(items, cat_id);
00148 }
00149
00150
00159 Item* Service::create_item(long cat_id) {
00160 assert(m_model);
00161 m_model->set_dirty(true);
00162 ModelItem* item = new ModelItem;
00163 item->set_id(get_next_item_id());
00164 item->set_new_flag(true);
00165 item->set_dirty(true);
00166 if (cat_id < 0)
00167 m_model->add_item(item);
00168 else
00169 m_model->add_item(item, cat_id);
00170 return item;
00171 }
00172
00173
00180 bool Service::delete_item(long id) {
00181 bool retval = false;
00182 assert(m_model);
00183 ModelItem* item = m_model->find_item(id);
00184 if (item) {
00185 m_model->set_dirty(true);
00186 item->set_dirty(true);
00187 item->set_deleted(true);
00188 retval = true;
00189 }
00190 return retval;
00191 }
00192
00193
00200 bool Service::delete_category(long cat_id) {
00201 bool retval = false;
00202 assert(m_model);
00203 ModelCategory* category = m_model->find_category(cat_id);
00204 if (category) {
00205 m_model->set_dirty(true);
00206 category->set_dirty(true);
00207 category->set_deleted(true);
00208 retval = true;
00209 }
00210 return retval;
00211 }
00212
00213
00220 Category* Service::create_category() {
00221 assert(m_model);
00222 m_model->set_dirty(true);
00223 ModelCategory* category = new ModelCategory;
00224 category->set_id(get_next_category_id());
00225 category->set_new_flag(true);
00226 category->set_dirty(true);
00227 m_model->add_category(category);
00228 return category;
00229 }
00230
00231
00238 void Service::select_items(ModelItemContainer* items, bool checked) {
00239 m_model->set_dirty();
00240 for (ModelItemIter i = items->begin(); i != items->end(); ++i) {
00241 (*i)->set_dirty();
00242 (*i)->set_checked(checked);
00243 }
00244 }
00245
00246
00252 void Service::toggle_selected_items(ModelItemContainer* items) {
00253 m_model->set_dirty();
00254 for (ModelItemIter i = items->begin(); i != items->end(); ++i) {
00255 (*i)->set_dirty();
00256 (*i)->set_checked(!(*i)->get_checked());
00257 }
00258 }
00259
00260
00264 void Service::set_model_dirty(bool flag) {
00265 assert(m_model);
00266 if (m_model)
00267 m_model->set_dirty(flag);
00268 }
00269
00270
00282 bool Service::update_item(long id, const string description, bool checked) {
00283 bool retval = false;
00284 assert(m_model);
00285 ModelItem* item = m_model->find_item(id);
00286 if (item) {
00287 item->set_description(description);
00288 item->set_checked(checked);
00289 item->set_dirty(true);
00290 retval = true;
00291 }
00292 return retval;
00293 }
00294
00295
00305 ItemContainer* Service::get_items(long cat_id) {
00306 assert(m_model);
00307 ItemContainer* retval = 0;
00308 if (cat_id == -1) {
00309 retval = m_model->get_all_items();
00310 } else {
00311 ModelCategory* cat = m_model->find_category(cat_id);
00312 if (cat) {
00313 retval = cat->get_items();
00314 }
00315 }
00316 return retval;
00317 }
00318
00319
00331 ItemContainer* Service::get_filtered_items(long cat_id) {
00332 assert(m_model);
00333 ItemContainer* retval = 0;
00334 FilterItem fi = FilterItem(*m_model);
00335 if (cat_id == -1) {
00336 retval = m_model->get_all_items(fi);
00337 } else {
00338 ModelCategory* cat = m_model->find_category(cat_id);
00339 if (cat) {
00340 retval = cat->get_items(fi);
00341 }
00342 }
00343 if (retval)
00344 sort(retval->begin(), retval->end(), ItemCompareName());
00345 return retval;
00346 }
00347
00348
00354 CategoryContainer* Service::get_categories() {
00355 assert(m_model);
00356 CategoryContainer* retval = m_model->get_categories();
00357 return retval;
00358 }
00359
00360
00364 long Service::get_next_item_id() {
00365 return m_dao.get_next_item_id();
00366 }
00367
00368
00372 long Service::get_next_category_id() {
00373 return m_dao.get_next_category_id();
00374 }