You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Peter Klügl (JIRA)" <de...@uima.apache.org> on 2018/07/02 09:47:00 UTC
[jira] [Created] (UIMA-5807) Support PEARs (ResourceSpecifier) in
AnalysisEngineFactory.createEngineDescription
Peter Klügl created UIMA-5807:
---------------------------------
Summary: Support PEARs (ResourceSpecifier) in AnalysisEngineFactory.createEngineDescription
Key: UIMA-5807
URL: https://issues.apache.org/jira/browse/UIMA-5807
Project: UIMA
Issue Type: Improvement
Components: uimaFIT
Reporter: Peter Klügl
It is currently a bit cumbersome to use the uimaFIT factories together with UIMA PEARs. A possible improvement int his direction could be to support the pear wrappers in the AnalysisEngineFactory methods:
{code:java}
public static AnalysisEngineDescription createEngineDescription(
List<AnalysisEngineDescription> analysisEngineDescriptions, List<String> componentNames,
TypePriorities typePriorities, SofaMapping[] sofaMappings,
FlowControllerDescription flowControllerDescription)
{code:java}
If another method is added or the given list uses ResourceSpecifier instead of AnalysisEngineDescription (and some ifs in the loop), then PEARs would be supported.
An exemplary implementation could look like:
{code:java}
public static AnalysisEngineDescription createEngineDescription(
List<ResourceSpecifier> resourceSpecifiers, List<String> componentNames,
TypePriorities typePriorities, SofaMapping[] sofaMappings,
FlowControllerDescription flowControllerDescription) {
if (componentNames == null) {
throw new IllegalArgumentException("Parameter [componentNames] cannot be null");
}
if (resourceSpecifiers == null) {
throw new IllegalArgumentException("Parameter [analysisEngineDescriptions] cannot be null");
}
if (resourceSpecifiers.size() != componentNames.size()) {
throw new IllegalArgumentException("Number of descriptions ["
+ resourceSpecifiers.size() + "]does not match number of component names ["
+ componentNames.size() + "].");
}
// create the descriptor and set configuration parameters
AnalysisEngineDescription desc = new AnalysisEngineDescription_impl();
desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
desc.setPrimitive(false);
// if any of the aggregated analysis engines does not allow multiple
// deployment, then the
// aggregate engine may also not be multiply deployed
boolean allowMultipleDeploy = true;
for (ResourceSpecifier d : resourceSpecifiers) {
// for now only consider AnalysisEngineDescriptions: we implicitly assume that all pears have allowMultipleDeploy = true
if (d instanceof AnalysisEngineDescription) {
allowMultipleDeploy &= ((AnalysisEngineDescription) d).getAnalysisEngineMetaData().getOperationalProperties()
.isMultipleDeploymentAllowed();
}
}
desc.getAnalysisEngineMetaData().getOperationalProperties()
.setMultipleDeploymentAllowed(allowMultipleDeploy);
List<String> flowNames = new ArrayList<String>();
for (int i = 0; i < resourceSpecifiers.size(); i++) {
ResourceSpecifier aed = resourceSpecifiers.get(i);
String componentName = componentNames.get(i);
desc.getDelegateAnalysisEngineSpecifiersWithImports().put(componentName, aed);
flowNames.add(componentName);
}
if (flowControllerDescription != null) {
FlowControllerDeclaration flowControllerDeclaration = new FlowControllerDeclaration_impl();
flowControllerDeclaration.setSpecifier(flowControllerDescription);
desc.setFlowControllerDeclaration(flowControllerDeclaration);
}
FixedFlow fixedFlow = new FixedFlow_impl();
fixedFlow.setFixedFlow(flowNames.toArray(new String[flowNames.size()]));
desc.getAnalysisEngineMetaData().setFlowConstraints(fixedFlow);
if (typePriorities != null) {
desc.getAnalysisEngineMetaData().setTypePriorities(typePriorities);
}
if (sofaMappings != null) {
desc.setSofaMappings(sofaMappings);
}
return desc;
}
{code:java}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)