package org.needle4j.configuration; import java.lang.annotation.Annotation; import java.util.Map; import java.util.Set; import org.needle4j.injection.InjectionProvider; import org.needle4j.injection.InjectionProviderInstancesSupplier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PropertyBasedConfigurationFactory { private static final Logger LOG = LoggerFactory.getLogger(NeedleConfiguration.class); private static NeedleConfiguration CONFIGURATION = null; public static NeedleConfiguration get() { if (CONFIGURATION == null) { CONFIGURATION = new PropertyBasedConfigurationFactory().init(); } return CONFIGURATION; } public static NeedleConfiguration get(final String resourceName) { return new PropertyBasedConfigurationFactory(resourceName).init(); } private final Map<String, String> configurationProperties; private final LookupCustomClasses lookupCustomClasses; private PropertyBasedConfigurationFactory() { this(new ConfigurationLoader()); } private PropertyBasedConfigurationFactory(final String resourceName) { this(new ConfigurationLoader(resourceName)); } private PropertyBasedConfigurationFactory(final ConfigurationLoader configurationLoader) { configurationProperties = configurationLoader.getConfigProperties(); lookupCustomClasses = new LookupCustomClasses(configurationProperties); } private NeedleConfiguration init() { final NeedleConfiguration configuration = new NeedleConfiguration(); final Set<Class<Annotation>> customInjectionAnnotations = lookupCustomClasses .lookup(ConfigurationProperties.CUSTOM_INJECTION_ANNOTATIONS_KEY); configuration.setCustomInjectionAnnotations(customInjectionAnnotations); final Set<Class<InjectionProvider<?>>> customInjectionProviderClasses = lookupCustomClasses .lookup(ConfigurationProperties.CUSTOM_INJECTION_PROVIDER_CLASSES_KEY); configuration.setCustomInjectionProviderClasses(customInjectionProviderClasses); final Set<Class<InjectionProviderInstancesSupplier>> supplier = lookupCustomClasses .lookup(ConfigurationProperties.CUSTOM_INSTANCES_SUPPLIER_CLASSES_KEY); configuration.setCustomInjectionProviderInstancesSupplierClasses(supplier); configuration.setHibernateCfgFilename(configurationProperties .get(ConfigurationProperties.HIBERNATE_CFG_FILENAME_KEY)); configuration.setPersistenceunitName(configurationProperties .get(ConfigurationProperties.PERSISTENCEUNIT_NAME_KEY)); configuration.setMockProviderClassName(configurationProperties.get(ConfigurationProperties.MOCK_PROVIDER_KEY)); configuration.setDBOperationClassName(configurationProperties.get(ConfigurationProperties.DB_OPERATION_KEY)); configuration.setJdbcUrl(configurationProperties.get(ConfigurationProperties.JDBC_URL_KEY)); configuration.setJdbcDriver(configurationProperties.get(ConfigurationProperties.JDBC_DRIVER_KEY)); configuration.setJdbcUser(configurationProperties.get(ConfigurationProperties.JDBC_USER_KEY)); configuration.setJdbcPassword(configurationProperties.get(ConfigurationProperties.JDBC_PASSWORD_KEY)); configuration.setPostConstructExecuteStrategy( PostConstructExecuteStrategy.fromString(configurationProperties.get(ConfigurationProperties.POSTCONSTRUCT_EXECUTESTRATEGY))); LOG.info("Needle Configuration: {}", configuration); return configuration; } }