Initial commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user