X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=ModuleCall%2Fmain.cpp;fp=ModuleCall%2Fmain.cpp;h=afb754449fac9786369d44ff34a22954addf4bb1;hb=cd590ce5fff20d69c7060340235a35e9c2a9ef86;hp=9f7d71a1a6b9a9a2d463bd964f047728333bedd4;hpb=b7a0497a4afc48d5230c279aeab20eb756e4427b;p=creaCLI.git diff --git a/ModuleCall/main.cpp b/ModuleCall/main.cpp index 9f7d71a..afb7544 100644 --- a/ModuleCall/main.cpp +++ b/ModuleCall/main.cpp @@ -6,261 +6,291 @@ */ #include + #include -#include #include #include +#include +#include +#include +#include +#include #include #include #include #include -#include #include #include "CreationTool.h" + /// STD LD_OPEN CALLS /// -char* getModuleDescription ( std::string lib ) { - void* handle = dlopen( lib.c_str( ), RTLD_NOW | RTLD_GLOBAL ); +char* getModuleDescription ( const std::string lib ) { + + void* handle = dlopen( lib.c_str( ) , RTLD_NOW | RTLD_LOCAL ) ; if ( ! handle ) { - std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n'; - return NULL; + std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n' ; + return NULL ; } - typedef char* ( *method_t )( void ); + typedef char* ( *method_t )( void ) ; // RESET ERRORS - dlerror( ); - method_t myMethod = ( method_t ) dlsym( handle, "GetXMLModuleDescription" ); - const char *dlsym_error = dlerror( ); + dlerror( ) ; + method_t myMethod = ( method_t ) dlsym( handle , "GetXMLModuleDescription" ) ; + const char *dlsym_error = dlerror( ) ; if ( dlsym_error ) { - std::cerr << "CAN'T LOAD SYMBOL 'GetXMLModuleDescription: " << dlsym_error << '\n'; - dlclose( handle ); - return NULL; + std::cerr << "CAN'T LOAD SYMBOL 'GetXMLModuleDescription: " << dlsym_error << '\n' ; + dlclose( handle ) ; + return NULL ; } // CALLING METHOD - char* descrption = myMethod( ); + char* descrption = myMethod( ) ; // CLOSING LIB - dlclose( handle ); - return descrption; + + //dlclose( handle ) ; + + return descrption ; } -void execute ( std::string lib, int _argc, char * _argv[] ) { - void* handle = dlopen( lib.c_str( ), RTLD_NOW | RTLD_GLOBAL ); +void execute ( const std::string lib , int _argc , char * _argv[] ) { + void* handle = dlopen( lib.c_str( ) , RTLD_NOW | RTLD_LOCAL ) ; if ( ! handle ) { - std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n'; - return; + std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n' ; + return ; } - typedef int (*method_t )( int argc, char * argv[] ); + typedef int (*method_t )( int argc , char * argv[] ) ; // RESET ERRORS - dlerror( ); - method_t myMethod = ( method_t ) dlsym( handle, "ModuleEntryPoint" ); - const char *dlsym_error = dlerror( ); + dlerror( ) ; + method_t myMethod = ( method_t ) dlsym( handle , "ModuleEntryPoint" ) ; + const char *dlsym_error = dlerror( ) ; if ( dlsym_error ) { - std::cerr << "CAN'T LOAD SYMBOL 'ModuleEntryPoint' " << dlsym_error << '\n'; - dlclose( handle ); - return; + std::cerr << "CAN'T LOAD SYMBOL 'ModuleEntryPoint' " << dlsym_error << '\n' ; + dlclose( handle ) ; + return ; } // CALLING METHOD - myMethod( _argc, _argv ); + myMethod( _argc , _argv ) ; // CLOSING LIB - dlclose( handle ); + dlclose( handle ) ; } /// FILE RELATED /// -void saveFile ( std::string content, std::string file_name ) { - std::ofstream myfile; - myfile.open( file_name.c_str( ) ); - myfile << content; - myfile.close( ); +void saveFile ( const std::string content , const std::string file_name ) { + std::ofstream myfile ; + myfile.open( file_name.c_str( ) ) ; + myfile << content ; + myfile.close( ) ; } -std::string loadFile ( std::string filename ) { - std::string line = std::string( "" ); - std::string content = std::string( "" ); +std::string loadFile ( const std::string filename ) { + std::string line = std::string( "" ) ; + std::string content = std::string( "" ) ; - std::ifstream infile; - infile.open( filename.c_str( ) ); + std::ifstream infile ; + infile.open( filename.c_str( ) ) ; while ( ! infile.eof( ) ) { - getline( infile, line ); - content += line + "\n"; - line.clear( ); + getline( infile , line ) ; + content += line + "\n" ; + line.clear( ) ; } - infile.close( ); - return content; + infile.close( ) ; + return content ; } std::string loadDummyBody ( ) { - return loadFile( "bbSlicerDummy.dummy_cxx" ); + return loadFile( "bbSlicerDummy.dummy_cxx" ) ; } std::string loadDummyHeader ( ) { - return loadFile( "bbSlicerDummy.dummy_h" ); + return loadFile( "bbSlicerDummy.dummy_h" ) ; } /// BBTK BOX CREATION /// -std::string updateBoxDescription ( const ModuleDescription* module, std::string _header ) { - _header = Mthd::Aux::replace_str( _header, "_NNNNN_", Mthd::Aux::replace_str( module->GetTitle( ), " ", "" ) ); - _header = Mthd::Aux::replace_str( _header, "_AAAAA_", module->GetContributor( ) ); - _header = Mthd::Aux::replace_str( _header, "_DDDDD_", module->GetDescription( ) ); - _header = Mthd::Aux::replace_str( _header, "_CCCCC_", module->GetCategory( ) ); - return _header; +std::string updateBoxDescription ( const ModuleDescription* module , std::string _header ) { + _header = Mthd::Aux::replace_str( _header , "_NNNNN_" , Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ) ; + _header = Mthd::Aux::replace_str( _header , "_AAAAA_" , module->GetContributor( ) ) ; + _header = Mthd::Aux::replace_str( _header , "_DDDDD_" , module->GetDescription( ) ) ; + _header = Mthd::Aux::replace_str( _header , "_CCCCC_" , module->GetCategory( ) ) ; + return _header ; } -std::string updateBoxName ( const ModuleDescription* module, std::string content ) { - std::string _new_box_name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" ); - content = Mthd::Aux::replace_str( content, "Dummy", _new_box_name ); - return content; +std::string updateBoxName ( const ModuleDescription* module , std::string content ) { + std::string _new_box_name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ; + content = Mthd::Aux::replace_str( content , "Dummy" , _new_box_name ) ; + return content ; } std::string getHeaderFileName ( const ModuleDescription* module ) { - std::string name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" ); - - return "bbSlicer" + name + ".h"; + std::string name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ; + return "bbSlicer" + name + ".h" ; } std::string getBodyFileName ( const ModuleDescription* module ) { - std::string name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" ); + std::string name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ; - return "bbSlicer" + name + ".cxx"; + return "bbSlicer" + name + ".cxx" ; } -std::string updateBoxInputs ( const ModuleDescription* module, std::string content ) { +std::string updateBoxInputs ( const ModuleDescription* module , std::string content ) { - std::string _cxx_inputs = std::string( "\n" ); - std::string _cxx_inputs_end = std::string( "\n" ); - std::string _box_name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" ); + std::string _cxx_inputs = std::string( "\n" ) ; + std::string _cxx_inputs_end = std::string( "\n" ) ; + std::string _box_name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ; - for ( unsigned long int i = 0; i < module->GetParameterGroups( ).size( ); i ++ ) { - ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ); - for ( unsigned long int j = 0; j < pGroup.GetParameters( ).size( ); j ++ ) { - ModuleParameter mPara = pGroup.GetParameters( ).at( j ); + for ( unsigned long int i = 0 ; i < module->GetParameterGroups( ).size( ) ; i ++ ) { + ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ) ; + for ( unsigned long int j = 0 ; j < pGroup.GetParameters( ).size( ) ; j ++ ) { + ModuleParameter mPara = pGroup.GetParameters( ).at( j ) ; _cxx_inputs += "BBTK_DECLARE_INPUT ( " + mPara.GetName( ) + " , " + - mPara.GetCPPType( ) + " );\n"; + mPara.GetCPPType( ) + " );\n" ; _cxx_inputs_end += "BBTK_INPUT(" + _box_name + " , " + mPara.GetName( ) + " , " + "\"" + mPara.GetName( ) + "\"" + " , " + - mPara.GetCPPType( ) + ", \"\");\n"; + mPara.GetCPPType( ) + ", \"\");\n" ; } } - content = Mthd::Aux::replace_str( content, "_11111_", _cxx_inputs ); - content = Mthd::Aux::replace_str( content, "_22222_", _cxx_inputs_end ); + content = Mthd::Aux::replace_str( content , "_11111_" , _cxx_inputs ) ; + content = Mthd::Aux::replace_str( content , "_22222_" , _cxx_inputs_end ) ; - return content; + return content ; } const int getNumberOfArguments ( const ModuleDescription* module ) { - int number = 0; - for ( unsigned long int i = 0; i < module->GetParameterGroups( ).size( ); i ++ ) { - ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ); - for ( unsigned long int j = 0; j < pGroup.GetParameters( ).size( ); j ++ ) { + int number = 0 ; + for ( unsigned long int i = 0 ; i < module->GetParameterGroups( ).size( ) ; i ++ ) { + ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ) ; + for ( unsigned long int j = 0 ; j < pGroup.GetParameters( ).size( ) ; j ++ ) { - ModuleParameter mPara = pGroup.GetParameters( ).at( j ); - number ++; + ModuleParameter mPara = pGroup.GetParameters( ).at( j ) ; + number ++ ; } } - return number; + return number ; } -std::string updateProcessMethod ( const ModuleDescription* module, std::string content, std::string lib ) { - int number = 0; - std::string arg_list = std::string( "" ); - for ( unsigned long int i = 0; i < module->GetParameterGroups( ).size( ); i ++ ) { - ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ); - for ( unsigned long int j = 0; j < pGroup.GetParameters( ).size( ); j ++ ) { +std::string updateProcessMethod ( const ModuleDescription* module , std::string content , std::string lib ) { + int number = 0 ; + std::string arg_list = std::string( "" ) ; + for ( unsigned long int i = 0 ; i < module->GetParameterGroups( ).size( ) ; i ++ ) { + ModuleParameterGroup pGroup = module->GetParameterGroups( ).at( i ) ; + for ( unsigned long int j = 0 ; j < pGroup.GetParameters( ).size( ) ; j ++ ) { - ModuleParameter mPara = pGroup.GetParameters( ).at( j ); + ModuleParameter mPara = pGroup.GetParameters( ).at( j ) ; - arg_list += "Mthd::Aux::toCharArrray( "; + arg_list += "Mthd::Aux::toCharArrray( " ; if ( mPara.GetFlag( ) != "" ) { - arg_list += "Mthd::Aux::toString( \""; - arg_list += "-" + mPara.GetFlag( ) + "\" "; - arg_list += " ) + "; + arg_list += "Mthd::Aux::toString( \"" ; + arg_list += "-" + mPara.GetFlag( ) + "\" " ; + arg_list += " ) + " ; } else if ( mPara.GetLongFlag( ) != "" ) { - arg_list += "Mthd::Aux::toString( \""; - arg_list += "--" + mPara.GetLongFlag( ) + "\" "; - arg_list += " ) + "; + arg_list += "Mthd::Aux::toString( \"" ; + arg_list += "--" + mPara.GetLongFlag( ) + "\" " ; + arg_list += " ) + " ; } - arg_list += "Mthd::Aux::toString( bbGetInput" + mPara.GetName( ) + "( ) )"; - arg_list += " ),\n"; - number ++; + arg_list += "Mthd::Aux::toString( bbGetInput" + mPara.GetName( ) + "( ) )" ; + arg_list += " ),\n" ; + number ++ ; } } - arg_list += "_EEENNNDDD_"; - arg_list = Mthd::Aux::replace_str( arg_list, ",\n_EEENNNDDD_", "" ); - std::string _argc = "\nint _argc =" + Mthd::Aux::toString( number ) + ";\n"; - std::string _slib = "std::string lib = \"" + lib + "\";\n"; - std::string _argv = "char * _argv[ ] = { " + arg_list + " };\n"; - return Mthd::Aux::replace_str( content, "_33333_", _argc + _slib + _argv ); + arg_list += "_EEENNNDDD_" ; + arg_list = Mthd::Aux::replace_str( arg_list , ",\n_EEENNNDDD_" , "" ) ; + std::string _argc = "\nint _argc =" + Mthd::Aux::toString( number ) + ";\n" ; + std::string _slib = "std::string lib = \"" + lib + "\";\n" ; + std::string _argv = "char * _argv[ ] = { " + arg_list + " };\n" ; + return Mthd::Aux::replace_str( content , "_33333_" , _argc + _slib + _argv ) ; } -int main ( int argc, char* argv[] ) { +std::vector < std::string > getFilesByExtention ( std::string dir , std::string ext ) { + std::vector < std::string > files ; + files.clear( ) ; + DIR *dp ; + struct dirent *dirp ; + if ( ( dp = opendir( dir.c_str( ) ) ) == NULL ) { + std::cout << "ERROR OPENING " << dir << std::endl ; + return files ; + } + + while ( ( dirp = readdir( dp ) ) != NULL ) { + std::string file = std::string( dirp->d_name ) ; + if ( Mthd::Aux::str_ends_with( file , ext ) ) { + files.push_back( file ) ; + } + } + closedir( dp ) ; + return files ; +} - int _argc = 3; - char * _argv[] = { "-s 20", "/home/riveros/Desktop/Experiments/RA1.mhd", "/home/riveros/Desktop/Experiments/RA1-OUT-MAIN.mhd" }; - std::string gblib = "/home/riveros/.slicer/Slicer4-bin/Slicer-build/lib/Slicer-4.0/cli-modules/libGaussianBlurImageFilterLib.so"; +int main ( int argc , char* argv[] ) { - execute( gblib, _argc, _argv ); + // int _argc = 3 ; + // char * _argv[] = { "-s 20" , "/home/riveros/Desktop/Experiments/RA1.mhd" , "/home/riveros/Desktop/Experiments/RA1-OUT-MAIN.mhd" } ; + // execute( gblib , _argc , _argv ) ; - /// MODULE INFORMATION /// - const std::string des = getModuleDescription( gblib ); + const std::string dummy_body_str = loadDummyBody( ) ; + const std::string dummy_header_str = loadDummyHeader( ) ; - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // - // std::cout << des << std::endl << std::endl; + const std::string directory = "/home/riveros/.slicer/Slicer4-bin/Slicer-build/lib/Slicer-4.0/cli-modules/" ; + const std::vector < std::string > files = getFilesByExtention( directory , ".so" ) ; - ModuleDescription module; - ModuleDescriptionParser parser; + for ( unsigned int i = 0 ; i < files.size( ) ; i ++ ) { - parser.Parse( des, module ); + std::string gblib = directory + files.at( i ) ; + std::cout << "/// " << files.at( i ) << " ///" << std::endl ; - /// LOADING DUMMY FILES /// - std::string _body = loadDummyBody( ); - std::string _header = loadDummyHeader( ); + /// MODULE INFORMATION /// + std::string des = getModuleDescription( gblib ) ; + std::cout << " getModuleDescription( gblib )...OK" << std::endl ; - /// SETTING HEADER FILE /// - _header = updateBoxName( &module, _header ); - _header = updateBoxDescription( &module, _header ); - _header = updateBoxInputs( &module, _header ); - saveFile( _header, getHeaderFileName( &module ) ); + ModuleDescription module ; + ModuleDescriptionParser parser ; - /// SETTING BODY FILE /// - _body = updateBoxName( &module, _body ); - _body = updateProcessMethod( &module, _body, gblib ); - saveFile( _body, getBodyFileName( &module ) ); + parser.Parse( des , module ) ; + std::cout << " parser.Parse( des , module )...OK" << std::endl ; + /// LOADING DUMMY FILES /// + std::string _body = std::string( dummy_body_str ) ; + std::cout << " loadDummyBody( )...OK" << std::endl ; + std::string _header = std::string( dummy_header_str ) ; + std::cout << " loadDummyHeader( )...OK" << std::endl ; - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // - // std::cout << _header << std::endl; - // - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // std::cout << "====================================" << std::endl << std::endl; - // - // std::cout << _body << std::endl; + /// SETTING HEADER FILE /// + _header = updateBoxName( &module , _header ) ; + std::cout << " updateBoxName( &module , _header )...OK" << std::endl ; + _header = updateBoxDescription( &module , _header ) ; + std::cout << " updateBoxDescription( &module , _header )...OK" << std::endl ; + _header = updateBoxInputs( &module , _header ) ; + std::cout << " updateBoxInputs( &module , _header )...OK" << std::endl ; + saveFile( _header , getHeaderFileName( &module ) ) ; - return EXIT_SUCCESS; + /// SETTING BODY FILE /// + _body = updateBoxName( &module , _body ) ; + std::cout << " updateBoxName( &module , _body )...OK" << std::endl ; + _body = updateProcessMethod( &module , _body , gblib ) ; + std::cout << " updateProcessMethod( &module , _body , gblib )...OK" << std::endl ; + saveFile( _body , getBodyFileName( &module ) ) ; + + std::cout << "/// EO " << files.at( i ) << " ///" << std::endl << std::endl ; + + gblib.clear( ) ; + des.clear( ) ; + //while ( getchar( ) != '\n' ) ; + + } + return EXIT_SUCCESS ; }