| /* |
| * 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.flow.impl; |
| |
| import org.apache.uima.analysis_engine.ResultSpecification; |
| import org.apache.uima.collection.base_cpm.CasObjectProcessor; |
| import org.apache.uima.resource.metadata.Capability; |
| |
| /** |
| * A <code>AnalysisSequenceCapabilityNode</code> is a node element of the |
| * {@link CapabilityLanguageFlowObject}. A <code>AnalysisSequenceCapabilityNode</code> has a |
| * <code>AnalysisEngine</code>, a <code>ResultSpecification</code> which should be processed |
| * from the <code>AnalysisEngine</code>. Also a <code>AnalysisSequenceCapabilityNode</code> has |
| * a {@link CapabilityContainer} which inculdes the capabilities of the <code>AnalysisEngine</code>. |
| * |
| */ |
| public class AnalysisSequenceCapabilityNode implements Cloneable { |
| private static final long serialVersionUID = -1471125199227401514L; |
| |
| /** |
| * The reference to the AnalysisEngine to be executed at this point in the sequence. If this is |
| * null, the Key should be used to find the AnalysisEngine. This field is transient and so does |
| * not persist when this AnalysisEngineSequence is serialized. |
| */ |
| private transient CasObjectProcessor mCasProcessor = null; |
| |
| /** |
| * The Key of the AnalysisEngine to be executed at this point in the sequence. |
| */ |
| private String mCasProcessorKey; |
| |
| /** |
| * The ResultSpecification to provide to the AnalysisEngine at this point in the sequence. May be |
| * null, indicating that the AnalysisEngine should produce all possible results. |
| */ |
| private ResultSpecification mResultSpec; |
| |
| /** |
| * The mCapabilityContainer hold the capabilities of the current AnalyseEngine. The capabilities |
| * are hold in hash maps for the quick search for ToFs or languages |
| */ |
| private CapabilityContainer mCapabilityContainer; |
| |
| /** |
| * Creates a new AnalysisSequenceCapabilityNode from an AnalysisEngine reference |
| * |
| * @param aKey |
| * key for AnalysisEngine to be executed at this point in sequence |
| * @param aAnalysisEngine |
| * reference to the AnalysisEngine instance |
| * @param aResultSpec |
| * result specification to be passed to this AnalysisEngine |
| */ |
| public AnalysisSequenceCapabilityNode(String aKey, CasObjectProcessor aCasProcessor, |
| ResultSpecification aResultSpec) { |
| mCasProcessorKey = aKey; |
| mCasProcessor = aCasProcessor; |
| mResultSpec = aResultSpec; |
| mCapabilityContainer = null; |
| |
| // check if analysis engine is available |
| if (mCasProcessor != null) { |
| // get capabilities of the current analysis engine |
| Capability[] capabilities = mCasProcessor.getProcessingResourceMetaData().getCapabilities(); |
| |
| // create capability container and compile only output capabilities |
| mCapabilityContainer = new CapabilityContainer(capabilities, false, true); |
| } |
| |
| } |
| |
| /** |
| * Creates a new AnalysisSequenceCapabilityNode from a AnalysisEngine Key. This is to be used when |
| * a direct reference to a AnalysisEngine is not available. |
| * |
| * @param aAnalysisEngine_Key |
| * Key of a AnalysisEngine |
| * @param aCasProcessorCapabilities |
| * Capabilities for this AnalysisEngine |
| * @param aResultSpec |
| * result specification to be passed to this AnalysisEngine |
| */ |
| public AnalysisSequenceCapabilityNode(String aCasProcessorKey, |
| Capability[] aCasProcessorCapabilities, ResultSpecification aResultSpec) { |
| mCasProcessorKey = aCasProcessorKey; |
| mResultSpec = aResultSpec; |
| mCasProcessor = null; |
| |
| // analysis engine is not set, so we cannot create capabilityContainer |
| mCapabilityContainer = new CapabilityContainer(aCasProcessorCapabilities, false, true); |
| } |
| |
| public String getCasProcessorKey() { |
| return mCasProcessorKey; |
| } |
| |
| public CasObjectProcessor getCasProcessor() { |
| return mCasProcessor; |
| } |
| |
| public ResultSpecification getResultSpec() { |
| return mResultSpec; |
| } |
| |
| /** |
| * Sets this node's Result Specificatoin. |
| */ |
| public void setResultSpec(ResultSpecification aResultSpec) { |
| mResultSpec = aResultSpec; |
| } |
| |
| /** |
| * Returns a clone of this <code>AnalysisSequenceNode</code>. |
| * |
| * @return a new <code>AnalysisSequenceNode</code> object that is an exact clone of this one. |
| */ |
| public Object clone() { |
| try { |
| return super.clone(); |
| } catch (CloneNotSupportedException e) { |
| assert false : "AnalysisSequenceNode is cloneable"; |
| return null; |
| } |
| } |
| |
| /** |
| * Returns the capabilityContainer reference. |
| * |
| * @return CapabilityContainer - returns the reference to the capability container |
| */ |
| public CapabilityContainer getCapabilityContainer() { |
| return mCapabilityContainer; |
| } |
| |
| } |