]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/Interface.cxx
bb5b35c92ac32a7f85cfaefbd9432ed01bc3b884
[cpPlugins.git] / lib / cpPlugins / Interface / Interface.cxx
1 #include <cpPlugins/Interface/Interface.h>
2
3 // -------------------------------------------------------------------------
4 cpPlugins::Interface::Interface::
5 Interface( )
6 {
7   this->m_Pluma.acceptProviderType< ProcessObjectProvider >( );
8 }
9
10 // -------------------------------------------------------------------------
11 cpPlugins::Interface::Interface::
12 ~Interface( )
13 {
14   this->UnloadAll( );
15 }
16
17 // -------------------------------------------------------------------------
18 cpPlugins::Interface::Interface::
19 TClasses& cpPlugins::Interface::Interface::
20 GetClasses( )
21 {
22   return( this->m_Classes );
23 }
24
25 // -------------------------------------------------------------------------
26 const cpPlugins::Interface::Interface::
27 TClasses& cpPlugins::Interface::Interface::
28 GetClasses( ) const
29 {
30   return( this->m_Classes );
31 }
32
33 // -------------------------------------------------------------------------
34 cpPlugins::Interface::ProcessObject::Pointer
35 cpPlugins::Interface::Interface::
36 CreateObject( const std::string& name ) const
37 {
38   TClassesIterator cIt = this->m_Classes.find( name );
39   if( cIt != this->m_Classes.end( ) )
40   {
41     ProcessObjectProvider* provider =
42       dynamic_cast< ProcessObjectProvider* >(
43         this->m_Providers[ cIt->second ]
44         );
45     if( provider != NULL )
46       return( provider->create( ) );
47
48   } // fi
49   return( NULL );
50 }
51
52 // -------------------------------------------------------------------------
53 bool cpPlugins::Interface::Interface::
54 Load( const std::string& path )
55 {
56   bool ret = true;
57   try
58   {
59     ret = this->m_Pluma.load( path );
60     if( ret )
61       this->_LoadClasses( );
62   }
63   catch( ... )
64   {
65     ret = false;
66
67   } // yrt
68   return( ret );
69 }
70
71 // -------------------------------------------------------------------------
72 bool cpPlugins::Interface::Interface::
73 Load( const std::string& folder, const std::string& name )
74 {
75   bool ret = true;
76   try
77   {
78     ret = this->m_Pluma.load( folder, name );
79     if( ret )
80       this->_LoadClasses( );
81   }
82   catch( ... )
83   {
84     ret = false;
85
86   } // yrt
87   return( ret );
88 }
89
90 // -------------------------------------------------------------------------
91 std::list< std::string > cpPlugins::Interface::Interface::
92 LoadFromFolder( const std::string& folder, bool r )
93 {
94   std::list< std::string > files;
95   try
96   {
97     files = this->m_Pluma.loadFromFolder( folder, r );
98     if( files.size( ) > 0 )
99       this->_LoadClasses( );
100   }
101   catch( ... )
102   {
103   } // yrt
104   return( files );
105 }
106
107 // -------------------------------------------------------------------------
108 bool cpPlugins::Interface::Interface::
109 Unload( const std::string& name )
110 {
111   bool ret = true;
112   try
113   {
114     ret = this->m_Pluma.unload( name );
115     if( ret )
116     {
117       this->m_Providers.clear( );
118       this->m_Classes.clear( );
119       this->_LoadClasses( );
120
121     } // fi
122   }
123   catch( ... )
124   {
125     ret = false;
126
127   } // yrt
128   return( ret );
129 }
130
131 // -------------------------------------------------------------------------
132 void cpPlugins::Interface::Interface::
133 UnloadAll( )
134 {
135   try
136   {
137     this->m_Pluma.unloadAll( );
138   }
139   catch( ... )
140   {
141     // Do nothing
142
143   } // yrt
144   this->m_Providers.clear( );
145   this->m_Classes.clear( );
146 }
147
148 // -------------------------------------------------------------------------
149 void cpPlugins::Interface::Interface::
150 GetLoadedPlugins( std::vector< const std::string* >& names ) const
151 {
152   this->m_Pluma.getLoadedPlugins( names );
153 }
154
155 // -------------------------------------------------------------------------
156 bool cpPlugins::Interface::Interface::
157 IsLoaded( const std::string& name ) const
158 {
159   return( this->m_Pluma.isLoaded( name ) );
160 }
161
162 // -------------------------------------------------------------------------
163 void cpPlugins::Interface::Interface::
164 _LoadClasses( )
165 {
166   this->m_Providers.clear( );
167   this->m_Classes.clear( );
168   this->m_Pluma.getProviders( this->m_Providers );
169
170   // Get reader provider
171   for( unsigned int i = 0; i < this->m_Providers.size( ); ++i )
172   {
173     ProcessObject::Pointer dummy = this->m_Providers[ i ]->create( );
174     this->m_Classes[ dummy->GetClassName( ) ] = i;
175
176   } // rof
177 }
178
179 // eof - $RCSfile$