blob: 4678d55a7d505e43213da9d2842cdf57ece1b6e0 [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.analysis_engine.metadata.impl;
import java.util.List;
import org.apache.uima.UIMAFramework;
import org.apache.uima.UIMA_IllegalArgumentException;
import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
import org.apache.uima.analysis_engine.metadata.FlowConstraints;
import org.apache.uima.resource.ResourceManager;
import org.apache.uima.resource.metadata.Capability;
import org.apache.uima.resource.metadata.FsIndexCollection;
import org.apache.uima.resource.metadata.FsIndexDescription;
import org.apache.uima.resource.metadata.OperationalProperties;
import org.apache.uima.resource.metadata.TypePriorities;
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.resource.metadata.impl.FsIndexCollection_impl;
import org.apache.uima.resource.metadata.impl.PropertyXmlInfo;
import org.apache.uima.resource.metadata.impl.ResourceMetaData_impl;
import org.apache.uima.resource.metadata.impl.XmlizationInfo;
import org.apache.uima.util.InvalidXMLException;
import org.apache.uima.util.XMLParser;
import org.apache.uima.util.XMLParser.ParsingOptions;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
/**
* Reference implementation of {@link AnalysisEngineMetaData}.
*
*
*/
public class AnalysisEngineMetaData_impl extends ResourceMetaData_impl
implements AnalysisEngineMetaData {
static final long serialVersionUID = -3030574527767871396L;
private boolean mAsynchronousModeSupported;
private FlowConstraints mFlowConstraints;
private AnalysisEngineMetaData[] mDelegateAnalysisEngineMetaData;
private Capability[] mCapabilities = Capability.EMPTY_CAPABILITIES;
private TypeSystemDescription mTypeSystem;
private TypePriorities mTypePriorities;
private FsIndexCollection mFsIndexCollection;
private OperationalProperties mOperationalProperties;
/*
* (non-Javadoc)
*
* @see org.apache.uima.resource.metadata.ProcessingResourceMetaData#resolveImports()
*/
@Override
public void resolveImports() throws InvalidXMLException {
resolveImports(UIMAFramework.newDefaultResourceManager());
}
/*
* (non-Javadoc)
*
* @see
* org.apache.uima.resource.metadata.ProcessingResourceMetaData#resolveImports(org.apache.uima.
* resource.ResourceManager)
*/
@Override
public void resolveImports(ResourceManager aResourceManager) throws InvalidXMLException {
if (getTypeSystem() != null) {
getTypeSystem().resolveImports(aResourceManager);
}
if (getTypePriorities() != null) {
getTypePriorities().resolveImports(aResourceManager);
}
if (getFsIndexCollection() != null) {
getFsIndexCollection().resolveImports(aResourceManager);
}
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#getCapabilities()
*/
@Override
public Capability[] getCapabilities() {
return mCapabilities;
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#setCapabilities(Capability[])
*/
@Override
public void setCapabilities(Capability... aCapabilities) {
if (aCapabilities == null) {
throw new UIMA_IllegalArgumentException(UIMA_IllegalArgumentException.ILLEGAL_ARGUMENT,
new Object[] { "null", "aCapabilities", "setCapabilities" });
}
mCapabilities = aCapabilities;
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#getTypeSystem()
*/
@Override
public TypeSystemDescription getTypeSystem() {
return mTypeSystem;
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#setTypeSystem(TypeSystemDescription)
*/
@Override
public void setTypeSystem(TypeSystemDescription aTypeSystem) {
mTypeSystem = aTypeSystem;
}
/**
* @see org.apache.uima.resource.metadata.ProcessingResourceMetaData#getTypePriorities()
*/
@Override
public TypePriorities getTypePriorities() {
return mTypePriorities;
}
/**
* @see org.apache.uima.resource.metadata.ProcessingResourceMetaData#setTypePriorities(TypePriorities)
*/
@Override
public void setTypePriorities(TypePriorities aTypePriorities) {
mTypePriorities = aTypePriorities;
}
/**
* @see org.apache.uima.resource.metadata.ProcessingResourceMetaData#getFsIndexCollection()
*/
@Override
public FsIndexCollection getFsIndexCollection() {
return mFsIndexCollection;
}
/**
* @see org.apache.uima.resource.metadata.ProcessingResourceMetaData#setFsIndexCollection(FsIndexCollection)
*/
@Override
public void setFsIndexCollection(FsIndexCollection aFsIndexCollection) {
mFsIndexCollection = aFsIndexCollection;
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#getFsIndexes()
*/
@Override
public FsIndexDescription[] getFsIndexes() {
return mFsIndexCollection == null ? null : mFsIndexCollection.getFsIndexes();
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#setFsIndexes(FsIndexDescription[])
*/
@Override
public void setFsIndexes(FsIndexDescription... aFsIndexes) {
if (mFsIndexCollection == null) {
mFsIndexCollection = new FsIndexCollection_impl();
}
mFsIndexCollection.setFsIndexes(aFsIndexes);
}
@Override
public OperationalProperties getOperationalProperties() {
return mOperationalProperties;
}
@Override
public void setOperationalProperties(OperationalProperties aOperationalProperties) {
mOperationalProperties = aOperationalProperties;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.uima.resource.metadata.impl.MetaDataObject_impl#writePropertyAsElement(org.apache.
* uima.resource.metadata.impl.PropertyXmlInfo, java.lang.String, org.xml.sax.ContentHandler)
*/
@Override
protected void writePropertyAsElement(PropertyXmlInfo aPropInfo, String aNamespace)
throws SAXException {
// Prevent the fsIndexes property from being written to XML - it exists only so old-style XML
// can be read.
if (!"fsIndexes".equals(aPropInfo.propertyName)) {
super.writePropertyAsElement(aPropInfo, aNamespace);
}
}
@Override
protected void readPropertyValueFromXMLElement(PropertyXmlInfo aPropXmlInfo, Element aElement,
XMLParser aParser, ParsingOptions aOptions) throws InvalidXMLException {
// Catch the case where both fsIndexes and fsIndexCollection are specified
if ("fsIndexes".equals(aPropXmlInfo.xmlElementName)
|| "fsIndexCollection".equals(aPropXmlInfo.xmlElementName)) {
if (mFsIndexCollection != null) {
throw new InvalidXMLException(InvalidXMLException.FS_INDEXES_OUTSIDE_FS_INDEX_COLLECTION,
null);
}
}
super.readPropertyValueFromXMLElement(aPropXmlInfo, aElement, aParser, aOptions);
}
@Override
protected void readUnknownPropertyValueFromXMLElement(Element aElement, XMLParser aParser,
ParsingOptions aOptions, List<String> aKnownPropertyNames) throws InvalidXMLException {
// Catch the case where both fsIndexes and fsIndexCollection are specified
if ("fsIndexes".equals(aElement.getTagName())
|| "fsIndexCollection".equals(aElement.getTagName())) {
if (mFsIndexCollection != null) {
throw new InvalidXMLException(InvalidXMLException.FS_INDEXES_OUTSIDE_FS_INDEX_COLLECTION,
null);
}
}
super.readUnknownPropertyValueFromXMLElement(aElement, aParser, aOptions, aKnownPropertyNames);
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#isAsynchronousModeSupported()
*/
@Override
public boolean isAsynchronousModeSupported() {
return mAsynchronousModeSupported;
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#setAsynchronousModeSupported(boolean)
*/
@Override
public void setAsynchronousModeSupported(boolean aSupported) {
mAsynchronousModeSupported = aSupported;
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#getFlowConstraints()
*/
@Override
public FlowConstraints getFlowConstraints() {
return mFlowConstraints;
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#setFlowConstraints(FlowConstraints)
*/
@Override
public void setFlowConstraints(FlowConstraints aFlowConstraints) {
mFlowConstraints = aFlowConstraints;
}
/**
* @see org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData#getDelegateAnalysisEngineMetaData()
*/
@Override
public AnalysisEngineMetaData[] getDelegateAnalysisEngineMetaData() {
return mDelegateAnalysisEngineMetaData;
}
/**
* Used internally to set the AnalysisEngine metadata. Not published through the interface or
* available to the JavaBeans introspector.
*
* @param aMetaData
* metadata for the delegate AnalysisEngines
*/
public void _setDelegateAnalysisEngineMetaData(AnalysisEngineMetaData[] aMetaData) {
mDelegateAnalysisEngineMetaData = aMetaData;
}
/**
* 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.
*/
@Override
public boolean isSofaAware() {
Capability[] capabilities = getCapabilities();
if (capabilities != null) {
for (int i = 0; i < capabilities.length; i++) {
if (capabilities[i].getInputSofas().length > 0
|| capabilities[i].getOutputSofas().length > 0) {
return true;
}
}
}
return false;
}
@Override
protected XmlizationInfo getXmlizationInfo() {
return XMLIZATION_INFO;
}
/**
* Static method to get XmlizationInfo, used by subclasses to set up their own XmlizationInfo.
*
* @return XmlizationInfo, used by subclasses to set up their own XmlizationInfo.
*/
protected static XmlizationInfo getXmlizationInfoForClass() {
return XMLIZATION_INFO;
}
static final private XmlizationInfo XMLIZATION_INFO = new XmlizationInfo("analysisEngineMetaData",
null); // properties assigned below
static {
// this class's Xmlization info is derived from that of its superclass
// (would derive from ProcessingResourceMetaData_impl but preexisting XML
// schema requires that flowConstraints come before type system.)
XmlizationInfo superclassInfo = ResourceMetaData_impl.getXmlizationInfoForClass();
PropertyXmlInfo[] newProperties = new PropertyXmlInfo[] {
new PropertyXmlInfo("flowConstraints"), new PropertyXmlInfo("typeSystem", null),
new PropertyXmlInfo("typePriorities", null), new PropertyXmlInfo("fsIndexCollection", null),
new PropertyXmlInfo("fsIndexes"), new PropertyXmlInfo("capabilities", false),
new PropertyXmlInfo("operationalProperties", null), new PropertyXmlInfo("casInterface") };
XMLIZATION_INFO.propertyInfo = new PropertyXmlInfo[superclassInfo.propertyInfo.length
+ newProperties.length];
System.arraycopy(superclassInfo.propertyInfo, 0, XMLIZATION_INFO.propertyInfo, 0,
superclassInfo.propertyInfo.length);
System.arraycopy(newProperties, 0, XMLIZATION_INFO.propertyInfo,
superclassInfo.propertyInfo.length, newProperties.length);
}
}