blob: a81dde09691912a51f7d6390483896e9ef496827 [file] [log] [blame]
/*
* 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.resource.metadata;
import org.apache.uima.UIMA_UnsupportedOperationException;
import org.apache.uima.resource.ResourceManager;
import org.apache.uima.util.InvalidXMLException;
/**
* Metadata that describes a "Processing" {@link org.apache.uima.resource.Resource} - that is, one
* that reads or writes to the {@link org.apache.uima.cas.CAS}.
* <p>
* As with all {@link MetaDataObject}s, a <code>ProcessingResourceMetaData</code> may or may not be
* modifiable. An application can find out by calling the {@link #isModifiable()} method.
*
*
*/
public interface ProcessingResourceMetaData extends ResourceMetaData {
/**
* Retrieves the Type System used by this Processing Resource. The Type System contains
* {@link TypeDescription}s and {@link FeatureDescription}s that are the inputs and/or outputs of
* this Resource. Some Processing Resources, such as aggregate analysis engines, may not contain a
* type system and return <code>null</code>.
*
* @return a description of the type system used by this Resource
*/
TypeSystemDescription getTypeSystem();
/**
* Retrieves the Type System used by this Processing Resource. The Type System contains
* {@link TypeDescription}s and {@link FeatureDescription}s that are the inputs and/or outputs of
* this Resource.
*
* @param aTypeSystem
* a description of the type system used by this Resource.
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
void setTypeSystem(TypeSystemDescription aTypeSystem);
/**
* Retrieves the Type Priorites for this Processing Resource. Type Priorities may be used to
* determine the sort order of CAS indexes - see {@link #getFsIndexes()}.
*
* @return the Type Priorities for Resource
*/
TypePriorities getTypePriorities();
/**
* Retrieves the Type Priorites for this Processing Resource. Type Priorities may be used to
* determine the sort order of CAS indexes - see {@link #getFsIndexes()}.
*
* @param aTypePriorities
* the Type Priorities for this Resource
*/
void setTypePriorities(TypePriorities aTypePriorities);
/**
* Retrieves the FS Index collection used by this Processing Resource. FS Indexes are used to
* iterate over annotations in the {@link org.apache.uima.cas.CAS}.
*
* @return a description of the Feature Structure indexes used by this Resource.
*/
FsIndexCollection getFsIndexCollection();
/**
* Sets the Feature Structure Index collection used by this Processing Resource. FS Indexes are
* used to iterate over annotations in the {@link org.apache.uima.cas.CAS}.
*
* @param aFsIndexCollection
* a description of the Feature Structure indexes used by this Resource.
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
void setFsIndexCollection(FsIndexCollection aFsIndexCollection);
/**
* Retrieves the Feature Structure indexes by this Processing Resource. These are used to iterate
* over annotations in the {@link org.apache.uima.cas.CAS}.
* <p>
* NOTE: this method predates the {@link FsIndexCollection} object, which may define additional
* information (name, description, vendor, version) and import other FsIndexCollections, and
* provides direct access to the {@link FsIndexDescription} objects. To access the
* {@link FsIndexCollection} object, call {@link #getFsIndexCollection()}.
*
* @return a description of the Feature Structure indexes used by this Resource.
*/
FsIndexDescription[] getFsIndexes();
/**
* Sets the Feature Structure indexes by this Processing Resource. These are used to iterate over
* annotations in the {@link org.apache.uima.cas.CAS}.
* <p>
* NOTE: this method predates the {@link FsIndexCollection} object, which may define additional
* information (name, description, vendor, version) and import other FsIndexCollections, and
* provides direct access to the {@link FsIndexDescription} objects. To access the
* {@link FsIndexCollection} object, call {@link #getFsIndexCollection()}.
*
* @param aFSIndexes
* a description of the Feature Structure indexes used by this Resource.
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
void setFsIndexes(FsIndexDescription... aFSIndexes);
/**
* Retrieves this Processing Resource's {@link Capability Capabilities}. Each capability consists
* of a set of features or types that this Resource inputs and outputs, along with the
* preconditions (e.g. language or mime type) on the input Entity.
*
* @return an array of <code>Capabilities</code>.
*/
Capability[] getCapabilities();
/**
* Sets this Processing Resource's {@link Capability Capabilities}. Each capability consists of a
* set of features or types that this Resource inputs and outputs, along with the preconditions
* (e.g. language or mime type) on the input Entity.
*
* @param aCapabilities
* an array of <code>Capabilities</code>.
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
void setCapabilities(Capability... aCapabilities);
/**
* Gets this Processing Resource's {@link OperationalProperties}. This includes information such
* as whether this component will modify the CAS, and whether multiple instances of this component
* can be run in parallel.
*
* @return operational properties for this component
*/
OperationalProperties getOperationalProperties();
/**
* Sets this Processing Resource's {@link OperationalProperties}. This includes information such
* as whether this component will modify the CAS, and whether multiple instances of this component
* can be run in parallel.
*
* @param aOperationalProperties
* operational properties for this component
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
void setOperationalProperties(OperationalProperties aOperationalProperties);
/**
* Resolves any import declarations. This includes imports of type systems, type priorities, and
* FS index collections. The imported types, type priorities, and FS index collections are added
* directly onto their respective lists, and the import elements are deleted, so this results in a
* structure that is equivalent to the imported elements having been defined locally.
*
* @throws InvalidXMLException
* if either the import target does not exist or is invalid
*/
@Override
void resolveImports() throws InvalidXMLException;
/**
* Resolves any import declarations. This includes imports of type systems, type priorities, and
* FS index collections. The imported types, type priorities, and FS index collections are added
* directly onto their respective lists, and the import elements are deleted, so this results in a
* structure that is equivalent to the imported elements having been defined locally.
*
* @param aResourceManager
* the Resource Manager used to locate descriptors imported by name. For example, the
* path in which to locate these descriptors can be set via the
* {@link ResourceManager#setDataPath(String)} method.
*
* @throws InvalidXMLException
* if either the import target does not exist or is invalid
*/
@Override
void resolveImports(ResourceManager aResourceManager) throws InvalidXMLException;
/**
* Gets whether this AE is sofa-aware. This is a derived property that cannot be set directly. An
* AE is sofa-aware if and only if it declares at least one input sofa or output sofa.
*
* @return true if this component is sofa-aware, false if it is sofa-unaware.
*/
boolean isSofaAware();
}