All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.uima.UimaContext Maven / Gradle / Ivy

There is a newer version: 3.5.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.apache.uima;

import java.io.InputStream;
import java.net.URI;
import java.net.URL;

import org.apache.uima.cas.AbstractCas;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.SofaID;
import org.apache.uima.resource.ResourceAccessException;
import org.apache.uima.resource.Session;
import org.apache.uima.util.InstrumentationFacility;
import org.apache.uima.util.Logger;

/**
 * Provides access to external resources (other than the CAS). The UimaContext
 * provides UIMA resources (e.g. Annotators, Collection Readers, CAS Consumers, CAS Initializers)
 * with all access to external resources (other than the {@link org.apache.uima.cas.CAS}). Examples
 * include:
 * 
    *
  • Configuration Parameters
  • *
  • Logging & Instrumentation Facilities
  • *
  • Access to External Analysis Resources, such as dictionary files
  • *
* * */ public interface UimaContext { /** * Retrieves the value for a configuration parameter that is not defined in any group or is * defined in the default group. *

* This method returns null if the parameter is optional and has not been assigned * a value. (For mandatory parameters, an exception is thrown during initialization if no value * has been assigned.) This method also returns null if there is no declared * configuration parameter with the specified name. * * @param aParamName * the name of the parameter to look up * * @return the value of the parameter with the given name. The caller is expected to know the data * type of the parameter. Returns null if the parameter does not exist or * has not been assigned a value. */ public Object getConfigParameterValue(String aParamName); /** * Retrieves the value for a configuration parameter in a particular group. If that group contains * no value for the specified parameter, the fallback strategy specified by the Analysis Engine's * {@link org.apache.uima.resource.metadata.ConfigurationParameterDeclarations#getSearchStrategy()} * property will be used. The search strategy can be specified in the descriptor. *

* This method returns null if the parameter is optional and has not been assigned * a value. (For mandatory parameters, an exception is thrown during initialization if no value * has been assigned.) This method also returns null if there is no declared * configuration parameter with the specified name. * * @param aGroupName * the name of the group containing the parameter * @param aParamName * the name of the parameter to look up * * @return the value of the parameter with the given name. The caller is expected to know the data * type of the parameter. Returns null if the parameter does not exist or * has not been assigned a value. */ public Object getConfigParameterValue(String aGroupName, String aParamName); /** * Gets the names of all configuration parameter groups. * * @return an array containing the names of all configuration groups that exist for this * component. Returns an empty array if no groups are declared. */ public String[] getConfigurationGroupNames(); /** * Gets the names of all configuration parameters in the specified group. * * @param aGroup * the group name * * @return an array containing the names of all configuration parameters declared in * aGroup. Note that this does include parameters with null values. * Returns an empty array if there are none (including if the group does not exist). */ public String[] getConfigParameterNames(String aGroup); /** * Gets the names of all configuration parameters that are not declared in a group. * * @return an array containing the names of all configuration parameters not declared in any * group. Returns an empty array if there are none. */ public String[] getConfigParameterNames(); /** * Gets the Logger to which log output will be sent. UIMA components should use * this facility rather than writing to their own log files (or to stdout). * * @return an instance of a logger for use by this annotator. */ public Logger getLogger(); /** * Gets the InstrumentationFacility that a component can use to record information * about its performance. * * @return an instance of the instrumentation facility */ public InstrumentationFacility getInstrumentationFacility(); /** * Retrieves the URL to the named resource. This can be used, for example, to locate configuration * or authority files. The resource should be declared in the <externalResourceDependencies> * section of the descriptor. *

* Note that if the URL contains spaces may be encoded as %20. The {@link URL#getPath()} method * does NOT decode these sequences, therefore it is not safe to call * getResourceURL().getPath() and attempt to use the result as a file path. * Instead, you may use {@link #getResourceURI(String)} or {@link #getResourceFilePath(String)}. *

* For backwards compatibility, if the key is not declared as a resource dependency, it is looked * up directly in the {@link #getDataPath() data path} and the class path. However, this usage is * deprecated and support may be dropped in future versions. ALL external resource dependencies * should be declared in the descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * * @return the URL at which the named resource is located, null if * the named resource could not be found. * * @throws ResourceAccessException * if a failure occurs in accessing the resource */ public URL getResourceURL(String aKey) throws ResourceAccessException; /** * Retrieves the URI to the named resource. This can be used, for example, to locate configuration * or authority files. The resource should be declared in the <externalResourceDependencies> * section of the descriptor. *

* This method is safer than {@link #getResourceURL(String)} in its treatment of file paths * containing spaces. This is because the {@link URI#getPath()} does perform URL decoding of that * path (decoding %20 sequences to spaces) whereas {@link URL#getPath()} does not. *

* For backwards compatibility, if the key is not declared as a resource dependency, it is looked * up directly in the {@link #getDataPath() data path} and the class path. However, this usage is * deprecated and support may be dropped in future versions. ALL external resource dependencies * should be declared in the descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * * @return the URI at which the named resource is located, null if * the named resource could not be found. * * @throws ResourceAccessException * if a failure occurs in accessing the resource */ public URI getResourceURI(String aKey) throws ResourceAccessException; /** * Retrieves the absolute file path to the named resource. This can be used, for example, to * locate configuration or authority files. The resource should be declared in the * <externalResourceDependencies> section of the descriptor. *

* This only works if the resource is a local file. If the resource is not a local file (for * example, it could be an http URL, then an exception will be thrown. *

* URL decoding will be done on the file path, so it is safe to use this method for file paths * that contain spaces. * * For backwards compatibility, if the key is not declared as a resource dependency, it is looked * up directly in the {@link #getDataPath() data path} and the class path. However, this usage is * deprecated and support may be dropped in future versions. ALL external resource dependencies * should be declared in the descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * * @return the absolute file path at which the named resource is located, null if * the named resource could not be found. * * @throws ResourceAccessException * if the resource is not a local file, or if a failure occurs in accessing the resource */ public String getResourceFilePath(String aKey) throws ResourceAccessException; /** * Retrieves an InputStream for reading from the named resource. This can be used, for example, to * locate configuration or authority files. The resource should be declared in the * <externalResourceDependencies> section of the descriptor. *

* For backwards compatibility, if the key is not declared as a resource dependency, it is looked * up directly in the {@link #getDataPath() data path} and the class path. However, this usage is * deprecated and support may be dropped in future versions. ALL external resource dependencies * should be declared in the descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * * @return an InputStream for reading from the named resource, null * if the named resource could not be found. It is the caller's responsibility to close * this stream once it is no longer needed. * * @throws ResourceAccessException * if a failure occurs in accessing the resource */ public InputStream getResourceAsStream(String aKey) throws ResourceAccessException; /** * Retrieves the named resource object. This can be used to acquire references to external * resources. The resource should be declared in the <externalResourceDependencies> section * of the descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * * @return the object bound to aName, null if none. * * @throws ResourceAccessException * if a failure occurs in accessing the resource */ public Object getResourceObject(String aKey) throws ResourceAccessException; /** * Retrieves the URL to the named resource. This can be used, for example, to locate configuration * or authority files. The resource should be declared in the <externalResourceDependencies> * section of the descriptor. *

* Note that if the URL contains spaces they may be encoded as %20. The {@link URL#getPath()} * method does NOT decode these sequences, therefore it is not safe to call * getResourceURL().getPath() and attempt to use the result as a file path. * Instead, you may use {@link #getResourceURI(String)} or {@link #getResourceFilePath(String)}. *

* For backwards compatibility, if the key is not declared as a resource dependency, it is looked * up directly in the {@link #getDataPath() data path} and the class path. However, this usage is * deprecated and support may be dropped in future versions. ALL external resource dependencies * should be declared in the descriptor. *

* This version of this method takes an array of parameters used to further identify the resource. * This can be used, for example, with resources that vary depending on the language of the * document being analyzed, such as when the <fileLanguageResourceSpecifier> element is used in * the component descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * @param aParams * parameters used to further identify the resource. When used to identify the language * for a <fileLanguageResourceSpecifier>, this array should contain a single element, * the ISO language code for the language of the document (e.g. "en", "de"). * * @return the URL at which the named resource is located, null if * the named resource could not be found. * * @throws ResourceAccessException * if a failure occurs in accessing the resource */ public URL getResourceURL(String aKey, String[] aParams) throws ResourceAccessException; /** * Retrieves the URI to the named resource. This can be used, for example, to locate configuration * or authority files. The resource should be declared in the <externalResourceDependencies> * section of the descriptor. *

* This method is safer than {@link #getResourceURL(String)} in its treatment of file paths * containing spaces. This is because the {@link URI#getPath()} does perform URL decoding of that * path (decoding %20 sequences to spaces) whereas {@link URL#getPath()} does not. *

* For backwards compatibility, if the key is not declared as a resource dependency, it is looked * up directly in the {@link #getDataPath() data path} and the class path. However, this usage is * deprecated and support may be dropped in future versions. ALL external resource dependencies * should be declared in the descriptor. *

* This version of this method takes an array of parameters used to further identify the resource. * This can be used, for example, with resources that vary depending on the language of the * document being analyzed, such as when the <fileLanguageResourceSpecifier> element is used in * the component descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * * @return the URI at which the named resource is located, null if * the named resource could not be found. * * @throws ResourceAccessException * if a failure occurs in accessing the resource */ public URI getResourceURI(String aKey, String[] aParams) throws ResourceAccessException; /** * Retrieves the absolute file path to the named resource. This can be used, for example, to * locate configuration or authority files. The resource should be declared in the * <externalResourceDependencies> section of the descriptor. *

* This only works if the resource is a local file. If the resource is not a local file (for * example, it could be an http URL, then an exception will be thrown. *

* URL decoding will be done on the file path, so it is safe to use this method for file paths * that contain spaces. *

* For backwards compatibility, if the key is not declared as a resource dependency, it is looked * up directly in the {@link #getDataPath() data path} and the class path. However, this usage is * deprecated and support may be dropped in future versions. ALL external resource dependencies * should be declared in the descriptor. *

* This version of this method takes an array of parameters used to further identify the resource. * This can be used, for example, with resources that vary depending on the language of the * document being analyzed, such as when the <fileLanguageResourceSpecifier> element is used in * the component descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * * @return the absolute file path at which the named resource is located, null if * the named resource could not be found. * * @throws ResourceAccessException * if the resource is not a local file, or if a failure occurs in accessing the resource */ public String getResourceFilePath(String aKey, String[] aParams) throws ResourceAccessException; /** * Retrieves an InputStream for reading from the named resource. This can be used, for example, to * locate configuration or authority files. The resource should be declared in the * <externalResourceDependencies> section of the descriptor. *

* For backwards compatibility, if the key is not declared as a resource dependency, it is looked * up directly in the {@link #getDataPath() data path} and the class path. However, this usage is * deprecated and support may be dropped in future versions. ALL external resource dependencies * should be declared in the descriptor. *

* This version of this method takes an array of parameters used to further identify the resource. * This can be used, for example, with resources that vary depending on the language of the * document being analyzed, such as when the <fileLanguageResourceSpecifier> element is used in * the component descriptor. * * @param aKey * the key by which the resource is identified. This key should bd declared in the * <externalResourceDependencies> section of the descriptor. * @param aParams * parameters used to further identify the resource. When used to identify the language * for a <fileLanguageResourceSpecifier>, this array should contain a single element, * the ISO language code for the language of the document (e.g. "en", "de"). * * @return an InputStream for reading from the named resource, null * if the named resource could not be found. It is the caller's responsibility to close * this stream once it is no longer needed. * * @throws ResourceAccessException * if a failure occurs in accessing the resource */ public InputStream getResourceAsStream(String aKey, String[] aParams) throws ResourceAccessException; /** * Retrieves the named resource object. This can be used to acquire references to external * resources. The resource should be declared in the <externalResourceDependencies> section * of the descriptor. *

* This version of this method takes an array of parameters used to further identify the resource. * This can be used, for example, with resources that vary depending on the language of the * document being analyzed, such as when the <fileLanguageResourceSpecifier> element is used in * the component descriptor. * * @param aKey * the key by which the resource is identified. This key should be declared in the * <externalResourceDependencies> section of the descriptor. * @param aParams * parameters used to further identify the resource. When used to identify the language * for a <fileLanguageResourceSpecifier>, this array should contain a single element, * the ISO language code for the language of the document (e.g. "en", "de"). * * @return the object bound to aName, null if none. * * @throws ResourceAccessException * if a failure occurs in accessing the resource */ public Object getResourceObject(String aKey, String[] aParams) throws ResourceAccessException; /** * Gets the data path used to locate resources. This path may contain more than one directory, * separated by the System path.separator character (; on windows, : on UNIX). *

* This method is intended to be used only for integration of legacy or third-party components * that have their own resource management facility. If possible, it is recommended that you use * the getResoureXXX methods instead. * * @return the data path */ public String getDataPath(); /** * Returns the Session object, which can be used to store data that pertains to a particular * client session. All data that must persist across requests must be stored in the Session object * and NOT in component instance variables. In some service deployments, a single component instance may * serve multiple clients. In that case, the service wrapper may provide a different Session object * for each client, and this method would return the appropriate Session object for the component to use * for the current call. *

* Note that Session support is NOT implemented in any of the service wrappers (Vinci, SOAP) currently * provided in the UIMA SDK. * * @return the current Session object */ public Session getSession(); /** * Retrieve actual sofa ID given a symbolic name * * @param aSofaName * this component's name for a SofA * @return absolute SofA ID * * @deprecated As of v2.0, annotators no longer need to explicitly call this method. CAS views can * now be obtained directly by the method {@link CAS#getView(String)}, and the * framework will automatically do the necessary Sofa mappings. */ @Deprecated public SofaID mapToSofaID(String aSofaName); /** * Retrieve the sofa name as known to the component given an absolute Sofa ID. * * @param aSofaID * absolute SofA ID * @return this component's name for that SofA */ public String mapSofaIDToComponentSofaName(String aSofaID); /** * @return array of SofaID objects containing mapping of component sofa name to absolute sofa id * * @deprecated As of v2.0, annotators no longer need to explicitly call this method. CAS views can * now be obtained directly by the method {@link CAS#getView(String)}, and the * framework will automatically do the necessary Sofa mappings. */ @Deprecated public SofaID[] getSofaMappings(); /** * Get an empty CAS. This method can only be called from CAS Multipliers, and typically a CAS * Multiplier would call this indirectly through its * {@link org.apache.uima.analysis_component.CasMultiplier_ImplBase#getEmptyCAS()} or * {@link org.apache.uima.analysis_component.JCasMultiplier_ImplBase#getEmptyJCas()} method. *

* This method may maintain a pool of CASes and may block if none are currently available. * * @param aCasInterface * the specific CAS interface that the component wants to use (e.g. CAS or JCas). Must * specify a subtype of {@link AbstractCas}. * * @return an empty CAS. This will be an implementation of aCasInterface. */ public T getEmptyCas(Class aCasInterface); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy