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)
312 throw (PortAlreadyDefined, BadFabType, BadType, BadCast, BadProperty)
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 " ));