7 #include <stdair/stdair_exceptions.hpp> 8 #include <stdair/basic/BasConst_Event.hpp> 9 #include <stdair/bom/EventStruct.hpp> 10 #include <stdair/service/Logger.hpp> 18 EventQueue::EventQueue()
20 _progressStatus (
stdair::DEFAULT_PROGRESS_STATUS,
21 stdair::DEFAULT_PROGRESS_STATUS) {
25 EventQueue::EventQueue (
const Key_T& iKey)
26 : _key (iKey), _parent (NULL),
27 _progressStatus (
stdair::DEFAULT_PROGRESS_STATUS,
28 stdair::DEFAULT_PROGRESS_STATUS) {
34 _progressStatus (
stdair::DEFAULT_PROGRESS_STATUS,
35 stdair::DEFAULT_PROGRESS_STATUS) {
46 std::ostringstream oStr;
56 std::ostringstream oStr;
65 std::ostringstream oStr;
70 for (stdair::EventList_T::const_iterator itEvent =
_eventList.begin();
72 const stdair::EventStruct& lEvent = itEvent->second;
74 oStr << lEvent.describe();
82 list (
const stdair::EventType::EN_EventType& iType)
const {
83 std::ostringstream oStr;
86 oStr <<
"List " << stdair::EventType::getLabel(iType)
87 <<
" events:" << std::endl;
90 for (stdair::EventList_T::const_iterator itEvent =
_eventList.begin();
92 const stdair::EventStruct& lEvent = itEvent->second;
94 if (lEvent.getEventType() == iType) {
95 oStr << lEvent.describe();
126 for (ProgressStatusMap_T::iterator itProgressStatus =
129 stdair::ProgressStatus& lProgressStatus = itProgressStatus->second;
130 lProgressStatus.reset();
142 ProgressStatusMap_T::const_iterator itProgressStatus =
146 STDAIR_LOG_DEBUG (
"No ProgressStatus structure can be retrieved in the " 147 <<
"EventQueue: " <<
display());
161 ProgressStatusMap_T::const_iterator itProgressStatus =
165 STDAIR_LOG_ERROR (
"No ProgressStatus structure can be retrieved in the " 166 <<
"EventQueue: " <<
display());
170 const stdair::ProgressStatus& lProgressStatus = itProgressStatus->second;
171 return lProgressStatus.getCurrentNb();
180 ProgressStatusMap_T::const_iterator itProgressStatus =
183 std::ostringstream oStr;
184 oStr <<
"No ProgressStatus structure can be retrieved in the EventQueue '" 185 <<
display() <<
"'. The EventQueue should be initialised, e.g., by " 186 <<
"calling a buildSampleBom() method.";
188 STDAIR_LOG_ERROR (oStr.str());
192 const stdair::ProgressStatus& lProgressStatus = itProgressStatus->second;
193 return lProgressStatus.getExpectedNb();
202 ProgressStatusMap_T::const_iterator itProgressStatus =
206 STDAIR_LOG_ERROR (
"No ProgressStatus structure can be retrieved in the " 207 <<
"EventQueue: " <<
display());
211 const stdair::ProgressStatus& lProgressStatus = itProgressStatus->second;
212 return lProgressStatus.getActualNb();
217 const stdair::ProgressStatus& iProgressStatus) {
221 ProgressStatusMap_T::iterator itProgressStatus =
224 const bool hasInsertBeenSuccessful =
226 value_type (iType, iProgressStatus)).second;
228 if (hasInsertBeenSuccessful ==
false) {
229 STDAIR_LOG_ERROR (
"No progress_status can be inserted " 230 <<
"for the following event type: " 231 << stdair::EventType::getLabel(iType)
233 throw stdair::EventException (
"No progress_status can be inserted for the " 234 "following event type: " 235 + stdair::EventType::getLabel(iType)
242 stdair::ProgressStatus& lProgressStatus = itProgressStatus->second;
245 const stdair::Count_T& lCurrentNb = iProgressStatus.getCurrentNb();
246 lProgressStatus.setCurrentNb (lCurrentNb);
248 const stdair::Count_T& lExpectedNb = iProgressStatus.getExpectedNb();
249 lProgressStatus.setExpectedNb(lProgressStatus.getExpectedNb() + lExpectedNb);
251 const stdair::Count_T& lActualNb = iProgressStatus.getActualNb();
252 lProgressStatus.setActualNb (lProgressStatus.getActualNb() + lActualNb);
257 addStatus (
const stdair::EventType::EN_EventType& iType,
258 const stdair::NbOfEvents_T& iExpectedTotalNbOfEvents) {
261 const stdair::Count_T lExpectedTotalNbOfEventsInt =
262 static_cast<const stdair::Count_T> (std::floor (iExpectedTotalNbOfEvents));
263 const stdair::ProgressStatus lProgressStatus (lExpectedTotalNbOfEventsInt);
269 const stdair::Count_T lExpectedNb =
271 + iExpectedTotalNbOfEvents);
274 const stdair::Count_T lActualNb =
276 + iExpectedTotalNbOfEvents);
283 const stdair::NbOfEvents_T& iActualNbOfEvents) {
286 const stdair::Count_T lActualNbOfEventsInt =
287 static_cast<const stdair::Count_T> (std::floor (iActualNbOfEvents));
290 ProgressStatusMap_T::iterator itProgressStatus =
295 stdair::ProgressStatus& lProgressStatus = itProgressStatus->second;
298 const stdair::Count_T& lActualEventTypeNb = lProgressStatus.getActualNb();
299 const stdair::Count_T lActualEventTypeNbInt =
300 static_cast<const stdair::Count_T> (std::floor (lActualEventTypeNb));
302 const stdair::Count_T lActualDeltaNb = lActualNbOfEventsInt - lActualEventTypeNbInt;
306 lProgressStatus.setActualNb (lActualNbOfEventsInt);
312 const stdair::ProgressStatus& iProgressStatus) {
316 ProgressStatusMap_T::iterator itProgressStatus =
321 itProgressStatus->second = iProgressStatus;
327 getStatus (
const stdair::EventType::EN_EventType& iType)
const {
331 ProgressStatusMap_T::const_iterator itProgressStatus =
334 std::ostringstream oStr;
335 oStr <<
"No ProgressStatus structure can be retrieved in the EventQueue '" 336 <<
display() <<
"' for the following event type: " 337 << stdair::EventType::getLabel(iType) <<
".";
339 STDAIR_LOG_ERROR (oStr.str());
344 const stdair::ProgressStatus& oProgressStatus = itProgressStatus->second;
345 return oProgressStatus;
354 ProgressStatusMap_T::const_iterator itProgressStatus =
358 STDAIR_LOG_ERROR (
"No ProgressStatus structure can be retrieved in the " 359 <<
"EventQueue: " <<
display());
363 const stdair::ProgressStatus& lProgressStatus = itProgressStatus->second;
364 return lProgressStatus.progress();
371 std::ostringstream oStr;
372 oStr <<
"The event queue '" <<
describeKey() <<
"' is empty. " 373 <<
"No event can be popped.";
375 STDAIR_LOG_ERROR (oStr.str());
383 stdair::EventList_T::iterator itEvent =
_eventList.begin();
391 ioEventStruct = itEvent->second;
393 const stdair::EventType::EN_EventType& lEventType = ioEventStruct.getEventType();
394 stdair::ProgressStatusSet oProgressStatusSet (lEventType);
413 stdair::ProgressStatus lEventTypeProgressStatus =
getStatus (lEventType);
416 ++lEventTypeProgressStatus;
419 setStatus (lEventType, lEventTypeProgressStatus);
423 oProgressStatusSet.setTypeSpecificStatus (lEventTypeProgressStatus);
432 return oProgressStatusSet;
437 bool insertionSucceeded =
438 _eventList.insert (stdair::EventListElement_T (ioEventStruct.getEventTimeStamp(),
439 ioEventStruct)).second;
453 const unsigned int idx = 0;
454 while (insertionSucceeded ==
false && idx != 1e3) {
456 ioEventStruct.incrementEventTimeStamp();
460 _eventList.insert (stdair::EventListElement_T (ioEventStruct.getEventTimeStamp(),
461 ioEventStruct)).second;
465 return insertionSucceeded;
471 bool hasSearchEventBeenSucessful =
true;
478 const stdair::Duration_T lDuration =
479 iDateTime - stdair::DEFAULT_EVENT_OLDEST_DATETIME;
480 const stdair::LongDuration_T lDateTimeStamp =
481 lDuration.total_milliseconds();
484 stdair::EventList_T::iterator itEvent =
490 hasSearchEventBeenSucessful =
false;
493 return hasSearchEventBeenSucessful;
const EventQueueID_T DEFAULT_EVENT_QUEUE_ID
void addStatus(const stdair::EventType::EN_EventType &, const stdair::NbOfRequests_T &iExpectedTotalNbOfEvents)
stdair::ProgressPercentage_T calculateProgress() const
const std::string describeKey() const
const stdair::Count_T & getExpectedTotalNbOfEvents() const
const stdair::Count_T & getActualTotalNbOfEvents() const
bool hasProgressStatus(const stdair::EventType::EN_EventType &) const
const stdair::Count_T & getCurrentNbOfEvents() const
ProgressStatusMap_T _progressStatusMap
std::map< stdair::EventType::EN_EventType, stdair::ProgressStatus > ProgressStatusMap_T
bool hasEventDateTime(const stdair::DateTime_T &)
std::string toString() const
const stdair::ProgressStatus & getStatus() const
stdair::Count_T getQueueSize() const
stdair::ProgressStatusSet popEvent(stdair::EventStruct &)
stdair::EventList_T _eventList
std::string display() const
void setStatus(const stdair::ProgressStatus &iProgressStatus)
Class holding event structures.
void updateStatus(const stdair::EventType::EN_EventType &, const stdair::ProgressStatus &iProgressStatus)
stdair::ProgressStatus _progressStatus
bool isQueueEmpty() const
bool addEvent(stdair::EventStruct &)