basemodel.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "basemodel.h"
  2. #include "services/beerservice.h"
  3. BaseModel::BaseModel(const QString &entity, QObject *parent) : QObject{parent},
  4. m_entity(entity)
  5. {
  6. Q_ASSERT(!m_entity.isEmpty());
  7. m_dumpService.setEntityName(m_entity);
  8. m_data = m_dumpService.loadMap();
  9. service()->connectListener(this);
  10. service()->sendCommand(m_entity, BeerService::ActionGet);
  11. }
  12. BaseModel::~BaseModel()
  13. {
  14. m_dumpService.dump(m_data);
  15. service()->removeListener(this);
  16. }
  17. QString BaseModel::entity() const
  18. {
  19. return m_entity;
  20. }
  21. QVariantList BaseModel::items() const
  22. {
  23. return m_data.values();
  24. }
  25. QVariantMap BaseModel::item(const QString &itemId) const
  26. {
  27. return m_data.value(itemId).toMap();
  28. }
  29. QVariant BaseModel::itemProperty(const QString &itemId, const QString &propertyName, const QVariant &def) const
  30. {
  31. return item(itemId).value(propertyName, def);
  32. }
  33. void BaseModel::submitItem(const QVariantMap &item) const
  34. {
  35. QString itemId = item.value("id").toString();
  36. if (itemId.isEmpty()) {
  37. service()->sendCommand(entity(), BeerService::ActionAdd, item);
  38. } else {
  39. QVariantMap modItem = this->item(itemId);
  40. for (auto it = item.constBegin(); it != item.constEnd(); ++it) {
  41. modItem[it.key()] = it.value();
  42. }
  43. service()->sendCommand(entity(), BeerService::ActionModify, modItem);
  44. }
  45. }
  46. void BaseModel::deleteItem(const QString &itemId) const
  47. {
  48. service()->sendCommand(entity(), BeerService::ActionDelete, QVariantMap { { "id", itemId } });
  49. }
  50. void BaseModel::created(const QVariant &data)
  51. {
  52. modified(data);
  53. }
  54. void BaseModel::modified(const QVariant &data)
  55. {
  56. QVariantMap d = data.toMap();
  57. m_data[d.value("id").toString()] = d;
  58. emit dataChanged();
  59. }
  60. void BaseModel::deleted(const QVariant &data)
  61. {
  62. QString id = data.toString();
  63. m_data.remove(id);
  64. emit dataChanged();
  65. }
  66. void BaseModel::received(const QVariant &data)
  67. {
  68. m_data = data.toMap();
  69. emit dataChanged();
  70. }
  71. BeerService *BaseModel::service() const
  72. {
  73. return BeerService::instance();
  74. }