/* * ALMA - Atacama Large Millimiter Array * (c) European Southern Observatory, 2003 * *This library is free software; you can redistribute it and/or *modify it under the terms of the GNU Lesser General Public *License as published by the Free Software Foundation; either *version 2.1 of the License, or (at your option) any later version. * *This library is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *Lesser General Public License for more details. * *You should have received a copy of the GNU Lesser General Public *License along with this library; if not, write to the Free Software *Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "baciROcontImpl_T.h" #include "baciPcontImpl_T.i" #include "baciROcommonImpl_T.i" #include template baci::ROcontImpl::ROcontImpl(const ACE_CString& name, BACIComponent* component_p, DevIO* devIO, bool flagdeldevIO) : ROcommonImpl(name, component_p, devIO, flagdeldevIO), PcontImpl(name, this->getProperty(), component_p, devIO, flagdeldevIO) { ACS_TRACE("baci::ROcontImpl<>::ROcontImpl"); // read static data if (readCharacteristics()==false) { ACS_LOG(LM_RUNTIME_CONTEXT, "baci::ROcontImpl<>::ROcontImpdmmakel", (LM_ERROR, "Failed to read static data for '%s'", this->getProperty()->getName())); return; } if (this->monitorEventDispatcher_mp!=0 && this->alarmTimerTrig_m!=0) { this->alarmSystemMonitor_mp = new AlarmSystemMonitorCont(this, this->monitorEventDispatcher_mp); }//if this->initialization_m = 0; } template baci::ROcontImpl::ROcontImpl(bool init, const ACE_CString& name, BACIComponent* component_p, DevIO* devIO, bool flagdeldevIO) : ROcommonImpl(init, name, component_p, devIO, flagdeldevIO), PcontImpl(name, this->getProperty(), component_p, devIO, flagdeldevIO) { ACS_TRACE("baci::ROcontImpl<>::ROcontImpl"); // read static data if (readCharacteristics()==false) { ACS_LOG(LM_RUNTIME_CONTEXT, "baci::ROcontImpl<>::ROcontImpl", (LM_ERROR, "Failed to read static data for '%s'", name.c_str())); return; } /* will be done in subclass if (this->monitorEventDispatcher_mp!=0 && this->alarmTimerTrig_m!=0) { alarmSystemMonitor_mp = new AlarmSystemMonitorCont(this, this->monitorEventDispatcher_mp); }//if */ this->initialization_m = 0; } template baci::ROcontImpl::~ROcontImpl() { ACS_TRACE("baci::ROcontImpl<>::~ROcontImpl"); if (this->alarmSystemMonitor_mp) { delete this->alarmSystemMonitor_mp; this->alarmSystemMonitor_mp = 0; } } template bool baci::ROcontImpl::readCharacteristics() { cdb::DAONode* dao = this->getDAONode(); if (!dao) return false; try { alarmLowOn_m = dao->getValue("alarm_low_on"); alarmLowOff_m = dao->getValue("alarm_low_off"); alarmHighOn_m = dao->getValue("alarm_high_on"); alarmHighOff_m = dao->getValue("alarm_high_off"); return true; } catch (ACSErr::ACSbaseExImpl& ex) { ex.log(); return false; } catch (...) { return false; } } /* ---------------------- [ CORBA interface ] ---------------------- */ template TS baci::ROcontImpl::alarm_low_on () { return CORBAMem::retn(alarmLowOn_m); } template TS baci::ROcontImpl::alarm_low_off () { return CORBAMem::retn(alarmLowOff_m); } template TS baci::ROcontImpl::alarm_high_on () { return CORBAMem::retn(alarmHighOn_m); } template TS baci::ROcontImpl::alarm_high_off () { return CORBAMem::retn(alarmHighOff_m); } /* ---------------------- [ CORBA interface ] ---------------------- */ template ACS::Subscription_ptr baci::ROcontImpl::new_subscription_Alarm (TAlarm *cb, const ACS::CBDescIn & desc ) { //TBD: this could be done just in the constructor if (this->alarmTimerTrig_m==0) { ACS_LOG(LM_RUNTIME_CONTEXT, "baci::ROcontImpl<>::new_subscription_Alarm", (LM_ERROR, "Can not create alarm dispatcher for %s because alarm_timer_trig=0", this->getProperty()->getName())); throw CORBA::NO_RESOURCES(); }// if (this->monitorEventDispatcher_mp==0) { CBDescIn descIn; descIn.id_tag = 0; this->monitorEventDispatcher_mp = new MonitorEventDispatcher(descIn, this->alarmTimerTrig_m, this->property_mp); if (this->monitorEventDispatcher_mp==0) { throw CORBA::NO_RESOURCES(); } } AlarmEventStrategyCont * eventStrategy_p = new AlarmEventStrategyCont(cb, desc, this->alarmTimerTrig_m, this, this->monitorEventDispatcher_mp); if (eventStrategy_p==0) { throw CORBA::NO_RESOURCES(); } this->monitorEventDispatcher_mp->subscribe(eventStrategy_p); ACS::Subscription_var subscription = ACS::Subscription::_narrow(eventStrategy_p->getCORBAReference()); return subscription._retn(); } /*___oOo___*/