#ifndef ENTITY_UPDATER_WIDGET_H #define ENTITY_UPDATER_WIDGET_H #include "repository_manager.h" #include "repository_result.h" #include "schema_metadata.h" #include "ui_entity_updater_widget.h" #include // Forward declaration class RepositoryResult; class TableInfo; class EntityUpdaterWidget : public QWidget, public Ui::EntityUpdaterWidget { Q_OBJECT private: QSqlField selectedForeignField_; QSqlRecord selectedPrimaryEntity_; qint32 primaryKey_; public: EntityUpdaterWidget(QWidget *parent = nullptr); void setupChildEntityFinderWidget(); void setupComboBoxCurrentTable(); void setupConnections(); void setupLabels(); void setupParentEntityFinderWidget(); void configureForeignKeyFinder(const QString &columnName, const QString &databaseTableName); void configureForeignKeyFinder(const QString &databaseTableName); void configurePrimaryKeyFinder(const QString &databaseTableName); private slots: void onColumnSelected(int columnIndex); void onForeignFieldRetrieved(const QSqlField &field); void onPrimaryEntityRetrieved(const QSqlRecord &entity); void onPrimaryFieldRetrieved(const QSqlField &field); void onPushButtonUpdateClicked(); void onTableSelected(int tableIndex); private: QModelIndex findIndexByColumn(QAbstractItemModel *model, int column, const QVariant &value); bool isColumnsEqual(const QString &column); qint32 actualForeignKey(const QString &columnName); void processUpdateResult(const RepositoryResult &result); void showMessageDialog(const RepositoryResult &result, const QString &successMessage); private: template void processEntityUpdate(RepositoryResult &resultOut); template Repository *currentRepository(); template RepositoryResult updateEntity(); template ValueType actualColumnValue(const QString &columnName); }; template Repository *EntityUpdaterWidget::currentRepository() { SchemaMetadata metadata = SchemaMetadata::defaultSchema(); const QString &databaseTableName = comboBoxCurrentTable->currentData().toString(); return RepositoryManager::instance().getRepositoryAs( metadata.repositoryTableName(databaseTableName)); } #endif // ENTITY_UPDATER_WIDGET_H