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 }