private static void consolidateAggregate()

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()]));
  }