first commit
This commit is contained in:
83
procedure/procedureparser.h
Normal file
83
procedure/procedureparser.h
Normal file
@@ -0,0 +1,83 @@
|
||||
#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);
|
||||
};
|
||||
Reference in New Issue
Block a user