/* * 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 #include #include #include //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& blocks); int GetInputBufferStatements(std::vector& statements); int GetOutputBufferStatements(std::vector& statements); int GetNewBufferStatements(std::vector& statements); int GetReduceInitializationBlocks(std::vector& blocks); int GetReduceNewBufferStatements(std::vector& statements); int GetReduceInputBufferStatements(std::vector& statements); int GetReduceOutputBufferStatements(std::vector& statements); private: CWorkFlowFile* workflow; std::vector* generalModules; std::vector* generalConnections; std::vector* reduceModules; std::vector* reduceConnections; //目前多波工作流支持的多波参数类型 std::vector 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 *, multimap *, vector *); /** * @brief 获取拆分后的模块连接信息列表 * @param 未拆分的模块连接信息列表 * @param 拆分后模块与之前的对应关系 * @param 拆分后的模块连接信息列表 */ void GetComponentConnections(vector *, multimap *, vector *); /** * @brief 将容器T2中的元素合并到T1中 * @param 目标容器 * @param 源容器 */ template void MergeCollectionToFirst(T1 *t1, T2 *t2); void CopyModules2Collection(vector *src, vector *dest); void CopyConns2Collection(vector *src, vector *dest); int GetCommonInitializationBlocks(std::vector& blocks, std::vector* modules, std::vector* connections); int GetCommonNewBufferStatements(std::vector& statements, std::vector* modules, std::vector* connections, const std::string& realOutputModuleClassname); int GetCommonInputBufferStatements(std::vector& statements, std::vector* modules, std::vector* connections); int GetCommonOutputBufferStatements(std::vector& statements, std::vector* modules, std::vector* 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 *, vector *); void Print(); std::string GetBufferName(CModuleConnection* connection); std::string GetLeafBufferName(CModuleInformation* moduleInfo); std::string GetModuleVariableName(CModuleInformation* moduleInfo); }; } } #endif