void Checkpoint::getComponentEvents (ComponentEventPtrArray & aList, std::set<string> * aFilter) { map<string, ComponentEventPtr *>::iterator it; for ( it = mEvents.begin( ); it != mEvents.end( ); ++it ) { ComponentEventPtr e = *( ( *it ).second ); if ( ( aFilter == NULL ) || ( ( e.getObject( ) != NULL ) && ( aFilter->count(e->getDataItem( )->getId( )) > 0 ) ) ) { while ( e.getObject( ) != NULL ) { ComponentEventPtr p = e->getPrev( ); aList.push_back(e); e = p; } } } }
string XmlPrinter::printSample(const unsigned int instanceId, const unsigned int bufferSize, const uint64_t nextSeq, const uint64_t firstSeq, const uint64_t lastSeq, ComponentEventPtrArray& results ) { xmlTextWriterPtr writer; xmlBufferPtr buf; string ret; try { THROW_IF_XML2_NULL(buf = xmlBufferCreate()); THROW_IF_XML2_NULL(writer = xmlNewTextWriterMemory(buf, 0)); THROW_IF_XML2_ERROR(xmlTextWriterSetIndent(writer, 1)); THROW_IF_XML2_ERROR(xmlTextWriterSetIndentString(writer, BAD_CAST " ")); initXmlDoc(writer, eSTREAMS, instanceId, bufferSize, 0, 0, nextSeq, firstSeq, lastSeq); THROW_IF_XML2_ERROR(xmlTextWriterStartElement(writer, BAD_CAST "Streams")); // Sort the vector by category. if (results.size() > 1) dlib::qsort_array<ComponentEventPtrArray,EventComparer>(results, 0, results.size() - 1, EventCompare); Device *lastDevice = NULL; Component *lastComponent = NULL; int lastCategory = -1; for (unsigned int i = 0; i < results.size(); i++) { ComponentEventPtr result = results[i]; DataItem *dataItem = result->getDataItem(); Component *component = dataItem->getComponent(); Device *device = component->getDevice(); if (device != lastDevice) { if (lastDevice != NULL) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // DeviceStream lastDevice = device; if (lastComponent != NULL) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // ComponentStream lastComponent = NULL; if (lastCategory != -1) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // Category lastCategory = -1; addDeviceStream(writer, device); } if (component != lastComponent) { if (lastComponent != NULL) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // ComponentStream lastComponent = component; if (lastCategory != -1) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // Category lastCategory = -1; addComponentStream(writer, component); } if (lastCategory != dataItem->getCategory()) { if (lastCategory != -1) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // Category lastCategory = dataItem->getCategory(); addCategory(writer, dataItem->getCategory()); } addEvent(writer, result); } if (lastCategory != -1) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // Category if (lastDevice != NULL) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // DeviceStream if (lastComponent != NULL) THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // ComponentStream THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // Streams THROW_IF_XML2_ERROR(xmlTextWriterEndElement(writer)); // MTConnectStreams THROW_IF_XML2_ERROR(xmlTextWriterEndDocument(writer)); xmlFreeTextWriter(writer); ret = (string) ((char*) buf->content); xmlBufferFree(buf); } catch (string error) { if (buf != NULL) xmlBufferFree(buf); if (writer != NULL) xmlFreeTextWriter(writer); sLogger << dlib::LERROR << "printProbe: " << error; } catch (...) { if (buf != NULL) xmlBufferFree(buf); if (writer != NULL) xmlFreeTextWriter(writer); sLogger << dlib::LERROR << "printProbe: unknown error"; } return ret; }