| /* |
| * 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.impl; |
| |
| import java.util.Map; |
| |
| import org.apache.uima.Constants; |
| import org.apache.uima.ResourceFactory; |
| import org.apache.uima.analysis_engine.AnalysisEngine; |
| import org.apache.uima.analysis_engine.AnalysisEngineDescription; |
| import org.apache.uima.analysis_engine.TaeDescription; |
| import org.apache.uima.analysis_engine.TextAnalysisEngine; |
| import org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl; |
| import org.apache.uima.analysis_engine.impl.MultiprocessingAnalysisEngine_impl; |
| import org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl; |
| import org.apache.uima.analysis_engine.impl.UimacppAnalysisEngineImpl; |
| import org.apache.uima.resource.Resource; |
| import org.apache.uima.resource.ResourceCreationSpecifier; |
| import org.apache.uima.resource.ResourceInitializationException; |
| import org.apache.uima.resource.ResourceSpecifier; |
| |
| /** |
| * Resource Factory that handles {@link AnalysisEngineDescription} and {@link TaeDescription} |
| * elements. |
| * |
| * |
| */ |
| public class AnalysisEngineFactory_impl implements ResourceFactory { |
| /** |
| * @see org.apache.uima.ResourceFactory#produceResource(java.lang.Class, |
| * org.apache.uima.resource.ResourceSpecifier, java.util.Map) |
| */ |
| public Resource produceResource(Class aResourceClass, ResourceSpecifier aSpecifier, |
| Map aAdditionalParams) throws ResourceInitializationException { |
| // It is important to know whether we need a Multiprocessing-capable |
| // Analysis Engine implementation - this is determined by whether there |
| // is a value for the PARAM_NUM_SIMULTANEOUS_REQUESTS parameter. |
| boolean multiprocessing = (aAdditionalParams != null) |
| && aAdditionalParams.containsKey(AnalysisEngine.PARAM_NUM_SIMULTANEOUS_REQUESTS); |
| |
| Resource resource = null; |
| if (aSpecifier instanceof ResourceCreationSpecifier |
| && aResourceClass.isAssignableFrom(TextAnalysisEngine.class)) |
| // NOTE: for backwards-compatibility, we have to check TextAnalysisEngine, |
| // not AnalysisEngine. Otherwise produceTAE would fail becasue |
| // TextAnalysisEngien.class.isAssignableFrom(AnalysisEngine.class) is false. |
| { |
| ResourceCreationSpecifier spec = (ResourceCreationSpecifier) aSpecifier; |
| if (multiprocessing) { |
| resource = new MultiprocessingAnalysisEngine_impl(); |
| } else { |
| |
| String frameworkImpl = spec.getFrameworkImplementation(); |
| if (frameworkImpl == null || frameworkImpl.length() == 0) { |
| throw new ResourceInitializationException( |
| ResourceInitializationException.MISSING_FRAMEWORK_IMPLEMENTATION, |
| new Object[] { aSpecifier.getSourceUrlString() }); |
| } |
| |
| if (frameworkImpl.startsWith(Constants.CPP_FRAMEWORK_NAME)) { |
| resource = new UimacppAnalysisEngineImpl(); |
| } else if (frameworkImpl.startsWith(Constants.JAVA_FRAMEWORK_NAME)) { |
| if (spec instanceof AnalysisEngineDescription |
| && !((AnalysisEngineDescription) spec).isPrimitive()) { |
| resource = new AggregateAnalysisEngine_impl(); |
| } else { |
| resource = new PrimitiveAnalysisEngine_impl(); |
| } |
| } else { |
| throw new ResourceInitializationException( |
| ResourceInitializationException.UNSUPPORTED_FRAMEWORK_IMPLEMENTATION, |
| new Object[] { spec.getFrameworkImplementation(), aSpecifier.getSourceUrlString() }); |
| } |
| } |
| } |
| |
| if (resource != null && resource.initialize(aSpecifier, aAdditionalParams)) { |
| return resource; |
| } else { |
| return null; |
| } |
| } |
| } |