def initialize(self):
     self.localCapDb = database(*self.capServerDetails)
     self.localAstDb = database(*self.astServerDetails)
     
     if self.mode == "DB":
         self._nodeComponent = QualDbComponent(self.localCapDb,self.localAstDb,self.nodeServerDetails,self.settings)
     else:
         self._nodeComponent = QualFtpComponent(self.localCapDb,self.localAstDb,self.nodeServerDetails,self.settings)
class QualNodePoller(NodePoller):
    
    def __init__(self,capServerDetails,astServerDetails,nodeProfile,QualSettings):
        NodePoller.__init__(self,nodeProfile)
        self.capServerDetails = capServerDetails
        self.astServerDetails = astServerDetails
        self.settings = QualSettings
        self.pollerType = "QUAL "+self.mode 
        self.start()
    
    def initialize(self):
        self.localCapDb = database(*self.capServerDetails)
        self.localAstDb = database(*self.astServerDetails)
        
        if self.mode == "DB":
            self._nodeComponent = QualDbComponent(self.localCapDb,self.localAstDb,self.nodeServerDetails,self.settings)
        else:
            self._nodeComponent = QualFtpComponent(self.localCapDb,self.localAstDb,self.nodeServerDetails,self.settings)
        
    
    # TODO: move back to node poller
    def _getCurrentDocsInProgress(self):
        query = 'select distinct documentid from autoprocess.workflowstate_ap where actionitemid = 2\
                 and pollerid = "'+self.ip+':2" and state = "IN PROGRESS"'
        inProgressDocs = self.localCapDb.select_Query(query)
        return inProgressDocs

    # TODO: move back to node poller 
    def _copyDocsDataToNode(self,documents):
        self.printMsg('Started copying processing data for documents : ',documents)
        self._nodeComponent.copyLocalCapToNodeCap(documents)
        self.printMsg('Processing data copied for documents : ',documents)
    
    # TODO: move back to node poller
    def _revertLocalDocsStatus(self,documents):
        docString = '('+','.join(documents)+')'
        query = 'delete from autoprocess.workflowstate_ap where actionitemid = 2\
                 and documentid in '+docString+' and pollerid = "'+self.ip+':2\
                " and state = "IN PROGRESS"'
        self.localCapDb.execute_Non_Query(query)
        self.printMsg('Docs Status reverted for documents :',documents)
    
    # TODO: move back to nodepoller   
    def _updateLocalDocsStatus(self,documents):
        state = 'IN PROGRESS'
        for docId in documents:
           self.__insertQualDocState(docId,state)
        self.printMsg('Docs Status Updated for documents :',documents)
    
    def __insertQualDocState(self,doc,state):
        query = 'insert into autoprocess.workflowstate_ap (Documentid,ActionItemId,State,PollerId) \
             select ' + doc + ',"2","' + state + '","' + self.ip+':2"  from \
             (select count(*) as records from autoprocess.workflowstate_ap where documentid=' + doc + ' and actionitemid="2")data \
             where records = 0'
        status = self.localCapDb.execute_Non_Query(query)
    
    # TODO: Move back to node poller
    def _copyProcessedDocsData(self,successfulDocs,failedDocs):
        self.printMsg('Started copying processed data for documents : ',[successfulDocs,failedDocs])
        if successfulDocs:
            self._nodeComponent.copyFullNodeAstToLocalAst(successfulDocs)
            self._nodeComponent.copyFullNodeCapToLocalCap(successfulDocs)
            self.printMsg('Processed data copied for successful documents :',successfulDocs)
        if failedDocs:
            self._nodeComponent.copyDebugNodeAstToLocalAst(failedDocs)
            self._nodeComponent.copyDebugNodeCapToLocalCap(failedDocs)
            self.printMsg('Debug data copied for failed documents :',failedDocs)
    
    # TODO: Move back to node poller
    def _updateCompletedDocsStatus(self,docsStatus):
        for docId,docStatus in docsStatus:
            query = 'update autoprocess.workflowstate_ap set state = "' + docStatus + '", timestamp = now() where \
                    documentid = ' + docId + ' and actionitemid = 2 and pollerid="' \
                    + self.ip+':2"' 
            self.localCapDb.execute_Non_Query(query)
        self.printMsg('Docs Status Updated on local Db for documents :',docsStatus)
        
    def _cleanUpNodeDB(self,documents):
        self._nodeComponent.cleanNodeDb(documents)