1 package org.kuali.common.util.spring.env.model; 2 3 import java.util.Properties; 4 5 import org.kuali.common.util.Assert; 6 import org.kuali.common.util.Mode; 7 import org.kuali.common.util.spring.env.EnvUtils; 8 import org.kuali.common.util.spring.env.PropertiesEnvironment; 9 import org.springframework.core.env.Environment; 10 11 public final class EnvironmentServiceContext { 12 13 public Environment getEnv() { 14 return env; 15 } 16 17 public boolean isCheckEnvironmentVariables() { 18 return checkEnvironmentVariables; 19 } 20 21 public boolean isResolveStrings() { 22 return resolveStrings; 23 } 24 25 public Mode getMissingPropertyMode() { 26 return missingPropertyMode; 27 } 28 29 private final Environment env; 30 private final boolean checkEnvironmentVariables; 31 private final boolean resolveStrings; 32 private final Mode missingPropertyMode; 33 34 private EnvironmentServiceContext(Builder builder) { 35 this.env = builder.env; 36 this.checkEnvironmentVariables = builder.checkEnvironmentVariables; 37 this.resolveStrings = builder.resolveStrings; 38 this.missingPropertyMode = builder.missingPropertyMode; 39 } 40 41 public static class Builder { 42 43 private Environment env = EnvUtils.getDefaultEnvironment(); 44 private boolean checkEnvironmentVariables = true; 45 private boolean resolveStrings = true; 46 private Mode missingPropertyMode = Mode.ERROR; 47 48 private static final String CHECK_ENVIRONMENT_VARIABLES_KEY = "env.checkEnvironmentVariables"; 49 private static final String RESOLVE_STRINGS_KEY = "env.resolveStrings"; 50 private static final String MISSING_PROPERTY_MODE_KEY = "env.missingPropertyMode"; 51 52 public Builder env(Properties properties) { 53 return env(new PropertiesEnvironment(properties)); 54 } 55 56 public Builder env(Environment env) { 57 this.env = env; 58 return this; 59 } 60 61 public Builder checkEnvironmentVariables(boolean checkEnvironmentVariables) { 62 this.checkEnvironmentVariables = checkEnvironmentVariables; 63 return this; 64 } 65 66 public Builder resolveStrings(boolean resolveStrings) { 67 this.resolveStrings = resolveStrings; 68 return this; 69 } 70 71 public Builder missingPropertyMode(Mode missingPropertyMode) { 72 this.missingPropertyMode = missingPropertyMode; 73 return this; 74 } 75 76 private void override() { 77 Assert.noNulls(env); 78 checkEnvironmentVariables(env.getProperty(CHECK_ENVIRONMENT_VARIABLES_KEY, Boolean.class, checkEnvironmentVariables)); 79 resolveStrings(env.getProperty(RESOLVE_STRINGS_KEY, Boolean.class, resolveStrings)); 80 missingPropertyMode(env.getProperty(MISSING_PROPERTY_MODE_KEY, Mode.class, missingPropertyMode)); 81 } 82 83 protected void validate(EnvironmentServiceContext ctx) { 84 Assert.notNull(ctx.getEnv(), "'env' cannot be null"); 85 Assert.notNull(ctx.getMissingPropertyMode(), "'missingPropertyMode' cannot be null"); 86 } 87 88 protected EnvironmentServiceContext getInstance() { 89 return new EnvironmentServiceContext(this); 90 } 91 92 public EnvironmentServiceContext build() { 93 override(); 94 EnvironmentServiceContext ctx = new EnvironmentServiceContext(this); 95 validate(ctx); 96 return ctx; 97 } 98 99 } 100 101 }