Search in sources :

Example 1 with ImportPhase

use of org.springframework.boot.context.config.ConfigDataEnvironmentContributor.ImportPhase in project spring-boot by spring-projects.

the class ConfigDataEnvironmentContributors method withProcessedImports.

/**
 * Processes imports from all active contributors and return a new
 * {@link ConfigDataEnvironmentContributors} instance.
 * @param importer the importer used to import {@link ConfigData}
 * @param activationContext the current activation context or {@code null} if the
 * context has not yet been created
 * @return a {@link ConfigDataEnvironmentContributors} instance with all relevant
 * imports have been processed
 */
ConfigDataEnvironmentContributors withProcessedImports(ConfigDataImporter importer, ConfigDataActivationContext activationContext) {
    ImportPhase importPhase = ImportPhase.get(activationContext);
    this.logger.trace(LogMessage.format("Processing imports for phase %s. %s", importPhase, (activationContext != null) ? activationContext : "no activation context"));
    ConfigDataEnvironmentContributors result = this;
    int processed = 0;
    while (true) {
        ConfigDataEnvironmentContributor contributor = getNextToProcess(result, activationContext, importPhase);
        if (contributor == null) {
            this.logger.trace(LogMessage.format("Processed imports for of %d contributors", processed));
            return result;
        }
        if (contributor.getKind() == Kind.UNBOUND_IMPORT) {
            ConfigDataEnvironmentContributor bound = contributor.withBoundProperties(result, activationContext);
            result = new ConfigDataEnvironmentContributors(this.logger, this.bootstrapContext, result.getRoot().withReplacement(contributor, bound));
            continue;
        }
        ConfigDataLocationResolverContext locationResolverContext = new ContributorConfigDataLocationResolverContext(result, contributor, activationContext);
        ConfigDataLoaderContext loaderContext = new ContributorDataLoaderContext(this);
        List<ConfigDataLocation> imports = contributor.getImports();
        this.logger.trace(LogMessage.format("Processing imports %s", imports));
        Map<ConfigDataResolutionResult, ConfigData> imported = importer.resolveAndLoad(activationContext, locationResolverContext, loaderContext, imports);
        this.logger.trace(LogMessage.of(() -> getImportedMessage(imported.keySet())));
        ConfigDataEnvironmentContributor contributorAndChildren = contributor.withChildren(importPhase, asContributors(imported));
        result = new ConfigDataEnvironmentContributors(this.logger, this.bootstrapContext, result.getRoot().withReplacement(contributor, contributorAndChildren));
        processed++;
    }
}
Also used : ImportPhase(org.springframework.boot.context.config.ConfigDataEnvironmentContributor.ImportPhase)

Aggregations

ImportPhase (org.springframework.boot.context.config.ConfigDataEnvironmentContributor.ImportPhase)1