Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

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 // a shared source for use by the single-line "createAndSendAlarm" methods 00071 static std::auto_ptr<acsalarm::AlarmSystemInterface> sharedSource; 00072 00073 // It is true if ACS implementation for sources must be used, and 00074 // false means CERN implementation 00075 // The pointer is null if it has not yet been initialized (this is done by the init method) 00076 static bool* m_useACSAlarmSystem; 00077 00078 // The manager 00079 static maci::Manager_ptr m_manager; 00080 00081 // Pointer to CERN alarm system object; will remain null if we are not using CERN implementation 00082 static AlarmSystemInterfaceFactory * m_AlarmSystemInterfaceFactory_p; 00083 00084 // used to synchronize access to shared vars 00085 static ACE_Recursive_Thread_Mutex main_mutex; 00086 00088 ACSAlarmSystemInterfaceFactory(); 00089 ACSAlarmSystemInterfaceFactory(const ACSAlarmSystemInterfaceFactory&); 00090 ACSAlarmSystemInterfaceFactory operator=(const ACSAlarmSystemInterfaceFactory&); 00091 ~ACSAlarmSystemInterfaceFactory(); 00092 00093 static void cleanUpAlarmSystemInterfacePtr(); 00094 static void cleanUpSharedSource(); 00095 static void cleanUpDLL(); 00096 static void cleanUpBooleanPtr(); 00097 static void cleanUpManagerReference(); 00098 static void initImplementationType(maci::Manager_ptr manager); 00099 static bool initDLL(); 00100 00101 public: 00102 00103 static maci::Manager_ptr getManager(); 00104 00112 static bool init(maci::Manager_ptr manager) throw (acsErrTypeAlarmSourceFactory::ErrorLoadingCERNDLLExImpl); 00113 00120 static bool usingACSAlarmSystem() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl); 00121 00126 static void done(); 00127 00134 static std::auto_ptr<acsalarm::AlarmSystemInterface> createSource(std::string sourceName) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl); 00135 00141 static std::auto_ptr<acsalarm::AlarmSystemInterface> createSource() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl); 00142 00150 static std::auto_ptr<acsalarm::FaultState>createFaultState(std::string family, std::string member, int code) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl); 00151 00156 static std::auto_ptr<acsalarm::FaultState>createFaultState() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl); 00157 00167 static void createAndSendAlarm(std::string & faultFamily, std::string & faultMember, int faultCode, bool active, std::string sourceName = asiConfigurationConstants::ALARM_SOURCE_NAME) 00168 throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl); 00169 00180 static void createAndSendAlarm(std::string & faultFamily, std::string & faultMember, int faultCode, bool active, acsalarm::Properties & faultProperties, 00181 std::string sourceName = asiConfigurationConstants::ALARM_SOURCE_NAME) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl); 00182 00183 }; 00184 00185 #endif

Generated on Thu Apr 30 02:30:48 2009 for ACS C++ API by doxygen 1.3.8