Class ResultSpecification_impl
- All Implemented Interfaces:
Serializable
,Cloneable
,ResultSpecification
,MetaDataObject
,XMLizable
ResultSpecification
.
Notes on the implementation
Result Specifications (result specs, rs) are closely tied to capability specifications.
They consist of instances of
TypeOrFeatures and associated languages for which they are set.
This impl supports removing previously added types and features
for particular languages.
There are two forms of the data kept:
The data as it was provided to set the items in the result spec
This form is used when removing previously added things
The data after a type system has been provided, expanded to cover
the various implied settings, due to either
all Features flag on a type or
the type/subtype hierarchy in the type system
TypesOrFeatures are:
typeXXX:FeatureYYY - specifying a particular feature of a type
(Corner case: typeXXX:FeatureYYY doesn't imply there's a
typeXXX allFeat nor a
typeXXX w/o allFeat.
typeXXX with allFeatures - a shorthand for specifying
typeXXX and
typeXXX:FeatureYYY for all features YYY defined for typeXXX
(Corner case: excludes features ZZZ defined only in subtype of typeXXX)
typeXXX without allFeatures (w/o allFeat) - specifies a type, but says nothing about the features
This is specifiable in the XML. It means:
The type is produced/needed but there's no information about the features that
are to be produced or used
containsType typeXXX
returns true if typeXXX is in the RS, with or without the allFeats flag
returns false if only features involving typeXXX are specified
Intersection is done on fully expanded representations.
There are two kinds of inheritance used
Assuming there's a type system (which must be present when intersection is used), there's type/subtype
This means that if a resultSpec is set for typeXXX, then the containsType(typeYYY)
returns true if typeYYY is a subtype of typeXXX.
This also needs to work for typeXXX:featZZZ; containsFeature(typeYYY:featZZZ)
returns true if type YYY is a subtype of typeXXX.
Languages have a 3 level hierarchy:
x-unspecified - the same as no language being specified.
If the resultSpec contains typeXXX for language x-unspecified,
containsType(typeXXX, languageLLL) returns true, for any languageLLL
a "base" language, without a '-', e.g. "en"
a sub-language, with one or more '-', e.g., "en-us"
The rules for matching languages only handle these three levels of inheritance.
(Corner case: 3 or more level language hierarchy are treated as 3 level hierarchies
eg. zh-Hant-HK (Traditional Chinese as used in Hong Kong)
See http://www.w3.org/International/articles/language-tags/Overview.en.php )
Design considerations and assumptions
Many instances of this class are made, sometimes via cloning.
Most uses only use types, not type:features
Most don't use languages
A small subset of the possible types and type:features is specified explicitly
Sometimes types and/or features are deleted. (language capability flow deletes types and/or features)
Types and Features are kept on a per-language basis. Language can include a special value,
x-unspecified, which "matches" any other language.
Set operations among different result specs:
Union: done in aggregates over result-specs derived from input capabilities of delegates
Intersection: done for primitive components, over result-spec derived from output capability of the primitive
remove: one type or feature (used by language capability flow)
(Corner cases
removing typeXXX doesn't remove typeXXX:featureYYY
removing typeXXX allFeat doesn't remove typeXXX w/o allFeat (may have different languages)
removing typeXXX w/o allFeat doesn't remove typeXXX allFeat
The compiled version is used in containsType, containsFeature testing, and is used when
computing intersection.- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.uima.resource.metadata.impl.MetaDataObject_impl
MetaDataObject_impl.MetaDataAttr, MetaDataObject_impl.SerialContext, MetaDataObject_impl.Serializer
-
Field Summary
Modifier and TypeFieldDescriptionused for empty type subsumption lists in subtype iteratorFields inherited from class org.apache.uima.resource.metadata.impl.MetaDataObject_impl
serialContext
-
Constructor Summary
ConstructorDescriptionResultSpecification_impl
(TypeSystem aTypeSystem) Constructor specifying the type system this should always be used in preference to the 0 argument version if the type system is available. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addCapabilities
(Capability[] capabilities) Adds the output types and features from the specified capabilities to thisResultSpecification
.void
addCapabilities
(Capability[] capabilities, boolean outputs) Adds either outputs or inputs from the specified capabilities to thisResultSpecification
.void
addResultFeature
(String aFullFeatureName) Adds a Feature to thisResultSpecification
for the language x-unspecified.void
addResultFeature
(String aFullFeatureName, String[] aLanguageIDs) Adds a Feature to thisResultSpecification
for the specified languages.void
addResultType
(String aTypeName, boolean aAllAnnotatorFeatures) Adds an Type to thisResultSpecification
for the language x-unspecified.void
addResultType
(String aTypeName, boolean aAllAnnotatorFeatures, String[] aLanguageIDs) Adds an Type to thisResultSpecification
for the specified languages.void
addResultTypeOrFeature
(TypeOrFeature aTypeOrFeature) Adds a Result Type or Feature to thisResultSpecification
for the language x-unspecified.void
addResultTypeOrFeature
(TypeOrFeature tof, String[] languages) Adds a Result Type or Feature to thisResultSpecification
for the specified languages.clone()
returns a clone of theResultSpecification
object.void
compile
(TypeSystem aTypeSystem) Deprecated.no longer needed, remove call to thisboolean
containsFeature
(String aFullFeatureName) Determines whether thisResultSpecification
contains the specified Feature for the language x-unspecified.boolean
containsFeature
(String aFullFeatureName, String aLanguage) Determines whether thisResultSpecification
contains the specified Feature for the specified language.boolean
containsType
(String aTypeName) Determines whether thisResultSpecification
contains the specified Type for the language x-unspecified.boolean
containsType
(String aTypeName, String aLanguage) Determines whether thisResultSpecification
contains the specified Type for the specified language.boolean
Determines if this object is equal to another.Retrieves the Types and Features that the AnalysisEngine or Annotator is requested to produce, for all languages.getResultTypesAndFeatures
(String language) Retrieves the Types and Features that the AnalysisEngine or Annotator is requested to produce for the specified language.get the type system associated with this result specification.protected XmlizationInfo
To be implemented by subclasses to return information describing how to represent this object in XML.int
hashCode()
Gets the hash code for this object.void
removes the specified TypeOrFeature from thisResultSpecification
.void
setResultTypesAndFeatures
(TypeOrFeature[] aTypesAndFeatures) Sets the Types and Features that the AnalysisEngine or Annotator is requested to produce for the language x-unspecified, and removes all other type or feature information, that may be previously present (e.g., for other languages)void
setResultTypesAndFeatures
(TypeOrFeature[] aTypesAndFeatures, String[] aLanguageIDs) Sets the Types and Features that the AnalysisEngine or Annotator is requested to produce for the specified languages, and removes all other type or feature information, that may be previously present (e.g., for other languages).void
set the type system associated with this result specification.toString()
Dump this metadata object's attributes and values to a String.Methods inherited from class org.apache.uima.resource.metadata.impl.MetaDataObject_impl
buildFromXMLElement, buildFromXMLElement, getAdditionalAttributes, getAttributeClass, getAttributeValue, getInfoset, getMatchingNode, getPropertyDescriptors, getPropertyXmlInfo, getRelativePathBase, getSerialContext, getSourceUrl, getSourceUrlString, getWrapperClass, getXMLAttributes, isModifiable, listAttributes, readArrayPropertyValueFromXMLElement, readMapPropertyFromXml, readPropertyValueFromXMLElement, readUnknownPropertyValueFromXMLElement, resolveSettings, setAttributeValue, setInfoset, setSourceUrl, setSourceUrlIfNull, toXML, toXML, toXML, toXML, valueIsNullOrEmptyArray, writeArrayPropertyAsElement, writeMapPropertyToXml, writePropertyAsElement
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.uima.util.XMLizable
buildFromXMLElement, buildFromXMLElement, toXML, toXML, toXML, toXML
-
Field Details
-
EMPTY_TYPE_LIST
used for empty type subsumption lists in subtype iterator
-
-
Constructor Details
-
ResultSpecification_impl
public ResultSpecification_impl() -
ResultSpecification_impl
Constructor specifying the type system this should always be used in preference to the 0 argument version if the type system is available. Otherwise, the type system *must* be set via a method call prior to querying the result spec, with the one exception of the method getResultTypesAndFeaturesWithoutCompiling- Parameters:
aTypeSystem
- -
-
-
Method Details
-
getResultTypesAndFeatures
Description copied from interface:ResultSpecification
Retrieves the Types and Features that the AnalysisEngine or Annotator is requested to produce, for all languages.The set of types and features returned are just the ones that have been explicitly set or added to the ResultSpecification, and doesn't include any derived subtypes, even if this ResultSpecification has been compiled.
- Specified by:
getResultTypesAndFeatures
in interfaceResultSpecification
- Returns:
- an array of
TypeOrFeature
objects that define the result types and features for all languages. - See Also:
-
getResultTypesAndFeatures
Description copied from interface:ResultSpecification
Retrieves the Types and Features that the AnalysisEngine or Annotator is requested to produce for the specified language. See the class comment for how languages are compared.The set of types and features returned are just the ones that have been explicitly set or added to the ResultSpecification, and doesn't include any derived subtypes, even if this ResultSpecification has been compiled.
- Specified by:
getResultTypesAndFeatures
in interfaceResultSpecification
- Parameters:
language
- the language specifier- Returns:
- an array of
TypeOrFeature
objects that define the result types and features for the specified language. - See Also:
-
setResultTypesAndFeatures
Description copied from interface:ResultSpecification
Sets the Types and Features that the AnalysisEngine or Annotator is requested to produce for the language x-unspecified, and removes all other type or feature information, that may be previously present (e.g., for other languages)- Specified by:
setResultTypesAndFeatures
in interfaceResultSpecification
- Parameters:
aTypesAndFeatures
- an array ofTypeOrFeature
objects that define the result types and features for the language x-unspecified.- See Also:
-
setResultTypesAndFeatures
Description copied from interface:ResultSpecification
Sets the Types and Features that the AnalysisEngine or Annotator is requested to produce for the specified languages, and removes all other type or feature information, that may be previously present (e.g., for other languages).- Specified by:
setResultTypesAndFeatures
in interfaceResultSpecification
- Parameters:
aTypesAndFeatures
- an array ofTypeOrFeature
objects that define the result types and features for the specified languages.aLanguageIDs
- an array of ISO language identifiers.- See Also:
-
addResultTypeOrFeature
Description copied from interface:ResultSpecification
Adds a Result Type or Feature to thisResultSpecification
for the language x-unspecified. If there is already a same-named TypeOrFeature object contained in the result spec, its language specification for this ToF will be replaced with x-unspecified, and its allAnnotatorFeatures flag will be replaced with the parameter's.- Specified by:
addResultTypeOrFeature
in interfaceResultSpecification
- Parameters:
aTypeOrFeature
- the Type or Feature to add for the language x-unspecified- See Also:
-
addResultTypeOrFeature
Description copied from interface:ResultSpecification
Adds a Result Type or Feature to thisResultSpecification
for the specified languages. If there is already a same-named TypeOrFeature object contained in the result spec, the language specification for this ToF will be replaced with the specified languages, and its allAnnotatorFeatures flag will be replaced with the parameter's. If null is passed in for the aLanguageIDs, this is treated as if one language, x-unspecified, was given.- Specified by:
addResultTypeOrFeature
in interfaceResultSpecification
- Parameters:
tof
- the Type or Feature to add for the specified languageslanguages
- an array of ISO language identifiers.- See Also:
-
addResultType
Description copied from interface:ResultSpecification
Adds an Type to thisResultSpecification
for the language x-unspecified. If the current Type is already contained in the result spec, the language specification for this Type will be replaced with x-unspecified, and its allAnnotatorFeatures flag will be replaced with the parameter's.- Specified by:
addResultType
in interfaceResultSpecification
- Parameters:
aTypeName
- the name of the Type to add for the language x-unspecifiedaAllAnnotatorFeatures
- whether all features of this type should also be produced- See Also:
-
addResultType
Description copied from interface:ResultSpecification
Adds an Type to thisResultSpecification
for the specified languages. If the given Type is already contained in the result spec, the languages specified will be added to those already associated with the Type in this ResultSpec. The given type's allAnnotatorFeatures is logically "or"ed with any existing value. If null is passed in for the aLanguageIDs, this is treated as if one language, x-unspecified, was given.- Specified by:
addResultType
in interfaceResultSpecification
- Parameters:
aTypeName
- the name of the Type to add for the specified languagesaAllAnnotatorFeatures
- whether all features of this type should also be producedaLanguageIDs
- an array of ISO language identifiers.- See Also:
-
addResultFeature
Description copied from interface:ResultSpecification
Adds a Feature to thisResultSpecification
for the language x-unspecified. If the given Type is already contained in the result spec, the languages associated with that type will be replaced by x-unspecified.- Specified by:
addResultFeature
in interfaceResultSpecification
- Parameters:
aFullFeatureName
- the fully-qualified name of the Feature to add for the language x-unspecified- See Also:
-
addResultFeature
Description copied from interface:ResultSpecification
Adds a Feature to thisResultSpecification
for the specified languages. If the current Feature is already contained in the result spec, the language specification for this Feature will be augmented (added to) with the specified languages. If null is passed in for the aLanguageIDs, this is treated as if one language, x-unspecified, was given.- Specified by:
addResultFeature
in interfaceResultSpecification
- Parameters:
aFullFeatureName
- the fully-qualified name of the Feature to add for the specified languagesaLanguageIDs
- an array of ISO language identifiers.- See Also:
-
compile
Deprecated.no longer needed, remove call to thisDescription copied from interface:ResultSpecification
Compiles thisResultSpecification
using a specificTypeSystem
. The result is cached and used by theResultSpecification.containsType(String)
andResultSpecification.containsFeature(String)
methods to properly consider the inheritance of types and to restrict allAnnotatorFeatures to just those features defined in the type system when thisResultSpecification
contains Types withallAnnotatorFeatures
set to true.This method is called automatically internally when needed. Framework code, Annotators and Applications do not need to call it.
- Specified by:
compile
in interfaceResultSpecification
- Parameters:
aTypeSystem
- the Type System used to determine which features belong to each Type- See Also:
-
containsType
Description copied from interface:ResultSpecification
Determines whether thisResultSpecification
contains the specified Type for the language x-unspecified. If a type system is available to the result specification, a type will be considered to be contained in the result spec, also, if it is a subtype of the types originally specified to be in the result specification.- Specified by:
containsType
in interfaceResultSpecification
- Parameters:
aTypeName
- the name of the type- Returns:
- true if and only if this
ResultSpecification
contains the type with nameaTypeName
. - See Also:
-
containsType
Description copied from interface:ResultSpecification
Determines whether thisResultSpecification
contains the specified Type for the specified language. A type is considered to be contained in the result spec, also, if it is a subtype of the types originally specified to be in the result specification for this language.- Specified by:
containsType
in interfaceResultSpecification
- Parameters:
aTypeName
- the name of the typeaLanguage
- the language to search for. A null value or the value x-unspecified for this argument only matches ResultSpecifications having x-unspecified as their type. A language value that is contained within a language in the ResultSpecification is considered to match. In particular: Language ResultSpecification Result x-unspecified x-unspecified match x-unspecified en no match en x-unspecified match en en-us no match en-us en match- Returns:
- true if and only if this
ResultSpecification
contains the type with nameaTypeName
for a matching language. - See Also:
-
containsFeature
Description copied from interface:ResultSpecification
Determines whether thisResultSpecification
contains the specified Feature for the language x-unspecified. Feature names are fully qualified, consisting of the type name plus the feature-of-that-type name. A feature ttt:fff is contained in the result spec if that fff is specified for type ttt or any supertype of ttt in the result spec. A feature can be specified in the result spec explicitly or by specifying a type or supertype of the feature's type having the allAnnotatorFeatures flag set.- Specified by:
containsFeature
in interfaceResultSpecification
- Parameters:
aFullFeatureName
- the fully-qualified name of the feature, in the form MyTypeName:MyFeatureName.- Returns:
- true if and only if this
ResultSpecification
contains the feature with nameaFullFeatureName
. - See Also:
-
containsFeature
Description copied from interface:ResultSpecification
Determines whether thisResultSpecification
contains the specified Feature for the specified language. Feature names are fully qualified, consisting of the type name plus the feature-of-that-type name. A feature ttt:fff is contained in the result spec if that fff is specified for type ttt or any supertype of ttt in the result spec. A feature can be specified in the result spec explicitly or by specifying a type or supertype of the feature's type having the allAnnotatorFeatures flag set.- Specified by:
containsFeature
in interfaceResultSpecification
- Parameters:
aFullFeatureName
- the fully-qualified name of the feature, in the form MyTypeName:MyFeatureName.aLanguage
- the language to search for. A null value or the value x-unspecified for this argument only matches ResultSpecifications having x-unspecified as their type. A language value that is contained within a language in the ResultSpecification is considered to match. In particular: Language ResultSpecification Result x-unspecified x-unspecified match x-unspecified en no match en x-unspecified match en en-us no match en-us en match- Returns:
- true if and only if this
ResultSpecification
contains the feature with nameaFullFeatureName
for a matching language. - See Also:
-
getXmlizationInfo
Description copied from class:MetaDataObject_impl
To be implemented by subclasses to return information describing how to represent this object in XML.- Specified by:
getXmlizationInfo
in classMetaDataObject_impl
- Returns:
- information defining this object's XML representation
- See Also:
-
addCapabilities
Description copied from interface:ResultSpecification
Adds the output types and features from the specified capabilities to thisResultSpecification
.If a Type being added is already contained in the ResultSpecification, the languages from the Capabilities entry for this type will be added to those already associated with the Type in this ResultSpec. The given capability instance's allAnnotatorFeatures is logically "or"ed with any existing value.
- Specified by:
addCapabilities
in interfaceResultSpecification
- Parameters:
capabilities
- capabilities to add- See Also:
-
addCapabilities
Description copied from interface:ResultSpecification
Adds either outputs or inputs from the specified capabilities to thisResultSpecification
.If a Type being added is already contained in the ResultSpecification, the languages from the Capabilities entry for this type will be added to those already associated with the Type in this ResultSpec. The given capability instance's allAnnotatorFeatures is logically "or"ed with any existing value.
- Specified by:
addCapabilities
in interfaceResultSpecification
- Parameters:
capabilities
- capabilities to addoutputs
- true to add the output types/features to this ResultSpecification, false to add the input types/features to this ResultSpecification.- See Also:
-
removeTypeOrFeature
Description copied from interface:ResultSpecification
removes the specified TypeOrFeature from thisResultSpecification
.- Specified by:
removeTypeOrFeature
in interfaceResultSpecification
- Parameters:
tof
- the Type or Feature to remove- See Also:
-
clone
returns a clone of theResultSpecification
object.- Specified by:
clone
in interfaceMetaDataObject
- Specified by:
clone
in interfaceResultSpecification
- Overrides:
clone
in classMetaDataObject_impl
- Returns:
- Object copy of the current object
- See Also:
-
setTypeSystem
Description copied from interface:ResultSpecification
set the type system associated with this result specification. It is used to augment any types with their subtypes- Specified by:
setTypeSystem
in interfaceResultSpecification
- Parameters:
ts
- the CAS Type System
-
getTypeSystem
Description copied from interface:ResultSpecification
get the type system associated with this result specification.- Specified by:
getTypeSystem
in interfaceResultSpecification
- Returns:
- the type system
-
toString
Description copied from class:MetaDataObject_impl
Dump this metadata object's attributes and values to a String. This is useful for debugging.- Overrides:
toString
in classMetaDataObject_impl
-
equals
Description copied from class:MetaDataObject_impl
Determines if this object is equal to another. Two MetaDataObjects are equivalent if they share the same attributes and the same values for those attributes.- Specified by:
equals
in interfaceMetaDataObject
- Overrides:
equals
in classMetaDataObject_impl
- Parameters:
aObj
- object with which to compare this object- Returns:
- true if and only if this object is equal to
aObj
-
hashCode
public int hashCode()Description copied from class:MetaDataObject_impl
Gets the hash code for this object. The hash codes of two NameClassPairsx
andy
must be equal ifx.equals(y)
returns true;- Overrides:
hashCode
in classMetaDataObject_impl
- Returns:
- the hash code for this object
-