001package org.kuali.common.util.spring.env.model; 002 003import java.util.Properties; 004 005import org.kuali.common.util.Assert; 006import org.kuali.common.util.Mode; 007import org.kuali.common.util.spring.env.EnvUtils; 008import org.kuali.common.util.spring.env.PropertiesEnvironment; 009import org.springframework.core.env.Environment; 010 011public final class EnvironmentServiceContext { 012 013 public Environment getEnv() { 014 return env; 015 } 016 017 public boolean isCheckEnvironmentVariables() { 018 return checkEnvironmentVariables; 019 } 020 021 public boolean isResolveStrings() { 022 return resolveStrings; 023 } 024 025 public Mode getMissingPropertyMode() { 026 return missingPropertyMode; 027 } 028 029 private final Environment env; 030 private final boolean checkEnvironmentVariables; 031 private final boolean resolveStrings; 032 private final Mode missingPropertyMode; 033 034 private EnvironmentServiceContext(Builder builder) { 035 this.env = builder.env; 036 this.checkEnvironmentVariables = builder.checkEnvironmentVariables; 037 this.resolveStrings = builder.resolveStrings; 038 this.missingPropertyMode = builder.missingPropertyMode; 039 } 040 041 public static class Builder { 042 043 private Environment env = EnvUtils.getDefaultEnvironment(); 044 private boolean checkEnvironmentVariables = true; 045 private boolean resolveStrings = true; 046 private Mode missingPropertyMode = Mode.ERROR; 047 048 private static final String CHECK_ENVIRONMENT_VARIABLES_KEY = "env.checkEnvironmentVariables"; 049 private static final String RESOLVE_STRINGS_KEY = "env.resolveStrings"; 050 private static final String MISSING_PROPERTY_MODE_KEY = "env.missingPropertyMode"; 051 052 public Builder env(Properties properties) { 053 return env(new PropertiesEnvironment(properties)); 054 } 055 056 public Builder env(Environment env) { 057 this.env = env; 058 return this; 059 } 060 061 public Builder checkEnvironmentVariables(boolean checkEnvironmentVariables) { 062 this.checkEnvironmentVariables = checkEnvironmentVariables; 063 return this; 064 } 065 066 public Builder resolveStrings(boolean resolveStrings) { 067 this.resolveStrings = resolveStrings; 068 return this; 069 } 070 071 public Builder missingPropertyMode(Mode missingPropertyMode) { 072 this.missingPropertyMode = missingPropertyMode; 073 return this; 074 } 075 076 private void override() { 077 Assert.noNulls(env); 078 checkEnvironmentVariables(env.getProperty(CHECK_ENVIRONMENT_VARIABLES_KEY, Boolean.class, checkEnvironmentVariables)); 079 resolveStrings(env.getProperty(RESOLVE_STRINGS_KEY, Boolean.class, resolveStrings)); 080 missingPropertyMode(env.getProperty(MISSING_PROPERTY_MODE_KEY, Mode.class, missingPropertyMode)); 081 } 082 083 protected void validate(EnvironmentServiceContext ctx) { 084 Assert.notNull(ctx.getEnv(), "'env' cannot be null"); 085 Assert.notNull(ctx.getMissingPropertyMode(), "'missingPropertyMode' cannot be null"); 086 } 087 088 protected EnvironmentServiceContext getInstance() { 089 return new EnvironmentServiceContext(this); 090 } 091 092 public EnvironmentServiceContext build() { 093 override(); 094 EnvironmentServiceContext ctx = new EnvironmentServiceContext(this); 095 validate(ctx); 096 return ctx; 097 } 098 099 } 100 101}