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

ACSAlarmSystemInterfaceFactory.h

Go to the documentation of this file.
00001 #ifndef ACS_ALARM_SYSTEM_INTERFACE_FACTORY_H
00002 #define ACS_ALARM_SYSTEM_INTERFACE_FACTORY_H
00003 /*******************************************************************************
00004 * ALMA - Atacama Large Millimiter Array
00005 * (c) European Southern Observatory, 2006 
00006 * 
00007 * This library is free software; you can redistribute it and/or
00008 * modify it under the terms of the GNU Lesser General Public
00009 * License as published by the Free Software Foundation; either
00010 * version 2.1 of the License, or (at your option) any later version.
00011 * 
00012 * This library is distributed in the hope that it will be useful,
00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015 * Lesser General Public License for more details.
00016 * 
00017 * You should have received a copy of the GNU Lesser General Public
00018 * License along with this library; if not, write to the Free Software
00019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
00020 *
00021 * "@(#) $Id$"
00022 *
00023 * who       when      what
00024 * --------  --------  ----------------------------------------------
00025 * acaproni  2006-07-12  created
00026 */
00027 
00028 /************************************************************************
00029  *
00030  *----------------------------------------------------------------------
00031  */
00032 
00033 #ifndef __cplusplus
00034 #error This is a C++ include file and cannot be used from plain C
00035 #endif
00036 
00037 #include "AlarmSystemInterfaceFactory.h"
00038 #include "AlarmSystemInterface.h"
00039 #include "ACSAlarmSystemInterfaceFactory.h"
00040 #include "ACSAlarmSystemInterfaceProxy.h"
00041 #include <maciS.h>
00042 #include "acsErrTypeAlarmSourceFactory.h"
00043 #include <orbsvcs/CosNotifyChannelAdminS.h>
00044 #include <orbsvcs/CosNotifyCommC.h>
00045 #include "asiConfigurationConstants.h"
00046 #include "ace/Task.h"
00047 
00051 enum AlarmSystemType {
00052         NOT_YET_INITIALIZED, // unknown type: not initialized
00053         CERN_AS, // CERN implementation
00054         ACS_AS  // ACS implementation
00055 };
00056 
00068 class ACSAlarmSystemInterfaceFactory
00069 // TODO: Alessandro, can this class extend AlarmSystemInterfaceFactory? 
00070 // We would need to make static methods non-static to do so...
00071 {
00072         private:
00073 
00074         // used for loading/unloading the DLL which is used to decouple (for build purposes) 
00075         // the logic in ACSLaser/laser-source-cpp
00076         static void *dllHandle;
00077 
00078         // At the present all the alarms are mapped in the same NC
00079         // so we need only one source to publish all the alarms
00080         static acsalarm::AlarmSystemInterface* m_sourceSingleton_p;
00081 
00082         // The type of alarm system in use.
00083         static AlarmSystemType m_AlarmSystemType;
00084                 
00085         // The manager
00086         static maci::Manager_ptr m_manager;
00087 
00088         // Pointer to CERN alarm system object; will remain null if we are not using CERN implementation
00089         static AlarmSystemInterfaceFactory * m_AlarmSystemInterfaceFactory_p;
00090 
00091         // used to synchronize access to shared vars
00092         static ACE_Recursive_Thread_Mutex main_mutex;
00093 
00095         ACSAlarmSystemInterfaceFactory();
00096         ACSAlarmSystemInterfaceFactory(const ACSAlarmSystemInterfaceFactory&);
00097         ACSAlarmSystemInterfaceFactory operator=(const ACSAlarmSystemInterfaceFactory&);
00098         ~ACSAlarmSystemInterfaceFactory();
00099 
00100         static void cleanUpAlarmSystemInterfacePtr();
00101         static void cleanUpSourceSingleton();
00102         static void cleanUpDLL();
00103         static void cleanUpManagerReference();
00104         static void initImplementationType(maci::Manager_ptr manager);
00105         static bool initDLL();
00106         
00112         static acsalarm::AlarmSystemInterface* getSourceSingleton();
00113 
00114         public:
00115 
00116         static maci::Manager_ptr getManager();
00117 
00125         static bool init(maci::Manager_ptr manager) throw (acsErrTypeAlarmSourceFactory::ErrorLoadingCERNDLLExImpl);
00126 
00133         static AlarmSystemType usingACSAlarmSystem() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00134                 
00139         static void done();
00140         
00147         static acsalarm::AlarmSystemInterface* createSource(std::string sourceName) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00148                 
00154         static acsalarm::AlarmSystemInterface* createSource() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00155         
00163         static std::auto_ptr<acsalarm::FaultState>createFaultState(std::string family, std::string member, int code) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00164         
00169         static std::auto_ptr<acsalarm::FaultState>createFaultState() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00170 
00180         static void createAndSendAlarm(std::string & faultFamily, std::string & faultMember, int faultCode, bool active, std::string sourceName = asiConfigurationConstants::ALARM_SOURCE_NAME)
00181                           throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00182 
00193         static void createAndSendAlarm(std::string & faultFamily, std::string & faultMember, int faultCode, bool active, acsalarm::Properties & faultProperties, 
00194                 std::string sourceName = asiConfigurationConstants::ALARM_SOURCE_NAME) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00195 
00196 };
00197 
00198 #endif 

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