result.setNodeCombiner(new OverrideCombiner());
final ImmutableNode child2 = canCombine(node1, node2, child); if (child2 != null) result.addChild(combine(child, child2)); addAttributes(result, node1, node2); result.value((node1.getValue() != null) ? node1.getValue() : node2 .getValue());
/** * Tests if a child node of the second node can be combined with the given * child node of the first node. If this is the case, the corresponding node * will be returned, otherwise <b>null</b>. This implementation checks * whether the child node occurs only once in both hierarchies and is no * known list node. * * @param node1 the first node * @param node2 the second node * @param child the child node (of the first node) * @return a child of the second node, with which a combination is possible */ protected ImmutableNode canCombine(final ImmutableNode node1, final ImmutableNode node2, final ImmutableNode child) { if (HANDLER.getChildrenCount(node2, child.getNodeName()) == 1 && HANDLER.getChildrenCount(node1, child.getNodeName()) == 1 && !isListNode(child)) { return HANDLER.getChildren(node2, child.getNodeName()).get(0); } return null; } }
CombinedConfiguration props = new CombinedConfiguration(); final PropertiesConfiguration defaultsProps = new PropertiesConfiguration(new File("/tmp/default.properties")); final PropertiesConfiguration customProps = new PropertiesConfiguration(new File("/tmp/custom.properties")); props.setNodeCombiner(new OverrideCombiner()); props.addConfiguration(customProps); //first should be loaded the override values props.addConfiguration(defaultsProps); // last your 'default' values PropertiesConfiguration finalFile = new PropertiesConfiguration(); finalFile.append(props); PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(finalFile, defaultsProps.getLayout()); //here we copy the layout from the 'base file' layout.save(new FileWriter(new File("/tmp/app.properties")));
@Provides @Singleton ImmutableHierarchicalConfiguration providesConfiguration( Set<ConfigurationSource> configurationSources) { CombinedConfiguration config = new CombinedConfiguration(); List<ConfigurationSource> sortedConfigurations = new ArrayList<ConfigurationSource>(); sortedConfigurations.addAll(configurationSources); Collections.sort(sortedConfigurations); ConfigurationSource previousConfigSource = null; for (ConfigurationSource configSource : sortedConfigurations) { if (previousConfigSource != null) { warnIfEqualPriority(previousConfigSource, configSource); } config.addConfiguration(configSource.getConfig()); previousConfigSource = configSource; } config.setNodeCombiner(new OverrideCombiner()); return config; }
@Override public E valueOf(HierarchicalConfiguration envCfg) { E dbEnv = AbstractEnvironmentEnricher.this.createNewEnv(); // combining the sys and env configurations before passing to downstream methods so that we can support only having env configs passed in CombinedConfiguration combinedConfiguration = new CombinedConfiguration(new OverrideCombiner()); combinedConfiguration.addConfiguration(envCfg); combinedConfiguration.addConfiguration(sysCfg); combinedConfiguration.setExpressionEngine(sysCfg.getExpressionEngine()); AbstractEnvironmentEnricher.this.enrich(dbEnv, combinedConfiguration, sourcePath, systemDbPlatform); AbstractEnvironmentEnricher.this.createEnv(dbEnv, combinedConfiguration, systemDbPlatform); return dbEnv; } });
@Override public E valueOf(HierarchicalConfiguration envCfg) { E dbEnv = AbstractEnvironmentEnricher.this.createNewEnv(); // combining the sys and env configurations before passing to downstream methods so that we can support only having env configs passed in CombinedConfiguration combinedConfiguration = new CombinedConfiguration(new OverrideCombiner()); combinedConfiguration.addConfiguration(envCfg); combinedConfiguration.addConfiguration(sysCfg); combinedConfiguration.setExpressionEngine(sysCfg.getExpressionEngine()); AbstractEnvironmentEnricher.this.enrich(dbEnv, combinedConfiguration, sourcePath, systemDbPlatform); AbstractEnvironmentEnricher.this.createEnv(dbEnv, combinedConfiguration, systemDbPlatform); return dbEnv; } });
config = new CombinedConfiguration(new OverrideCombiner()); config.addConfiguration(serverConfig); config.addConfiguration(defaultConfig);
try { CombinedConfiguration combinedConfig = new CombinedConfiguration(); combinedConfig.setNodeCombiner(new OverrideCombiner());
public ImmutableHierarchicalConfiguration readPlatformProperties(RichIterable<String> configPackages) { MutableList<PropertyInput> prioritizedProperties = readConfigPackages(configPackages); validate(prioritizedProperties); // order properties by priority: higher-numbered files will replace properties of lower-numbered files prioritizedProperties.sortThisBy(new Function<PropertyInput, Integer>() { @Override public Integer valueOf(PropertyInput propertyInput1) { return propertyInput1.getPriority(); } }).reverseThis(); // needs to be reversed as CombinedConfiguration takes the higher-priority files first // merge properties CombinedConfiguration combinedConfiguration = new CombinedConfiguration(new OverrideCombiner()); for (HierarchicalConfiguration<ImmutableNode> properties : prioritizedProperties.collect(new Function<PropertyInput, HierarchicalConfiguration<ImmutableNode>>() { @Override public HierarchicalConfiguration<ImmutableNode> valueOf(PropertyInput propertyInput) { return propertyInput.getProps(); } })) { combinedConfiguration.addConfiguration(properties); } // remove the configPriority property combinedConfiguration.clearTree(PROP_CONFIG_PRIORITY); return combinedConfiguration; }
public ImmutableHierarchicalConfiguration readPlatformProperties(RichIterable<String> configPackages) { MutableList<PropertyInput> prioritizedProperties = readConfigPackages(configPackages); validate(prioritizedProperties); // order properties by priority: higher-numbered files will replace properties of lower-numbered files prioritizedProperties.sortThisBy(new Function<PropertyInput, Integer>() { @Override public Integer valueOf(PropertyInput propertyInput1) { return propertyInput1.getPriority(); } }).reverseThis(); // needs to be reversed as CombinedConfiguration takes the higher-priority files first // merge properties CombinedConfiguration combinedConfiguration = new CombinedConfiguration(new OverrideCombiner()); for (HierarchicalConfiguration<ImmutableNode> properties : prioritizedProperties.collect(new Function<PropertyInput, HierarchicalConfiguration<ImmutableNode>>() { @Override public HierarchicalConfiguration<ImmutableNode> valueOf(PropertyInput propertyInput) { return propertyInput.getProps(); } })) { combinedConfiguration.addConfiguration(properties); } // remove the configPriority property combinedConfiguration.clearTree(PROP_CONFIG_PRIORITY); return combinedConfiguration; }