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 00047 using acsalarm::AlarmSystemInterface; 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 // used for the convenience method createAndSendAlarms, so that it need not create a new source 00071 // for each time it is invoked 00072 static auto_ptr<AlarmSystemInterface> sharedSource; 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 00086 ACSAlarmSystemInterfaceFactory(); 00087 virtual ~ACSAlarmSystemInterfaceFactory(); 00088 00089 public: 00090 00091 static maci::Manager_ptr getManager() { return m_manager; } 00092 00098 static bool init(maci::Manager_ptr manager); 00099 00103 static bool usingACSAlarmSystem(); 00104 00109 static void done(); 00110 00116 static auto_ptr<AlarmSystemInterface> createSource(string sourceName); 00117 00122 static auto_ptr<AlarmSystemInterface> createSource(); 00123 00127 static auto_ptr<acsalarm::FaultState>createFaultState(string family, string member, int code); 00128 00132 static auto_ptr<acsalarm::FaultState>createFaultState(); 00133 00137 static void createAndSendAlarm(string & faultFamily, string & faultMember, int faultCode, bool active, Properties & faultProperties); 00138 }; 00139 00140 #endif
1.3.6