logplus/Workflow/WFEngine/WorkflowEngine/include/TemplateInformationImpl.h
2026-01-16 17:18:41 +08:00

120 lines
4.5 KiB
C++

/*
* TemplateInformationImpl.h
*
* Created on: Jul 29, 2011
* Author: dev
*/
#ifndef PAI_FRAME_WORKFLOWENGINE_CTEMPLATEINFORMATIONIMPL_H
#define PAI_FRAME_WORKFLOWENGINE_CTEMPLATEINFORMATIONIMPL_H
#include "Module.h"
#include "TemplateInformation.h"
#include "WorkFlowFile.h"
#include "GenerateInfo.h"
#include <sstream>
#include <string>
#include <set>
#include <map>
//using workflow::CWorkFlowFile;
//using workflow::CModuleInformation;
namespace pai {
namespace workflow {
class CTemplateInformationImpl: public CTemplateInformation {
public:
CTemplateInformationImpl(CGenerateInfo* info);
virtual ~CTemplateInformationImpl();
bool IsParallelWorkflow();
bool IsMultiwaveWorkflow();
int GetSInitializationBlocks(std::vector<SInitializationBlock>& blocks);
int GetInputBufferStatements(std::vector<SSettingInputBufferStatement>& statements);
int GetOutputBufferStatements(std::vector<SSettingOutputBufferStatement>& statements);
int GetNewBufferStatements(std::vector<SNewBufferStatement>& statements);
int GetReduceInitializationBlocks(std::vector<SInitializationBlock>& blocks);
int GetReduceNewBufferStatements(std::vector<SNewBufferStatement>& statements);
int GetReduceInputBufferStatements(std::vector<SSettingInputBufferStatement>& statements);
int GetReduceOutputBufferStatements(std::vector<SSettingOutputBufferStatement>& statements);
private:
CWorkFlowFile* workflow;
std::vector<CModuleInformation*>* generalModules;
std::vector<CModuleConnection*>* generalConnections;
std::vector<CModuleInformation*>* reduceModules;
std::vector<CModuleConnection*>* reduceConnections;
//目前多波工作流支持的多波参数类型
std::vector<std::string> multiwaveParamTypes;
private:
CTemplateInformationImpl(const CTemplateInformationImpl &);
CTemplateInformationImpl & operator=(const CTemplateInformationImpl &);
std::string Int2String(int);
std::string CapitalizeFirstLetter(std::string);
/**
* @brief 获取拆分后的模块信息列表,并保存拆分后的模块与未拆分时的对应关系
* @param 未拆分的模块信息列表
* @param 拆分后模块与之前的对应关系
* @param 拆分后的模块信息列表
*/
void GetComponentModules(vector<CModuleInformation *> *, multimap<int, int> *, vector<CModuleInformation *> *);
/**
* @brief 获取拆分后的模块连接信息列表
* @param 未拆分的模块连接信息列表
* @param 拆分后模块与之前的对应关系
* @param 拆分后的模块连接信息列表
*/
void GetComponentConnections(vector<CModuleConnection *> *, multimap<int, int> *, vector<CModuleConnection *> *);
/**
* @brief 将容器T2中的元素合并到T1中
* @param 目标容器
* @param 源容器
*/
template<class T1, class T2>
void MergeCollectionToFirst(T1 *t1, T2 *t2);
void CopyModules2Collection(vector<CModuleInformation *> *src, vector<CModuleInformation *> *dest);
void CopyConns2Collection(vector<CModuleConnection *> *src, vector<CModuleConnection *> *dest);
int GetCommonInitializationBlocks(std::vector<SInitializationBlock>& blocks,
std::vector<CModuleInformation*>* modules,
std::vector<CModuleConnection*>* connections);
int GetCommonNewBufferStatements(std::vector<SNewBufferStatement>& statements,
std::vector<CModuleInformation*>* modules,
std::vector<CModuleConnection*>* connections,
const std::string& realOutputModuleClassname);
int GetCommonInputBufferStatements(std::vector<SSettingInputBufferStatement>& statements,
std::vector<CModuleInformation*>* modules,
std::vector<CModuleConnection*>* connections);
int GetCommonOutputBufferStatements(std::vector<SSettingOutputBufferStatement>& statements,
std::vector<CModuleInformation*>* modules,
std::vector<CModuleConnection*>* connections,
const std::string& realOutputModuleClassname);
/**
* 获取树形结构的ModuleParameter
*/
void GetModuleParameterStatment(CModuleParameter* parameter, SInitializationBlock& initblockstatment);
void GetModuleParameterStatment(CParameterItem* item, SModuleParameterStatment& statment,const std::string& parentItemVariableName,const std::string& moduleVariableName,int& index);
std::string GetParamItemStringType(const CParameterItem* item);
void SeparateMultiwaveWorkflow(vector<CModuleInformation*> *, vector<CModuleConnection*> *);
void Print();
std::string GetBufferName(CModuleConnection* connection);
std::string GetLeafBufferName(CModuleInformation* moduleInfo);
std::string GetModuleVariableName(CModuleInformation* moduleInfo);
};
}
}
#endif