logplus/Workflow/WFEngine/WorkflowEngine/include/JSONWorkflowFileParser.h

210 lines
7.1 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/**
* @file JSONWorkflowFileParser.h
* @brief json格式的工作流解析器
*
* @author
* @date 2011-7-27
*/
#ifndef PAI_FRAME_WORKFLOWENGINE_JSONWORKFLOWFILEPARSER_H
#define PAI_FRAME_WORKFLOWENGINE_JSONWORKFLOWFILEPARSER_H
#include <string>
#include <iostream>
#include <fstream>
#include <assert.h>
#include "json/json.h"
#include "ModuleInformation.h"
#include "ModuleParameter.h"
#include "ModuleParameterValue.h" // deprecated
#include "ParameterItem.h"
#include "ModuleConnection.h"
#include "WorkflowFileParser.h"
#include "Module.h"
#include "ModuleMetaData.h"
using namespace Json;
using namespace pai::module;
namespace pai {
namespace workflow {
/**
* @brief Json格式工作流文件解析器类
*
* @ref CWorkflowFileParser的子类
* Json格式工作流的:,
*
*
*/
class PAI_WORKFLOWENGINE_EXPORT CJSONWorkflowFileParser:public CWorkflowFileParser {
public:
/*
* @brief Json格式的工作流文件为@ref CWolkFlowFile对象
*
* @param[in] strFilePath
* @param[in/out] workFlowFile
* @pre CWolkFlowFile对象
*/
virtual bool Parse(const std::string& strFilePath,CWorkFlowFile* workFlowFile);
/*
* @brief Json格式的工作流文件对象
*
* errorMsg里
*
* @param[in] workFlowFile
* @param[in/out] errorMsg
* @pre errorMsg
* @return
*/
virtual bool CheckWorkFlowFile(CWorkFlowFile* workFlowFile,std::string& errorMsg);
/*
* @brief CWorkFlowFile对象到Json文件
*
* CheckWorkFlowFile校验
*
* @param[in] workFlowFile
* @param[in] strFilePath
*/
virtual bool Serialize(CWorkFlowFile* workFlowFile,const std::string& strFilePath);
virtual std::string Serialize(CWorkFlowFile* workFlowFile);
/*
* @brief module节点(jsoncpp类库)@ref CModuleInfomation对象
*
* @param[in] modInfoNode module节点
* @param[in/out] modInfo
*/
void ParseModInfo(const Json::Value& modInfoNode,CModuleInformation* modInfo);
/*
* workflowhelper使用
* connection去掉
* workflowheler操作发起的不需要
*/
virtual bool ParseFromString(const std::string& jsonStr, CWorkFlowFile* workFlowFile, bool isWorkflow=false);
public:
/**
* @brief
*/
void SetImportPath(const std::string& importPath);
private:
/*
* @brief root节点(jsoncpp类库)workFlowFile对象
*
* @param[in] rootNode root节点
* @param[in/out] workFlowFile
*/
void ParseWorkFlow(const Json::Value& rootNode,CWorkFlowFile* workFlowFile);
/*
* @brief modules节点(jsoncpp类库)workFlowFile对象
*
* @param[in] modInfosNode modules节点
* @param[in/out] workFlowFile
*/
void ParseModInfos(const Json::Value& modInfosNode,CWorkFlowFile* workFlowFile);
/*
* @brief parameter节点(jsoncpp类库)CModuleParameter对象
*
* @param[in] paramNode parameter节点
* @param[in/out] param
*/
void ParseModParam(const Json::Value& paramNode,CModuleParameter* param);
/*
* @brief parameter values节点(jsoncpp类库)CModuleParameter
*
* @param[in] parmValuesNode parameter values节点
* @param[in/out] param
*/
void ParseModParamValues(const Json::Value& parmValuesNode,CModuleParameter* param);
/*
* @brief parameter value节点(jsoncpp类库)CModuleParameterValue
*
* @param[in] paramValueNode parameter values节点
* @param[in/out] paramValue
*/
void ParseModParamValue(const Json::Value& paramValueNode,CModuleParameterValue* paramValue);
/*
* @brief module connections节点(jsoncpp类库)CModuleInformation
*
* @param[in] modConnectsNode module connections节点
* @param[in/out] workflow
*/
void ParseModConnects(const Json::Value& modConnectsNode,CWorkFlowFile* workflow);
/*
* @brief module connection节点(jsoncpp类库)CModuleConnection
*
* @param[in] modConnectNode module connection节点
* @param[in/out] connect
*/
void ParseModConnect(const Json::Value& modConnectNode,CModuleConnection* connect);
/*
* @brief ParamItem ()
*
* @param[in] paramValueNode param value
* @param[in/out] item new paramitem
*/
void TmpNewParamItem(const Json::Value& paramValueNode,CParameterItem& item);
bool CheckModuleInfo(CModuleInformation* modInfo,std::string& errorMsg);
bool CheckModuleParam(CModuleParameter* param,std::string& errorMsg);
bool CheckModuleParamValue(CModuleParameterValue* paramValue,std::string& errorMsg);
bool CheckModuleConnect(CModuleConnection* connect,std::string& errorMsg);
//should be one of "int", "float", "double", "std::string".
bool CheckParamValueType(const std::string& value);
/*
* @brief Json工作流的String字段是否没有赋值
*
* @param[in] str
*/
bool IsNotValue(const std::string& str);
/*
* @brief Json工作流的num字段是否没有赋值
*
* -1Json工作流格式后
*
* @param[in] num
*/
bool IsNotValue(int num);
bool IsGPUModule(CModule* module);
//TODO aiya std::string GetNodeDefaultStringValue(const Json::Value& node,const std::string& key,const std::string& defaultValue = JSON_STRING_FIELD_NULL);
std::string GetNodeDefaultStringValue(const Json::Value& node,const std::string& key,const std::string& defaultValue = "");
int GetNodeDefaultIntValue(const Json::Value& node,const std::string& key);
bool GetNodeDefaultBoolValue(const Json::Value& node,const std::string& key,const bool value = false);
bool IsEmptyArray(const Json::Value& node);
void SerializeModules(CWorkFlowFile* workFlowFile,Json::Value& modulesNode);
void SerializeModule(CModuleInformation* moduleInfo,Json::Value& moduleNode);
void SerializeConnections(CWorkFlowFile* workFlowFile,Json::Value& connectionsNode);
void SerializeConnection(CModuleConnection* connect,Json::Value& connectNode);
/*
*
*/
void ProccessRealTimeModule(CWorkFlowFile* wokflowFile, bool isDeleteConn);
public:
CJSONWorkflowFileParser();
virtual ~CJSONWorkflowFileParser();
private:
std::string m_importPath; //工作流导入时的项目工区路径
std::string exceptionModule;
};
}
}
#endif