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}