basemodel.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. service()->connectListener(this);
  8. service()->sendCommand(m_entity, BeerService::ActionGet);
  9. }
  10. BaseModel::~BaseModel()
  11. {
  12. service()->removeListener(this);
  13. }
  14. QString BaseModel::entity() const
  15. {
  16. return m_entity;
  17. }
  18. QVariantList BaseModel::items() const
  19. {
  20. return m_data.values();
  21. }
  22. QVariantMap BaseModel::item(const QString &itemId) const
  23. {
  24. return m_data.value(itemId).toMap();
  25. }
  26. QVariant BaseModel::itemProperty(const QString &itemId, const QString &propertyName, const QVariant &def) const
  27. {
  28. return item(itemId).value(propertyName, def);
  29. }
  30. void BaseModel::addItem(const QVariantMap &item) const
  31. {
  32. service()->sendCommand(entity(), BeerService::ActionAdd, item);
  33. }
  34. void BaseModel::deleteItem(const QString &itemId) const
  35. {
  36. service()->sendCommand(entity(), BeerService::ActionDelete, QVariantMap { { "id", itemId } });
  37. }
  38. void BaseModel::modifyItem(const QString &itemId, const QVariantMap &properties) const
  39. {
  40. QVariantMap item = this->item(itemId);
  41. for (auto it = properties.constBegin(); it != properties.constEnd(); ++it) {
  42. item[it.key()] = it.value();
  43. }
  44. service()->sendCommand(entity(), BeerService::ActionModify, item);
  45. }
  46. void BaseModel::created(const QVariant &data)
  47. {
  48. modified(data);
  49. }
  50. void BaseModel::modified(const QVariant &data)
  51. {
  52. QVariantMap d = data.toMap();
  53. m_data[d.value("id").toString()] = d;
  54. emit dataChanged();
  55. }
  56. void BaseModel::deleted(const QVariant &data)
  57. {
  58. QString id = data.toString();
  59. m_data.remove(id);
  60. emit dataChanged();
  61. }
  62. void BaseModel::received(const QVariant &data)
  63. {
  64. m_data = data.toMap();
  65. emit dataChanged();
  66. }
  67. BeerService *BaseModel::service() const
  68. {
  69. return BeerService::instance();
  70. }