Skip to content

Commit da0757e

Browse files
VillePekkatonygermano
authored andcommitted
Related to issue #205. Enable using environment variables in config file.
Signed-off-by: Ville Ranta-aho <ville@ville-pekka.com> Signed-off-by: Tony Germano <tony@germano.name>
1 parent e28cb55 commit da0757e

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

command/src/com/mirth/connect/cli/CommandLineInterface.java

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import java.io.BufferedReader;
1313
import java.io.File;
14-
import java.io.FileInputStream;
1514
import java.io.FileReader;
1615
import java.io.IOException;
1716
import java.io.InputStreamReader;
@@ -27,7 +26,6 @@
2726
import java.util.List;
2827
import java.util.Map;
2928
import java.util.Map.Entry;
30-
import java.util.Properties;
3129
import java.util.Set;
3230
import java.util.TreeMap;
3331
import java.util.regex.Matcher;
@@ -42,8 +40,12 @@
4240
import org.apache.commons.cli.Options;
4341
import org.apache.commons.cli.ParseException;
4442
import org.apache.commons.collections4.CollectionUtils;
43+
import org.apache.commons.configuration2.BaseConfiguration;
44+
import org.apache.commons.configuration2.Configuration;
4545
import org.apache.commons.configuration2.PropertiesConfiguration;
4646
import org.apache.commons.configuration2.PropertiesConfigurationLayout;
47+
import org.apache.commons.configuration2.builder.fluent.Parameters;
48+
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
4749
import org.apache.commons.configuration2.ex.ConfigurationException;
4850
import org.apache.commons.io.FileUtils;
4951
import org.apache.commons.io.FilenameUtils;
@@ -145,21 +147,34 @@ private void run(String[] args) {
145147
System.exit(0);
146148
}
147149

148-
Properties configDefaults = new Properties();
150+
Parameters params = new Parameters();
151+
// Read data from this file
152+
File propertiesFile = new File(line.getOptionValue("c", "conf" + File.separator + "mirth-cli-config.properties"));
153+
154+
FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
155+
new FileBasedConfigurationBuilder<PropertiesConfiguration>(PropertiesConfiguration.class)
156+
.configure(params.fileBased()
157+
.setFile(propertiesFile));
158+
159+
Configuration config = new BaseConfiguration();
149160
try {
150-
configDefaults.load(new FileInputStream(line.getOptionValue("c", "conf" + File.separator + "mirth-cli-config.properties")));
151-
} catch (IOException e) {
152-
// Only error out if they tried to load the config
161+
// Load properties using Apache Commons Configuration2. The resulting config
162+
// instance supports variable interpolation, including environment variables
163+
// using the ${env:VARIABLE_NAME} syntax (for example ${env:MC_SERVER_URL}).
164+
config = builder.getConfiguration();
165+
} catch (ConfigurationException cex) {
166+
// loading of the configuration file failed
153167
if (line.hasOption("c")) {
154-
error("We could not find the file: " + line.getOptionValue("c"), null);
168+
// An explicit configuration file was specified with -c; fail fast with a clear error
169+
error("Failed to load the configuration file specified with -c: " + line.getOptionValue("c"), cex);
155170
System.exit(2);
156171
}
157172
}
158173

159-
String server = line.getOptionValue("a", configDefaults.getProperty("address"));
160-
String user = line.getOptionValue("u", configDefaults.getProperty("user"));
161-
String password = line.getOptionValue("p", configDefaults.getProperty("password"));
162-
String script = line.getOptionValue("s", configDefaults.getProperty("script"));
174+
String server = line.getOptionValue("a", config.getString("address"));
175+
String user = line.getOptionValue("u", config.getString("user"));
176+
String password = line.getOptionValue("p", config.getString("password"));
177+
String script = line.getOptionValue("s", config.getString("script"));
163178

164179
if ((server != null) && (user != null) && (password != null)) {
165180
runShell(server, user, password, script, line.hasOption("d"));

0 commit comments

Comments
 (0)