logplus/Workflow/WFEngine/Module/src/ModuleParameter.cpp
2026-01-16 17:18:41 +08:00

439 lines
16 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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;
}
}
}