void Collection::doProcess() { DocumentProcessorPtr pDocProcessor(createDocumentProcessor()); DocumentSource source(m_pConfigure->getDocSchema().get()); while (true) { source.reset(); RawDocumentPtr pRawDoc = m_pInputDocQueue->waitDequeue(); if (pRawDoc) { source.setRawDocument(pRawDoc); do { pDocProcessor->process(source); DocumentPtr pDoc = source.stealLastDocument(); if (pDoc && pDoc->getAction() != Document::AT_NONE) { m_pWriter->addDocument(pDoc); if (m_pObserver) { m_pObserver->step(); } } } while (source.toBeContinued()); } else { if (m_pObserver) { m_pObserver->complete(); } break; } } }