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("io.ebean.test"); 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: 065 return "a current user provider"; 066 case 2: 067 return "a current tenant provider"; 068 case 3: 069 return "a current user and tenant provider"; 070 } 071 return "[unexpected??]"; 072 } 073 074 private String msgUsage(int providerSetFlag) { 075 switch (providerSetFlag) { 076 case 1: 077 return "set current user"; 078 case 2: 079 return "set current tenant"; 080 case 3: 081 return "set current user and tenant"; 082 } 083 return "[unexpected??]"; 084 } 085}