diff options
author | venkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-08-01 12:54:00 +0000 |
---|---|---|
committer | venkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-08-01 12:54:00 +0000 |
commit | f476af68afc94185ea34155da870665f82bfd3cf (patch) | |
tree | a86eb00de6c0cfb0d5eca2d8711e3375fd80a889 | |
parent | 7b728169d49d3692e75c596619562964a8244490 (diff) | |
download | ATCD-f476af68afc94185ea34155da870665f82bfd3cf.tar.gz |
*** empty log message ***
-rw-r--r-- | TAO/CIAO/DAnCE/StaticConfigurator/StaticDAnCEParser.cpp | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/TAO/CIAO/DAnCE/StaticConfigurator/StaticDAnCEParser.cpp b/TAO/CIAO/DAnCE/StaticConfigurator/StaticDAnCEParser.cpp new file mode 100644 index 00000000000..f8c92f5c396 --- /dev/null +++ b/TAO/CIAO/DAnCE/StaticConfigurator/StaticDAnCEParser.cpp @@ -0,0 +1,201 @@ +// $Id$ + +#include "NodeApplication_Impl.h" +//#include "Deployment_CoreC.h" +//#include "Deployment_DataC.h" +#include "CIAO/DAnCE/NodeApplicationManager/ImplementationInfo.h" +//#include "CIAO/DAnCE/RepositoryManager/RepositoryManager_Impl.h" +#include "CIAO/DAnCE/RepositoryManager/Update_Plan.h" +#include "CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.h" +#include "Config_Handlers/DnC_Dump.h" +#include "orbsvcs/orbsvcs/Naming/Transient_Naming_Context.h" +#include "ace/OS_NS_stdio.h" +#include "ace/streams.h" +#include "ace/Get_Opt.h" +#include "tao/IORTable/IORTable.h" +#include "tao/CDR.h" +#include "Config_Handlers/XML_File_Intf.h" + + +//using namespace std; +using namespace CIAO; + +const char * exec_ior = "file://exec_mgr.ior"; +const char * node_daemon_ior = 0; +const char * init_file = "deployment.dat"; + +static void +usage (const ACE_TCHAR* program) +{ + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Usage: %s -p <URI> -d <URI> -k <EX_IOR> \ + -t <NODE_MANAGER_IOR> \n") + ACE_TEXT (" <URI>: URI identifying the package\n"), + program)); +} + +int +ACE_TMAIN (int argc, ACE_TCHAR *argv[]) +{ + // top level package URL + char* package_url = 0; + + // deployment plan URL + char* plan_url = 0; + + // Initialize the ORB so that CORBA::Any will work + // + CORBA::ORB_var orb = + CORBA::ORB_init (argc, + argv, + ""); + + ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("p:d:")); + int c; + + while ((c = get_opt ()) != EOF) + { + switch (c) + { + case 'p': + package_url = get_opt.opt_arg (); + break; + + case 'd': + plan_url = get_opt.opt_arg (); + break; + + default: + usage(argv[0]); + return -1; + } + } + + if (package_url == 0) { + usage(argv[0]); + return -1; + } + /* + if (plan_url == 0) { + usage(argv[0]); + return -1; + } + */ + CIAO::Config_Handlers::XML_File_Intf intf (package_url); + + ::Deployment::DeploymentPlan_var plan = + intf.get_plan (); + /* + // call the PackageConfiguration handler to parse the XML descriptor. + Deployment::PackageConfiguration* pc; + + CIAO::RepositoryManager_Impl *rep_impl = 0; + ACE_NEW_RETURN (rep_impl, + CIAO::RepositoryManager_Impl (), + -1); + PortableServer::ServantBase_var owner_transfer (rep_impl); + + rep_impl->installPackage ("PC", package_url); + pc = rep_impl->findPackageByName ("PC"); + //ACE_DEBUG ((LM_DEBUG, "Dumping package configuration===start\n")); + //Deployment::DnC_Dump::dump (*pc); + //ACE_DEBUG ((LM_DEBUG, "Dumping package configuration===end\n")); + + CIAO::REF_MAP ref_map; + CIAO::REF_MAP primary_ref_map; + + // traverse the PackageConfiguration IDL data structure and + // update the deployment plan IDL data structure. + CIAO::traverse_package (pc, plan.out(), ref_map, primary_ref_map); + */ + char out_char_array[100000]; + TAO_OutputCDR out_cdr(out_char_array, sizeof(out_char_array) ); + + out_cdr << plan; + + ::Deployment::NodeImplementationInfo node_impl_info; + + //ImplementationInfo impl_info; + + if (!(node_impl_info << plan.in ())) + { + if (CIAO::debug_level () > 1) + ACE_DEBUG ((LM_DEBUG, "Failed to create Node Implementation Info!\n")); + + } + + Deployment::ComponentImplementationInfos& impl_infos = node_impl_info[0].impl_infos; + + CORBA::ULong i; + const CORBA::ULong info_len = impl_infos.length (); + for (i = 0; i < info_len; ++i) + { + ACE_DEBUG ((LM_DEBUG, "The info for installation: \n\t%s\n\t%s\n\t%s\n\t%s\n\t%s\n", + impl_infos[i].component_instance_name.in (), + impl_infos[i].executor_dll.in (), + impl_infos[i].executor_entrypt.in (), + impl_infos[i].servant_dll.in (), + impl_infos[i].servant_entrypt.in () )); + } + + + FILE* fp = fopen ("plan.h", "w"); + + for (i=0;i < info_len; ++i) + { + ACE_OS::fprintf (fp, + "extern \"C\" ::Components::HomeExecutorBase_ptr %s (void);\n", + impl_infos[i].executor_entrypt.in ()); + ACE_OS::fprintf (fp, + "extern \"C\" ::PortableServer::Servant %s \n", + impl_infos[i].servant_entrypt.in ()); + ACE_OS::fprintf (fp, + "\t\t(::Components::HomeExecutorBase_ptr p,\n"); + ACE_OS::fprintf (fp, + "\t\t::CIAO::Session_Container *c,\n"); + ACE_OS::fprintf (fp, + "\t\tconst char*\n"); + ACE_OS::fprintf (fp, + "\t\tACE_ENV_ARG_DECL_WITH_DEFAULTS);\n"); + } + + ACE_OS::fprintf (fp, "struct HomeAttributes\n"); + ACE_OS::fprintf (fp, "{\n"); + ACE_OS::fprintf (fp, " ACE_TString component_instance_name_;\n"); + ACE_OS::fprintf (fp, " /// Specify the entrypoint to component executor DLL.\n"); + ACE_OS::fprintf (fp, " ACE_TString executor_entrypt_;\n"); + ACE_OS::fprintf (fp, " ::CIAO::HomeFactory executor_fptr_;\n"); + ACE_OS::fprintf (fp, " /// Specify the entrypoint to component servant DLL.\n"); + ACE_OS::fprintf (fp, " ACE_TString servant_entrypt_;\n"); + ACE_OS::fprintf (fp, " ::CIAO::ServantFactory servant_fptr_;\n"); + ACE_OS::fprintf (fp, "};\n"); + ACE_OS::fprintf (fp, "//Homes\n"); + ACE_OS::fprintf (fp, "HomeAttributes homes_table[]= \n"); + ACE_OS::fprintf (fp, "{\n"); + for (i=0;i < info_len; ++i) + { + ACE_OS::fprintf (fp, "\t{\"%s\", \"%s\", %s, \"%s\", %s}", + impl_infos[i].component_instance_name.in (), + impl_infos[i].executor_entrypt.in (), + impl_infos[i].executor_entrypt.in (), + impl_infos[i].servant_entrypt.in (), + impl_infos[i].servant_entrypt.in () ); + + if (i != info_len-1) + ACE_OS::fprintf (fp, ",\n"); + } + ACE_OS::fprintf (fp, "};\n\n"); + + ACE_OS::fprintf (fp, "char plan_cdr_buffer[%d] = {", out_cdr.total_length ()); + for (int i=0; i < out_cdr.total_length (); ++i) + { + ACE_OS::fprintf(fp, "0x%X", out_char_array[i]); + if (i<out_cdr.total_length ()) + ACE_OS::fprintf(fp, ",\n"); + } + ACE_OS::fprintf (fp, "};\n\n"); + + fclose (fp); + + return 0; +} |