94 lines
3.0 KiB
C++
94 lines
3.0 KiB
C++
/*
|
||
* WorkFlowFileWrapper.h
|
||
*
|
||
* Created on: Mar 19, 2015
|
||
* Author: dev
|
||
*/
|
||
|
||
#ifndef PAI_FRAME_WORKFLOWENGINE_WORKFLOWFILEWRAPPER_H
|
||
#define PAI_FRAME_WORKFLOWENGINE_WORKFLOWFILEWRAPPER_H
|
||
|
||
#include "WorkFlowFile.h"
|
||
#include "JobCreater.h"
|
||
#include "DecomposeAspect.h"
|
||
|
||
#include <map>
|
||
#include <vector>
|
||
#include <set>
|
||
|
||
namespace pai{
|
||
namespace workflow{
|
||
|
||
class CWorkFlowFileWrapper;
|
||
typedef map<int, vector<CWorkFlowFileWrapper*> >::iterator WrapperMapIter;
|
||
|
||
struct WorkflowCellInfo
|
||
{
|
||
int m_Id;
|
||
CWorkFlowFile *m_Workflow;
|
||
JobCreater *m_JobCreater;
|
||
|
||
set<int> m_ChildCellIds;
|
||
set<int> m_ParentCellIds;
|
||
|
||
vector<int> m_InModuleIds;
|
||
vector<int> m_OutModuleIds;
|
||
|
||
WorkflowCellInfo(): m_Id(), m_Workflow(NULL), m_JobCreater(NULL),
|
||
m_ChildCellIds(), m_ParentCellIds(), m_InModuleIds(), m_OutModuleIds()
|
||
{}
|
||
~WorkflowCellInfo()
|
||
{
|
||
//m_Workflow的内存由对应的WorkFlowFileWrapper在析构函数中释放
|
||
//释放m_JobCreater占用的内存
|
||
if (m_JobCreater != NULL)
|
||
{
|
||
delete m_JobCreater;
|
||
m_JobCreater = NULL;
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* @brief 拆分后的工作流依赖关系计算类;通过拆分过程中建立的各相关(父子关系)工作流输出、输入模块pair
|
||
* 来确定各子工作流的关系。如果一个工作流的拆分是基于最简单、单一功能工作流的内部拆分,那么因此产生的
|
||
* 工作流关系由对应的JobCreater确定,不需要创建输出、输入模块pair,如:PSTM类、地表一致性类、sort内部实现。
|
||
*/
|
||
class CWorkFlowFileWrapper
|
||
{
|
||
public:
|
||
CWorkFlowFileWrapper(CWorkFlowFile* workflowFile);
|
||
CWorkFlowFileWrapper& operator=(const CWorkFlowFileWrapper& wrapper);
|
||
virtual ~CWorkFlowFileWrapper();
|
||
|
||
CWorkFlowFile* GetWorkFlowFile();
|
||
void SetDecomposeAspects(const vector<DecomposeAspect *> &aspects);
|
||
vector<DecomposeAspect *>& GetDecomposeAspects();
|
||
void SetDecomposeWkfWrapper(const map<int, vector<CWorkFlowFileWrapper*> > &wkfWrappers);
|
||
map<int, vector<CWorkFlowFileWrapper*> >& GetDecomposeWkfWrapper();
|
||
|
||
void GetWorkflowCellInfoMap(map<int, WorkflowCellInfo *> &workflowCellMap);
|
||
std::vector<CWorkFlowFileWrapper*> GetLeafWkfWrapper();
|
||
|
||
private:
|
||
CWorkFlowFileWrapper(const CWorkFlowFileWrapper& wkfWrapper);
|
||
|
||
void IterateWrappers(CWorkFlowFileWrapper *wrapper, vector<DecomposeAspect *> &aspects, map<int, WorkflowCellInfo *> &workflowCellMap);
|
||
|
||
void GetIOModuleIds(CWorkFlowFile *workflow, vector<int> &iModuleIds, vector<int> &oModuleIds);
|
||
void GetJobCreater(CWorkFlowFile *workflow, JobCreater *&jobCreater);
|
||
void FillParentAndChildCellIds(vector<DecomposeAspect *> &aspects, map<int, WorkflowCellInfo *> &workflowCellMap, WorkflowCellInfo *info);
|
||
|
||
void InneralGetLeafWkfWrapper(CWorkFlowFileWrapper* wkfWrapper, std::vector<CWorkFlowFileWrapper*>& leafWkfList);
|
||
private:
|
||
int m_CurrentCellId;
|
||
|
||
CWorkFlowFile* m_WorkflowFile;
|
||
map<int, vector<CWorkFlowFileWrapper*> > m_DecomposeWkfWrapper;//存储拆分后的工作流容器,key表示工作流执行顺序
|
||
vector<DecomposeAspect *> m_DecomposeAspects; //记录拆分过程的拆分切面
|
||
};
|
||
}
|
||
}
|
||
|
||
#endif /* WORKFLOWFILEWRAPPER_H_ */
|