Exemple #1
0
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;
        }
    }
}