• 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.12 2009/09/28 19:46:49 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 "acsDaemonImpl.h"
00040 #include "acsRequest.h"
00041 #include "acsServiceController.h"
00042 
00043 
00044 class ServiceDefinitionBuilderImpl : public POA_acsdaemon::ServiceDefinitionBuilder {
00045 
00046     short instance;
00047     ACE_CString services_definition_xml;
00048 
00049     static int definition_builder_count;
00050 
00051   public:
00052 
00053     ServiceDefinitionBuilderImpl(short instance_number) : instance(instance_number), services_definition_xml("") {
00054         if (definition_builder_count >= 10) {
00055             throw ::ACSErrTypeCommon::NoResourcesExImpl(__FILE__, __LINE__, 
00056                 "::ServiceDefinitionBuilderImpl::ServiceDefinitionBuilderImpl").getNoResourcesEx();
00057         }
00058         if (instance_number < 0 || instance_number > 10) {
00059             throw ::ACSErrTypeCommon::BadParameterExImpl(__FILE__, __LINE__, 
00060                 "::ServiceDefinitionBuilderImpl::ServiceDefinitionBuilderImpl").getBadParameterEx();
00061         }
00062         definition_builder_count++;
00063         ACS_SHORT_LOG((LM_DEBUG, "CREATING ServiceDefinitionBuilderImpl. New count: '%d'!", definition_builder_count));
00064      };
00065 
00066     ~ServiceDefinitionBuilderImpl() {
00067         definition_builder_count--;
00068         ACS_SHORT_LOG((LM_DEBUG, "DESTROYING ServiceDefinitionBuilderImpl. New count: '%d'!", definition_builder_count));
00069     };
00070     
00071     /*************************** CORBA interface *****************************/
00072 
00073     ::CORBA::Short acs_instance_number (
00074         void);
00075 
00076     void add_naming_service (
00077         const char * host);
00078    
00079     void add_alarm_service (
00080         const char * host);
00081  
00082     void add_notification_service (
00083         const char * name,
00084         const char * host);
00085     
00086     void add_xml_cdb (
00087         const char * host,
00088         ::CORBA::Boolean recovery,
00089         const char * cdb_xml_dir);
00090     
00091     void add_manager (
00092         const char * host,
00093         const char * domain,
00094         ::CORBA::Boolean recovery);
00095     
00096     void add_acs_log (
00097         const char * host);
00098     
00099     void add_logging_service (
00100         const char * host,
00101         const char * name);
00102     
00103     void add_interface_repository (
00104         const char * host,
00105         ::CORBA::Boolean load,
00106         ::CORBA::Boolean wait_load);
00107     
00108     void add_services_definition (
00109         const char * definition);
00110     
00111     ::CORBA::Boolean is_valid (
00112         ::CORBA::String_out error_description);
00113     
00114     char * get_services_definition (
00115         void);
00116     
00117     void close (
00118         void);
00119     
00120 };
00121 
00122 class ACSServicesHandlerImpl : public POA_acsdaemon::ServicesDaemon {
00123 
00124   public:
00125     
00129     ACSServicesHandlerImpl();
00130   
00134     virtual ~ACSServicesHandlerImpl();
00135 
00139     void setService(ACSDaemonServiceImpl<ACSServicesHandlerImpl> *service)
00140     {
00141         h_service = service;
00142     }
00143 
00147     void initialize(CORBA::ORB_ptr orb);
00148 
00152     void dispose(CORBA::ORB_ptr orb);
00153 
00157     std::string getName();
00158 
00162     std::string getType();
00163     
00167     std::string getPort();
00168    
00172     std::string getServices(short instance_number, bool recovery);
00173  
00174     /*************************** CORBA interface *****************************/
00175 
00176     ::acsdaemon::ServiceDefinitionBuilder_ptr create_service_definition_builder (
00177         ::CORBA::Short instance_number);
00178     
00179     void start_services (
00180         const char * definition,
00181         ::CORBA::Boolean reuse_services,
00182         ::acsdaemon::DaemonSequenceCallback_ptr callback
00183       )
00184       ACE_THROW_SPEC ((
00185         ACSErrTypeCommon::BadParameterEx
00186       ));
00187     
00188     void stop_services (
00189         const char * definition,
00190         ::acsdaemon::DaemonSequenceCallback_ptr callback
00191       )
00192       ACE_THROW_SPEC ((
00193         ACSErrTypeCommon::BadParameterEx
00194       ));
00195     
00196     void start_naming_service (
00197         ::acsdaemon::DaemonCallback_ptr callback,
00198         ::CORBA::Short instance_number
00199       )
00200       ACE_THROW_SPEC ((
00201         ACSErrTypeCommon::BadParameterEx,
00202         acsdaemonErrType::ServiceAlreadyRunningEx
00203       ));
00204     
00205     void start_notification_service (
00206         const char * name,
00207         ::acsdaemon::DaemonCallback_ptr callback,
00208         ::CORBA::Short instance_number
00209       )
00210       ACE_THROW_SPEC ((
00211         ACSErrTypeCommon::BadParameterEx,
00212         acsdaemonErrType::ServiceAlreadyRunningEx
00213       ));
00214     
00215     void start_xml_cdb (
00216         ::acsdaemon::DaemonCallback_ptr callback,
00217         ::CORBA::Short instance_number,
00218         ::CORBA::Boolean recovery,
00219         const char * cdb_xml_dir
00220       )
00221       ACE_THROW_SPEC ((
00222         ACSErrTypeCommon::BadParameterEx,
00223         acsdaemonErrType::ServiceAlreadyRunningEx
00224       ));
00225     
00226     void start_manager (
00227         const char * domain,
00228         ::acsdaemon::DaemonCallback_ptr callback,
00229         ::CORBA::Short instance_number,
00230         ::CORBA::Boolean recovery
00231       )
00232       ACE_THROW_SPEC ((
00233         ACSErrTypeCommon::BadParameterEx,
00234         acsdaemonErrType::ServiceAlreadyRunningEx
00235       ));
00236     
00237     void start_acs_log (
00238         ::acsdaemon::DaemonCallback_ptr callback,
00239         ::CORBA::Short instance_number
00240       )
00241       ACE_THROW_SPEC ((
00242         ACSErrTypeCommon::BadParameterEx,
00243         acsdaemonErrType::ServiceAlreadyRunningEx
00244       ));
00245     
00246     void start_logging_service (
00247         const char * name,
00248         ::acsdaemon::DaemonCallback_ptr callback,
00249         ::CORBA::Short instance_number
00250       )
00251       ACE_THROW_SPEC ((
00252         ACSErrTypeCommon::BadParameterEx,
00253         acsdaemonErrType::ServiceAlreadyRunningEx
00254       ));
00255     
00256     void start_interface_repository (
00257         ::CORBA::Boolean load,
00258         ::CORBA::Boolean wait_load,
00259         ::acsdaemon::DaemonCallback_ptr callback,
00260         ::CORBA::Short instance_number
00261       )
00262       ACE_THROW_SPEC ((
00263         ACSErrTypeCommon::BadParameterEx,
00264         acsdaemonErrType::ServiceAlreadyRunningEx
00265       ));
00266     
00267     void stop_naming_service (
00268         ::acsdaemon::DaemonCallback_ptr callback,
00269         ::CORBA::Short instance_number
00270       )
00271       ACE_THROW_SPEC ((
00272         ACSErrTypeCommon::BadParameterEx,
00273         acsdaemonErrType::ServiceNotRunningEx
00274       ));
00275     
00276     void stop_notification_service (
00277         const char * name,
00278         ::acsdaemon::DaemonCallback_ptr callback,
00279         ::CORBA::Short instance_number
00280       )
00281       ACE_THROW_SPEC ((
00282         ACSErrTypeCommon::BadParameterEx,
00283         acsdaemonErrType::ServiceNotRunningEx
00284       ));
00285     
00286     void stop_cdb (
00287         ::acsdaemon::DaemonCallback_ptr callback,
00288         ::CORBA::Short instance_number
00289       )
00290       ACE_THROW_SPEC ((
00291         ACSErrTypeCommon::BadParameterEx,
00292         acsdaemonErrType::ServiceNotRunningEx
00293       ));
00294     
00295     void stop_manager (
00296         const char * domain,
00297         ::acsdaemon::DaemonCallback_ptr callback,
00298         ::CORBA::Short instance_number
00299       )
00300       ACE_THROW_SPEC ((
00301         ACSErrTypeCommon::BadParameterEx,
00302         acsdaemonErrType::ServiceNotRunningEx
00303       ));
00304     
00305     void stop_acs_log (
00306         ::acsdaemon::DaemonCallback_ptr callback,
00307         ::CORBA::Short instance_number
00308       )
00309       ACE_THROW_SPEC ((
00310         ACSErrTypeCommon::BadParameterEx,
00311         acsdaemonErrType::ServiceNotRunningEx
00312       ));
00313     
00314     void stop_logging_service (
00315         const char * name,
00316         ::acsdaemon::DaemonCallback_ptr callback,
00317         ::CORBA::Short instance_number
00318       )
00319       ACE_THROW_SPEC ((
00320         ACSErrTypeCommon::BadParameterEx,
00321         acsdaemonErrType::ServiceNotRunningEx
00322       ));
00323     
00324     void stop_interface_repository (
00325         ::acsdaemon::DaemonCallback_ptr callback,
00326         ::CORBA::Short instance_number
00327       )
00328       ACE_THROW_SPEC ((
00329         ACSErrTypeCommon::BadParameterEx,
00330         acsdaemonErrType::ServiceNotRunningEx
00331       ));
00332     
00333     void start_alarm_service (
00334         ::acsdaemon::DaemonCallback_ptr callback,
00335         ::CORBA::Short instance_number
00336       )
00337       ACE_THROW_SPEC ((
00338         ACSErrTypeCommon::BadParameterEx,
00339         acsdaemonErrType::ServiceAlreadyRunningEx
00340       ));
00341 
00342     void stop_alarm_service (
00343         ::acsdaemon::DaemonCallback_ptr callback,
00344         ::CORBA::Short instance_number
00345       )
00346       ACE_THROW_SPEC ((
00347         ACSErrTypeCommon::BadParameterEx,
00348         acsdaemonErrType::ServiceNotRunningEx
00349       ));
00350  
00351     void start_acs (
00352         acsdaemon::DaemonSequenceCallback_ptr callback,
00353         ::CORBA::Short instance_number,
00354         const char * additional_command_line
00355       )
00356       ACE_THROW_SPEC ((
00357         CORBA::SystemException,
00358         ::ACSErrTypeCommon::BadParameterEx
00359       ));
00360     
00361     void stop_acs (
00362         acsdaemon::DaemonSequenceCallback_ptr callback,
00363         ::CORBA::Short instance_number,
00364         const char * additional_command_line
00365       )
00366       ACE_THROW_SPEC ((
00367         CORBA::SystemException,
00368         ::ACSErrTypeCommon::BadParameterEx
00369       ));
00370 
00371      char * status_acs ( 
00372          ::CORBA::Short instance_number
00373          )
00374       ACE_THROW_SPEC ((
00375         CORBA::SystemException,
00376         ::acsdaemonErrType::FailedToGetAcsStatusEx
00377       ));
00378 
00379     void shutdown ()
00380       ACE_THROW_SPEC ((
00381         CORBA::SystemException,
00382         ::maciErrType::NoPermissionEx
00383       ));
00384 
00385     void set_manager_reference(
00386         const short instance_number,
00387         const char * ref
00388         )
00389       ACE_THROW_SPEC ((
00390         CORBA::SystemException
00391       ))
00392    {
00393         if (context)
00394            context->setManagerReference(instance_number, ref);
00395    }
00396 
00397   private:
00398     std::string h_name; // Name of services handler (used for logging purposes)
00399     std::string h_type; // CORBA-type for this services handler
00400     ACSDaemonServiceImpl<ACSServicesHandlerImpl> *h_service; // ACS daemon service
00401     ACSDaemonContext *context;
00402 };
00403 
00404 
00405 
00406 #endif

Generated on Thu Jan 12 2012 23:13:50 for ACS-10.0 C++ API by  doxygen 1.7.0