331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * Copyright 2011-2015 ForgeRock AS. All Rights Reserved
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * The contents of this file are subject to the terms
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * of the Common Development and Distribution License
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * (the License). You may not use this file except in
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * compliance with the License.
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * You can obtain a copy of the License at
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * See the License for the specific language governing
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * permission and limitations under the License.
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * When distributing Covered Code, include this CDDL
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * Header Notice in each file and include the License file
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * If applicable, add the following below the CDDL Header,
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * with the fields enclosed by brackets [] replaced by
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * your own identifying information:
331c327f500d45223e8ad933fd4472740a75aeeachad.kienle * "Portions Copyrighted [year] [name of copyright owner]"
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienleimport org.forgerock.openidm.config.crypto.ConfigCrypto;
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienleimport org.forgerock.openidm.metadata.impl.ProviderListener;
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienleimport org.forgerock.openidm.metadata.MetaDataProvider;
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienleimport org.forgerock.openidm.metadata.WaitForMetaData;
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle * Handles configuration that needs to wait for related meta-data to become available
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle * (e.g. for encryption) before it can be provided to OSGi
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienlepublic class DelayedConfigHandler implements ProviderListener {
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle final static Logger logger = LoggerFactory.getLogger(DelayedConfigHandler.class);
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle List<DelayedConfig> delayedConfigs = new ArrayList<DelayedConfig>();
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle * {@inheritDoc}
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle * Add a configuration to the delayed pool
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle * @param config the configuration to handle when new meta-data becomes available
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle * Detects changed meta data providers
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle public void addedProvider(Object originId, MetaDataProvider provider) {
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle props = config.configCrypto.getPropertiesToEncrypt(config.pidOrFactory, config.factoryAlias, config.parsedConfig);
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle // Meta data now found, handle it
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle config.configInstaller.setConfig(config.newConfig, new String[] {config.pidOrFactory, config.factoryAlias}, config.file);
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle logger.warn("Setting delayed configuration failed for {} {}", new Object[] {config.pidOrFactory, config.factoryAlias, ex});
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle // Still not available for this config, leave it in delayed config
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle logger.trace("Still no meta data provider for {}-{}", config.pidOrFactory, config.factoryAlias );
bdcef189d83ab13d06dde11499a03b16cdb5b432Chad Kienle logger.warn("Provider change received before DelayedConfigHandler properly initialized");