diff --git a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx index 5d57a8337e73ee2298f313f08c13dc9f2ec5258f..0a5b64f702d3576fb160c2a442ca7b0a141ba7ac 100644 --- a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx +++ b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx @@ -390,7 +390,6 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters() const std::string paramKey(appKeyList[i]); std::vector<std::string> values; - Parameter::Pointer param = m_Application->GetParameterByKey(paramKey); ParameterType type = m_Application->GetParameterType(paramKey); const bool paramExists(m_Parser->IsAttributExists(std::string("-").append(paramKey), m_VExpression)); @@ -412,166 +411,98 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters() return INVALIDNUMBEROFVALUE; } - // Ensure that the parameter is enabled - m_Application->EnableParameter(paramKey); - - if (type == ParameterType_InputVectorDataList) + if (type == ParameterType_InputVectorDataList || + type == ParameterType_InputImageList || + type == ParameterType_InputFilenameList || + type == ParameterType_StringList || + type == ParameterType_ListView) { - dynamic_cast<InputVectorDataListParameter *> (param.GetPointer())->SetListFromFileName(values); + // Multiple values parameters + m_Application->SetParameterStringList(paramKey, values); } - else - if (type == ParameterType_InputImageList) - { - dynamic_cast<InputImageListParameter *> (param.GetPointer())->SetListFromFileName(values); - } - else - 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 || + else if (type == ParameterType_Choice || + type == ParameterType_Float || + type == ParameterType_Int || + type == ParameterType_Radius || + type == ParameterType_Directory || + type == ParameterType_InputFilename || type == ParameterType_OutputFilename || - type == ParameterType_ComplexInputImage || type == ParameterType_InputImage || + type == ParameterType_ComplexInputImage || + type == ParameterType_InputImage || + type == ParameterType_OutputImage || type == ParameterType_ComplexOutputImage || type == ParameterType_InputVectorData || - type == ParameterType_OutputVectorData || type == ParameterType_RAM || + type == ParameterType_OutputVectorData || + type == ParameterType_RAM || type == ParameterType_OutputProcessXML) // || type == ParameterType_InputProcessXML) { + // Single value parameter m_Application->SetParameterString(paramKey, values[0]); - } - else - if (type == ParameterType_Empty) + + if (type == ParameterType_OutputImage) { - 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; - return WRONGPARAMETERVALUE; + std::cerr << "ERROR: Too many values for parameter: -" << paramKey + << " (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 m_Application->UpdateParameters(); }