/* * File: main.cpp * Author: gabriel * * Created on 15 février 2012, 19:50 */ #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 ); if ( ! handle ) { std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n'; return NULL; } typedef char* ( *method_t )( void ); // RESET ERRORS 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; } // CALLING METHOD char* descrption = myMethod( ); // CLOSING LIB dlclose( handle ); return descrption; } void execute ( std::string lib, int _argc, char * _argv[] ) { void* handle = dlopen( lib.c_str( ), RTLD_NOW | RTLD_GLOBAL ); if ( ! handle ) { std::cerr << "CAN'T OPEN LIBRARY: " << dlerror( ) << '\n'; return; } typedef int (*method_t )( int argc, char * argv[] ); // RESET ERRORS 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; } // CALLING METHOD myMethod( _argc, _argv ); // CLOSING LIB 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( ); } std::string loadFile ( std::string filename ) { std::string line = std::string( "" ); std::string content = std::string( "" ); std::ifstream infile; infile.open( filename.c_str( ) ); while ( ! infile.eof( ) ) { getline( infile, line ); content += line + "\n"; line.clear( ); } infile.close( ); return content; } std::string loadDummyBody ( ) { return loadFile( "bbSlicerDummy.dummy_cxx" ); } std::string loadDummyHeader ( ) { 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 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 getBodyFileName ( const ModuleDescription* module ) { std::string name = Mthd::Aux::replace_str( module->GetTitle( ), " ", "" ); return "bbSlicer" + name + ".cxx"; } 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( ), " ", "" ); 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"; _cxx_inputs_end += "BBTK_INPUT(" + _box_name + " , " + mPara.GetName( ) + " , " + "\"" + mPara.GetName( ) + "\"" + " , " + mPara.GetCPPType( ) + ", \"\");\n"; } } content = Mthd::Aux::replace_str( content, "_11111_", _cxx_inputs ); content = Mthd::Aux::replace_str( content, "_22222_", _cxx_inputs_end ); 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 ++ ) { ModuleParameter mPara = pGroup.GetParameters( ).at( j ); 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 ++ ) { ModuleParameter mPara = pGroup.GetParameters( ).at( j ); arg_list += "Mthd::Aux::toCharArrray( "; if ( mPara.GetFlag( ) != "" ) { 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( 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 ); } int main ( int argc, char* argv[] ) { 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"; execute( gblib, _argc, _argv ); /// MODULE INFORMATION /// const std::string des = getModuleDescription( gblib ); // 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; ModuleDescription module; ModuleDescriptionParser parser; parser.Parse( des, module ); /// LOADING DUMMY FILES /// std::string _body = loadDummyBody( ); std::string _header = loadDummyHeader( ); /// SETTING HEADER FILE /// _header = updateBoxName( &module, _header ); _header = updateBoxDescription( &module, _header ); _header = updateBoxInputs( &module, _header ); saveFile( _header, getHeaderFileName( &module ) ); /// SETTING BODY FILE /// _body = updateBoxName( &module, _body ); _body = updateProcessMethod( &module, _body, gblib ); saveFile( _body, getBodyFileName( &module ) ); // 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; return EXIT_SUCCESS; }