//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.uima; import java.util.Map; import org.apache.uima.fit.component.Resource_ImplBase; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceSpecifier; import uk.gov.dstl.baleen.uima.utils.UimaUtils; /** A base class for implementation of shared resources. * * This provides thin layer over Resource_ImplBase to supplement with Baleen monitoring and support functions. * * Implementators should override doInitialize and then add any specific functions that their shared object will offer. * * * */ public abstract class BaleenResource extends Resource_ImplBase { private UimaMonitor monitor; @Override public final boolean initialize(ResourceSpecifier specifier, Map<String, Object> additionalParams) throws ResourceInitializationException { // This will do initialization of resources,but won't be included in the metrics super.initialize(specifier, additionalParams); monitor = createMonitor(UimaUtils.getPipelineName(getUimaContext())); monitor.startFunction("initialize"); boolean result = doInitialize(specifier, additionalParams); if(!result) { monitor.warn("Failed to initialize"); } monitor.finishFunction("initialize"); return result; } protected UimaMonitor createMonitor(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 */ protected boolean doInitialize(ResourceSpecifier specifier, Map<String, Object> additionalParams) throws ResourceInitializationException{ // Do nothing - this should be overridden in most cases return true; } @Override public final void destroy() { monitor.startFunction("destroy"); super.destroy(); doDestroy(); monitor.finishFunction("destroy"); } protected void doDestroy() { // Do nothing - override if necessary } protected UimaMonitor getMonitor() { return monitor; } }