2012-08-04 19:48:25 +02:00
|
|
|
#!/usr/bin/python
|
2012-10-05 23:28:47 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
"""
|
|
|
|
***************************************************************************
|
|
|
|
generate_application_descriptors.py
|
|
|
|
---------------------
|
|
|
|
Date : August 2012
|
|
|
|
Copyright : (C) 2012 by Victor Olaya
|
|
|
|
Email : volayaf at gmail dot com
|
|
|
|
***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************
|
|
|
|
"""
|
|
|
|
|
|
|
|
__author__ = 'Victor Olaya'
|
|
|
|
__date__ = 'August 2012'
|
|
|
|
__copyright__ = '(C) 2012, Victor Olaya'
|
|
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
|
|
__revision__ = '$Format:%H$'
|
|
|
|
|
2012-08-04 19:48:25 +02:00
|
|
|
|
|
|
|
import os, sys
|
|
|
|
import otbApplication
|
|
|
|
|
|
|
|
outputpath= os.path.join( os.environ["HOME"], ".qgis/python/plugins/sextante/otb/description" )
|
|
|
|
endl = os.linesep
|
|
|
|
|
|
|
|
def convertendl(s):
|
|
|
|
'''Convert a string for compatibility in txt dump'''
|
|
|
|
return s.replace('\n', '\\n')
|
|
|
|
|
|
|
|
def get_app_list():
|
|
|
|
blackList = ["TestApplication"]
|
|
|
|
appNames = [app for app in otbApplication.Registry.GetAvailableApplications() if app not in blackList]
|
|
|
|
return appNames
|
|
|
|
|
|
|
|
|
|
|
|
def generate_all_app_descriptors( ) :
|
|
|
|
appliIdx = 0
|
|
|
|
for appliname in get_app_list():
|
|
|
|
appliIdx = appliIdx+1
|
|
|
|
generate_app_descriptor( appliname )
|
|
|
|
#generate_app_doc( appliname )
|
|
|
|
|
|
|
|
def generate_app_descriptor( appliname ) :
|
|
|
|
print appliname
|
|
|
|
|
|
|
|
appInstance = otbApplication.Registry.CreateApplication(appliname)
|
|
|
|
appInstance.UpdateParameters() # TODO need this ?
|
|
|
|
|
|
|
|
out = ""
|
|
|
|
|
|
|
|
# the application key
|
|
|
|
out += appliname + endl
|
|
|
|
|
|
|
|
# the executable
|
|
|
|
out += "otbcli_" + appliname + endl
|
|
|
|
|
|
|
|
# long name
|
|
|
|
out += convertendl(appInstance.GetDocName()) + endl
|
|
|
|
|
|
|
|
# group
|
|
|
|
out += get_group(appInstance) + endl
|
|
|
|
|
|
|
|
for paramKey in appInstance.GetParametersKeys():
|
|
|
|
pdesc = generate_param_descriptor(appInstance, paramKey)
|
|
|
|
if len(pdesc) > 0:
|
|
|
|
out += pdesc + endl
|
|
|
|
|
|
|
|
with open( os.path.join(outputpath, appliname + '.txt'), 'w' ) as outfile:
|
|
|
|
outfile.write(out)
|
|
|
|
|
|
|
|
def generate_app_doc( appliname ) :
|
|
|
|
appInstance = otbApplication.Registry.CreateApplication(appliname)
|
|
|
|
appInstance.UpdateParameters() # TODO need this ?
|
|
|
|
html = appInstance.GetHtmlExample()
|
|
|
|
|
|
|
|
docpath= os.path.join(outputpath, 'doc')
|
|
|
|
if not os.path.exists(docpath):
|
|
|
|
os.makedirs(docpath)
|
|
|
|
|
|
|
|
with open( os.path.join(docpath, appliname + '.html'), 'w' ) as outfile:
|
|
|
|
outfile.write(html)
|
|
|
|
|
|
|
|
def get_group( appInstance ) :
|
|
|
|
tags = appInstance.GetDocTags()
|
|
|
|
sectionTags = ["Image Manipulation","Vector Data Manipulation", "Calibration","Geometry", "Image Filtering","Feature Extraction","Stereo","Learning","Segmentation"]
|
|
|
|
for sectionTag in sectionTags:
|
|
|
|
for tag in tags:
|
|
|
|
if tag == sectionTag:
|
|
|
|
return sectionTag
|
|
|
|
return "Miscellaneous"
|
|
|
|
|
|
|
|
def generate_param_descriptor( appInstance, paramKey ):
|
|
|
|
paramcreationfunction = {
|
|
|
|
otbApplication.ParameterType_Empty : generate_parameter_Empty,
|
|
|
|
otbApplication.ParameterType_Int : generate_parameter_Int,
|
|
|
|
otbApplication.ParameterType_Float : generate_parameter_Float,
|
|
|
|
otbApplication.ParameterType_String : generate_parameter_String,
|
|
|
|
otbApplication.ParameterType_StringList : generate_parameter_NOTHANDLED,
|
|
|
|
otbApplication.ParameterType_InputFilename : generate_parameter_InputFilename,
|
|
|
|
otbApplication.ParameterType_OutputFilename : generate_parameter_OutputFilename,
|
|
|
|
otbApplication.ParameterType_Directory : generate_parameter_Directory,
|
|
|
|
otbApplication.ParameterType_Choice : generate_parameter_Choice,
|
|
|
|
otbApplication.ParameterType_InputImage : generate_parameter_InputImage,
|
|
|
|
otbApplication.ParameterType_InputImageList : generate_parameter_InputImageList,
|
|
|
|
otbApplication.ParameterType_InputVectorData : generate_parameter_InputVectorData,
|
|
|
|
otbApplication.ParameterType_InputVectorDataList : generate_parameter_InputVectorDataList,
|
|
|
|
otbApplication.ParameterType_OutputImage : generate_parameter_OutputImage,
|
|
|
|
otbApplication.ParameterType_OutputVectorData : generate_parameter_OutputVectorData,
|
|
|
|
otbApplication.ParameterType_Radius : generate_parameter_Radius,
|
|
|
|
otbApplication.ParameterType_Group : generate_parameter_NOTHANDLED,
|
|
|
|
otbApplication.ParameterType_ListView : generate_parameter_NOTHANDLED,
|
|
|
|
otbApplication.ParameterType_ComplexInputImage : generate_parameter_ComplexInputImage,
|
|
|
|
otbApplication.ParameterType_ComplexOutputImage : generate_parameter_ComplexOutputImage,
|
|
|
|
otbApplication.ParameterType_RAM : generate_parameter_RAM
|
|
|
|
}
|
|
|
|
return paramcreationfunction[ appInstance.GetParameterType(paramKey) ](appInstance, paramKey)
|
|
|
|
|
|
|
|
def generate_parameter_Empty( appInstance, paramKey ):
|
|
|
|
out = "ParameterBoolean"
|
|
|
|
out += "|"
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
if appInstance.IsParameterEnabled(paramKey):
|
|
|
|
out += "True"
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_Int( appInstance, paramKey ):
|
|
|
|
out = "ParameterNumber"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "None"
|
|
|
|
out += "|"
|
|
|
|
out += "None"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
defaultVal = "0"
|
|
|
|
try:
|
|
|
|
defaultVal = str(appInstance.GetParameterInt(paramKey))
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
out += defaultVal
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_Float( appInstance, paramKey ):
|
|
|
|
out = "ParameterNumber"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "None"
|
|
|
|
out += "|"
|
|
|
|
out += "None"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
defaultVal = "0.0"
|
|
|
|
try:
|
|
|
|
defaultVal = str(appInstance.GetParameterFloat(paramKey))
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
out += defaultVal
|
|
|
|
return out
|
|
|
|
|
|
|
|
def generate_parameter_String( appInstance, paramKey ):
|
|
|
|
out = "ParameterString"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
defaultVal = ""
|
|
|
|
try:
|
|
|
|
defaultVal = str(appInstance.GetParameterString(paramKey))
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
out += defaultVal
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_InputFilename( appInstance, paramKey ):
|
|
|
|
out = "ParameterFile"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
try:
|
|
|
|
defaultVal = str(appInstance.GetParameterString(paramKey))
|
|
|
|
out += "|" + defaultVal
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_OutputFilename( appInstance, paramKey ):
|
|
|
|
out = "OutputFile"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
def generate_parameter_Directory( appInstance, paramKey ):
|
|
|
|
out = "ParameterFile"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
|
|
|
|
try:
|
|
|
|
defaultVal = str(appInstance.GetParameterString(paramKey))
|
|
|
|
out += "|" + defaultVal
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
def generate_parameter_Choice( appInstance, paramKey ):
|
|
|
|
out = "ParameterSelection"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
choices = ""
|
|
|
|
for choice in appInstance.GetChoiceKeys(paramKey):
|
|
|
|
choices += choice
|
|
|
|
choices += ";"
|
|
|
|
out += choices[:-1]
|
|
|
|
|
|
|
|
out += "|"
|
|
|
|
out += str(appInstance.GetParameterInt(paramKey))
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
def generate_parameter_InputImage( appInstance, paramKey ):
|
|
|
|
out = "ParameterRaster"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += str(not appInstance.IsMandatory(paramKey))
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_InputImageList( appInstance, paramKey ):
|
|
|
|
out = "ParameterMultipleInput"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "3"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += str(not appInstance.IsMandatory(paramKey))
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
def generate_parameter_InputVectorData( appInstance, paramKey ):
|
|
|
|
out = "ParameterVector"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-1"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += str(not appInstance.IsMandatory(paramKey))
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_InputVectorDataList( appInstance, paramKey ):
|
|
|
|
out = "ParameterMultipleInput"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-1"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += str(not appInstance.IsMandatory(paramKey))
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_OutputImage( appInstance, paramKey ):
|
|
|
|
out = "OutputRaster"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_NOTHANDLED( appInstance, paramKey ):
|
|
|
|
return ""
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_OutputVectorData( appInstance, paramKey ):
|
|
|
|
out = "OutputVector"
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += "-" + paramKey
|
|
|
|
out += "|"
|
|
|
|
|
|
|
|
out += convertendl(appInstance.GetParameterName(paramKey))
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_Radius( appInstance, paramKey ):
|
|
|
|
return generate_parameter_Int(appInstance, paramKey)
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_ComplexInputImage( appInstance, paramKey ):
|
|
|
|
return generate_parameter_InputImage(appInstance, paramKey)
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_ComplexOutputImage( appInstance, paramKey ):
|
|
|
|
return generate_parameter_OutputImage(appInstance, paramKey)
|
|
|
|
|
|
|
|
|
|
|
|
def generate_parameter_RAM( appInstance, paramKey ):
|
|
|
|
return generate_parameter_Int(appInstance, paramKey)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__" :
|
|
|
|
generate_all_app_descriptors()
|