/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.plugin.config; import java.io.File; import java.util.HashMap; import java.util.Map; import org.osgi.framework.Bundle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import com.enonic.cms.api.plugin.PluginConfig; import com.enonic.cms.core.config.ConfigProperties; @Component public final class ConfigFactoryImpl implements ConfigFactory { private final static Logger LOG = LoggerFactory.getLogger( ConfigFactoryImpl.class ); private File configDir; private Map<String, String> globalProperties; @Value("${cms.plugin.configDir}") public void setConfigDir( final File configDir ) { this.configDir = configDir; } public PluginConfig create( final Bundle bundle ) { final File file = getConfigFile( bundle ); final Map<String, String> config = new HashMap<String, String>(); config.putAll( PluginConfigHelper.loadDefaultProperties( bundle ) ); config.putAll( PluginConfigHelper.loadProperties( file ) ); if ( file.exists() ) { LOG.info( "Loaded configuration for bundle [{}] from [{}]", bundle.getSymbolicName(), file.getAbsolutePath() ); } return new PluginConfigImpl( PluginConfigHelper.interpolate( this.globalProperties, config ) ); } private File getConfigFile( final Bundle bundle ) { final String id = getConfigurationId( bundle ); return new File( this.configDir, id + ".properties" ); } private String getConfigurationId( final Bundle bundle ) { return bundle.getSymbolicName(); } @Autowired public final void setGlobalProperties( final ConfigProperties properties ) { this.globalProperties = properties.getMap(); } }