77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
#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 <QSqlField>
|
|
|
|
// 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 <const char *DatabaseTableName>
|
|
void processEntityUpdate(RepositoryResult &resultOut);
|
|
|
|
template <typename Repository> Repository *currentRepository();
|
|
|
|
template <typename Repository> RepositoryResult updateEntity();
|
|
|
|
template <typename ValueType>
|
|
ValueType actualColumnValue(const QString &columnName);
|
|
};
|
|
|
|
template <typename Repository>
|
|
Repository *EntityUpdaterWidget::currentRepository() {
|
|
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
|
|
|
|
const QString &databaseTableName =
|
|
comboBoxCurrentTable->currentData().toString();
|
|
|
|
return RepositoryManager::instance().getRepositoryAs<Repository>(
|
|
metadata.repositoryTableName(databaseTableName));
|
|
}
|
|
|
|
#endif // ENTITY_UPDATER_WIDGET_H
|