basemodel.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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::submitItem(const QVariantMap &item) const
  31. {
  32. QString itemId = item.value("id").toString();
  33. if (itemId.isEmpty()) {
  34. service()->sendCommand(entity(), BeerService::ActionAdd, item);
  35. } else {
  36. QVariantMap modItem = this->item(itemId);
  37. for (auto it = item.constBegin(); it != item.constEnd(); ++it) {
  38. modItem[it.key()] = it.value();
  39. }
  40. service()->sendCommand(entity(), BeerService::ActionModify, modItem);
  41. }
  42. }
  43. void BaseModel::deleteItem(const QString &itemId) const
  44. {
  45. service()->sendCommand(entity(), BeerService::ActionDelete, QVariantMap { { "id", itemId } });
  46. }
  47. void BaseModel::created(const QVariant &data)
  48. {
  49. modified(data);
  50. }
  51. void BaseModel::modified(const QVariant &data)
  52. {
  53. QVariantMap d = data.toMap();
  54. m_data[d.value("id").toString()] = d;
  55. emit dataChanged();
  56. }
  57. void BaseModel::deleted(const QVariant &data)
  58. {
  59. QString id = data.toString();
  60. m_data.remove(id);
  61. emit dataChanged();
  62. }
  63. void BaseModel::received(const QVariant &data)
  64. {
  65. m_data = data.toMap();
  66. emit dataChanged();
  67. }
  68. BeerService *BaseModel::service() const
  69. {
  70. return BeerService::instance();
  71. }