blob: 098d5acb866e7f1fde336ea20bd46ae33c9537a3 [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.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;
}
}
}