in uimafit-core/src/main/java/org/apache/uima/fit/internal/DescriptionUtils.java [65:118]
private static void consolidateAggregate(AnalysisEngineDescription aDesc, ResourceManager aResMgr)
throws ResourceInitializationException, InvalidXMLException {
if (aDesc.isPrimitive() || aDesc.getDelegateAnalysisEngineSpecifiers().isEmpty()) {
return;
}
// Depth-first
for (ResourceSpecifier delegate : aDesc.getDelegateAnalysisEngineSpecifiers().values()) {
consolidateAggregate((AnalysisEngineDescription) delegate, aResMgr);
}
// Consolidate type system, indexes and type priorities
ProcessingResourceMetaData meta = CasCreationUtils.mergeDelegateAnalysisEngineMetaData(aDesc,
aResMgr, null, null);
AnalysisEngineDescription firstDelegate = null;
for (ResourceSpecifier delegate : aDesc.getDelegateAnalysisEngineSpecifiers().values()) {
AnalysisEngineDescription aeDelegate = (AnalysisEngineDescription) delegate;
aeDelegate.getAnalysisEngineMetaData().setTypeSystem(null);
aeDelegate.getAnalysisEngineMetaData().setTypePriorities(null);
aeDelegate.getAnalysisEngineMetaData().setFsIndexCollection(null);
if (firstDelegate == null) {
firstDelegate = aeDelegate;
}
}
// Type systems cannot be set on aggregates, so set it on the first delegate instead
firstDelegate.getAnalysisEngineMetaData().setTypeSystem(meta.getTypeSystem());
// The rest can be set on the aggregate
aDesc.getAnalysisEngineMetaData().setTypePriorities(meta.getTypePriorities());
aDesc.getAnalysisEngineMetaData().setFsIndexCollection(meta.getFsIndexCollection());
// Consolidate external resources
Map<String, ExternalResourceDescription> resources = new LinkedHashMap<String, ExternalResourceDescription>();
for (ResourceSpecifier delegate : aDesc.getDelegateAnalysisEngineSpecifiers().values()) {
AnalysisEngineDescription aeDelegate = (AnalysisEngineDescription) delegate;
ResourceManagerConfiguration delegateResMgrCfg = aeDelegate.getResourceManagerConfiguration();
for (ExternalResourceDescription res : delegateResMgrCfg.getExternalResources()) {
resources.put(res.getName(), res);
}
delegateResMgrCfg.setExternalResources(null);
}
ResourceManagerConfiguration resMgrCfg = aDesc.getResourceManagerConfiguration();
if (resMgrCfg == null) {
resMgrCfg = UIMAFramework.getResourceSpecifierFactory().createResourceManagerConfiguration();
aDesc.setResourceManagerConfiguration(resMgrCfg);
}
resMgrCfg.setExternalResources(
resources.values().toArray(new ExternalResourceDescription[resources.size()]));
}