001package io.ebean.test.config.provider; 002 003import io.ebean.config.CurrentTenantProvider; 004import io.ebean.config.CurrentUserProvider; 005import io.ebean.config.DatabaseConfig; 006import io.ebean.config.EncryptKeyManager; 007import org.slf4j.Logger; 008import org.slf4j.LoggerFactory; 009 010import java.util.Properties; 011 012/** 013 * Auto configuration of User and Tenant providers and Encrypt key manager for testing purposes. 014 */ 015public class ProviderAutoConfig { 016 017 private static final Logger log = LoggerFactory.getLogger(ProviderAutoConfig.class); 018 019 private final DatabaseConfig config; 020 private final Properties properties; 021 022 public ProviderAutoConfig(DatabaseConfig config) { 023 this.config = config; 024 this.properties = config.getProperties(); 025 } 026 027 public void run() { 028 029 int providerSetFlag = 0; 030 031 CurrentUserProvider provider = config.getCurrentUserProvider(); 032 if (provider == null) { 033 providerSetFlag = 1; 034 config.setCurrentUserProvider(new WhoUserProvider()); 035 } 036 037 CurrentTenantProvider tenantProvider = config.getCurrentTenantProvider(); 038 if (tenantProvider == null) { 039 providerSetFlag += 2; 040 config.setCurrentTenantProvider(new WhoTenantProvider()); 041 } 042 043 EncryptKeyManager keyManager = config.getEncryptKeyManager(); 044 if (keyManager == null) { 045 // Must be 16 Chars for Oracle function 046 String keyVal = properties.getProperty("ebean.test.encryptKey", "simple0123456789"); 047 log.debug("for testing - using FixedEncryptKeyManager() keyVal:{}", keyVal); 048 config.setEncryptKeyManager(new FixedEncryptKeyManager(keyVal)); 049 } 050 051 if (providerSetFlag > 0) { 052 log.info(msg(providerSetFlag)); 053 } 054 } 055 056 String msg(int providerSetFlag) { 057 String msg = msgProvider(providerSetFlag); 058 String usage = msgUsage(providerSetFlag); 059 return "for testing purposes "+msg+" has been configured. Use io.ebean.test.UserContext to "+usage+" in tests."; 060 } 061 062 private String msgProvider(int providerSetFlag) { 063 switch (providerSetFlag) { 064 case 1: return "a current user provider"; 065 case 2: return "a current tenant provider"; 066 case 3: return "a current user and tenant provider"; 067 } 068 return "[unexpected??]"; 069 } 070 071 private String msgUsage(int providerSetFlag) { 072 switch (providerSetFlag) { 073 case 1: return "set current user"; 074 case 2: return "set current tenant"; 075 case 3: return "set current user and tenant"; 076 } 077 return "[unexpected??]"; 078 } 079}