Commit f43fcffe authored by Guillaume Pasero's avatar Guillaume Pasero
Browse files

ENH: CommandLineLauncher should rely more on otb::Wrapper::Application API, remove duplicated code

No related merge requests found
Showing with 76 additions and 145 deletions
+76 -145
...@@ -390,7 +390,6 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters() ...@@ -390,7 +390,6 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters()
const std::string paramKey(appKeyList[i]); const std::string paramKey(appKeyList[i]);
std::vector<std::string> values; std::vector<std::string> values;
Parameter::Pointer param = m_Application->GetParameterByKey(paramKey);
ParameterType type = m_Application->GetParameterType(paramKey); ParameterType type = m_Application->GetParameterType(paramKey);
const bool paramExists(m_Parser->IsAttributExists(std::string("-").append(paramKey), m_VExpression)); const bool paramExists(m_Parser->IsAttributExists(std::string("-").append(paramKey), m_VExpression));
...@@ -412,166 +411,98 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters() ...@@ -412,166 +411,98 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters()
return INVALIDNUMBEROFVALUE; return INVALIDNUMBEROFVALUE;
} }
// Ensure that the parameter is enabled if (type == ParameterType_InputVectorDataList ||
m_Application->EnableParameter(paramKey); type == ParameterType_InputImageList ||
type == ParameterType_InputFilenameList ||
if (type == ParameterType_InputVectorDataList) type == ParameterType_StringList ||
type == ParameterType_ListView)
{ {
dynamic_cast<InputVectorDataListParameter *> (param.GetPointer())->SetListFromFileName(values); // Multiple values parameters
m_Application->SetParameterStringList(paramKey, values);
} }
else else if (type == ParameterType_Choice ||
if (type == ParameterType_InputImageList) type == ParameterType_Float ||
{ type == ParameterType_Int ||
dynamic_cast<InputImageListParameter *> (param.GetPointer())->SetListFromFileName(values); type == ParameterType_Radius ||
} type == ParameterType_Directory ||
else type == ParameterType_InputFilename ||
if (type == ParameterType_InputFilenameList)
{
dynamic_cast<InputFilenameListParameter *> (param.GetPointer())->SetListFromFileName(values);
}
else
if (type == ParameterType_StringList)
{
dynamic_cast<StringListParameter *> (param.GetPointer())->SetValue(values);
}
else
if (type == ParameterType_String)
{
dynamic_cast<StringParameter *> (param.GetPointer())->SetValue(
m_Parser->GetAttributAsString(std::string("-").append(paramKey), m_VExpression) );
}
else
if (type == ParameterType_OutputImage)
{
m_Application->SetParameterString(paramKey, values[0]);
// Check if pixel type is given
if (values.size() == 2)
{
ImagePixelType outPixType = ImagePixelType_float;
if (values[1] == "uint8")
outPixType = ImagePixelType_uint8;
else if (values[1] == "int16")
outPixType = ImagePixelType_int16;
else if (values[1] == "uint16")
outPixType = ImagePixelType_uint16;
else if (values[1] == "int32")
outPixType = ImagePixelType_int32;
else if (values[1] == "uint32")
outPixType = ImagePixelType_uint32;
else if (values[1] == "float")
outPixType = ImagePixelType_float;
else if (values[1] == "double")
outPixType = ImagePixelType_double;
else
{
std::cerr << "ERROR: Invalid output type for parameter -" << paramKey << ": " << values[1] << "." << std::endl;
return WRONGPARAMETERVALUE;
}
dynamic_cast<OutputImageParameter *> (param.GetPointer())->SetPixelType(outPixType);
}
else
if (values.size() > 2)
{
std::cerr << "ERROR: Too many values for parameter -" << paramKey << " (expected 2 or less, got " << values.size() << ")." << std::endl;
return INVALIDNUMBEROFVALUE;
}
}
else if (type == ParameterType_ComplexOutputImage)
{
m_Application->SetParameterString(paramKey, values[0]);
// Check if pixel type is given
if (values.size() == 2)
{
ComplexImagePixelType outPixType = ComplexImagePixelType_float;
if (values[1] == "cfloat")
outPixType = ComplexImagePixelType_float;
else if (values[1] == "cdouble")
outPixType = ComplexImagePixelType_double;
else
{
std::cerr << "ERROR: Invalid output type for parameter -" << paramKey << ": " << values[1] << "." << std::endl;
return WRONGPARAMETERVALUE;
}
dynamic_cast<ComplexOutputImageParameter *> (param.GetPointer())->SetComplexPixelType(outPixType);
}
else
if (values.size() != 1 && values.size() != 2)
{
std::cerr << "ERROR: Invalid number of value for: \"" << paramKey
<< "\", invalid number of values " << values.size() << std::endl;
return INVALIDNUMBEROFVALUE;
}
}
else
if (type == ParameterType_ListView)
{
ListViewParameter * tmpLV = dynamic_cast<ListViewParameter *>(param.GetPointer());
if(tmpLV->GetSingleSelection() && values.size() > 1)
{
std::cerr << "ERROR: Invalid number of value for: \"" << paramKey
<< "\", invalid number of values " << values.size() << std::endl;
return INVALIDNUMBEROFVALUE;
}
tmpLV->SetSelectedNames(values);
}
else
if(values.size() != 1)
{
// Handle space in filename. Only for input
// files or directories
if (type == ParameterType_Directory || type == ParameterType_InputFilename ||
type == ParameterType_ComplexInputImage ||
type == ParameterType_InputImage ||
type == ParameterType_InputVectorData || type == ParameterType_OutputVectorData )
{
for(unsigned int j=1; j<values.size(); j++)
{
values[0].append(" ");
values[0].append(values[j]);
}
}
else if (!param->GetAutomaticValue())
{
std::cerr << "ERROR: Invalid number of value for: \"" << paramKey << "\", must have 1 value, not "
<< values.size() << std::endl;
return INVALIDNUMBEROFVALUE;
}
}
// Single value parameter
if (type == ParameterType_Choice || type == ParameterType_Float || type == ParameterType_Int ||
type == ParameterType_Radius || type == ParameterType_Directory || type == ParameterType_InputFilename ||
type == ParameterType_OutputFilename || type == ParameterType_OutputFilename ||
type == ParameterType_ComplexInputImage || type == ParameterType_InputImage || type == ParameterType_ComplexInputImage ||
type == ParameterType_InputImage ||
type == ParameterType_OutputImage ||
type == ParameterType_ComplexOutputImage || type == ParameterType_ComplexOutputImage ||
type == ParameterType_InputVectorData || type == ParameterType_InputVectorData ||
type == ParameterType_OutputVectorData || type == ParameterType_RAM || type == ParameterType_OutputVectorData ||
type == ParameterType_RAM ||
type == ParameterType_OutputProcessXML) // || type == ParameterType_InputProcessXML) type == ParameterType_OutputProcessXML) // || type == ParameterType_InputProcessXML)
{ {
// Single value parameter
m_Application->SetParameterString(paramKey, values[0]); m_Application->SetParameterString(paramKey, values[0]);
}
else if (type == ParameterType_OutputImage)
if (type == ParameterType_Empty)
{ {
if (values[0] == "1" || values[0] == "true") // Check if pixel type is given
if (values.size() == 2)
{
ImagePixelType pixType = ImagePixelType_float;
if ( !OutputImageParameter::ConvertStringToPixelType(values[1],pixType) )
{
std::cerr << "ERROR: Invalid output type for parameter -" <<
paramKey << ": " << values[1] << "." << std::endl;
return WRONGPARAMETERVALUE;
}
m_Application->SetParameterOutputImagePixelType(paramKey, pixType);
}
else if (values.size() > 2)
{ {
dynamic_cast<EmptyParameter *> (param.GetPointer())->SetActive(true); std::cerr << "ERROR: Too many values for parameter -" <<
paramKey << " (expected 2 or 1, got " << values.size() << ")."
<< std::endl;
return INVALIDNUMBEROFVALUE;
} }
else }
if (values[0] == "0" || values[0] == "false") else if (type == ParameterType_ComplexOutputImage)
{
// Check if pixel type is given
if (values.size() == 2)
{
ComplexImagePixelType cpixType = ComplexImagePixelType_float;
if ( !ComplexOutputImageParameter::ConvertStringToPixelType(values[1],cpixType) )
{ {
dynamic_cast<EmptyParameter *> (param.GetPointer())->SetActive(false); std::cerr << "ERROR: Invalid output type for parameter -" <<
paramKey << ": " << values[1] << "." << std::endl;
return WRONGPARAMETERVALUE;
} }
else m_Application->SetParameterComplexOutputImagePixelType(paramKey, cpixType);
}
else if (values.size() > 2)
{ {
std::cerr << "ERROR: Wrong value for parameter -" << paramKey << "." << std::endl; std::cerr << "ERROR: Too many values for parameter: -" << paramKey
return WRONGPARAMETERVALUE; << " (expected 2 or 1, got " << values.size() << ")." <<std::endl;
return INVALIDNUMBEROFVALUE;
} }
} }
// Update the flag UserValue }
param->SetUserValue(true); else if (type == ParameterType_Empty)
{
// Set UserValue flag specific for EmptyParameter, beware that it
// should be done before Enable/Disable because SetParameterUserValue()
// may enable it by default
m_Application->SetParameterUserValue(paramKey,true);
if (values[0] == "1" || values[0] == "true")
{
m_Application->EnableParameter(paramKey);
}
else if (values[0] == "0" || values[0] == "false")
{
m_Application->DisableParameter(paramKey);
}
else
{
std::cerr << "ERROR: Wrong value for parameter -" << paramKey << "." << std::endl;
return WRONGPARAMETERVALUE;
}
}
// Call the DoUpdateParameter to update dependent params // Call the DoUpdateParameter to update dependent params
m_Application->UpdateParameters(); m_Application->UpdateParameters();
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment