package org.fluentlenium.configuration;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Creates new configuration from a container class.
*/
public class DefaultConfigurationFactory implements ConfigurationFactory {
/**
* Get inputstream containing fluentlenium properties.
*
* @return propertiers input stream
*/
protected InputStream getPropertiesInputStream() {
return getClass().getResourceAsStream("/fluentlenium.properties");
}
@Override
public Configuration newConfiguration(Class<?> containerClass, ConfigurationProperties configurationDefaults) {
Properties properties = new Properties();
if (configurationDefaults == null) {
configurationDefaults = new ConfigurationDefaults();
}
InputStream configurationFile = getPropertiesInputStream();
if (configurationFile != null) {
try {
properties.load(configurationFile);
} catch (IOException e) {
throw new ConfigurationException("Can't read fluentlenium.properties. " + e);
}
}
ProgrammaticConfiguration programmaticConfiguration = new ProgrammaticConfiguration();
Configuration configuration = new ComposedConfiguration(programmaticConfiguration, programmaticConfiguration,
new PropertiesBackendConfiguration(new SystemPropertiesBackend()),
new PropertiesBackendConfiguration(new EnvironmentVariablesBackend()),
new AnnotationConfiguration(containerClass),
new PropertiesBackendConfiguration(new DefaultPropertiesBackend(properties), "",
PropertiesBackendConfiguration.PROPERTIES_PREFIX), configurationDefaults);
return configuration;
}
}