00001
00034 #include <iostream>
00035 #include <stdexcept>
00036 #include <QtCore/QList>
00037
00038 #include "alarmconfiguration.h"
00039 #include "exceptionhandler.h"
00040 #include "configfilelocation.inc"
00041
00042 using namespace AlarmNotifications;
00043
00044 AlarmConfiguration& AlarmConfiguration::instance() noexcept
00045 {
00046 try {
00047 static AlarmConfiguration global_instance;
00048 return global_instance;
00049 }
00050 catch ( std::exception& e )
00051 {
00052 ExceptionHandler ( e, "while instanciating AlarmConfiguration.", true );
00053 exit ( 1 );
00054
00055 }
00056 catch ( ... )
00057 {
00058 ExceptionHandler ( "while instanciating AlarmConfiguration.", true );
00059 exit ( 1 );
00060
00061 }
00062 }
00063
00064 AlarmConfiguration::AlarmConfiguration()
00065 : _configfilelocation ( CreateConfigFileLocation() ),
00066 _backend ( KSharedConfig::openConfig ( QString::fromUtf8 ( _configfilelocation.c_str() ) , KConfig::SimpleConfig ) ),
00067 _skeleton ( _backend )
00068 {
00069 CreateActiveMQConnectivitySettings();
00070 }
00071
00072 AlarmConfiguration::~AlarmConfiguration()
00073 {
00074 _backend->sync();
00075 }
00076
00077 const std::string& AlarmConfiguration::getConfigFileLocation() const noexcept
00078 {
00079 return _configfilelocation;
00080 }
00081
00082 void AlarmConfiguration::ReReadConfiguration()
00083 {
00084 _backend->markAsClean();
00085 _backend->reparseConfiguration();
00086 _skeleton.readConfig();
00087 }
00088
00089 void AlarmConfiguration::WriteConfiguration()
00090 {
00091 _skeleton.writeConfig();
00092 _backend->sync();
00093 }
00094
00095 void AlarmConfiguration::CreateActiveMQConnectivitySettings()
00096 {
00097 _skeleton.setCurrentGroup ( QString::fromUtf8 ( "ActiveMQConnectivity" ) );
00098 _activemquriitem = _skeleton.addItemString ( "ActiveMQURI", _activemquri, "failover:(tcp://localhost:61616)" );
00099 _activemqusernameitem = _skeleton.addItemString ( "ActiveMQUsername", _activemqusername );
00100 _activemqpassworditem = _skeleton.addItemString ( "ActiveMQPassword", _activemqpassword );
00101 _activemqtopicnameitem = _skeleton.addItemString ( "ActiveMQTopicName", _activemqtopicname );
00102 _laboratorynotificationtimeoutitem = _skeleton.addItemUInt ( "LaboratoryNotificationTimeout", _laboratorynotificationtimeout, 0 );
00103 _desktopnotificationtimeoutitem = _skeleton.addItemUInt ( "DesktopNotificationTimeout", _desktopnotificationtimeout, 0 );
00104 _emailnotificationtimeoutitem = _skeleton.addItemUInt ( "EMailNotificationTimeout", _emailnotificationtimeout, 0 );
00105 _emailnotificationfromitem = _skeleton.addItemString ( "EMailNotificationFrom", _emailnotificationfrom );
00106 _emailnotificationtoitem = _skeleton.addItemString ( "EMailNotificationTo", _emailnotificationto );
00107 _emailnotificationservernameitem = _skeleton.addItemString ( "EMailNotificationServerName", _emailnotificationservername );
00108 _emailnotificationserverportitem = _skeleton.addItemUInt ( "EMailNotificationServerPort", _emailnotificationserverport );
00109 _emailnotificationserverportitem->setMinValue ( 0 );
00110 _emailnotificationserverportitem->setMaxValue ( 65535 );
00111 _flashlightrelaisdevicenodeitem = _skeleton.addItemString ( "FlashLightRelaisDeviceNode", _flashlightrelaisdevicenode );
00112 }
00113
00114 std::string AlarmConfiguration::getActiveMQURI() const noexcept
00115 {
00116 return std::string ( _activemquri.toUtf8().data() );
00117 }
00118
00119 void AlarmConfiguration::setActiveMQURI ( const std::string& newSetting )
00120 {
00121 _activemquriitem->setValue ( QString::fromUtf8 ( newSetting.c_str() ) );
00122 }
00123
00124 std::string AlarmConfiguration::getActiveMQUsername() const noexcept
00125 {
00126 return std::string ( _activemqusername.toUtf8().data() );
00127 }
00128
00129 void AlarmConfiguration::setActiveMQUsername ( const std::string& newSetting )
00130 {
00131 _activemqusernameitem->setValue ( QString::fromUtf8 ( newSetting.c_str() ) );
00132 }
00133
00134 std::string AlarmConfiguration::getActiveMQPassword() const noexcept
00135 {
00136 return std::string ( _activemqpassword.toUtf8().data() );
00137 }
00138
00139 void AlarmConfiguration::setActiveMQPassword ( const std::string& newSetting )
00140 {
00141 _activemqpassworditem->setValue ( QString::fromUtf8 ( newSetting.c_str() ) );
00142 }
00143
00144 std::string AlarmConfiguration::getActiveMQTopicName() const noexcept
00145 {
00146 return std::string ( _activemqtopicname.toUtf8().data() );
00147 }
00148
00149 void AlarmConfiguration::setActiveMQTopicName ( const std::string& newSetting )
00150 {
00151 _activemqtopicnameitem->setValue ( QString::fromUtf8 ( newSetting.c_str() ) );
00152 }
00153
00154 unsigned int AlarmConfiguration::getLaboratoryNotificationTimeout() const noexcept
00155 {
00156 return _laboratorynotificationtimeout;
00157 }
00158
00159 void AlarmConfiguration::setLaboratoryNotificationTimeout ( const unsigned int newSetting )
00160 {
00161 _laboratorynotificationtimeoutitem->setValue ( newSetting );
00162 }
00163
00164 unsigned int AlarmConfiguration::getDesktopNotificationTimeout() const noexcept
00165 {
00166 return _desktopnotificationtimeout;
00167 }
00168
00169 void AlarmConfiguration::setDesktopNotificationTimeout ( const unsigned int newSetting )
00170 {
00171 _desktopnotificationtimeoutitem->setValue ( newSetting );
00172 }
00173
00174 unsigned int AlarmConfiguration::getEMailNotificationTimeout() const noexcept
00175 {
00176 return _emailnotificationtimeout;
00177 }
00178
00179 void AlarmConfiguration::setEMailNotificationTimeout ( const unsigned int newSetting )
00180 {
00181 _emailnotificationtimeoutitem->setValue ( newSetting );
00182 }
00183
00184 std::string AlarmConfiguration::getEMailNotificationFrom() const noexcept
00185 {
00186 return std::string ( _emailnotificationfrom.toUtf8().data() );
00187 }
00188
00189 void AlarmConfiguration::setEMailNotificationFrom ( const std::string& newSetting )
00190 {
00191 _emailnotificationfromitem->setValue ( QString::fromUtf8 ( newSetting.c_str() ) );
00192 }
00193
00194 std::string AlarmConfiguration::getEMailNotificationTo() const noexcept
00195 {
00196 return std::string ( _emailnotificationto.toUtf8().data() );
00197 }
00198
00199 void AlarmConfiguration::setEMailNotificationTo ( const std::string& newSetting )
00200 {
00201 _emailnotificationtoitem->setValue ( QString::fromUtf8 ( newSetting.c_str() ) );
00202 }
00203
00204 std::string AlarmConfiguration::getEMailNotificationServerName() const noexcept
00205 {
00206 return std::string ( _emailnotificationservername.toUtf8().data() );
00207 }
00208
00209 void AlarmConfiguration::setEMailNotificationServerName ( const std::string& newSetting )
00210 {
00211 _emailnotificationservernameitem->setValue ( QString::fromUtf8 ( newSetting.c_str() ) );
00212 }
00213
00214 unsigned int AlarmConfiguration::getEMailNotificationServerPort() const noexcept
00215 {
00216 return _emailnotificationserverport;
00217 }
00218
00219 void AlarmConfiguration::setEMailNotificationServerPort ( const unsigned int newSetting )
00220 {
00221 _emailnotificationserverportitem->setValue ( newSetting );
00222 }
00223
00224 std::string AlarmConfiguration::getFlashLightRelaisDeviceNode() const noexcept
00225 {
00226 return std::string ( _flashlightrelaisdevicenode.toUtf8().data() );
00227 }
00228
00229 void AlarmConfiguration::setFlashLightRelaisDevideNode ( const std::string& newSetting )
00230 {
00231 _flashlightrelaisdevicenodeitem->setValue ( QString::fromUtf8 ( newSetting.c_str() ) );
00232 }
00233
00234 KSharedConfigPtr AlarmConfiguration::internal()
00235 {
00236 return _backend;
00237 }
00238
00239 KConfigSkeleton* AlarmConfiguration::internal_skel()
00240 {
00241 return &_skeleton;
00242 }
00243
00244 std::string AlarmConfiguration::CreateConfigFileLocation()
00245 {
00246 const char*const envvar = getenv ( "ALARMNOTIFICATIONSCONFIG" );
00247 if ( envvar == nullptr )
00248 if ( getenv ( "HOME" ) != nullptr )
00249 {
00250 std::string conffile ( CONFIGFILELOCATION );
00251 if ( conffile.find ( "~" ) != std::string::npos )
00252 conffile.replace ( conffile.find ( "~" ), 1, getenv ( "HOME" ) );
00253 return conffile;
00254 }
00255 else
00256 {
00257 return std::string ( CONFIGFILELOCATION );
00258 }
00259 else
00260 return std::string ( envvar );
00261 }