• 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 
00052 enum AlarmSystemType {
00053         NOT_YET_INITIALIZED, // unknown type: not initialized
00054         CERN_AS, // CERN implementation
00055         ACS_AS  // ACS implementation
00056 };
00057 
00069 class ACSAlarmSystemInterfaceFactory
00070 // TODO: Alessandro, can this class extend AlarmSystemInterfaceFactory? 
00071 // We would need to make static methods non-static to do so...
00072 {
00073         private:
00074 
00075         // used for loading/unloading the DLL which is used to decouple (for build purposes) 
00076         // the logic in ACSLaser/laser-source-cpp
00077         static void *dllHandle;
00078 
00079         // At the present all the alarms are mapped in the same NC
00080         // so we need only one source to publish all the alarms
00081         static acsalarm::AlarmSystemInterface* m_sourceSingleton_p;
00082 
00083         // The type of alarm system in use.
00084         static AlarmSystemType m_AlarmSystemType;
00085                 
00086         // The manager
00087         static maci::Manager_ptr m_manager;
00088 
00089         // Pointer to CERN alarm system object; will remain null if we are not using CERN implementation
00090         static AlarmSystemInterfaceFactory * m_AlarmSystemInterfaceFactory_p;
00091 
00092         // used to synchronize access to shared vars
00093         static ACE_Recursive_Thread_Mutex main_mutex;
00094 
00096         ACSAlarmSystemInterfaceFactory();
00097         ACSAlarmSystemInterfaceFactory(const ACSAlarmSystemInterfaceFactory&);
00098         ACSAlarmSystemInterfaceFactory operator=(const ACSAlarmSystemInterfaceFactory&);
00099         ~ACSAlarmSystemInterfaceFactory();
00100 
00101         static void cleanUpAlarmSystemInterfacePtr();
00102         static void cleanUpSourceSingleton();
00103         static void cleanUpDLL();
00104         static void cleanUpManagerReference();
00105         static void initImplementationType(maci::Manager_ptr manager);
00106         static bool initDLL();
00107         
00113         static acsalarm::AlarmSystemInterface* getSourceSingleton();
00114 
00115         public:
00116 
00117         static maci::Manager_ptr getManager();
00118 
00126         static bool init(maci::Manager_ptr manager) throw (acsErrTypeAlarmSourceFactory::ErrorLoadingCERNDLLExImpl);
00127 
00134         static AlarmSystemType usingACSAlarmSystem() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00135                 
00140         static void done();
00141         
00148         static acsalarm::AlarmSystemInterface* createSource(std::string sourceName) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00149                 
00155         static acsalarm::AlarmSystemInterface* createSource() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00156         
00164         static std::auto_ptr<acsalarm::FaultState>createFaultState(std::string family, std::string member, int code) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00165         
00170         static std::auto_ptr<acsalarm::FaultState>createFaultState() throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00171 
00181         static void createAndSendAlarm(std::string & faultFamily, std::string & faultMember, int faultCode, bool active, std::string sourceName = asiConfigurationConstants::ALARM_SOURCE_NAME)
00182                           throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00183 
00194         static void createAndSendAlarm(std::string & faultFamily, std::string & faultMember, int faultCode, bool active, acsalarm::Properties & faultProperties, 
00195                 std::string sourceName = asiConfigurationConstants::ALARM_SOURCE_NAME) throw (acsErrTypeAlarmSourceFactory::ACSASFactoryNotInitedExImpl);
00196 
00197 };
00198 
00199 #endif 

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