27 #ifndef _SUPERV_COMPONENT_I_HXX_
28 #define _SUPERV_COMPONENT_I_HXX_
31 #include "base_port.hxx"
32 #include "uses_port.hxx"
33 #include "provides_port.hxx"
34 #include "port_factory.hxx"
36 #include "DSC_Exception.hxx"
55 virtual public POA_Engines::Superv_Component
59 PortableServer::POA_ptr poa,
60 PortableServer::ObjectId * contId,
65 PortableServer::POA_ptr poa,
66 Engines::Container_ptr container,
67 const char *instanceName,
68 const char *interfaceName,
145 virtual void add_port(
const char * port_fab_type,
146 const char * port_type,
147 const char * port_name)
148 throw (PortAlreadyDefined, BadFabType, BadType, BadProperty);
159 template <
typename SpecificPortType >
160 SpecificPortType *
add_port(
const char * port_fab_type,
161 const char * port_type,
162 const char * port_name)
163 throw (PortAlreadyDefined, BadFabType, BadType, BadCast, BadProperty);
172 const char* provides_port_name)
173 throw (PortAlreadyDefined, NilPort, BadProperty);
182 const char* uses_port_name)
183 throw (PortAlreadyDefined, NilPort, BadProperty);
192 const char* provides_port_name)
193 throw (PortNotDefined, PortNotConnected);
202 const char* uses_port_name)
203 throw (PortNotDefined, PortNotConnected);
214 const std::string servicename=
"")
const;
222 template <
typename SpecificPortType >
223 SpecificPortType *
get_port(
const char * port_name)
224 throw (PortNotDefined, PortNotConnected, BadCast, UnexpectedState);
262 static long dscTimeOut;
263 static void setTimeOut();
264 void beginService(
const char *serviceName);
268 typedef std::map<std::string, port_factory*> factory_map_t;
269 static factory_map_t _factory_map;
273 struct superv_port_t {
274 superv_port_t():u_ref(NULL),p_ref(NULL){};
277 if(u_ref)
delete u_ref;
281 PortableServer::ServantBase* servant=
dynamic_cast<PortableServer::ServantBase*
>(p_ref);
284 PortableServer::POA_var poa =servant->_default_POA();
285 PortableServer::ObjectId_var oid = poa->servant_to_id(servant);
286 poa->deactivate_object(oid);
287 servant->_remove_ref();
297 typedef std::map<std::string, superv_port_t *> superv_ports;
302 superv_ports my_superv_ports;
303 superv_ports::iterator my_superv_ports_it;
308 template <
typename SpecificPortType > SpecificPortType *
310 const char * port_type,
311 const char * port_name)
314 assert(port_fab_type);
317 SpecificPortType * retPort;
320 std::cout <<
"---- Superv_Component_i::add_port : Mark 0 ---- " << port_name <<
"----" << std::endl;
323 std::string s_port_type(port_type);
324 if (s_port_type ==
"provides") {
325 provides_port * port = create_provides_data_port(port_fab_type);
326 add_port(port, port_name);
327 retPort =
dynamic_cast<SpecificPortType *
>(port);
328 if ( retPort == NULL ) {
delete port;
329 throw BadCast( LOC(
"Can't cast to asked port type " ));
332 else if (s_port_type ==
"uses") {
333 uses_port * port = create_uses_data_port(port_fab_type);
334 add_port(port, port_name);
336 std::cout <<
"---- Superv_Component_i::add_port : Mark 1 ---- " << port <<
"----" << std::endl;
337 std::cout <<
"---- Superv_Component_i::add_port : Mark 1 ---- get_repository_id()" << port->
get_repository_id() << std::endl;
339 retPort =
dynamic_cast<SpecificPortType *
>(port);
341 std::cout <<
"---- Superv_Component_i::add_port : Mark 2 ---- " << retPort <<
"----" << std::endl;
343 if ( retPort == NULL ) {
delete port;
344 throw BadCast( LOC(
"Can't cast to asked port type " ));
348 throw BadType(LOC(
OSS()<<
"port_type must be either 'provides' either 'uses' not "
355 template <
typename SpecificPortType > SpecificPortType *
361 SpecificPortType * retPort;
364 my_superv_ports_it = my_superv_ports.find(port_name);
365 if (my_superv_ports_it == my_superv_ports.end())
370 superv_port_t * superv_port = my_superv_ports[port_name];
372 if ( superv_port->p_ref != NULL ) {
373 port = superv_port->p_ref;
376 else if ( superv_port->u_ref != NULL ) {
377 port = superv_port->u_ref;
381 throw UnexpectedState( LOC(
OSS()<<
"Internal Error superv_port struct is inconsistent "));
386 << port_name <<
" does not exist."));
389 <<
" is not connected."));
392 retPort =
dynamic_cast<SpecificPortType *
>(port);
393 if ( retPort == NULL ) {
394 throw BadCast( LOC(
"Can't cast to required port type " ));
This class implements DSC_User component.
Definition: Superv_Component_i.hxx:53
Definition: Superv_Component_i.hxx:81
This class implements the interface Engines::DSC.
Definition: DSC_i.hxx:45
static void register_factory(const std::string &factory_name, port_factory *factory_ptr)
Definition: Superv_Component_i.cxx:80
Definition: Superv_Component_i.hxx:77
Definition: Superv_Component_i.hxx:78
char * instanceName()
Definition: Component_i.cxx:212
Definition: Superv_Component_i.hxx:80
virtual const char * get_repository_id()=0
virtual void get_port(provides_port *&port, const char *provides_port_name)
Definition: Superv_Component_i.cxx:249
virtual void get_uses_port_names(std::vector< std::string > &port_names, const std::string servicename="") const
Definition: Superv_Component_i.cxx:316
Definition: base_port.hxx:35
virtual void uses_port_changed(const char *uses_port_name, Engines::DSC::uses_port *new_uses_port, const Engines::DSC::Message message)
Definition: Superv_Component_i.cxx:301
char * interfaceName()
Definition: Component_i.cxx:223
virtual provides_port * create_provides_data_and_control_port(const char *port_type)
Definition: Superv_Component_i.hxx:95
sequence< Ports::Port > uses_port
a uses port
Definition: DSC_Engines.idl:73
Definition: Superv_Component_i.hxx:79
virtual provides_port * create_provides_data_port(const std::string &port_fab_type)
Definition: Superv_Component_i.cxx:106
virtual provides_port * create_provides_control_port()
Definition: Superv_Component_i.hxx:89
This exception is raised when a port is used before it is added to the component. ...
Definition: DSC_Engines.idl:84
virtual Ports::Port_ptr get_provides_port(const char *provides_port_name, const CORBA::Boolean connection_error)
Definition: DSC_interface.cxx:114
Definition: Superv_Component_i.hxx:84
virtual uses_port * create_uses_data_and_control_port(const char *port_type)
Definition: Superv_Component_i.hxx:107
Definition: Superv_Component_i.hxx:76
Definition: Superv_Component_i.hxx:83
virtual port_factory * get_factory(const std::string &factory_name)
Definition: Superv_Component_i.cxx:92
virtual void add_port(const char *port_fab_type, const char *port_type, const char *port_name)
Definition: Superv_Component_i.cxx:156
virtual Engines::DSC::uses_port * get_uses_port(const char *uses_port_name)
Definition: DSC_i.hxx:111
virtual void provides_port_changed(const char *provides_port_name, int connection_nbr, const Engines::DSC::Message message)
Definition: Superv_Component_i.cxx:290
This class implements a DSC_User provides C++ port.
Definition: provides_port.hxx:40
This class implements a DSC_User uses C++ port.
Definition: uses_port.hxx:43
Message
This enumeration is used when the connection of a port (uses or provides) is changed.
Definition: DSC_Engines.idl:79
This exception is raised when you try to use a port that is not connected.
Definition: DSC_Engines.idl:90
virtual uses_port * create_uses_data_port(const std::string &port_fab_type)
Definition: Superv_Component_i.cxx:131
Definition: Superv_Component_i.hxx:82
This class is an abstract for all the DSC ports factories that have to be registered into the compone...
Definition: port_factory.hxx:37
virtual uses_port * create_uses_control_port()
Definition: Superv_Component_i.hxx:101
Class OSS is useful when streaming data through a function that expect a string as parameter...
Definition: DSC_Exception.hxx:64