package com.yoghurt.crypto.transactions.server.servlets.config; import java.util.Properties; import com.yoghurt.crypto.transactions.shared.domain.BlockchainSource; import com.yoghurt.crypto.transactions.shared.domain.config.AdministratedApplicationConfig; import com.yoghurt.crypto.transactions.shared.domain.config.BitcoinCoreNodeConfig; import com.yoghurt.crypto.transactions.shared.domain.config.BlockrRetrievalHookConfig; import com.yoghurt.crypto.transactions.shared.domain.config.UserApplicationConfig; public class ConfigFactory { public interface ConfigPropertiesRetriever { public static final String SOURCE_TYPE_KEY = "com.yoghurt.crypto.source"; public static final String APPLICATION_TITLE_KEY = "com.yoghurt.crypto.title"; public static final String APPLICATION_SUBTITLE_KEY = "com.yoghurt.crypto.subtitle"; public static final String HOST_DONATION_ADDRESS_KEY = "com.yoghurt.crypto.hostDonationAddress"; public static final String PROJECT_DONATION_ADDRESS_KEY = "com.yoghurt.crypto.projectDonationAddress"; public Properties getProperties(); public void attemptAutoFillProperties(); public AdministratedApplicationConfig getSystemConfig(); public UserApplicationConfig getApplicationConfig(); } public static ConfigPropertiesRetriever create(final AdministratedApplicationConfig config) { switch(config.getBlockchainSource()) { case BLOCKR_API: return new BlockrConfigRetriever((BlockrRetrievalHookConfig) config); case NODE: return new BitcoinNodeConfigRetriever((BitcoinCoreNodeConfig) config); default: throw new IllegalArgumentException(); } } public static ConfigPropertiesRetriever create(final Properties props) { final String type = (String) props.get(ConfigPropertiesRetriever.SOURCE_TYPE_KEY); final BlockchainSource source = type == null ? BlockchainSource.BLOCKR_API : BlockchainSource.valueOf(type); switch(source) { case NODE: return new BitcoinNodeConfigRetriever(props); case BLOCKR_API: default: return new BlockrConfigRetriever(props); } } }