Files
beerlog/models/basemodel.cpp

94 lines
2.0 KiB
C++

#include "basemodel.h"
#include "services/beerservice.h"
BaseModel::BaseModel(const QString &entity, QObject *parent) : QObject{parent},
m_entity(entity)
{
Q_ASSERT(!m_entity.isEmpty());
m_dumpService.setEntityName(m_entity);
m_data = m_dumpService.loadMap();
service()->connectListener(this);
service()->sendCommand(m_entity, BeerService::ActionGet);
}
BaseModel::~BaseModel()
{
m_dumpService.dump(m_data);
service()->removeListener(this);
}
QString BaseModel::entity() const
{
return m_entity;
}
QVariantList BaseModel::items() const
{
return m_data.values();
}
QVariantMap BaseModel::item(const QString &itemId) const
{
return m_data.value(itemId).toMap();
}
QVariant BaseModel::itemProperty(const QString &itemId, const QString &propertyName, const QVariant &def) const
{
return item(itemId).value(propertyName, def);
}
void BaseModel::submitItem(const QVariantMap &item) const
{
QString itemId = item.value("id").toString();
if (itemId.isEmpty()) {
service()->sendCommand(entity(), BeerService::ActionAdd, item);
} else {
QVariantMap modItem = this->item(itemId);
for (auto it = item.constBegin(); it != item.constEnd(); ++it) {
modItem[it.key()] = it.value();
}
service()->sendCommand(entity(), BeerService::ActionModify, modItem);
}
}
void BaseModel::deleteItem(const QString &itemId) const
{
service()->sendCommand(entity(), BeerService::ActionDelete, QVariantMap { { "id", itemId } });
}
void BaseModel::created(const QVariant &data)
{
modified(data);
}
void BaseModel::modified(const QVariant &data)
{
QVariantMap d = data.toMap();
m_data[d.value("id").toString()] = d;
emit dataChanged();
}
void BaseModel::deleted(const QVariant &data)
{
QString id = data.toString();
m_data.remove(id);
emit dataChanged();
}
void BaseModel::received(const QVariant &data)
{
m_data = data.toMap();
emit dataChanged();
}
BeerService *BaseModel::service() const
{
return BeerService::instance();
}