84 lines
2.7 KiB
C++
84 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include <QList>
|
|
#include <QMap>
|
|
#include <QString>
|
|
#include <QVariant>
|
|
|
|
#include <memory>
|
|
|
|
#include <ryml.hpp>
|
|
|
|
// Include existing data structures
|
|
#include "proceduredata.h"
|
|
|
|
class ProcedureParser : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit ProcedureParser(QObject *parent = nullptr);
|
|
~ProcedureParser();
|
|
|
|
// Configuration file loading and parsing
|
|
bool loadConfig(const QString &filePath);
|
|
ProcedureConfig parseProcedureConfig();
|
|
|
|
// Configuration validation
|
|
bool validateConfig();
|
|
QStringList getValidationErrors() const;
|
|
|
|
// Table definition extraction
|
|
TableDefinition getTableDefinition(const QString &tableRef);
|
|
QMap<QString, TableDefinition> getAllTableDefinitions();
|
|
|
|
// Lazy parsing - parse TestTaskGroup stages on demand (Stage 1: load stage
|
|
// metadata)
|
|
bool parseTestTaskGroupStages(TestTaskGroup &group, const QString &groupId);
|
|
|
|
// Lazy parsing - parse TestActivityGroup actions on demand (Stage 2: load
|
|
// actions)
|
|
bool parseTestActivityGroupActions(TestActivityGroup &group, const QString &groupId);
|
|
|
|
signals:
|
|
void configLoaded(const QString &filePath);
|
|
void configError(const QString &error, int line, int column);
|
|
|
|
private:
|
|
std::unique_ptr<ryml::Tree> tree;
|
|
QMap<QString, ryml::ConstNodeRef> referenceCache;
|
|
QMap<QString, ryml::ConstNodeRef> stageNodeCache;
|
|
QMap<QString, ryml::ConstNodeRef> activityNodeCache; // Cache for lazy parsing of TestTaskGroups
|
|
QStringList validationErrors;
|
|
QString configFilePath;
|
|
std::string yamlContent; // Store YAML content for in-place parsing
|
|
|
|
// File parsing methods
|
|
bool parseFile(const QString &filePath);
|
|
|
|
// Reference handling
|
|
void buildReferenceCache();
|
|
ryml::ConstNodeRef resolveReference(const QString &ref);
|
|
QString extractRefPath(const ryml::ConstNodeRef &node);
|
|
|
|
// Validation methods
|
|
bool validateActivitySequence();
|
|
bool validateTableDefinitions();
|
|
|
|
// Parsing helper methods
|
|
QString nodeToQString(const ryml::ConstNodeRef &node);
|
|
QVariant nodeToQVariant(const ryml::ConstNodeRef &node);
|
|
QVariantMap nodeToQVariantMap(const ryml::ConstNodeRef &node);
|
|
QVariantList nodeToQVariantList(const ryml::ConstNodeRef &node);
|
|
|
|
// Structure parsing methods
|
|
FieldDefinition parseFieldDefinition(const ryml::ConstNodeRef &node);
|
|
TableDefinition parseTableDefinition(const ryml::ConstNodeRef &node);
|
|
StaticCell parseStaticCell(const ryml::ConstNodeRef &node);
|
|
FieldSelector parseFieldSelector(const ryml::ConstNodeRef &node);
|
|
TestAction parseTestAction(const ryml::ConstNodeRef &node);
|
|
TestActivityGroup parseTestActivityGroup(const ryml::ConstNodeRef &node);
|
|
TestTaskGroup parseTestTaskGroup(const ryml::ConstNodeRef &node);
|
|
ResultDisplay parseResultDisplay(const ryml::ConstNodeRef &node);
|
|
};
|