]> Creatis software - creaCLI.git/commitdiff
NOTES:
authorriveros <riveros@ei-ed-345.(none)>
Wed, 18 Apr 2012 06:00:13 +0000 (08:00 +0200)
committerriveros <riveros@ei-ed-345.(none)>
Wed, 18 Apr 2012 06:00:13 +0000 (08:00 +0200)
New set of boxes created. First Generates a single box from a single shared library. Second takes a complete directory and gnereates all boxes from shared libs within.

BUGS:
Apparently bbEditor does not recognizes the inputs for visualization....

bbtk_Slicer_PKG/src/CreationTool.cxx
bbtk_Slicer_PKG/src/CreationTool.h
bbtk_Slicer_PKG/src/bbSlicerSlicerLibDirToBlackBoxSrc.cxx [new file with mode: 0644]
bbtk_Slicer_PKG/src/bbSlicerSlicerLibDirToBlackBoxSrc.h [new file with mode: 0644]
bbtk_Slicer_PKG/src/bbSlicerSlicerLibToBlackBoxSrc.cxx [new file with mode: 0644]
bbtk_Slicer_PKG/src/bbSlicerSlicerLibToBlackBoxSrc.h [new file with mode: 0644]

index 8203b4dd64b788e9b150899288b4fa17931a2c9b..b3c7095aefde5de275e3c81a2ed125c7f8b8b97c 100644 (file)
 #include "CreationTool.h"
 
 std::string Mthd::Aux::toString ( float n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( double n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( long double n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( char n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( unsigned char n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( short n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( unsigned short n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( int n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( long int n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( unsigned int n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( unsigned long n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( unsigned long long n ) {
-    std::ostringstream oss;
-    oss << n;
-    return oss.str( );
+    std::ostringstream oss ;
+    oss << n ;
+    return oss.str( ) ;
 }
 
 std::string Mthd::Aux::toString ( std::string n ) {
-    return n;
+    return n ;
 }
 
 char* Mthd::Aux::toCharArrray ( float n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( double n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( long double n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( char n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( unsigned char n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( short n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( unsigned short n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( int n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( long int n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( unsigned int n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( long unsigned int n ) {
-    std::ostringstream oss;
-    oss << n;
-    return const_cast < char* > ( oss.str( ).data( ) );
+    std::ostringstream oss ;
+    oss << n ;
+    return const_cast < char* > ( oss.str( ).data( ) ) ;
 }
 
 char* Mthd::Aux::toCharArrray ( std::string n ) {
-    return const_cast < char* > ( n.data( ) );
+    return const_cast < char* > ( n.data( ) ) ;
 }
 
-std::string Mthd::Aux::replace_str ( std::string input, std::string old_str, std::string new_str ) {
-    size_t found = input.find( old_str );
+std::string Mthd::Aux::replace_str ( std::string input , std::string old_str , std::string new_str ) {
+    size_t found = input.find( old_str ) ;
     while ( found != std::string::npos ) {
-        input.replace( found, old_str.length( ), new_str );
-        found = input.find( old_str );
+        input.replace( found , old_str.length( ) , new_str ) ;
+        found = input.find( old_str ) ;
     }
-    return input;
+    return input ;
+}
+
+bool Mthd::Aux::str_ends_with ( std::string total_str , std::string sub_str ) {
+    size_t found = total_str.find( sub_str ) ;
+    if ( found != std::string::npos ) {
+        return true ;
+    }
+    return false ;
 }
 
index 1859178093bcd85398dd4cf34017e21cb1abb54d..27dcb8222bade35a5cfdae9151fca0470cbecc36 100644 (file)
@@ -51,7 +51,8 @@ namespace Mthd {
 
         static char* toCharArrray ( std::string n ) ;
 
-        static std::string replace_str ( std::string input , std::string old_str , std::string new_str ) ;
+        static bool str_ends_with ( std::string total_str , std::string sub_str ) ;
+        static std::string replace_str ( std::string input , std::string old_str , std::string new_str ) ;      
 
     } ;
 
diff --git a/bbtk_Slicer_PKG/src/bbSlicerSlicerLibDirToBlackBoxSrc.cxx b/bbtk_Slicer_PKG/src/bbSlicerSlicerLibDirToBlackBoxSrc.cxx
new file mode 100644 (file)
index 0000000..0708033
--- /dev/null
@@ -0,0 +1,275 @@
+#include "bbSlicerSlicerLibDirToBlackBoxSrc.h"
+#include "bbSlicerPackage.h"
+namespace bbSlicer {
+
+    BBTK_ADD_BLACK_BOX_TO_PACKAGE ( Slicer , SlicerLibDirToBlackBoxSrc )
+    BBTK_BLACK_BOX_IMPLEMENTATION ( SlicerLibDirToBlackBoxSrc , bbtk::AtomicBlackBox ) ;
+
+    ///     STD LD_OPEN CALLS       ///
+
+    char* SlicerLibDirToBlackBoxSrc::
+    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 ;
+        }
+        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 ;
+
+    }
+
+    ///     FILE RELATED     ///
+
+    void SlicerLibDirToBlackBoxSrc::
+    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 SlicerLibDirToBlackBoxSrc::
+    loadFile ( const 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 SlicerLibDirToBlackBoxSrc::
+    loadDummyBody ( ) {
+        return loadFile( "bbSlicerDummy.dummy_cxx" ) ;
+    }
+
+    std::string SlicerLibDirToBlackBoxSrc::
+    loadDummyHeader ( ) {
+        return loadFile( "bbSlicerDummy.dummy_h" ) ;
+    }
+
+    ///     BBTK BOX CREATION       /// 
+
+    std::string SlicerLibDirToBlackBoxSrc::
+    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 SlicerLibDirToBlackBoxSrc::
+    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 SlicerLibDirToBlackBoxSrc::
+    getHeaderFileName ( const ModuleDescription* module ) {
+        std::string name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ;
+        return "bbSlicer" + name + ".h" ;
+    }
+
+    std::string SlicerLibDirToBlackBoxSrc::
+    getBodyFileName ( const ModuleDescription* module ) {
+        std::string name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ;
+
+        return "bbSlicer" + name + ".cxx" ;
+    }
+
+    std::string SlicerLibDirToBlackBoxSrc::
+    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 SlicerLibDirToBlackBoxSrc::
+    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 SlicerLibDirToBlackBoxSrc::
+    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 ) ;
+    }
+
+    std::vector < std::string > SlicerLibDirToBlackBoxSrc::
+    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 ;
+    }
+
+    void SlicerLibDirToBlackBoxSrc::
+    Process ( ) {
+        const std::string dummy_body_str = loadDummyBody( ) ;
+        const std::string dummy_header_str = loadDummyHeader( ) ;
+
+        const std::string directory = bbGetInputLibDirectoryFullPath( ) ;
+        const std::vector < std::string > files = getFilesByExtention( directory , ".so" ) ;
+
+        for ( unsigned int i = 0 ; i < files.size( ) ; i ++ ) {
+
+            std::string gblib = directory + files.at( i ) ;
+            std::cout << "/// " << files.at( i ) << " ///" << std::endl ;
+
+            ///     MODULE INFORMATION      ///
+            std::string des = getModuleDescription( gblib ) ;
+            std::cout << "  getModuleDescription( gblib )...OK" << std::endl ;
+
+            ModuleDescription module ;
+            ModuleDescriptionParser parser ;
+
+            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 ;
+
+            ///     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 ) ) ;
+
+            ///     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 , bbGetInputSrcDestinationDir( ) + "/" + getBodyFileName( &module ) ) ;
+
+            std::cout << "/// EO " << files.at( i ) << " ///" << std::endl << std::endl ;
+
+            gblib.clear( ) ;
+            des.clear( ) ;
+            //while ( getchar( ) != '\n' ) ;
+
+        }
+    }
+
+    void SlicerLibDirToBlackBoxSrc::
+    bbUserSetDefaultValues ( ) {
+    }
+
+    void SlicerLibDirToBlackBoxSrc::
+    bbUserInitializeProcessing ( ) {
+    }
+
+    void SlicerLibDirToBlackBoxSrc::
+    bbUserFinalizeProcessing ( ) {
+    }
+}
+// EO namespace bbSlicer
+
+
diff --git a/bbtk_Slicer_PKG/src/bbSlicerSlicerLibDirToBlackBoxSrc.h b/bbtk_Slicer_PKG/src/bbSlicerSlicerLibDirToBlackBoxSrc.h
new file mode 100644 (file)
index 0000000..0742501
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef __bbSlicerSlicerLibDirToBlackBoxSrc_h_INCLUDED__
+#define __bbSlicerSlicerLibDirToBlackBoxSrc_h_INCLUDED__
+
+#include "bbSlicer_EXPORT.h"
+#include "bbtkAtomicBlackBox.h"
+
+#include <vector>
+
+#include <cstdlib>
+#include <sstream>
+#include <iostream>
+#include <fstream>
+
+#include <stdio.h>
+#include <dlfcn.h>
+#include <string.h>
+#include <dirent.h>
+
+#include <ModuleDescriptionParser.h>
+#include <ModuleParameterGroup.h>
+#include <ModuleDescription.h>
+#include <ModuleParameter.h>
+
+#include <ModuleDescriptionUtilities.h>
+
+#include "CreationTool.h"
+
+namespace bbSlicer {
+
+    class bbSlicer_EXPORT SlicerLibDirToBlackBoxSrc
+    :
+    public bbtk::AtomicBlackBox {
+        BBTK_BLACK_BOX_INTERFACE ( SlicerLibDirToBlackBoxSrc , bbtk::AtomicBlackBox ) ;
+        BBTK_DECLARE_INPUT ( LibDirectoryFullPath , std::string ) ;
+        BBTK_DECLARE_INPUT ( SrcDestinationDir , std::string ) ;
+        BBTK_PROCESS ( Process ) ;
+        void Process ( ) ;
+
+        ///     STD LD_OPEN CALLS       ///
+        char* getModuleDescription ( const std::string lib ) ;
+        ///     FILE RELATED     ///
+        void saveFile ( const std::string content , const std::string file_name ) ;
+        std::string loadFile ( const std::string filename ) ;
+        std::string loadDummyBody ( ) ;
+        std::string loadDummyHeader ( ) ;
+        ///     BBTK BOX CREATION       /// 
+        std::string updateBoxDescription ( const ModuleDescription* module , std::string _header ) ;
+        std::string updateBoxName ( const ModuleDescription* module , std::string content ) ;
+        std::string getHeaderFileName ( const ModuleDescription* module ) ;
+        std::string getBodyFileName ( const ModuleDescription* module ) ;
+        std::string updateBoxInputs ( const ModuleDescription* module , std::string content ) ;
+        const int getNumberOfArguments ( const ModuleDescription* module ) ;
+        std::string updateProcessMethod ( const ModuleDescription* module , std::string content , std::string lib ) ;
+        std::vector < std::string > getFilesByExtention ( std::string dir , std::string ext ) ;
+    } ;
+
+    BBTK_BEGIN_DESCRIBE_BLACK_BOX ( SlicerLibDirToBlackBoxSrc , bbtk::AtomicBlackBox ) ;
+    BBTK_NAME ( "SlicerLibDirToBlackBoxSrc" ) ;
+    BBTK_AUTHOR ( "Juan gabriel RIVEROS REYES" ) ;
+    BBTK_DESCRIPTION ( "Generates all C++ source code from all Slicers shared libs in a directory for later compilation" ) ;
+    BBTK_CATEGORY ( "" ) ;
+    BBTK_INPUT ( SlicerLibDirToBlackBoxSrc , LibDirectoryFullPath , "Full path to shared libraries' directory" , std::string , "" ) ;
+    BBTK_INPUT ( SlicerLibDirToBlackBoxSrc , SrcDestinationDir , "Source code destination directory" , std::string , "" ) ;
+    BBTK_END_DESCRIBE_BLACK_BOX ( SlicerLibDirToBlackBoxSrc ) ;
+
+}
+
+#endif
+
diff --git a/bbtk_Slicer_PKG/src/bbSlicerSlicerLibToBlackBoxSrc.cxx b/bbtk_Slicer_PKG/src/bbSlicerSlicerLibToBlackBoxSrc.cxx
new file mode 100644 (file)
index 0000000..df7074a
--- /dev/null
@@ -0,0 +1,241 @@
+
+#include "bbSlicerSlicerLibToBlackBoxSrc.h"
+#include "bbSlicerPackage.h"
+namespace bbSlicer {
+
+    BBTK_ADD_BLACK_BOX_TO_PACKAGE ( Slicer , SlicerLibToBlackBoxSrc )
+    BBTK_BLACK_BOX_IMPLEMENTATION ( SlicerLibToBlackBoxSrc , bbtk::AtomicBlackBox ) ;
+
+    ///     STD LD_OPEN CALLS       ///
+
+    char* SlicerLibToBlackBoxSrc::
+    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 ;
+        }
+        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 ;
+
+    }
+
+    ///     FILE RELATED     ///
+
+    void SlicerLibToBlackBoxSrc::
+    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 SlicerLibToBlackBoxSrc::
+    loadFile ( const 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 SlicerLibToBlackBoxSrc::
+    loadDummyBody ( ) {
+        return loadFile( "bbSlicerDummy.dummy_cxx" ) ;
+    }
+
+    std::string SlicerLibToBlackBoxSrc::
+    loadDummyHeader ( ) {
+        return loadFile( "bbSlicerDummy.dummy_h" ) ;
+    }
+
+    ///     BBTK BOX CREATION       /// 
+
+    std::string SlicerLibToBlackBoxSrc::
+    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 SlicerLibToBlackBoxSrc::
+    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 SlicerLibToBlackBoxSrc::
+    getHeaderFileName ( const ModuleDescription* module ) {
+        std::string name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ;
+        return "bbSlicer" + name + ".h" ;
+    }
+
+    std::string SlicerLibToBlackBoxSrc::
+    getBodyFileName ( const ModuleDescription* module ) {
+        std::string name = Mthd::Aux::replace_str( module->GetTitle( ) , " " , "" ) ;
+
+        return "bbSlicer" + name + ".cxx" ;
+    }
+
+    std::string SlicerLibToBlackBoxSrc::
+    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 SlicerLibToBlackBoxSrc::
+    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 SlicerLibToBlackBoxSrc::
+    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 ) ;
+    }
+
+    std::vector < std::string > SlicerLibToBlackBoxSrc::
+    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 ;
+    }
+
+    void SlicerLibToBlackBoxSrc::Process ( ) {
+        std::string gblib = bbGetInputLibFullPath( ) ;
+        ///     MODULE INFORMATION      ///
+        std::string des = getModuleDescription( gblib ) ;
+        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 , bbGetInputSrcDestinationDir( ) + "/" + getBodyFileName( &module ) ) ;
+
+    }
+
+    void SlicerLibToBlackBoxSrc::bbUserSetDefaultValues ( ) {
+    }
+
+    void SlicerLibToBlackBoxSrc::bbUserInitializeProcessing ( ) {
+    }
+
+    void SlicerLibToBlackBoxSrc::bbUserFinalizeProcessing ( ) {
+    }
+}
+
+
+
diff --git a/bbtk_Slicer_PKG/src/bbSlicerSlicerLibToBlackBoxSrc.h b/bbtk_Slicer_PKG/src/bbSlicerSlicerLibToBlackBoxSrc.h
new file mode 100644 (file)
index 0000000..1fa3670
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef __bbSlicerSlicerLibToBlackBoxSrc_h_INCLUDED__
+#define __bbSlicerSlicerLibToBlackBoxSrc_h_INCLUDED__
+#include "bbSlicer_EXPORT.h"
+#include "bbtkAtomicBlackBox.h"
+
+
+#include <vector>
+
+#include <cstdlib>
+#include <sstream>
+#include <iostream>
+#include <fstream>
+
+#include <stdio.h>
+#include <dlfcn.h>
+#include <string.h>
+#include <dirent.h>
+
+#include <ModuleDescriptionParser.h>
+#include <ModuleParameterGroup.h>
+#include <ModuleDescription.h>
+#include <ModuleParameter.h>
+
+#include <ModuleDescriptionUtilities.h>
+
+#include "CreationTool.h"
+
+namespace bbSlicer {
+
+    class bbSlicer_EXPORT SlicerLibToBlackBoxSrc
+    :
+    public bbtk::AtomicBlackBox {
+        BBTK_BLACK_BOX_INTERFACE ( SlicerLibToBlackBoxSrc , bbtk::AtomicBlackBox ) ;
+        BBTK_DECLARE_INPUT ( LibFullPath , std::string ) ;
+        BBTK_DECLARE_INPUT ( SrcDestinationDir , std::string ) ;
+        BBTK_PROCESS ( Process ) ;
+        void Process ( ) ;
+
+        ///     STD LD_OPEN CALLS       ///
+        char* getModuleDescription ( const std::string lib ) ;
+        ///     FILE RELATED     ///
+        void saveFile ( const std::string content , const std::string file_name ) ;
+        std::string loadFile ( const std::string filename ) ;
+        std::string loadDummyBody ( ) ;
+        std::string loadDummyHeader ( ) ;
+        ///     BBTK BOX CREATION       /// 
+        std::string updateBoxDescription ( const ModuleDescription* module , std::string _header ) ;
+        std::string updateBoxName ( const ModuleDescription* module , std::string content ) ;
+        std::string getHeaderFileName ( const ModuleDescription* module ) ;
+        std::string getBodyFileName ( const ModuleDescription* module ) ;
+        std::string updateBoxInputs ( const ModuleDescription* module , std::string content ) ;
+        const int getNumberOfArguments ( const ModuleDescription* module ) ;
+        std::string updateProcessMethod ( const ModuleDescription* module , std::string content , std::string lib ) ;
+        std::vector < std::string > getFilesByExtention ( std::string dir , std::string ext ) ;
+    } ;
+
+    BBTK_BEGIN_DESCRIBE_BLACK_BOX ( SlicerLibToBlackBoxSrc , bbtk::AtomicBlackBox ) ;
+    BBTK_NAME ( "SlicerLibToBlackBoxSrc" ) ;
+    BBTK_AUTHOR ( "Juan Gabriel RIVEROS REYES" ) ;
+    BBTK_DESCRIPTION ( "Creates a sigle bbtk box from a single slicers shared library The code generated by this box is intended for later compilation and plug in" ) ;
+    BBTK_CATEGORY ( "" ) ;
+    BBTK_INPUT ( SlicerLibToBlackBoxSrc , LibFullPath , "Library full path" , std::string , "" ) ;
+    BBTK_INPUT ( SlicerLibToBlackBoxSrc , SrcDestinationDir , "Source code destination directory" , std::string , "" ) ;
+    BBTK_END_DESCRIBE_BLACK_BOX ( SlicerLibToBlackBoxSrc ) ;
+
+}
+
+#endif 
+