diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /config-model/src/main/java/com/yahoo/config/model/MapConfigModelRegistry.java |
Publish
Diffstat (limited to 'config-model/src/main/java/com/yahoo/config/model/MapConfigModelRegistry.java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/config/model/MapConfigModelRegistry.java | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/MapConfigModelRegistry.java b/config-model/src/main/java/com/yahoo/config/model/MapConfigModelRegistry.java new file mode 100644 index 00000000000..d47a009928d --- /dev/null +++ b/config-model/src/main/java/com/yahoo/config/model/MapConfigModelRegistry.java @@ -0,0 +1,63 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.model; + +import com.google.inject.Inject; +import com.yahoo.component.provider.ComponentRegistry; +import com.yahoo.config.model.builder.xml.ConfigModelBuilder; +import com.yahoo.config.model.builder.xml.ConfigModelId; +import com.yahoo.log.LogLevel; +import org.osgi.framework.Bundle; +import org.osgi.framework.FrameworkUtil; + +import java.util.*; +import java.util.logging.Logger; + +/** + * @author lulf + * @since 5.1 + */ +public class MapConfigModelRegistry extends ConfigModelRegistry { + + private static final Logger log = Logger.getLogger(MapConfigModelRegistry.class.getPackage().getName()); + private final List<ConfigModelBuilder> builders; + + /** + * Constructs a registry of config models, where the components are injected. + * + * @param registry a component registry + */ + @Inject + public MapConfigModelRegistry(ComponentRegistry<? extends ConfigModelBuilder> registry) { + this(registry.allComponents()); + } + + /** + * Constructs a registry of config models. + * + * @param builderCollection A collection of builders used to populate the registry. + */ + public MapConfigModelRegistry(Collection<? extends ConfigModelBuilder> builderCollection) { + super(); + builders = new ArrayList<>(builderCollection); + } + + @Override + public Collection<ConfigModelBuilder> resolve(ConfigModelId id) { + Set<ConfigModelBuilder> matchingBuilders = new HashSet<>(chained().resolve(id)); + for (ConfigModelBuilder builder : builders) + if (builder.handlesElements().contains(id)) + matchingBuilders.add(builder); + return matchingBuilders; + } + + /** + * Create a registry from a variable argument list of builders. + * + * @param builders A variable argument list of builders to use in this map + * @return a ConfigModelRegistry instance. + */ + public static ConfigModelRegistry createFromList(ConfigModelBuilder<? extends ConfigModel> ... builders) { + return new MapConfigModelRegistry(Arrays.asList(builders)); + } + +} |