//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.uima; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.fit.component.JCasAnnotator_ImplBase; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import uk.gov.dstl.baleen.uima.utils.UimaUtils; /** * A discrete task within Baleen which forms part of a job. * * Tasks are effectively annotators, and as such can have configuration paramters and access shared * resources.Tasks can override the usual doInitialise and doDestroy functions can have access to a * Uima monitor for logging. They do not have access to history (as they function outside of * document processing). * * Task implementations should override execute and perform their logic. They may access / change * the settings available in the JobSettings they are provided. * * @baleen.javadoc * */ public abstract class BaleenTask extends JCasAnnotator_ImplBase { /** The monitor. */ private UimaMonitor monitor; @Override public void initialize(final UimaContext context) throws ResourceInitializationException { // This will do initialization of resources, // but won't be included in the metrics super.initialize(context); final String pipelineName = UimaUtils.getPipelineName(context); monitor = createMonitor(pipelineName); monitor.startFunction("initialize"); doInitialize(context); monitor.finishFunction("initialize"); } /** * Creates the monitor. * * @param pipelineName * the pipeline name * @return the uima monitor */ protected UimaMonitor createMonitor(final String pipelineName) { return new UimaMonitor(pipelineName, this.getClass()); } /** * Called when the analysis engine is being initialized. Any required resources, for example, * should be opened at this point. * * @param aContext * UimaContext object passed by the Collection Processing Engine * @throws ResourceInitializationException * the resource initialization exception */ public void doInitialize(final UimaContext aContext) throws ResourceInitializationException { // Do nothing - this should be overridden in most cases } @Override public final void process(final JCas aJCas) throws AnalysisEngineProcessException { monitor.startFunction("execute"); execute(new JobSettings(aJCas)); monitor.finishFunction("execute"); monitor.persistCounts(); } /** * Called when the task should run. * * @param settings * the job settings to run with * @throws AnalysisEngineProcessException * the analysis engine process exception */ protected abstract void execute(JobSettings settings) throws AnalysisEngineProcessException; @Override public void destroy() { monitor.startFunction("destroy"); doDestroy(); monitor.finishFunction("destroy"); } /** * Called when the analysis engine has finished and is closing down. Any open resources, for * example, should be closed at this point. */ protected void doDestroy() { // Do nothing - this should be overridden in most cases } /** * Get the UIMA monitor for this annotator. * * @return the uima monitor */ protected UimaMonitor getMonitor() { return monitor; } }