1 /** 2 * This file Copyright (c) 2016-2018 Magnolia International 3 * Ltd. (http://www.magnolia-cms.com). All rights reserved. 4 * 5 * 6 * This file is dual-licensed under both the Magnolia 7 * Network Agreement and the GNU General Public License. 8 * You may elect to use one or the other of these licenses. 9 * 10 * This file is distributed in the hope that it will be 11 * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the 12 * implied warranty of MERCHANTABILITY or FITNESS FOR A 13 * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT. 14 * Redistribution, except as permitted by whichever of the GPL 15 * or MNA you select, is prohibited. 16 * 17 * 1. For the GPL license (GPL), you can redistribute and/or 18 * modify this file under the terms of the GNU General 19 * Public License, Version 3, as published by the Free Software 20 * Foundation. You should have received a copy of the GNU 21 * General Public License, Version 3 along with this program; 22 * if not, write to the Free Software Foundation, Inc., 51 23 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 24 * 25 * 2. For the Magnolia Network Agreement (MNA), this file 26 * and the accompanying materials are made available under the 27 * terms of the MNA which accompanies this distribution, and 28 * is available at http://www.magnolia-cms.com/mna.html 29 * 30 * Any modifications to this file must keep this entire header 31 * intact. 32 * 33 */ 34 package info.magnolia.init; 35 36 import static info.magnolia.objectfactory.Components.getComponent; 37 38 import info.magnolia.init.properties.EnvironmentPropertySource; 39 import info.magnolia.init.properties.InitPathsPropertySource; 40 import info.magnolia.init.properties.SystemPropertySource; 41 42 import java.util.List; 43 44 import javax.inject.Inject; 45 import javax.inject.Singleton; 46 47 /** 48 * This implementation of {@link MagnoliaConfigurationProperties} is used during startup-phase. It sets up the following 49 * list of {@link PropertySource property sources}: 50 * <ul> 51 * <li>{@link InitPathsPropertySource}</li> 52 * <li>Sources provided by {@link MagnoliaPropertiesResolver}</li> 53 * <li>{@link SystemPropertySource}</li> 54 * <li>{@link EnvironmentPropertySource}</li> 55 * </ul> 56 * 57 * It was introduced to allow reading configuration properties by components before the module's have been loaded. It's 58 * bound to the 'platform'-components and gets replaced by {@link DefaultMagnoliaConfigurationProperties} bound to 59 * 'system'-components. 60 */ 61 @Singleton 62 public class InitPhaseMagnoliaConfigurationProperties extends AbstractMagnoliaConfigurationProperties { 63 private final MagnoliaInitPaths initPaths; 64 private final MagnoliaPropertiesResolver resolver; 65 private final SystemPropertySource systemPropertySource; 66 private final EnvironmentPropertySource environmentPropertySource; 67 68 @Inject 69 public InitPhaseMagnoliaConfigurationProperties(MagnoliaInitPaths initPaths, MagnoliaPropertiesResolver resolver, SystemPropertySource systemPropertySource, EnvironmentPropertySource environmentPropertySource) { 70 this.initPaths = initPaths; 71 this.resolver = resolver; 72 this.systemPropertySource = systemPropertySource; 73 this.environmentPropertySource = environmentPropertySource; 74 } 75 76 /** 77 * @deprecated use {@link #InitPhaseMagnoliaConfigurationProperties(MagnoliaInitPaths, MagnoliaPropertiesResolver, SystemPropertySource, EnvironmentPropertySource)} instead 78 */ 79 @Deprecated 80 public InitPhaseMagnoliaConfigurationProperties(MagnoliaInitPaths initPaths, MagnoliaPropertiesResolver resolver) { 81 this(initPaths, resolver, getComponent(SystemPropertySource.class), getComponent(EnvironmentPropertySource.class)); 82 } 83 84 @Override 85 public void init() throws Exception { 86 sources.add(systemPropertySource); 87 sources.add(environmentPropertySource); 88 final List<PropertySource> configuredSources = resolver.getSources(); 89 for (PropertySource source : configuredSources) { 90 sources.add(source); 91 } 92 sources.add(new InitPathsPropertySource(initPaths)); 93 } 94 }