+ // Get filters and check pertinence
+ TFilter* origin = this->GetFilter( origin_filter );
+ TFilter* destination = this->GetFilter( destination_filter );
+ if( origin == NULL || destination == NULL )
+ return( false );
+ if( !( destination->HasInput( destination_input ) ) )
+ return( false );
+ if( !( origin->HasOutput( origin_output ) ) )
+ return( false );
+
+ // Check if there is room for a new connection
+ bool ok = false;
+ unsigned int del_id = 0;
+ for(
+ unsigned int i = 0;
+ i < destination->GetInputSize( destination_input );
+ ++i
+ )
+ if(
+ destination->GetInput( destination_input, i )->GetSource( ) == origin
+ )
+ {
+ ok = true;
+ del_id = i;
+
+ } // fi
+ if( ok )
+ destination->DisconnectInput( destination_input, del_id );
+ return( ok );
+}
+
+// -------------------------------------------------------------------------
+/*
+const cpPlugins::Interface::Workspace::
+TExposedPorts& cpPlugins::Interface::Workspace::
+GetExposedInputs( ) const
+{
+ return( this->m_ExposedInputs );
+}
+
+// -------------------------------------------------------------------------
+const cpPlugins::Interface::Workspace::
+TExposedPorts& cpPlugins::Interface::Workspace::
+GetExposedOutputs( ) const
+{
+ return( this->m_ExposedOutputs );
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Pipeline::DataObject* cpPlugins::Interface::Workspace::
+GetExposedOutput( const std::string& name )
+{
+ auto i = this->m_ExposedOutputs.find( name );
+ if( i != this->m_ExposedOutputs.end( ) )