diff options
Diffstat (limited to 'TAO/CIAO/CIDLC/ServantSourceGenerator.cpp')
-rw-r--r-- | TAO/CIAO/CIDLC/ServantSourceGenerator.cpp | 1330 |
1 files changed, 938 insertions, 392 deletions
diff --git a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp index ed7ea448eae..fae9db4bad2 100644 --- a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp +++ b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp @@ -305,40 +305,6 @@ namespace std::ostream& os; }; - struct RepoIdEmitter : Traversal::Type - { - RepoIdEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - os << "\"" << t.context ().get<string> (STRS[REPO_ID]) << "\""; - } - - private: - std::ostream& os; - }; - - struct ConsumerRepoIdEmitter : Traversal::Type - { - ConsumerRepoIdEmitter (std::ostream& os_) - : os (os_) - {} - - virtual void - traverse (SemanticGraph::Type& t) - { - string holder (t.context ().get<string> (STRS[REPO_ID])); - os << "\"" << holder.substr (0, holder.rfind (':')) - << "Consumer:1.0\""; - } - - private: - std::ostream& os; - }; - struct InterfaceEmitter : Traversal::UnconstrainedInterface, EmitterBase { @@ -664,7 +630,7 @@ namespace << STRS[ENV_SNGL_ARG] << ");" << endl << "}" << "ACE_THROW_RETURN (CORBA::INTERNAL (), 0);" << endl - << "}" << endl; + << "}"; // Close the CIAO_GLUE namespace. os << "}"; @@ -1166,8 +1132,9 @@ namespace << "::Components::CCMHome_ptr home," << endl << "::CIAO::Session_Container *c," << endl << t.name () << "_Servant *sv)" << endl - << " : Context_Impl_Base (home, c)," << endl - << " ctx_svnt_base (home, c, sv)" << endl + << ": home_ (::Components::CCMHome::_duplicate (home))," << endl + << "container_ (c)," << endl + << "servant_ (sv)" << endl << "{" << "}"; @@ -1176,6 +1143,108 @@ namespace << "{" << "}"; + os << "// Operations from ::Components::CCMContext." << endl << endl; + + os << "::Components::Principal_ptr" << endl + << t.name () << "_Context::" + << "get_caller_principal (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << "::CORBA::NO_IMPLEMENT ()," << endl + << "::Components::Principal::_nil ());" << endl + << "}"; + + os << "::Components::CCMHome_ptr" << endl + << t.name () << "_Context::" + << "get_CCM_home (" << endl + << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "return ::Components::CCMHome::_duplicate (this->home_.in ());" + << endl + << "}"; + + os << "CORBA::Boolean" << endl + << t.name () << "_Context::" + << "get_rollback_only (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IS] << "))" << endl + << "{" + << "ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + + os << "::Components::Transaction::UserTransaction_ptr" << endl + << t.name () << "_Context::" + << "get_user_transaction (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IS] << "))" << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << "::CORBA::NO_IMPLEMENT ()," << endl + << "::Components::Transaction::UserTransaction::_nil ());" << endl + << "}"; + + os << "CORBA::Boolean" << endl + << t.name () << "_Context::" + << "is_caller_in_role (" << endl + << "const char * /* role */" << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + + os << "void" << endl + << t.name () << "_Context::" + << "set_rollback_only (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IS] << "))" << endl + << "{" + << "ACE_THROW (CORBA::NO_IMPLEMENT ());" << endl + << "}"; + + os << "// Operations from " << STRS[COMP_SC] << "interface." + << endl << endl; + + os << "CORBA::Object_ptr" << endl + << t.name () << "_Context::" + << "get_CCM_object (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IS] << "))" << endl + << "{" + << "if (CORBA::is_nil (this->component_.in ()))" << endl + << "{" + << "CORBA::Object_var obj =" << endl + << "this->container_->get_objref (" << endl + << "this->servant_" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN (CORBA::Object::_nil ());" << endl + << "this->component_ =" << endl + << t.scoped_name () << "::_narrow (" << endl + << "obj.in ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN (CORBA::Object::_nil ());" << endl + << "if (CORBA::is_nil (this->component_.in ()))" << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << "::CORBA::INTERNAL ()," << endl + << "::CORBA::Object::_nil ());" << endl + << "}" + << "}" + << "return " << t.scoped_name () << "::_duplicate (" << endl + << "this->component_.in ());" << endl + << "}"; + os << "// Operations for " << t.name () << " receptacles" << " and event sources," << endl << "// defined in " << t.scoped_name ().scope_name () << "::CCM_" @@ -1199,7 +1268,13 @@ namespace component_emitter.traverse (t); } - os << "// CIAO-specific." << endl << endl; + os << "// CIAO-specific." << endl << endl + << "::CIAO::Session_Container *" << endl + << t.name () << "_Context::" + << "_ciao_the_Container (void) const" << endl + << "{" + << "return this->container_;" << endl + << "}"; os << t.name () << "_Context *" << endl << t.name () << "_Context::_narrow (" << endl @@ -1272,10 +1347,10 @@ namespace Traversal::Belongs belongs_; }; - struct NavigationGetFacetExecEmitter : Traversal::ProviderData, - EmitterBase + struct NavigationProvidesEmitter : Traversal::ProviderData, + EmitterBase { - NavigationGetFacetExecEmitter (Context& c) + NavigationProvidesEmitter (Context& c) : EmitterBase (c) {} @@ -1285,7 +1360,7 @@ namespace os << "if (ACE_OS::strcmp (name, \"" << t.name () << "\") == 0)" << endl << "{" - << "return this->executor_->get_" << t.name () + << "return this->provide_" << t.name () << " (" << STRS[ENV_SNGL_ARG] << ");" << endl << "}"; } @@ -1580,6 +1655,25 @@ namespace SemanticGraph::Component& scope_; }; + struct ConsumesGetEmitter : Traversal::ConsumerData, + EmitterBase + { + ConsumesGetEmitter (Context& c) + : EmitterBase (c) + {} + + virtual void + traverse (Type& c) + { + os << "if (ACE_OS::strcmp (sink_name, \"" + << c.name () << "\") == 0)" << endl + << "{" + << "return this->get_consumer_" << c.name () + << " (" << STRS[ENV_SNGL_ARG] << ");" << endl + << "}"; + } + }; + struct PublishesSubscribeEmitter : Traversal::PublisherData, EmitterBase { @@ -1736,14 +1830,12 @@ namespace simple_type_name_emitter_ (c.os ()), servant_type_name_emitter_ (c.os ()), enclosing_type_name_emitter_ (c.os ()), - repo_id_emitter_ (c.os ()), scope_ (scope) { belongs_.node_traverser (type_name_emitter_); simple_belongs_.node_traverser (simple_type_name_emitter_); servant_belongs_.node_traverser (servant_type_name_emitter_); enclosing_belongs_.node_traverser (enclosing_type_name_emitter_); - repo_id_belongs_.node_traverser (repo_id_emitter_); } virtual void @@ -1757,17 +1849,10 @@ namespace << STRS[ENV_SNGL_SRC] << ")" << endl << STRS[EXCP_SNGL] << endl << "{" - << "if (! ::CORBA::is_nil (this->provide_" + << "if (::CORBA::is_nil (this->provide_" << p.name () << "_.in ()))" << endl - << "{" - << "return "; - - Traversal::ProviderData::belongs (p, belongs_); - - os << "::_duplicate (this->provide_" << p.name () << "_.in ());" - << "}"; + << "{"; - /* Traversal::ProviderData::belongs (p, enclosing_belongs_); os << "::CCM_"; @@ -1792,21 +1877,29 @@ namespace os << "::_nil ());" << endl << "}"; - */ - os << "::CORBA::Object_var obj =" << endl - << "this->provide_" << p.name () << "_i (" - << STRS[ENV_SNGL_ARG] << ");" - << "ACE_CHECK_RETURN ("; - Traversal::ProviderData::belongs (p, belongs_); + Traversal::ProviderData::belongs (p, servant_belongs_); - os << "::_nil ());" << endl; + os << " *svt =" << endl + << "new "; - ScopedName scoped (scope_.scoped_name ()); - Name stripped (scoped.begin () + 1, scoped.end ()); - string unique_obj_name = - regex::perl_s (stripped.str (), "/::/_/") + "_" + p.name ().str (); + Traversal::ProviderData::belongs (p, servant_belongs_); + os << " (" << endl + << "fexe.in ()," << endl + << "this->context_);" << endl + << "PortableServer::ServantBase_var safe_servant (svt);" + << endl + << "::CORBA::Object_var obj =" << endl + << "this->container_->install_servant (" << endl + << "svt" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN ("; + + Traversal::ProviderData::belongs (p, belongs_); + + os << "::_nil ());" + << endl; Traversal::ProviderData::belongs (p, belongs_); @@ -1821,8 +1914,10 @@ namespace Traversal::ProviderData::belongs (p, belongs_); - os << "::_nil ());" << endl - << "this->provide_" << p.name () << "_ = fo;" + os << "::_nil ());" + << endl + << "this->provide_" << p.name () << "_ = fo;" << endl + << "}" << "return "; Traversal::ProviderData::belongs (p, belongs_); @@ -1830,99 +1925,6 @@ namespace os << "::_duplicate (this->provide_" << p.name () << "_.in ());" << endl << "}"; - - // Corresponding private provide_*_i() method. - - os << "::CORBA::Object_ptr" << endl - << scope_.name () - << "_Servant::provide_" << p.name () << "_i (" << endl - << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_SNGL] << endl - << "{" - << "::CORBA::Object_ptr ret =" << endl - << "this->lookup_facet (\"" << p.name () << "\");" << endl; - - os << "if (! ::CORBA::is_nil (ret))" << endl - << "{" - << "return ret;" - << "}"; - - os << "CIAO::Port_Activator_T<" << endl - << " "; - - Traversal::ProviderData::belongs (p, servant_belongs_); - - os << "," << endl - << " "; - - Traversal::ProviderData::belongs (p, enclosing_belongs_); - - os << "::CCM_"; - - Traversal::ProviderData::belongs (p, simple_belongs_); - - os << "," << endl - << " ::Components::CCMContext," << endl - << " " << scope_.name () << "_Servant" << endl - << " > *tmp = 0;" << endl - << "typedef CIAO::Port_Activator_T<" << endl - << " "; - - Traversal::ProviderData::belongs (p, servant_belongs_); - - os << "," << endl - << " "; - - Traversal::ProviderData::belongs (p, enclosing_belongs_); - - os << "::CCM_"; - - Traversal::ProviderData::belongs (p, simple_belongs_); - - os << "," << endl - << " ::Components::CCMContext," << endl - << " " << scope_.name () << "_Servant" << endl - << " >" << endl - << "MACRO_MADNESS_TYPEDEF;" << endl; - - os << "ACE_NEW_THROW_EX ( " << endl - << "tmp," << endl - << "MACRO_MADNESS_TYPEDEF (" << endl - << "\"" << unique_obj_name << "\"," << endl - << "\"" << p.name () << "\"," << endl - << "CIAO::Port_Activator::Facet," << endl - << "0," << endl - << "this->context_," << endl - << "this)," << endl - << "CORBA::NO_MEMORY ());" << endl; - - os << "CIAO::Servant_Activator *sa = " << endl - << "this->container_->ports_servant_activator ();" << endl - << "if (!sa->register_port_activator (tmp))" << endl - << "{" - << "return 0;" << endl - << "}"; - - os << "::CORBA::Object_var obj =" << endl - << "this->container_->generate_reference (" << endl - << "\"" << unique_obj_name << "\"," << endl; - - Traversal::ProviderData::belongs (p, repo_id_belongs_); - - os << "," << endl - << "CIAO::Container::Facet_Consumer" << endl - << STRS[ENV_ARG] << ");" - << "ACE_CHECK_RETURN ("; - - Traversal::ProviderData::belongs (p, belongs_); - - os << "::_nil ());" << endl - << "this->add_facet (" << endl - << "\"" << p.name () << "\"," << endl - << "obj.in ());" << endl; - - os << "return obj._retn ();" << endl - << "}"; } private: @@ -1930,12 +1932,10 @@ namespace SimpleTypeNameEmitter simple_type_name_emitter_; ServantTypeNameEmitter servant_type_name_emitter_; EnclosingTypeNameEmitter enclosing_type_name_emitter_; - RepoIdEmitter repo_id_emitter_; Traversal::Belongs belongs_; Traversal::Belongs simple_belongs_; Traversal::Belongs servant_belongs_; Traversal::Belongs enclosing_belongs_; - Traversal::Belongs repo_id_belongs_; SemanticGraph::Component& scope_; }; @@ -1946,12 +1946,10 @@ namespace : EmitterBase (c), type_name_emitter_ (c.os ()), simple_type_name_emitter_ (c.os ()), - repo_id_emitter_ (c.os ()), scope_ (scope) { belongs_.node_traverser (type_name_emitter_); simple_belongs_.node_traverser (simple_type_name_emitter_); - repo_id_belongs_.node_traverser (repo_id_emitter_); } virtual void @@ -2080,31 +2078,36 @@ namespace << STRS[ENV_SNGL_SRC] << ")" << endl << STRS[EXCP_SNGL] << endl << "{" - << "if (! ::CORBA::is_nil (this->consumes_" << c.name () + << "if (CORBA::is_nil (this->consumes_" << c.name () << "_.in ()))" << endl << "{" - << "return "; + << scope_.name () << "_Servant::"; - Traversal::ConsumerData::belongs (c, belongs_); + Traversal::ConsumerData::belongs (c, simple_belongs_); - os << "Consumer::_duplicate (this->consumes_" - << c.name () << "_.in ());" - << "}"; + os << "Consumer_" << c.name () + << "_Servant *svt =" << endl + << "new " << scope_.name () + << "_Servant::"; + + Traversal::ConsumerData::belongs (c, simple_belongs_); - os << "::Components::EventConsumerBase_var obj =" << endl - << "this->get_consumer_" << c.name () << "_i (" << endl - << STRS[ENV_SNGL_ARG] << ");" + os << "Consumer_" << c.name () + << "_Servant (" << endl + << "this->executor_.in ()," << endl + << "this->context_);" + << "PortableServer::ServantBase_var safe_servant (svt);" + << endl + << "CORBA::Object_var obj =" << endl + << "this->container_->install_servant (" << endl + << "svt" << endl + << STRS[ENV_ARG] << ");" << "ACE_CHECK_RETURN ("; Traversal::ConsumerData::belongs (c, belongs_); os << "Consumer::_nil ());" << endl; - ScopedName scoped (scope_.scoped_name ()); - Name stripped (scoped.begin () + 1, scoped.end ()); - string unique_obj_name = - regex::perl_s (stripped.str (), "/::/_/") + "_" + c.name ().str (); - Traversal::ConsumerData::belongs (c, belongs_); os << "Consumer_var eco =" << endl; @@ -2118,8 +2121,9 @@ namespace Traversal::ConsumerData::belongs (c, belongs_); - os << "Consumer::_nil ());" << endl - << "this->consumes_" << c.name () << "_ = eco;" + os<< "Consumer::_nil ());" << endl + << "this->consumes_" << c.name () << "_ = eco;" << endl + << "}" << "return "; Traversal::ConsumerData::belongs (c, belongs_); @@ -2127,118 +2131,13 @@ namespace os << "Consumer::_duplicate (this->consumes_" << c.name () << "_.in ());" << endl << "}"; - - // Corresponding private get_consumer_*_i() method. - - os << "::Components::EventConsumerBase_ptr" << endl - << scope_.name () << "_Servant::" - << "get_consumer_" << c.name () << "_i (" << endl - << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_SNGL] << endl - << "{" - << "::Components::EventConsumerBase_ptr ret =" << endl - << "this->lookup_consumer (\"" << c.name () << "\");" << endl; - - os << "if (! ::CORBA::is_nil (ret))" << endl - << "{" - << "return ret;" - << "}"; - - os << "CIAO::Port_Activator_T<" << endl; - - os << scope_.name () << "_Servant::"; - - Traversal::ConsumerData::belongs (c, simple_belongs_); - - os << "Consumer_" << c.name () - << "_Servant," << endl - << c.scoped_name ().scope_name ().scope_name () - << "::CCM_" - << c.scoped_name ().scope_name ().simple_name () - << "," << endl - << c.scoped_name ().scope_name ().scope_name () << "::CCM_" - << c.scoped_name ().scope_name ().simple_name () - << "_Context," << endl - << scope_.name () << "_Servant" - << " > *tmp = 0;" << endl - << "typedef CIAO::Port_Activator_T<" << endl; - - os << scope_.name () << "_Servant::"; - - Traversal::ConsumerData::belongs (c, simple_belongs_); - - os << "Consumer_" << c.name () - << "_Servant," << endl - << c.scoped_name ().scope_name ().scope_name () - << "::CCM_" - << c.scoped_name ().scope_name ().simple_name () - << "," << endl - << c.scoped_name ().scope_name ().scope_name () << "::CCM_" - << c.scoped_name ().scope_name ().simple_name () - << "_Context, " << endl - << scope_.name () << "_Servant" - << " > " << endl - << " MACRO_MADNESS_TYPEDEF;" - << endl << endl; - - os << "ACE_NEW_THROW_EX ( " << endl - << " tmp," << endl - << " MACRO_MADNESS_TYPEDEF (" << endl - << "\"" << unique_obj_name << "\"," << endl - << "\"" << c.name () << "\"," << endl - << "CIAO::Port_Activator::Sink," << endl - << "this->executor_.in ()," << endl - << "this->context_," << endl - << "this)," << endl - << "CORBA::NO_MEMORY ());" << endl << endl; - - os << "CIAO::Servant_Activator *sa = " << endl - << "this->container_->ports_servant_activator ();" <<endl - << "if (!sa->register_port_activator (tmp))" << endl - << "{" - << "return 0;" << endl - << "}"; - - os << "::CORBA::Object_var obj =" << endl - << "this->container_->generate_reference (" << endl - << "\"" << unique_obj_name << "\"," << endl; - - Traversal::ConsumerData::belongs (c, repo_id_belongs_); - - os << "," << endl - << "CIAO::Container::Facet_Consumer" << endl - << STRS[ENV_ARG] << ");" - << "ACE_CHECK_RETURN ("; - - Traversal::ConsumerData::belongs (c, belongs_); - - os << "Consumer::_nil ());" << endl; - - os << "::Components::EventConsumerBase_var ecb =" << endl - << "::Components::EventConsumerBase::_narrow (" << endl - << "obj.in ()" << endl - << STRS[ENV_ARG] << ");" - << "ACE_CHECK_RETURN ("; - - Traversal::ConsumerData::belongs (c, belongs_); - - os << "Consumer::_nil ());" << endl; - - os << "this->add_consumer (" << endl - << "\"" << c.name () << "\"," << endl - << "ecb.in ());" << endl; - - os << "return ecb._retn ();" << endl - << "}"; - } + } private: TypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; - ConsumerRepoIdEmitter repo_id_emitter_; Traversal::Belongs belongs_; Traversal::Belongs simple_belongs_; - Traversal::Belongs repo_id_belongs_; SemanticGraph::Component& scope_; }; @@ -2287,9 +2186,13 @@ namespace traverse (SemanticGraph::Provider& p) { os << "obj_var =" << endl - << "this->provide_" << p.name () << "_i (" << endl - << STRS[ENV_SNGL_ARG] << ");" + << " this->provide_" << p.name () << " (" << endl + << " " << STRS[ENV_SNGL_ARG] << ");" << "ACE_CHECK;" << endl; + + os << "this->add_facet (" << endl + << "\"" << p.name () << "\"," << endl + << "obj_var.in ());" << endl; } virtual void @@ -2310,49 +2213,15 @@ namespace virtual void traverse (SemanticGraph::Consumer& p) { - os << "ecb_var =" << endl - << "this->get_consumer_" << p.name () << "_i (" << endl - << STRS[ENV_SNGL_ARG] << ");" + os << "ec_base_var =" << endl + << " this->get_consumer_" << p.name () << " (" << endl + << " " << STRS[ENV_SNGL_ARG] << ");" << "ACE_CHECK;" << endl; - } - }; - struct SetAttributesEmitter : Traversal::ReadWriteAttribute, - EmitterBase - { - SetAttributesEmitter (Context& c) - : EmitterBase (c), - extract_emitter_ (c.os ()), - assign_emitter_ (c.os ()) - { - extract_belongs_.node_traverser (extract_emitter_); - assign_belongs_.node_traverser (assign_emitter_); - } - - virtual void - pre (SemanticGraph::ReadWriteAttribute& a) - { - os << "if (ACE_OS::strcmp (descr_name, \"" - << a.name () << "\") == 0)" << endl - << "{"; - - Traversal::ReadWriteAttribute::belongs (a, extract_belongs_); - - os << "descr_value >>= " << STRS[EXTRACT] << ";" - << "this->" << a.name () << " ("; - - Traversal::ReadWriteAttribute::belongs (a, assign_belongs_); - - os << ");" - << "continue;" - << "}"; + os << "this->add_consumer (" << endl + << "\"" << p.name () << "\"," << endl + << "ec_base_var.in ());" << endl; } - - private: - ExtractedTypeDeclEmitter extract_emitter_; - AssignFromExtractedEmitter assign_emitter_; - Traversal::Belongs extract_belongs_; - Traversal::Belongs assign_belongs_; }; public: @@ -2373,31 +2242,12 @@ namespace << "_ptr exe," << endl << "::Components::CCMHome_ptr h," << endl << "::CIAO::Session_Container *c)" << endl - << " : Servant_Impl_Base (c)," << endl - << " comp_svnt_base (exe, c)" << endl + << " : our_base (exe, c)" << endl << "{" << "this->context_ = " - << "new " << t.name () << "_Context (h, c, this);" << endl; - - // Generate the macro to register a value factory for each - // eventtype consumed. - { - Traversal::Component component_emitter; - - Traversal::Inherits inherits; - inherits.node_traverser (component_emitter); - - Traversal::Defines defines; - component_emitter.edge_traverser (defines); - component_emitter.edge_traverser (inherits); - - RegisterValueFactoryEmitter factory_emitter (ctx); - defines.node_traverser (factory_emitter); - - component_emitter.traverse (t); - } - - os << "ACE_TRY_NEW_ENV" << endl + << "new " << t.name () << "_Context (h, c, this);" + << endl + << "ACE_TRY_NEW_ENV" << endl << "{" << "::Components::SessionComponent_var scom =" << endl << "::Components::SessionComponent::_narrow (" << endl @@ -2411,9 +2261,6 @@ namespace << STRS[ENV_ARG] << ");" << "ACE_TRY_CHECK;" << "}" - << "this->populate_port_tables (" << endl - << STRS[ENV_SNGL_ARG] << ");" - << "ACE_TRY_CHECK;" << "}" << "ACE_CATCHANY" << endl << "{" @@ -2427,18 +2274,7 @@ namespace << "{" << "}"; - // Override pure virtual set_attributes() operation. - os << "void" << endl - << t.name () << "_Servant::set_attributes (" << endl - << "const ::Components::ConfigValues &descr" << endl - << STRS[ENV_SRC_NOTUSED] << ")" << endl - << "{" - << "for (CORBA::ULong i = 0; i < descr.length (); ++i)" << endl - << "{" - << "const char *descr_name = descr[i]->name ();" - << "::CORBA::Any &descr_value = descr[i]->value ();" << endl; - - // Generate string compare and set for each attribute. + // Generate provides_<facet> operation. { Traversal::Component component_emitter; @@ -2449,20 +2285,30 @@ namespace component_emitter.edge_traverser (defines); component_emitter.edge_traverser (inherits); - SetAttributesEmitter set_attributes_emitter (ctx); - defines.node_traverser (set_attributes_emitter); + FacetProvidesEmitter provides_emitter (ctx, t); + defines.node_traverser (provides_emitter); component_emitter.traverse (t); } + os << "// Operations for Navigation interface." << endl << endl; - os << "ACE_UNUSED_ARG (descr_name);" - << "ACE_UNUSED_ARG (descr_value);" << endl; - - os << "}" + os << "CORBA::Object_ptr" << endl + << t.name () << "_Servant::provide_facet (" << endl + << "const char *name" << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "if (name == 0)" << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << "::CORBA::BAD_PARAM ()," << endl + << "::CORBA::Object::_nil ());" << endl << "}"; - // Generate provides_<facet> operation. + // Generate an IF block for each facet inside provide_facet(). { Traversal::Component component_emitter; @@ -2473,12 +2319,49 @@ namespace component_emitter.edge_traverser (defines); component_emitter.edge_traverser (inherits); - FacetProvidesEmitter provides_emitter (ctx, t); - defines.node_traverser (provides_emitter); + NavigationProvidesEmitter navigation_provides_emitter (ctx); + defines.node_traverser (navigation_provides_emitter); component_emitter.traverse (t); } + os << "ACE_THROW_RETURN (" << endl + << STRS[EXCP_IN] << " ()," << endl + << "::CORBA::Object::_nil ());" << endl + << "}"; + + os << "::Components::FacetDescriptions *" << endl + << t.name () << "_Servant::get_named_facets (" << endl + << "const " << STRS[COMP_NAMES] << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + + os << "::Components::EmitterDescriptions *" << endl + << t.name () << "_Servant::get_all_emitters (" + << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + + os << "::Components::EmitterDescriptions *" << endl + << t.name () << "_Servant::get_named_emitters (" + << endl + << "const " << STRS[COMP_NAMES] << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + // Generate subscribe_* and unsubscribe_* operations. { Traversal::Component component_emitter; @@ -2595,6 +2478,39 @@ namespace << "ACE_UNUSED_ARG (ck);" << endl << "}"; + os << "::Components::ConnectionDescriptions *" << endl + << t.name () << "_Servant::get_connections (" + << endl + << "const char * /* name */" << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + + os << "::Components::ReceptacleDescriptions *" << endl + << t.name () << "_Servant::get_all_receptacles (" + << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + + os << "::Components::ReceptacleDescriptions *" << endl + << t.name () << "_Servant::get_named_receptacles (" + << endl + << "const " << STRS[COMP_NAMES] << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + // Generate generic operations for receptacles. { Traversal::Component component_emitter; @@ -2612,6 +2528,43 @@ namespace component_emitter.traverse (t); } + os << STRS[COMP_ECB] << "_ptr" << endl + << t.name () << "_Servant::get_consumer (" << endl + << "const char *sink_name" << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "if (sink_name == 0)" << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << STRS[EXCP_IN] << " ()," << endl + << STRS[COMP_ECB] << "::_nil ());" << endl + << "}"; + + // Generate an IF block in for each consumer in get_consumer(). + { + Traversal::Component component_emitter; + + Traversal::Inherits inherits; + inherits.node_traverser (component_emitter); + + Traversal::Defines defines; + component_emitter.edge_traverser (defines); + component_emitter.edge_traverser (inherits); + + ConsumesGetEmitter consumes_emitter (ctx); + defines.node_traverser (consumes_emitter); + + component_emitter.traverse (t); + } + + os << "ACE_THROW_RETURN (" << endl + << STRS[EXCP_IN] << " ()," << endl + << STRS[COMP_ECB] << "::_nil ());" << endl + << "}"; + os << "void" << endl << t.name () << "_Servant::connect_consumer (" << endl @@ -2651,6 +2604,31 @@ namespace << STRS[EXCP_IN] << " ());" << endl << "}"; + os << STRS[COMP_ECB] << "_ptr" << endl + << t.name () << "_Servant::disconnect_consumer (" + << endl + << "const char * /* source_name */" << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "," << endl + << STRS[EXCP_NC] << "))" << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + + os << "::Components::ConsumerDescriptions *" << endl + << t.name () << "_Servant::get_named_consumers (" + << endl + << "const " << STRS[COMP_NAMES] << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + os << STRS[COMP_CK] << " *" << endl << t.name () << "_Servant::subscribe (" << endl << "const char *publisher_name," << endl @@ -2732,6 +2710,30 @@ namespace << STRS[COMP_ECB] << "::_nil ());" << endl << "}"; + // @@ (diego) These are not implemented. Whenever they are, + // they'll require a treatment as all the other ports above. + + os << "::Components::PublisherDescriptions *" << endl + << t.name () << "_Servant::get_all_publishers (" + << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + + os << "::Components::PublisherDescriptions *" << endl + << t.name () << "_Servant::get_named_publishers (" + << endl + << "const " << STRS[COMP_NAMES] << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}"; + // Generate connect() and disconnect() for each emits declaration. { Traversal::Component component_emitter; @@ -2749,21 +2751,146 @@ namespace component_emitter.traverse (t); } - os << "CORBA::Object_ptr" << endl + os << "// Operations for CCMObject interface." << endl << endl; + + os << "CORBA::IRObject_ptr" << endl + << t.name () << "_Servant::get_component_def (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << "::CORBA::NO_IMPLEMENT ()," << endl + << "::CORBA::IRObject::_nil ());" << endl + << "}"; + + os << "::Components::CCMHome_ptr" << endl + << t.name () << "_Servant::get_ccm_home (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "return this->context_->get_CCM_home " + << "(ACE_ENV_SINGLE_ARG_PARAMETER);" << endl + << "}"; + + os << "::Components::PrimaryKeyBase *" << endl + << t.name () << "_Servant::get_primary_key (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_NKA] << "))" << endl + << "{" + << "ACE_THROW_RETURN (" << STRS[EXCP_NKA] << " (), 0);" << endl + << "}"; + + os << "void" << endl << t.name () - << "_Servant::get_facet_executor (const char *name" << endl - << STRS[ENV_SRC] << ")" << endl + << "_Servant::configuration_complete (" << endl + << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "))" << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_ICF] << "))" << endl << "{" - << "if (name == 0)" << endl + << "// CIAO to-do" << endl + << "}"; + + os << "void" << endl + << t.name () << "_Servant::remove (" << endl + << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_RF] << "))" << endl << "{" + << "// CIAO to-do" << endl + << "}"; + + os << "::Components::ComponentPortDescription *" << endl + << t.name () << "_Servant::get_all_ports (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "::Components::ComponentPortDescription_var retv =" << endl + << "new OBV_Components::ComponentPortDescription;" << endl + << "::Components::FacetDescriptions_var facets_desc =" << endl + << "this->get_all_facets (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK_RETURN (0);" << endl + << "::Components::ReceptacleDescriptions_var receptacle_desc =" + << endl + << "this->get_all_receptacles (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK_RETURN (0);" << endl + << "::Components::ConsumerDescriptions_var consumer_desc =" << endl + << "this->get_all_consumers (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK_RETURN (0);" << endl + << "::Components::EmitterDescriptions_var emitter_desc =" << endl + << "this->get_all_emitters (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK_RETURN (0);" << endl + << "::Components::PublisherDescriptions_var publisher_desc =" + << endl + << "this->get_all_publishers (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK_RETURN (0);" << endl + << "retv->facets (facets_desc.in ());" + << "retv->receptacles (receptacle_desc.in ());" + << "retv->consumers (consumer_desc.in ());" + << "retv->emitters (emitter_desc.in ());" + << "retv->publishers (publisher_desc.in ());" << endl + << "return retv._retn ();" << endl + << "}"; + + os << "CORBA::Object_ptr" << endl + << t.name () << "_Servant::_get_component (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << STRS[COMP_SC] << "_var sc =" << endl + << STRS[COMP_SC] << "::_narrow (" << endl + << "this->context_" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN (::CORBA::Object::_nil ());" << endl + << "if (! ::CORBA::is_nil (sc.in ()))" << endl + << "{" + << "return sc->get_CCM_object (" << STRS[ENV_SNGL_ARG] << ");" + << endl + << "}" + << "::Components::EntityContext_var ec =" << endl + << "::Components::EntityContext::_narrow (" << endl + << "this->context_" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN (::CORBA::Object::_nil ());" << endl + << "if (! ::CORBA::is_nil (ec.in ()))" << endl + << "{" + << "return ec->get_CCM_object (" << STRS[ENV_SNGL_ARG] << ");" + << endl + << "}" << "ACE_THROW_RETURN (" << endl - << "::CORBA::BAD_PARAM ()," << endl + << "::CORBA::INTERNAL ()," << endl << "::CORBA::Object::_nil ());" << endl << "}"; - // Generate an IF block for each facet inside provide_facet(). + os << "// CIAO-specific operations." << endl << endl; + + os << "void" << endl + << t.name () << "_Servant::ciao_preactivate (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "::Components::SessionComponent_var temp =" << endl + << "::Components::SessionComponent::_narrow (" << endl + << "this->executor_.in ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK;" << endl + << "if (! ::CORBA::is_nil (temp.in ()))" << endl + << "{" + << "temp->ciao_preactivate (" << STRS[ENV_SNGL_ARG] << ");" << endl + << "}" + << "}"; + + os << "void" << endl + << t.name () << "_Servant::ciao_activate (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{"; + + // Generate the macro to register a value factory for each + // eventtype consumed. { Traversal::Component component_emitter; @@ -2774,14 +2901,60 @@ namespace component_emitter.edge_traverser (defines); component_emitter.edge_traverser (inherits); - NavigationGetFacetExecEmitter navigation_facet_exec_emitter (ctx); - defines.node_traverser (navigation_facet_exec_emitter); + RegisterValueFactoryEmitter factory_emitter (ctx); + defines.node_traverser (factory_emitter); component_emitter.traverse (t); } - os << " return CORBA::Object::_nil ();" + os << "::Components::SessionComponent_var temp =" << endl + << "::Components::SessionComponent::_narrow (" << endl + << "this->executor_.in ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK;" << endl + << "if (! ::CORBA::is_nil (temp.in ()))" << endl + << "{" + << "temp->ccm_activate (" << STRS[ENV_SNGL_ARG] << ");" << endl + << "}" + << "}"; + + os << "void" << endl + << t.name () << "_Servant::ciao_postactivate (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "::Components::SessionComponent_var temp =" << endl + << "::Components::SessionComponent::_narrow (" << endl + << "this->executor_.in ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK;" << endl + << "if (! ::CORBA::is_nil (temp.in ()))" << endl + << "{" + << "temp->ciao_postactivate (" << STRS[ENV_SNGL_ARG] << ");" +// << "ACE_CHECK;" + << "}" +// @@@ JP - This is commented out for now until other issues in +// DaNCe get resolved +// << "this->populate_port_tables (" << STRS[ENV_SNGL_ARG] +// << ");" << "}"; + + os << "void" << endl + << t.name () << "_Servant::_ciao_passivate (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "::Components::SessionComponent_var temp =" << endl + << "::Components::SessionComponent::_narrow (" << endl + << "this->executor_.in ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK;" << endl + << "if (! ::CORBA::is_nil (temp.in ()))" << endl + << "{" + << "temp->ccm_passivate (" << STRS[ENV_SNGL_ARG] << ");" << endl + << "}" + << "}"; + os << "// Supported operations." << endl << endl; // Generate operations for all supported interfaces. @@ -2870,7 +3043,7 @@ namespace } os << "// Private method to populate the port tables." - << endl; + << endl << endl; os << "void" << endl << t.name () << "_Servant::populate_port_tables (" << endl @@ -2878,7 +3051,7 @@ namespace << STRS[EXCP_SNGL] << endl << "{" << "::CORBA::Object_var obj_var;" - << "::Components::EventConsumerBase_var ecb_var;" << endl; + << "::Components::EventConsumerBase_var ec_base_var;" << endl; { Traversal::Component component_emitter; @@ -3181,7 +3354,7 @@ namespace os << "{" << "ACE_THROW_RETURN (" << endl << "::CORBA::NO_IMPLEMENT ()," << endl; - + Traversal::HomeFinder::returns (hf, simple_returns_); os << "::_nil ());" @@ -3219,8 +3392,9 @@ namespace << t.scoped_name ().scope_name () << "::CCM_" << t.name () << "_ptr exe," << endl << "::CIAO::Session_Container *c)" << endl - << " : CIAO::Home_Servant_Impl_Base (c)," << endl - << " " << "home_svnt_base (exe, c)" << endl + << ": executor_ (" << t.scoped_name ().scope_name () << "::CCM_" + << t.name () << "::_duplicate (exe))," << endl + << "container_ (c)" << endl << "{" << "}"; @@ -3417,6 +3591,380 @@ namespace home_emitter.traverse (t); } + + os << "// Operations for keyless home interface." << endl << endl; + + os << "::Components::CCMObject_ptr" << endl + << t.name () << "_Servant::create_component (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << "::Components::CreateFailure))" << endl + << "{" + << "return this->create (" << STRS[ENV_SNGL_ARG] << ");" << endl + << "}"; + + os << "// Operations for implicit home interface." << endl << endl; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_ptr" << endl + << t.name () << "_Servant::create (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << "::Components::CreateFailure))" << endl + << "{" + << "if (this->executor_.in () == 0)" << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << "::CORBA::INTERNAL ()," << endl; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_nil ());" << endl + << "}" + << STRS[COMP_EC] << "_var _ciao_ec =" << endl + << "this->executor_->create (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK_RETURN ("; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_nil ());" << endl; + + { + EnclosingTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::CCM_"; + + { + SimpleTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_var _ciao_comp =" << endl; + + { + EnclosingTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::CCM_"; + + { + SimpleTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_narrow (" << endl + << "_ciao_ec.in ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN ("; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_nil ());" << endl + << "return this->_ciao_activate_component (" << endl + << "_ciao_comp.in ()" << endl + << STRS[ENV_ARG] << ");" << endl + << "}"; + + os << "// Operations for CCMHome interface." << endl << endl; + + os << "::CORBA::IRObject_ptr" << endl + << t.name () << "_Servant::get_component_def (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << "::CORBA::NO_IMPLEMENT ()," << endl + << "::CORBA::IRObject::_nil ());" << endl + << "}"; + + os << "::CORBA::IRObject_ptr" << endl + << t.name () << "_Servant::get_home_def (" << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (" << endl + << "::CORBA::NO_IMPLEMENT ()," << endl + << "::CORBA::IRObject::_nil ());" << endl + << "}"; + + os << "void" << endl + << t.name () << "_Servant::remove_component (" << endl + << "::Components::CCMObject_ptr comp" << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_RF] << "))" << endl + << "{"; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_var _ciao_comp =" << endl; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_narrow (" << endl + << "comp" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK;" << endl + << "if (CORBA::is_nil (_ciao_comp.in ()))" << endl + << "{" + << "ACE_THROW (CORBA::INTERNAL ());" << endl + << "}" + << "_ciao_comp->remove (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK;" << endl + << "this->_ciao_passivate_component (" << endl + << "_ciao_comp.in ()" << endl + << STRS[ENV_ARG] << ");" << endl + << "}"; + + os << "// CIAO-specific operations." << endl << endl; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_ptr" << endl + << t.name () + << "_Servant::_ciao_activate_component (" << endl; + + { + EnclosingTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::CCM_"; + + { + SimpleTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_ptr exe" << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "::CORBA::Object_var hobj =" << endl + << "this->container_->get_objref (" << endl + << "this" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN ("; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_nil ());" + << endl + << "::Components::CCMHome_var home =" << endl + << "::Components::CCMHome::_narrow (" << endl + << "hobj.in ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN ("; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_nil ());" + << endl; + + { + SimpleTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_Servant *svt =" << endl + << "new "; + + { + SimpleTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_Servant (" + << endl + << "exe," << endl + << "home.in ()," << endl + << "this->container_);" << endl + << "PortableServer::ServantBase_var safe (svt);" + << "PortableServer::ObjectId_var oid;" << endl + << "CORBA::Object_var objref =" << endl + << "this->container_->install_component (" << endl + << "svt," << endl + << "oid.out ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN ("; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_nil ());" + << endl; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_var ho =" << endl; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_narrow (" << endl + << "objref.in ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK_RETURN ("; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "::_nil ());" + << endl + << "if (this->component_map_.bind (oid.in (), svt) == 0)" << endl + << "{" + << "safe._retn ();" << endl + << "}" + << "return ho._retn ();" << endl + << "}"; + + os << "void" << endl + << t.name () + << "_Servant::_ciao_passivate_component (" << endl; + + { + TypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_ptr comp" << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "PortableServer::ObjectId_var oid;" << endl + << "this->container_->uninstall_component (" << endl + << "comp," << endl + << "oid.out ()" << endl + << STRS[ENV_ARG] << ");" + << "ACE_CHECK;" << endl; + + { + SimpleTypeNameEmitter name_emitter (os); + Traversal::Manages manages_; + manages_.node_traverser (name_emitter); + + manages (t, manages_); + } + + os << "_Servant *servant = 0;" + << endl + << "if (this->component_map_.unbind (oid.in (), servant) == 0)" + << endl + << "{" + << "PortableServer::ServantBase_var safe (servant);" << endl + << "servant->_ciao_passivate (" << STRS[ENV_SNGL_ARG] << ");" + << "ACE_CHECK;" << endl + << "}" + << "}"; } virtual void @@ -3513,9 +4061,7 @@ ServantSourceEmitter::pre (TranslationUnit& u) + "/"); os << "#include \"" << file_name << "\"" << endl - << "#include \"Cookies.h\"" << endl - << "#include \"ciao/Servant_Activator.h\"" << endl - << "#include \"ciao/Port_Activator_T.h\"" << endl << endl; + << "#include \"Cookies.h\"" << endl << endl; } void |