logplus/Workflow/WFEngine/Module/src/ModuleParameter.cpp

439 lines
16 KiB
C++
Raw Normal View History

2026-01-16 17:18:41 +08:00
/*
* ModuleParameter.cpp
*
* Created on: 2011-4-29
* Author: dev
*/
#include "ModuleParameter.h"
#include "Algorithm.h"
// #include "json/json.h"
#include "Utils.h"
// #include "Log.h"
// #include "error.h"
#include <iostream>
#include <cassert>
using namespace std;
using namespace pai::utils;
namespace pai {
namespace module {
CModuleParameter::CModuleParameter():
workflow_id(""), local_tmp_dir(""), hdfs_tmp_dir(""), m_rootParameterItem(), m_strClass(""), m_importPath("")
{
// TODO Auto-generated constructor stub
}
CModuleParameter::CModuleParameter(const CModuleParameter& srcParameter):
workflow_id(srcParameter.workflow_id), local_tmp_dir(srcParameter.local_tmp_dir), hdfs_tmp_dir(srcParameter.hdfs_tmp_dir),
m_rootParameterItem(srcParameter.m_rootParameterItem), m_strClass(srcParameter.m_strClass), m_importPath(srcParameter.m_importPath)
{
}
CModuleParameter::~CModuleParameter() {
// cout << "detor in ModuleParameter " << endl;
}
void CModuleParameter::Clone(const CModuleParameter& srcParameter)
{
if(&srcParameter != this)
{
workflow_id = srcParameter.workflow_id;
local_tmp_dir = srcParameter.local_tmp_dir;
hdfs_tmp_dir = srcParameter.hdfs_tmp_dir;
m_rootParameterItem = srcParameter.m_rootParameterItem;
//REMOVEME
m_strClass = srcParameter.m_strClass;
}
}
bool CModuleParameter::operator==(const CModuleParameter& otherParameter) const
{
if(m_rootParameterItem == otherParameter.m_rootParameterItem &&
local_tmp_dir == otherParameter.local_tmp_dir &&
hdfs_tmp_dir == otherParameter.hdfs_tmp_dir &&
workflow_id == otherParameter.workflow_id &&
m_strClass == otherParameter.m_strClass &&
m_importPath == otherParameter.m_importPath) {
return true;
}
return false;
}
void CModuleParameter::AddParameterItem(const CParameterItem& item)
{
m_rootParameterItem.AddParameterItem(item);
}
void CModuleParameter::AddParameterItem(QString& paramId,const pai::module::ParameterType paramType,const std::string& paramStringValue)
{
CParameterItem paramItem ;
paramItem.SetId(paramId.toStdString());
paramItem.SetName(paramId);
paramItem.SetType(paramType);
paramItem.SetStringValue(paramStringValue);
this->AddParameterItem(paramItem);
}
void CModuleParameter::AddParameterItem(const std::string& paramId,const pai::module::ParameterType paramType,const std::string& paramStringValue)
{
CParameterItem paramItem ;
paramItem.SetId(paramId);
paramItem.SetName(paramId);
paramItem.SetType(paramType);
paramItem.SetStringValue(paramStringValue);
this->AddParameterItem(paramItem);
}
void CModuleParameter::RemoveParameterItem(const std::string& paramId)
{
m_rootParameterItem.RemoveParameterItem(paramId);
}
CParameterItem* CModuleParameter::GetParameterItem(const std::string& strItemName)
{
return m_rootParameterItem.GetParameterItem(strItemName);
}
int CModuleParameter::GetParameterItemCount() const
{
return m_rootParameterItem.GetChildCount();
}
int CModuleParameter::GetParamItemIndex(const std::string& strItemName) const
{
for(int i=0; i< m_rootParameterItem.GetChildCount(); ++i)
{
CParameterItem* pItem = m_rootParameterItem.GetParameterItem(i);
if(pItem!=NULL && pItem->GetName().toStdString()==strItemName)
{
return i;
}
}
std::stringstream errorMsg;
errorMsg <<"\n\t "<< __FILE__ << ":" << __LINE__<< "\t the warn information:" << std::endl
<< "\t The child parameter named "<<strItemName<<" not exists in the following parameter "<< m_rootParameterItem.GetName().toStdString()<< std::endl;
// pai::log::Warn(errorMsg.str());
return -1;
}
CParameterItem* CModuleParameter::GetParameterItem(int iIndex)
{
return m_rootParameterItem.GetParameterItem(iIndex);
}
std::vector<CParameterItem> CModuleParameter::GetParameterItems() const
{
std::vector<CParameterItem> vecResultItems;
// for(int i=0; i< m_rootParameterItem.GetChildCount(); ++i)
// {
// CParameterItem* pItem = m_rootParameterItem.GetParameterItem(i);
// if(pItem->GetType() == CUSTOM)
// {
// CCompositeParameterItem* pChildItem = dynamic_cast<CCompositeParameterItem*>(pItem);
// if(pChildItem != NULL)
// {
// CParameterItem* pConvertedItem = CCompositeParameterItem::ConvergentToCParameterItemAsNewInstance(pChildItem);
// vecResultItems.push_back(*(pConvertedItem));
// delete pConvertedItem;
// pConvertedItem=NULL;
// }
// }
// else
// {
// vecResultItems.push_back(*(pItem));
// }
// }
m_rootParameterItem.GetAllLeafParameterItems(vecResultItems);
return vecResultItems;
}
void CModuleParameter::GetCategoryNames(std::vector<std::string>& vecCategoryNames)
{
m_rootParameterItem.GetCategoryNames(vecCategoryNames);
}
std::vector<CParameterItem*> CModuleParameter::GetParameterItemsByCategory(const std::string& strCategory) const
{
return m_rootParameterItem.GetParameterItemsByCategory(strCategory);
}
CCompositeParameterItem* CModuleParameter::GetRootParameterItem() const
{
return const_cast<CCompositeParameterItem*>(&m_rootParameterItem);
}
// void CModuleParameter::LoadFromJson(const Json::Value& root,bool bAmendID)
// {
// Json::Value vParams = root["Params"];
// if(!vParams.isNull())
// {
// //TODO:test
// //pModuleParam = new CModuleParameter();
// for(unsigned int i=0; i<vParams.size(); i++)
// {
// _LoadFromJson(vParams[i],this->GetRootParameterItem(),bAmendID);
// }
// }
// }
// void CModuleParameter::SaveToJson(Json::Value& root)
// {
// Json::Value vParams;
// CCompositeParameterItem* pParentItem = this->GetRootParameterItem();
// if (NULL == pParentItem)
// {
// std::stringstream errorMsg;
// errorMsg <<"\n\t "<< __FILE__ << ":" << __LINE__<< "\t the error information:" << std::endl
// << "\t CModuleParameter SaveToJson() save json error!"<< std::endl
// << "\t The pParentItem is NULL"<<std::endl
// << "\t Please ask Workflow team for help!"<<std::endl;
// pai::log::Error(errorMsg.str());
// throw pai::error::runtime_error(errorMsg.str());
// }
// for(int i=0; i<pParentItem->GetChildCount(); i++)
// {
// Json::Value vParam;
// _SaveToJson(vParam,pParentItem->GetParameterItem(i));
// vParams.append(vParam);
// }
// root["Params"] = vParams;
// }
// void CModuleParameter::_LoadFromJson(const Json::Value& paramJsonNode, CCompositeParameterItem* pParentItem,bool bAmendID)
// {
// if(pParentItem == NULL)
// {
// std::stringstream errorMsg;
// errorMsg <<"\n\t "<< __FILE__ << ":" << __LINE__<< "\t the error information:" << std::endl
// << "\t CModuleParameter _LoadFromJson() load json error!"<< std::endl
// << "\t The pParentItem is NULL"<<std::endl
// << "\t Please ask Workflow team for help!"<<std::endl;
// // pai::log::Error(errorMsg.str());
// // throw pai::error::runtime_error(errorMsg.str());
// }
// CParameterItem* pItem = NULL;
// if(paramJsonNode["ParameterType"].isString())
// {
// //把小写全部转化成大写字符串
// std::string strType = paramJsonNode["ParameterType"].asString();
// for(string::iterator iter=strType.begin(); iter!=strType.end(); ++iter)
// {
// if(islower(int(*iter))) *iter = char(toupper(int(*iter)));
// }
// if(strType == "CUSTOM" || strType == "ARRAY")
// {
// pItem = new CCompositeParameterItem();
// }
// else
// {
// pItem = new CParameterItem();
// }
// //设置ParameterType
// pItem->SetType(pItem->GetTypeMap()[strType]);
// }
// if(pItem == NULL)
// {
// std::stringstream errorMsg;
// errorMsg <<"\n\t "<< __FILE__ << ":" << __LINE__<< "\t the error information:" << std::endl
// << "\t CModuleParameter _LoadFromJson() save json error!"<< std::endl
// << "\t The pItem is NULL"<<std::endl
// << "\t Please ask Workflow team for help!"<<std::endl;
// pai::log::Error(errorMsg.str());
// throw pai::error::runtime_error(errorMsg.str());
// }
// CParameterItem& parameterItem = *pItem;
// if(paramJsonNode["Default"].isString())
// parameterItem.SetStringValue(paramJsonNode["Default"].asString());
// if(paramJsonNode["Default"].isString())
// parameterItem.SetDefault(paramJsonNode["Default"].asString());
// if(paramJsonNode["ParameterID"].isString())
// parameterItem.SetId(paramJsonNode["ParameterID"].asString());
// if(paramJsonNode["ParameterName"].isString())
// parameterItem.SetName(paramJsonNode["ParameterName"].asString());
// if(!paramJsonNode["Value"].isNull())
// parameterItem.SetStringValue(paramJsonNode["Value"].asString());
// if(paramJsonNode["ParameterInputType"].isString())
// {
// //把小写全部转化成大写字符串
// std::string strInType = paramJsonNode["ParameterInputType"].asString();
// for(string::iterator iter=strInType.begin(); iter!=strInType.end(); ++iter)
// {
// if(islower(int(*iter))) *iter = char(toupper(int(*iter)));
// }
// //设置ParameterType
// parameterItem.SetInputType(parameterItem.GetInputTypeMap()[strInType]);
// if (!m_importPath.empty() && !paramJsonNode["Value"].isNull() && !paramJsonNode["Value"].asString().empty() && (parameterItem.GetInputType() == HDFSFILEEDITOR))
// {
// parameterItem.SetStringValue(m_importPath + paramJsonNode["Default"].asString());
// }
// }
// if(paramJsonNode["ParameterAcceptDropTypes"].isString())
// {
// //把小写全部转化成大写字符串
// std::string strDropTypes = paramJsonNode["ParameterAcceptDropTypes"].asString();
// for(string::iterator iter=strDropTypes.begin(); iter!=strDropTypes.end(); ++iter)
// {
// if(islower(int(*iter))) *iter = char(toupper(char(*iter)));
// }
// //设置ParameterAccepDropTypes
// std::vector<std::string> vecAcceptDropTypes;
// SplitByChar(strDropTypes,';',vecAcceptDropTypes);
// for(size_t i=0; i<vecAcceptDropTypes.size(); ++i)
// {
// if(!vecAcceptDropTypes[i].empty())
// {
// parameterItem.AddAcceptDropType(parameterItem.GetAcceptDropTypeMap()[vecAcceptDropTypes[i]]);
// }
// }
// }
// if(paramJsonNode["ParameterInputMetaData"].isString())
// {
// parameterItem.SetInputMetaData(paramJsonNode["ParameterInputMetaData"].asString());
// }
// if(paramJsonNode["ParameterInputData"].isString())
// {
// parameterItem.SetInputData(paramJsonNode["ParameterInputData"].asString());
// }
// if(paramJsonNode["ParameterSet"].isString() && paramJsonNode["ParameterSet"].asString()!="")//对于Meta.json中将参数分类置为空的参数项采用缺省分类"General"
// parameterItem.SetCategory(paramJsonNode["ParameterSet"].asString());
// if(paramJsonNode["UpLimit"].isString())
// parameterItem.SetMax(paramJsonNode["UpLimit"].asString());
// if(paramJsonNode["LowerLimit"].isString())
// parameterItem.SetMin(paramJsonNode["LowerLimit"].asString());
// if(paramJsonNode["Optional"].isString())
// {
// bool bOptional = false;
// std::string strOptional = paramJsonNode["Optional"].asString();
// if(strOptional=="TRUE" || strOptional=="True" || strOptional=="true" || strOptional=="1")
// {
// bOptional = true;
// }
// parameterItem.SetIsNessary(!bOptional);
// }
// else
// {
// if(paramJsonNode["Optional"].isBool())
// parameterItem.SetIsNessary(!(paramJsonNode["Optional"].asBool()));
// }
// if(paramJsonNode["ParameterDesc"].isString())
// parameterItem.SetDescription(paramJsonNode["ParameterDesc"].asString());
// if(paramJsonNode["InOut"].isString())
// parameterItem.SetInOut(paramJsonNode["InOut"].asString());
// if(paramJsonNode["DataType"].isString())
// parameterItem.SetDataType(paramJsonNode["DataType"].asString());
// if(paramJsonNode["DisplayValue"].isString())
// parameterItem.SetDisplayValue(paramJsonNode["DisplayValue"].asString());
// Json::Value vParams = paramJsonNode["Params"];
// if(!vParams.isNull())
// {
// for(unsigned int i=0; i<vParams.size(); i++)
// {
// _LoadFromJson(vParams[i],dynamic_cast<CCompositeParameterItem*>(pItem),bAmendID);
// }
// }
// pParentItem->AddParameterItem(parameterItem,bAmendID);
// delete pItem;
// pItem = NULL;
// }
// void CModuleParameter::_SaveToJson(Json::Value& paramJsonNode, CParameterItem* pItem)
// {
// if(pItem == NULL)
// {
// std::stringstream errorMsg;
// errorMsg <<"\n\t "<< __FILE__ << ":" << __LINE__<< "\t the error information:" << std::endl
// << "\t CModuleParameter _SaveToJson() save json error!"<< std::endl
// << "\t The pItem is NULL"<<std::endl
// << "\t Please ask Workflow team for help!"<<std::endl;
// pai::log::Error(errorMsg.str());
// throw pai::error::runtime_error(errorMsg.str());
// }
// pai::module::ParameterType eParameterType = pItem->GetType();
// std::string strParameterType = MapValueToKey<std::string,pai::module::ParameterType,std::map<std::string,pai::module::ParameterType> >(pItem->GetTypeMap(),eParameterType);
// paramJsonNode["ParameterType"] = strParameterType;
// paramJsonNode["Default"] = pItem->GetDefault();
// paramJsonNode["ParameterID"] = pItem->GetId();
// paramJsonNode["ParameterName"] = pItem->GetName().toStdString();
// paramJsonNode["Value"] = pItem->GetStringValue();
// std::string strParameterInputType = MapValueToKey<std::string,pai::module::ParameterInputType,std::map<std::string,pai::module::ParameterInputType> >(pItem->GetInputTypeMap(),pItem->GetInputType());
// paramJsonNode["ParameterInputType"] = strParameterInputType;
// std::vector<AcceptDropType> vecAcceptDropTypes = pItem->GetAcceptDropTypes();
// std::string strAcceptDropTypes("");
// std::map<std::string,AcceptDropType> allAcceptDropTypes = pItem->GetAcceptDropTypeMap();
// for(size_t i=0; i<vecAcceptDropTypes.size(); ++i )
// {
// strAcceptDropTypes += MapValueToKey<std::string,AcceptDropType,std::map<std::string,AcceptDropType> >(allAcceptDropTypes,vecAcceptDropTypes[i]);
// strAcceptDropTypes += ";";
// }
// paramJsonNode["ParameterAcceptDropTypes"] = strAcceptDropTypes;
// paramJsonNode["ParameterInputType"] = strParameterInputType;
// paramJsonNode["ParameterInputMetaData"] = pItem->GetInputMetaData();
// paramJsonNode["ParameterInputData"] = pItem->GetInputData();
// paramJsonNode["ParameterSet"] = pItem->GetCategory();
// paramJsonNode["UpLimit"] = pItem->GetMax();
// paramJsonNode["LowerLimit"] = pItem->GetMin();
// paramJsonNode["Optional"] = pItem->IsNessary()?"false":"true";
// paramJsonNode["ParameterDesc"] = pItem->GetDescription();
// paramJsonNode["InOut"] = pItem->GetInOut();
// paramJsonNode["DataType"] = pItem->GetDataType();
// paramJsonNode["DisplayValue"] = pItem->GetDisplayValue();
// if(eParameterType == ARRAY || eParameterType == CUSTOM)
// {
// Json::Value vParams;
// CCompositeParameterItem* pCompositeItem = dynamic_cast<CCompositeParameterItem*>(pItem);
// if(pCompositeItem == NULL)
// {
// std::stringstream errorMsg;
// errorMsg <<"\n\t "<< __FILE__ << ":" << __LINE__<< "\t the error information:" << std::endl
// << "\t CModuleParameter _SaveToJson() save json error!"<< std::endl
// << "\t The pCompositeItem is NULL"<<std::endl
// << "\t Please ask Workflow team for help!"<<std::endl;
// pai::log::Error(errorMsg.str());
// throw pai::error::runtime_error(errorMsg.str());
// }
// for(int i=0; i<pCompositeItem->GetChildCount(); i++)
// {
// Json::Value vParam;
// _SaveToJson(vParam,pCompositeItem->GetParameterItem(i));
// vParams.append(vParam);
// }
// paramJsonNode["Params"] = vParams;
// }
// }
// void CModuleParameter::Print()
// {
// Json::Value root;
// this->SaveToJson(root);
// string str = root.toStyledString();
// cout << str << endl;
// }
bool CModuleParameter::IsReady(ParameterCompleteIndex& completeIndex) const
{
return m_rootParameterItem.IsReady(completeIndex);
}
void CModuleParameter::SetImportPath(std::string importPath)
{
m_importPath = importPath;
}
}
}