• Classes
  • Modules
  • Namespaces
  • Files
  • Related Pages
  • File List
  • File Members

acsServicesHandlerImpl.h

Go to the documentation of this file.
00001 #ifndef _ACS_SERVICES_HANDLER_IMPL_H_
00002 #define _ACS_SERVICES_HANDLER_IMPL_H_
00003 
00004 /*******************************************************************************
00005 *    ALMA - Atacama Large Millimiter Array
00006 *    (c) European Southern Observatory, 2002
00007 *    Copyright by ESO (in the framework of the ALMA collaboration)
00008 *    and Cosylab 2002, All rights reserved
00009 *
00010 *    This library is free software; you can redistribute it and/or
00011 *    modify it under the terms of the GNU Lesser General Public
00012 *    License as published by the Free Software Foundation; either
00013 *    version 2.1 of the License, or (at your option) any later version.
00014 *
00015 *    This library is distributed in the hope that it will be useful,
00016 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00017 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018 *    Lesser General Public License for more details.
00019 *
00020 *    You should have received a copy of the GNU Lesser General Public
00021 *    License along with this library; if not, write to the Free Software
00022 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
00023 *
00024 * "@(#) $Id: acsServicesHandlerImpl.h,v 1.15 2012/05/15 09:06:34 msekoran Exp $"
00025 *
00026 * who       when      what
00027 * --------  --------  ----------------------------------------------
00028 * msekoran 2006-06-21 created 
00029 * agrimstr 2007-11-07 refactored Services interface into separate
00030 *                     class for use in template pattern implementation
00031 *                     of the acsdaemon
00032 * azagar   2008-08-12 migrated to ACS 8.0
00033 */
00034 
00035 #ifndef __cplusplus
00036 #error This is a C++ include file and cannot be used from plain C
00037 #endif
00038 
00039 #include "acsDaemonUtils.h"
00040 #include "acsDaemonImpl.h"
00041 #include "acsRequest.h"
00042 #include "acsServiceController.h"
00043 
00044 
00045 class ServiceDefinitionBuilderImpl : public POA_acsdaemon::ServiceDefinitionBuilder {
00046 
00047     short instance;
00048     ACE_CString services_definition_xml;
00049 
00050     static int definition_builder_count;
00051 
00052   public:
00053 
00054     ServiceDefinitionBuilderImpl(short instance_number) : instance(instance_number), services_definition_xml("") {
00055         if (definition_builder_count >= 10) {
00056             throw ::ACSErrTypeCommon::NoResourcesExImpl(__FILE__, __LINE__, 
00057                 "::ServiceDefinitionBuilderImpl::ServiceDefinitionBuilderImpl").getNoResourcesEx();
00058         }
00059         if (instance_number < 0 || instance_number > 10) {
00060             throw ::ACSErrTypeCommon::BadParameterExImpl(__FILE__, __LINE__, 
00061                 "::ServiceDefinitionBuilderImpl::ServiceDefinitionBuilderImpl").getBadParameterEx();
00062         }
00063         definition_builder_count++;
00064         ACS_SHORT_LOG((LM_DEBUG, "CREATING ServiceDefinitionBuilderImpl. New count: '%d'!", definition_builder_count));
00065      };
00066 
00067     ~ServiceDefinitionBuilderImpl() {
00068         definition_builder_count--;
00069         ACS_SHORT_LOG((LM_DEBUG, "DESTROYING ServiceDefinitionBuilderImpl. New count: '%d'!", definition_builder_count));
00070     };
00071     
00072     /*************************** CORBA interface *****************************/
00073 
00074     ::CORBA::Short acs_instance_number (
00075         void);
00076 
00077     void add_naming_service (
00078         const char * host);
00079    
00080     void add_alarm_service (
00081         const char * host);
00082  
00083     void add_notification_service (
00084         const char * name,
00085         const char * host);
00086     
00087     void add_xml_cdb (
00088         const char * host,
00089         ::CORBA::Boolean recovery,
00090         const char * cdb_xml_dir);
00091     
00092     void add_rdb_cdb (
00093         const char * host,
00094         ::CORBA::Boolean recovery,
00095         const char * config_name);
00096 
00097     void add_manager (
00098         const char * host,
00099         const char * domain,
00100         ::CORBA::Boolean recovery);
00101     
00102     void add_acs_log (
00103         const char * host);
00104     
00105     void add_logging_service (
00106         const char * host,
00107         const char * name);
00108     
00109     void add_interface_repository (
00110         const char * host,
00111         ::CORBA::Boolean load,
00112         ::CORBA::Boolean wait_load);
00113     
00114     void add_services_definition (
00115         const char * definition);
00116     
00117     ::CORBA::Boolean is_valid (
00118         ::CORBA::String_out error_description);
00119     
00120     char * get_services_definition (
00121         void);
00122     
00123     void close (
00124         void);
00125     
00126 };
00127 
00128 class ACSServicesHandlerImpl : public POA_acsdaemon::ServicesDaemon {
00129 
00130   public:
00131     
00135     ACSServicesHandlerImpl();
00136   
00140     virtual ~ACSServicesHandlerImpl();
00141 
00145     void setService(ACSDaemonServiceImpl<ACSServicesHandlerImpl> *service)
00146     {
00147         h_service = service;
00148     }
00149 
00153     void initialize(CORBA::ORB_ptr orb);
00154 
00158     void dispose(CORBA::ORB_ptr orb);
00159 
00163     std::string getName();
00164 
00168     std::string getType();
00169     
00173     std::string getPort();
00174    
00178     std::string getServices(short instance_number, bool recovery);
00179  
00180     /*************************** CORBA interface *****************************/
00181 
00182     ::acsdaemon::ServiceDefinitionBuilder_ptr create_service_definition_builder (
00183         ::CORBA::Short instance_number);
00184     
00185     void start_services (
00186         const char * definition,
00187         ::CORBA::Boolean reuse_services,
00188         ::acsdaemon::DaemonSequenceCallback_ptr callback
00189       )throw(ACSErrTypeCommon::BadParameterEx);
00190     
00191     void stop_services (
00192         const char * definition,
00193         ::acsdaemon::DaemonSequenceCallback_ptr callback
00194         ) throw (ACSErrTypeCommon::BadParameterEx);
00195     
00196     void start_naming_service (
00197         ::acsdaemon::DaemonCallback_ptr callback,
00198         ::CORBA::Short instance_number
00199         ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00200     
00201     void start_notification_service (
00202         const char * name,
00203         ::acsdaemon::DaemonCallback_ptr callback,
00204         ::CORBA::Short instance_number
00205       ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00206     
00207     void start_xml_cdb (
00208         ::acsdaemon::DaemonCallback_ptr callback,
00209         ::CORBA::Short instance_number,
00210         ::CORBA::Boolean recovery,
00211         const char * cdb_xml_dir
00212       ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00213     
00214     void start_rdb_cdb (
00215         ::acsdaemon::DaemonCallback_ptr callback,
00216         ::CORBA::Short instance_number,
00217         ::CORBA::Boolean recovery,
00218         const char * config_name
00219       ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00220 
00221     void start_manager (
00222         const char * domain,
00223         ::acsdaemon::DaemonCallback_ptr callback,
00224         ::CORBA::Short instance_number,
00225         ::CORBA::Boolean recovery
00226       ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00227     
00228     void start_acs_log (
00229         ::acsdaemon::DaemonCallback_ptr callback,
00230         ::CORBA::Short instance_number
00231       ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00232     
00233     void start_logging_service (
00234         const char * name,
00235         ::acsdaemon::DaemonCallback_ptr callback,
00236         ::CORBA::Short instance_number
00237       ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00238     
00239     void start_interface_repository (
00240         ::CORBA::Boolean load,
00241         ::CORBA::Boolean wait_load,
00242         ::acsdaemon::DaemonCallback_ptr callback,
00243         ::CORBA::Short instance_number
00244       ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00245     
00246     void stop_naming_service (
00247         ::acsdaemon::DaemonCallback_ptr callback,
00248         ::CORBA::Short instance_number
00249         ) throw( ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00250     
00251     void stop_notification_service (
00252         const char * name,
00253         ::acsdaemon::DaemonCallback_ptr callback,
00254         ::CORBA::Short instance_number
00255       ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00256     
00257     void stop_cdb (
00258         ::acsdaemon::DaemonCallback_ptr callback,
00259         ::CORBA::Short instance_number
00260         ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00261     
00262     void stop_manager (
00263         const char * domain,
00264         ::acsdaemon::DaemonCallback_ptr callback,
00265         ::CORBA::Short instance_number
00266       ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00267     
00268     void stop_acs_log (
00269         ::acsdaemon::DaemonCallback_ptr callback,
00270         ::CORBA::Short instance_number
00271       ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00272     
00273     void stop_logging_service (
00274         const char * name,
00275         ::acsdaemon::DaemonCallback_ptr callback,
00276         ::CORBA::Short instance_number
00277       ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00278     
00279     void stop_interface_repository (
00280         ::acsdaemon::DaemonCallback_ptr callback,
00281         ::CORBA::Short instance_number
00282       ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00283     
00284     void start_alarm_service (
00285         ::acsdaemon::DaemonCallback_ptr callback,
00286         ::CORBA::Short instance_number
00287       ) throw (ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceAlreadyRunningEx);
00288 
00289     void stop_alarm_service (
00290         ::acsdaemon::DaemonCallback_ptr callback,
00291         ::CORBA::Short instance_number
00292       ) throw(ACSErrTypeCommon::BadParameterEx, acsdaemonErrType::ServiceNotRunningEx);
00293  
00294     void start_acs (
00295         acsdaemon::DaemonSequenceCallback_ptr callback,
00296         ::CORBA::Short instance_number,
00297         const char * additional_command_line
00298       )  throw(CORBA::SystemException, ::ACSErrTypeCommon::BadParameterEx);
00299     
00300     void stop_acs (
00301         acsdaemon::DaemonSequenceCallback_ptr callback,
00302         ::CORBA::Short instance_number,
00303         const char * additional_command_line
00304       ) throw (CORBA::SystemException, ::ACSErrTypeCommon::BadParameterEx);
00305 
00306      char * status_acs ( 
00307          ::CORBA::Short instance_number
00308          ) throw (CORBA::SystemException, ::acsdaemonErrType::FailedToGetAcsStatusEx);
00309 
00310     void shutdown () throw (CORBA::SystemException,::maciErrType::NoPermissionEx);
00311 
00312 
00313     void set_configuration_reference (
00314       ::CORBA::Short instance_number,
00315       const ::acsdaemon::ServiceInfoSeq & services_info) throw(CORBA::SystemException)
00316    {
00317        if (context)
00318            context->setConfigurationReference(instance_number, services_info);
00319    }
00320 
00321   private:
00322     std::string h_name; // Name of services handler (used for logging purposes)
00323     std::string h_type; // CORBA-type for this services handler
00324     ACSDaemonServiceImpl<ACSServicesHandlerImpl> *h_service; // ACS daemon service
00325     ACSDaemonContext *context;
00326 
00327     AcsDaemonUtils m_daemonUtils; // Helper to redirect output to a file in $ACDATA/logs/..
00328 };
00329 
00330 
00331 
00332 #endif

Generated on Mon May 4 2015 08:27:41 for ACS-2015.4 C++ API by  doxygen 1.7.0