@Override
public Boolean call() throws MetricProcessingException {
logger.debug("Starting thread for metric {}", m.getClass().getName());
Object2Quad curQuad = null;
while(!stopSignal || !quadsToProcess.isEmpty()) {
curQuad = quadsToProcess.poll();
if(curQuad != null) {
logger.trace("Metric {}, new quad (processed: {}, to-process: {})", m.getClass().getName(), stmtsProcessed, quadsToProcess.size());
try {
m.compute(curQuad.getStatement());
curQuad = null;
stmtsProcessed++;
} catch (MetricProcessingException e) {
ExceptionOutput.output(e, "Halting metric processing " + metricName+". Quad causing problem: "+curQuad.getStatement().toString(), logger);
stopSignal = true;
throw e;
}
}
}
logger.debug("Thread for metric {} completed, total statements processed {}", m.getClass().getName(), stmtsProcessed);
return true;
}