logplus/Workflow/WFEngine/Module/include/ParameterItem.h

641 lines
20 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/**
* @file ParameterItem.h
* @brief
* @author dev
* @date 2011-8-29
*/
#ifndef PAI_FRAME_MODULEAPI_PARAMETERITEM_H
#define PAI_FRAME_MODULEAPI_PARAMETERITEM_H
#include <string>
#include <sstream>
#include <map>
#include <vector>
#include "Turtle.h"
#include<iostream>
#include <QString>
namespace pai {
namespace module {
const std::string PARAMETER_CATEGORY_INPUT_TRACEFILTER = "TraceFilter";
const std::string PARAMETER_CATEGORY_INPUT_OUTPUT = "Output";
const std::string PARAMETER_CATEGORY_INPUT_FILES = "Files";
const std::string PARAMETER_CATEGORY_INPUT_ADDTIONAL = "Addtional";
const std::string PARAMETER_CATEGORY_INPUT_TIME = "Time";
/**
* @brief
*/
enum ParameterType
{
ParmType_INT, /**< Int类型参数 */
ParmType_FLOAT, /**< Float类型参数 */
ParmType_DOUBLE, /**< Double类型参数 */
ParmType_STRING, /**< String类型参数 */
ParmType_BOOL, /**< Bool类型参数 */
ParmType_LONG, /**< Long类型参数 */
ParmType_ARRAY, /**< Array类型参数 */
ParmType_CUSTOM /**< Custom类型参数 */
};
/**
* @brief
*/
enum ParameterInputType
{
TEXTEDIT, /**< 文本输入控件 */
FILESAVEBROWER, /**< 文件保存控件*/
COMBOX, /**< 带输入的下拉控件*/
RADIOBOX, /**< 单选框*/
CHECKBOX, /**< 复选框*/
RADIOBUTTON, /**< 单选按钮*/
FILEBROWSER, /**< 文件浏览*/
HDFSFILEBROWSER, /**< HDFS文件浏览*/
HDFSFILEEDITOR, /**< HDFS文件编辑*/
EDITABLEDGRID, /**< 编辑表格*/
SPINBOX, /**< */
DOUBLESPINBOX, /**< */
SPLIT, /**< 分隔*/
NONEINPUT, /**< 无输入*/
};
/**
* @brief
*/
enum AcceptDropType
{
None = 0,
SEISMIC = 1, ///<该输入控件允许拖拽进地震数据
SPS = 2, ///<该输入控件允许拖拽进SPS数据
VELOCITYPAIR = 4, ///<该输入控件允许拖拽进速度对数据
VELOCITYMODEL = 8, ///<该输入控件允许拖拽进速度模型数据
GRID = 16, ///<该输入控件允许拖拽进网格数据
MUTE = 32, ///<该输入控件允许拖拽进切除数据
TRACEEDIT = 64, ///<该输入控件允许拖拽进道编辑数据
FIRSTBREAK = 128, ///<该输入控件允许拖拽进初至拾取数据
STATICS = 256, ///<该输入控件允许拖拽进静校正数据
HORIZON = 512, ///<该输入控件允许拖拽进层位面数据
SPECTRUMDATA = 1024, ///<该输入控件允许拖拽速度普数据
SPATIALATTRIBUTE = 2048, ///<该输入控件允许拖拽属性数据
};
/**
* @brief ParameterCompleteIndex这个枚举用来刻画一个参数集合的填写完备程度
*/
enum ParameterCompleteIndex
{
ParamPerfect,///<参数全部可用
ParamWarning,///<存在空的必填项,在该必填项之后的参数项均未设置值
ParamError ///<存在空的必填项,该空的必填项之后的参数项却被设置了值
};
/**
* @class CParameterItem
* @brief
*/
class PAI_MODULE_EXPORT CParameterItem {
public:
/**
* @brief =
*/
CParameterItem& operator=(const CParameterItem& otherItem);
/**
* @brief
*/
CParameterItem();
/**
* @brief
* @param[in] srcItem
*/
CParameterItem(const CParameterItem& srcItem);
virtual ~CParameterItem();
/**
* @brief srcItem copy对象
* @param[in] srcItem copy来源
*/
void Copy(const CParameterItem& srcItem);
/**
* @brief ==,
* @param[in] otherItem
*/
bool operator==(const CParameterItem& otherItem) const;
/**
* @brief
* @param[in/out] bOK
* @return
*/
template <typename T>
T GetValue(T defaultValue =0 ,bool* bOK=0) const
{
T value = defaultValue;
std::stringstream ss(m_strValue);
ss >> value;
if(bOK)
{
*bOK = !(ss.fail());
}
return value;
};
template <typename T>
T* GetPointerValue() const
{
T* pointer;
long pointeraddress;
std::stringstream ss(m_strValue);
ss >> pointeraddress;
pointer=reinterpret_cast<T*>(pointeraddress);
return pointer;
};
template <typename T>
T ValueToT(ParameterType eType,T defaultValue,bool* bOK) const
{
if(m_eType==eType)
{
return GetValue<T>(defaultValue,bOK);
}
if(bOK!=NULL)
{
*bOK=false;
}
return defaultValue;
};
/**
* @brief
* @param[in/out] bOK
* @return
*/
bool ValueToBool(bool* bOK=0) const;
/**
* @brief
* @param[in/out] bOK
* @return
*/
int ValueToInt(bool* bOK=0) const;
/**
* @brief
* @param[in/out] bOK
* @return
*/
long ValueToLong(bool* bOK=0) const;
/**
* @brief
* @param[in/out] bOK
* return
*/
float ValueToFloat(bool* bOK=0) const;
/**
* @brief
* @param[in/out] bOK
* @return
*/
double ValueToDouble(bool* bOK=0) const;
/**
* @brief
* @return
*/
virtual std::string ValueToString() const;
template <typename T>
void SetValue(T value)
{
std::stringstream ss;
ss << value;
m_strValue=ss.str();
};
template <typename T>
void SetPointerValue(T* pointer)
{
std::stringstream ss;
ss << reinterpret_cast<long>(pointer);
m_strValue=ss.str();
};
/**
* @brief
* @param[in] strValue
*/
void SetStringValue(const std::string& strValue);
/**
* @brief
* @return
*/
virtual std::string GetStringValue() const;
/**
* @brief ID
* @param[in] strId id
*/
void SetId(const std::string& strId);
/**
* @brief Id
* @return Id
*/
std::string GetId() const;
/**
* @brief Id,TODO should do most for array items.
* @return Id
*/
virtual std::string GetShortID() const;
/**
* @brief
* @param[in] strName
*/
void SetName(const std::string& strName);
/**
* @brief
* @return
*/
QString GetName() const;
/**
* @brief
* @param[in] strDescription
*/
void SetDescription(const std::string& strDescription);
/**
* @brief
* @return
*/
std::string GetDescription() const;
/**
* @brief
* @param[in] eType
*/
void SetType(ParameterType eType);
/**
* @brief
* @return
*/
ParameterType GetType() const;
/**
* @brief
* @param[in] eType
*/
void SetInputType(ParameterInputType eType);
/**
* @brief
* @return
*/
ParameterInputType GetInputType() const;
/**
* @brief
* @return
*/
std::string GetMax() const { return this->m_strMax; }
/**
* @brief
* @param[in] strMax
*/
void SetMax(std::string strMax) { this->m_strMax = strMax; }
/**
* @brief
* @return
*/
std::string GetMin() const { return this->m_strMin; }
/**
* @brief
* @param[in] strMin
*/
void SetMin(std::string strMin) { this->m_strMin = strMin; }
/**
* @brief
* @return
*/
std::string GetDefault() const { return this->m_strDefault; }
/**
* @brief
* @param[in] strDefault
*/
void SetDefault(std::string strDefault) { this->m_strDefault = strDefault; }
/**
* @brief
* @return truefalse
*/
bool IsNessary() const { return this->m_bNecessary; }
/**
* @brief
* @param[in] bIsNessary
*/
void SetIsNessary(bool bIsNessary) { this->m_bNecessary = bIsNessary; }
/**
* @brief
* @param[in] strCategory
*/
void SetCategory(const std::string& strCategory);
/**
* @brief
* @return
*/
std::string GetCategory() const ;
/**
* @brief
* @param[in] strInputMetaData
*/
void SetInputMetaData(const std::string& strInputMetaData);
/**
* @brief
* @return
*/
std::string GetInputMetaData() const ;
/**
* @brief
* @param[in] strInputData
*/
void SetInputData(const std::string& strInputData);
/**
* @brief
* @return
*/
std::string GetInputData() const ;
/**
* @brief
* @param[in] acceptDropTypes
*/
void AddAcceptDropType(AcceptDropType acceptDropType);
/**
* @brief
* @return
*/
std::vector<AcceptDropType> GetAcceptDropTypes() const ;
/**
* @brief
* @return
*/
CParameterItem* GetParentItem() const;
/**
* @brief
* @return
*/
std::map<std::string,ParameterType> GetTypeMap() const;
/**
* @brief
* @return
*/
std::map<std::string,ParameterInputType> GetInputTypeMap() const;
/**
* @brief
* @return
*/
std::map<std::string,AcceptDropType> GetAcceptDropTypeMap() const;
/**
* @brief
* @return truefalse
*/
virtual bool Validate();
/**
* @brief
* @return truefalse
*/
virtual bool SameAsDefault();
/**
* @brief
* @param[in] pParentItem
*/
void SetParentItem(CParameterItem* pParentItem);
/**
* @brief
*
* @return truefalse
*/
bool IsEffective() const;
/**
* @brief ,json文件自己带过来
* @param[in] strInOut
*/
void SetInOut(const std::string& strInOut);
/**
* @brief
* @return
*/
std::string GetInOut() const;
/**
* @brief ,json文件自己带过来
* @param[in] strDataType
*/
void SetDataType(const std::string& strDataType);
/**
* @brief
* @return
*/
std::string GetDataType() const;
/**
* @brief
* @param[in] strDataType
*/
void SetDisplayValue(const std::string& strDisplayValue);
/**
* @brief
* @return
*/
std::string GetDisplayValue() const;
QString GetStringName() const;
void SetName(const QString strName);
private:
ParameterType m_eType;//参数项类型
ParameterInputType m_eInputType;//参数项输入类型
std::string m_strId;//参数项Id
std::string m_strValue;//参数项值
QString m_strName;//参数项名字
std::string m_strDescription;//参数项描述
std::string m_strDefault;//参数项缺省值
std::string m_strCategory;//参数项分类
std::string m_strMax;//参数项最大值
std::string m_strMin;//参数项最小值
std::string m_strInputMetaData;//参数项输入控件的元数据
std::string m_strInputData;//参数项输入控件的控制数据
std::string m_strInOut;//参数方向
std::string m_strDataType;//当参数是数据的时候,该数据的类型
std::string m_strDisplayValue;//数据显示
int m_iAccptDropTypes;//参数项输入控件允许拖拽进哪些类型的数据的类型集合
bool m_bNecessary;//是否必填参数
CParameterItem* m_pParent;
};
/**
* @class CCompositeParameterItem
* @brief
* @date 2011-12-19
* @author Sinopec
*/
class PAI_MODULE_EXPORT CCompositeParameterItem:public CParameterItem
{
public:
/**
* @brief
*/
CCompositeParameterItem();
/**
* @brief
* @param[in] src
*/
CCompositeParameterItem(const CCompositeParameterItem& src);
/**
* @brief
* @param[in] srcParameter
*/
CCompositeParameterItem& operator=(const CCompositeParameterItem& srcCompositeItem);
/**
* @brief ==,
* @param[in] otherCompositeItem
*/
bool operator==(const CCompositeParameterItem& otherCompositeItem) const;
/**
* @brief
*/
virtual ~CCompositeParameterItem();
/**
* @brief
*/
void Clear();
/**
* @brief
* @return
*/
virtual std::string GetStringValue() const;
/**
* @brief ,
* @param[in] childItem
* @param[in] bAmendID ID及其子孙参数的参数项ID
*/
void AddParameterItem(const CParameterItem& childItem,bool bAmendID=true);
/**
* @brief ,
* @param[in] index -1
* @param[in] childItem
* @param[in] bAmendID ID及其子孙参数的参数项ID
*/
void InsertParameterItem(const int index,const CParameterItem& childItem,bool bAmendID=true);
/**
* @brief ID的子参数项
* @param[in] strItemID Id
* @return truefalse
*/
bool RemoveParameterItem(const std::string& strItemID);
/**
* @brief
* @param[in] strItemID Id,ID可能是一个包含父ID及祖先ID以及自身ID的复合ID
* @code
* GetParameterItem("File[0].TraceSelection.Key[1].Start")
* @endcode
* @return
*/
CParameterItem* GetParameterItem(const std::string& strItemID) const;
/**
* @brief
* @param[in] iIndex
* @return
*/
CParameterItem* GetParameterItem(int iIndex) const;
/**
* @brief
* @param[in] strCategory
* @return
*/
std::vector<CParameterItem*> GetParameterItemsByCategory(const std::string& strCategory) const;
/**
* @brief
* @param[out] vecCategoryNames
*/
void GetCategoryNames(std::vector<std::string>& vecCategoryNames);
/**
* @brief
* @return
*/
int GetChildCount() const;
/**
* @brief
* @return truefalse
*/
bool IsArray() const;
/**
* @brief
* @param[out] vecResultItems
*/
void GetParameterItemsWithValidInputType(std::vector<CParameterItem*>& vecResultItems) const;
/**
* @brief 线
* @param[out] vecLeafItems
*/
void GetAllLeafParameterItems(std::vector<CParameterItem>& vecLeafItems) const;
/**
* @brief ID改为shortID.
*/
void InitializeToShortIDs();
/**
* @brief
* @param[out] completeIndex
* @return truefalse
*/
bool IsReady(ParameterCompleteIndex& completeIndex) const;
/**
* @brief
* SameAsDefault的真值条件是需要每个子参数项和子参数项的缺省值相同
*/
virtual bool SameAsDefault();
private:
/**
* @brief ID及其子孙参数的参数项ID
* @param[in] pChildItem
* @param[in] bAmendID ID及其子孙参数的参数项ID
*/
void _AddItemAndAmendItemID(CParameterItem* pChildItem,bool bAmendID);
/**
* @brief ID及其子孙参数的参数项ID
* @param[in] index -1
* @param[in] pChildItem
* @param[in] bAmendID ID及其子孙参数的参数项ID
*/
void _InsertItemAndAmendItemID(const int index ,CParameterItem* pChildItem,bool bAmendID);
/**
* @brief this
* @param[in] pChildItem
*/
void _AddChildItem(CParameterItem* pChildItem);
public:
/**
* @brief pChildItem及其子孙参数的参数项ID都修正为包括父亲ID在内的ID_AddChildItem之后调用pChildItem已经加入子参数项列表
* @param[in] pChildItem
* @param[in] iChildIndex
*/
void _AmendChildItemID(CParameterItem* pChildItem,int iChildIndex);
private:
std::vector<CParameterItem*> m_vecChildItems;//子参数项列表
};
}
}
#endif