/** * @file ModuleParameter.h * @brief 文件定义了与模块参数相关的类 * @author dev * @date 2011-4-29 */ #ifndef PAI_FRAME_MODULEAPI_MODULEPARAMETER_H #define PAI_FRAME_MODULEAPI_MODULEPARAMETER_H #include "Turtle.h" #include "ParameterItem.h" #include #include namespace Json { class Value; } namespace pai { namespace module { /** * @class CModuleParameter * @brief 类CModuleParameter封装模块所需要的参数信息,它是所有模块参数的基类。 */ class PAI_MODULE_EXPORT CModuleParameter { public: /** * @brief 构造函数 */ CModuleParameter(); /** * @brief 拷贝构造函数 */ CModuleParameter(const CModuleParameter& srcParameter); /** * @brief 虚析构函数 */ virtual ~CModuleParameter(); /** * @brief 克隆函数 * @param srcParameter 克隆的对象 */ void Clone(const CModuleParameter& srcParameter); /** * @brief 重载相等符号==,判断两个参数是否相等 * @param[in] otherItem 对比对象 */ bool operator==(const CModuleParameter& otherParameter) const; /** * @brief 设置工作流id * @param[in] id 工作流id */ virtual void SetWorkflowId(std::string id) { workflow_id = id; } /** * @brief 获取工作流id */ virtual std::string GetWorkflowId() { return workflow_id; } /** * @brief 设置本地临时目录 */ void SetLocalTempDirectory(std::string tmp_dir) { local_tmp_dir = tmp_dir; } /** * @brief 获取本地临时目录 * @return 本地临时目录 */ std::string GetLocalTempDirectory() const{ return local_tmp_dir; } /** * @brief 设置HDFS临时目录 * @param[in] tmp_dir HDFS临时目录 */ void SetHDFSTempDirectory(std::string tmp_dir) { hdfs_tmp_dir = tmp_dir; } /** * @brief 获取HDFS临时目录 * @return 获取HDFS临时目录 */ std::string GetHDFSTempDirectory() const { return hdfs_tmp_dir; } /** * @brief 添加参数项 * @param[in] item 参数项 */ void AddParameterItem(const CParameterItem& item); /** * @brief 添加参数项 * @param[in] paramId 是参数名称 * @param[in] paramType 是参数类型 * @param[in] paramStringValue 是参数值 */ void AddParameterItem(QString& paramId,const ParameterType paramType,const std::string& paramStringValue); void AddParameterItem(const std::string& paramId,const ParameterType paramType,const std::string& paramStringValue); /** * @brief 删除参数项 * @param paramId是参数Id */ void RemoveParameterItem(const std::string& paramId); /** * @brief 获取参数项的个数 * @return 参数项的个数 */ int GetParameterItemCount() const; /** * @brief 获取参数项索引 * @param[in] strItemName 参数名字 * @return 参数项索引 */ int GetParamItemIndex(const std::string& strItemName) const; /** * @brief 获取参数项 * @param[in] iIndex 参数索引 * @return 参数项CParameterItem指针 */ CParameterItem* GetParameterItem(int iIndex); /** * @brief 获取参数项 * @param[in] strItemName 参数名字 * @return 参数项CParameterItem指针 */ CParameterItem* GetParameterItem(const std::string& strItemName); /** * @brief 获取所有的参数项 * @return 所有参数项的集合 */ std::vector GetParameterItems() const; /** * @brief 获取参数项的所有分类名字 * @param[out] vecCategoryNames 所有类型名字的集合 */ void GetCategoryNames(std::vector& vecCategoryNames); /** * @brief 得到根参数项 * @return 根参数项CCompositeParameterItem */ CCompositeParameterItem* GetRootParameterItem() const; /** * @brief 根据参数项的类别获取参数项 * @param[in] strCategory 参数项类别名称 * @return 符合条件的参数项集合 */ std::vector GetParameterItemsByCategory(const std::string& strCategory) const; //REMOVEME void SetClass(std::string clazz) { m_strClass = clazz; } std::string GetClass() const { return m_strClass; } /** * @brief 从Json文件中读取参数信息 * @param bAmendID 是否需要修改ID及其子孙参数的参数项ID * @exception pai::error::runtime_error 读取失败时抛出异常 */ // void LoadFromJson(const Json::Value& root,bool bAmendID = false); /** * @brief 将参数信息存入Json文件中 * @param root ‘Module’节点 * @exception pai::error::runtime_error 保存失败时抛出异常 */ // void SaveToJson(Json::Value& root); /** * @brief 打印参数内容 */ // void Print(); /** * @brief 判断所有参数项是否已经都被赋了可用的值 * @param[out] completeIndex 参数所有参数项的填写完备程度 * @return 所有参数项已经都被赋了可用的值则返回true,否则返回false */ bool IsReady(ParameterCompleteIndex& completeIndex) const; /** * @brief 设置工作流导入时的项目工区路径 * @param[in] importPath 工作流导入时的项目工区路径 */ void SetImportPath(std::string importPath); private: /** * @brief 从Json节点中读取参数项信息 * @param paramJsonNode Json节点,对应一个参数项 * @param pParentItem 上述Json节点对应的参数项的父参数项 * @param bAmendID 是否需要修改ID及其子孙参数的参数项ID */ // void _LoadFromJson(const Json::Value& paramJsonNode, CCompositeParameterItem* pParentItem,bool bAmendID); /** * @brief 将参数项信息存入Json节点中 * @param paramJsonNode Json节点,对应一个参数项 * @param pParentItem 上述Json节点对应的参数项 */ // void _SaveToJson(Json::Value& paramJsonNode, CParameterItem* pItem); protected: std::string workflow_id; /**< 工作流对应的标识符*/ std::string local_tmp_dir; /**< 工作流对应的本地临时读写目录*/ std::string hdfs_tmp_dir; /**< 工作流对应的HDFS临时读写目录*/ CCompositeParameterItem m_rootParameterItem; /**< 根参数项 */ //REMOVEME std::string m_strClass; private: std::string m_importPath; //工作流导入时的项目工区路径 }; } } #endif