• 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 "utilConstants.h"
00042 #include "maciS.h"
00043 #include "acsErrTypeAlarmSourceFactory.h"
00044 #include <orbsvcs/CosNotifyChannelAdminS.h>
00045 #include <orbsvcs/CosNotifyCommC.h>
00046 #include "asiConfigurationConstants.h"
00047 #include "ace/Task.h"
00048 
00060 class ACSAlarmSystemInterfaceFactory
00061 // TODO: Alessandro, can this class extend AlarmSystemInterfaceFactory? 
00062 // We would need to make static methods non-static to do so...
00063 {
00064         private:
00065 
00066         // used for loading/unloading the DLL which is used to decouple (for build purposes) 
00067         // the logic in ACSLaser/laser-source-cpp
00068         static void *dllHandle;
00069 
00070         // At the present all the alarm are mapped in the same NC
00071         // so we need only one source to publish all the alarms
00072         static acsalarm::AlarmSystemInterface* m_sourceSingleton_p;
00073 
00074         // It is true if ACS implementation for sources must be used,  and
00075         // false means CERN implementation
00076         // The pointer is null if it has not yet been initialized (this is done by the init method)
00077         static bool* m_useACSAlarmSystem;
00078                 
00079         // The manager
00080         static maci::Manager_ptr m_manager;
00081 
00082         // Pointer to CERN alarm system object; will remain null if we are not using CERN implementation
00083         static AlarmSystemInterfaceFactory * m_AlarmSystemInterfaceFactory_p;
00084 
00085         // used to synchronize access to shared vars
00086         static ACE_Recursive_Thread_Mutex main_mutex;
00087 
00089         ACSAlarmSystemInterfaceFactory();
00090         ACSAlarmSystemInterfaceFactory(const ACSAlarmSystemInterfaceFactory&);
00091         ACSAlarmSystemInterfaceFactory operator=(const ACSAlarmSystemInterfaceFactory&);
00092         ~ACSAlarmSystemInterfaceFactory();
00093 
00094         static void cleanUpAlarmSystemInterfacePtr();
00095         static void cleanUpSourceSingleton();
00096         static void cleanUpDLL();
00097         static void cleanUpBooleanPtr();
00098         static void cleanUpManagerReference();
00099         static void initImplementationType(maci::Manager_ptr manager);
00100         static bool initDLL();
00101         
00107         static acsalarm::AlarmSystemInterface* getSourceSingleton();
00108 
00109         public:
00110 
00111         static maci::Manager_ptr getManager();
00112 
00120         static bool init(maci::Manager_ptr manager) throw (acsErrTypeAlarmSourceFactory::ErrorLoadingCERNDLLExImpl);
00121 
00128         static bool usingACSAlarmSystem() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00129                 
00134         static void done();
00135         
00142         static acsalarm::AlarmSystemInterface* createSource(std::string sourceName) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00143                 
00149         static acsalarm::AlarmSystemInterface* createSource() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00150         
00158         static std::auto_ptr<acsalarm::FaultState>createFaultState(std::string family, std::string member, int code) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00159         
00164         static std::auto_ptr<acsalarm::FaultState>createFaultState() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00165 
00175         static void createAndSendAlarm(std::string & faultFamily, std::string & faultMember, int faultCode, bool active, std::string sourceName = asiConfigurationConstants::ALARM_SOURCE_NAME)
00176                           throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00177 
00188         static void createAndSendAlarm(std::string & faultFamily, std::string & faultMember, int faultCode, bool active, acsalarm::Properties & faultProperties, 
00189                 std::string sourceName = asiConfigurationConstants::ALARM_SOURCE_NAME) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00190 
00191 };
00192 
00193 #endif 

Generated on Thu Jul 8 2010 19:47:46 for ACS-9.0 C++ API by  doxygen 1.7.0