Improved: Refactored Config.java to simplify fields initialization
Improvements remove in total roughly 70 lines of code and includes:
- moving all default values to the constructor to make it clear
- refactor getProperty to use the Optional monad
- remove FileInputStream from getPropertiesFile as it is not used
- properly indent conditions in determineOfbizPropertiesFileName
- simplify locale creation
- remove dependency on base (StringUtil)
- other minor renamings and formatting
git-svn-id: https://svn.apache.org/repos/asf/ofbiz/trunk@1775340 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java b/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java
index b6f90f8..10d2e7a 100644
--- a/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java
+++ b/framework/start/src/main/java/org/apache/ofbiz/base/start/Config.java
@@ -18,20 +18,17 @@
*******************************************************************************/
package org.apache.ofbiz.base.start;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Locale;
+import java.util.Optional;
import java.util.Properties;
import java.util.TimeZone;
-import org.apache.ofbiz.base.util.StringUtil;
-
/**
* OFBiz server parameters needed on system startup and retrieved from
* one of the properties files in the start component
@@ -55,16 +52,17 @@
Properties props = getPropertiesFile(ofbizCommands);;
// set this class fields
- ofbizHome = getOfbizHome(props);
- adminAddress = getAdminAddress(props);
+ ofbizHome = getOfbizHome(getProperty(props, "ofbiz.home", "."));
+ adminAddress = getAdminAddress(getProperty(props, "ofbiz.admin.host", "127.0.0.1"));
adminKey = getProperty(props, "ofbiz.admin.key", "so3du5kasd5dn");
- portOffset = getPortOffsetValue(ofbizCommands);
- adminPort = getAdminPort(props, portOffset);
- containerConfig = getAbsolutePath(props, "ofbiz.container.config", "framework/base/config/ofbiz-containers.xml", ofbizHome);
- loaders = getLoaders(props);
+ portOffset = getPortOffsetValue(ofbizCommands, "0");
+ adminPort = getAdminPort(props, 10523, portOffset); // see INFRA-6790
+ containerConfig = getAbsolutePath(props, "ofbiz.container.config",
+ "framework/base/config/ofbiz-containers.xml", ofbizHome);
+ loaders = Arrays.asList(getProperty(props, "ofbiz.start.loaders", "").split(","));
logDir = getAbsolutePath(props, "ofbiz.log.dir", "runtime/logs", ofbizHome);
- shutdownAfterLoad = isShutdownAfterLoad(props);
- useShutdownHook = isUseShutdownHook(props);
+ shutdownAfterLoad = getProperty(props, "ofbiz.auto.shutdown", "false").equalsIgnoreCase("true");
+ useShutdownHook = getProperty(props, "ofbiz.enable.hook", "true").equalsIgnoreCase("true");
System.out.println("Set OFBIZ_HOME to - " + ofbizHome);
@@ -74,29 +72,24 @@
System.setProperty("derby.system.home", getProperty(props, "derby.system.home", "runtime/data/derby"));
// set the default locale
- setDefaultLocale(props);
+ setDefaultLocale(getProperty(props, "ofbiz.locale.default", ""));
// set the default timezone
String tzString = props.getProperty("ofbiz.timeZone.default", TimeZone.getDefault().getID());
TimeZone.setDefault(TimeZone.getTimeZone(tzString));
}
- private String getAbsolutePath(Properties props, String key, String def, String ofbizHome) {
- String value = System.getProperty(key);
- if (value != null) {
- return value;
- } else {
- return ofbizHome + "/" + props.getProperty(key, def);
- }
+ private String getProperty(Properties props, String key, String defaultValue) {
+ return Optional.ofNullable(System.getProperty(key))
+ .orElse(props.getProperty(key, defaultValue));
}
- private String getProperty(Properties props, String key, String defaultValue) {
- String value = System.getProperty(key);
- if (value != null) {
- return value;
- } else {
- return props.getProperty(key, defaultValue);
- }
+ private String getOfbizHome(String homeProp) {
+ return homeProp.equals(".") ? System.getProperty("user.dir").replace('\\', '/') : homeProp;
+ }
+
+ private String getAbsolutePath(Properties props, String key, String def, String ofbizHome) {
+ return getProperty(props, key, ofbizHome + "/" + props.getProperty(key, def));
}
private Properties getPropertiesFile(List<StartupCommand> ofbizCommands) throws StartupException {
@@ -105,37 +98,23 @@
Properties props = new Properties();
try (InputStream propsStream = getClass().getClassLoader().getResourceAsStream(fullyQualifiedFileName)) {
- // first try classpath
- if (propsStream != null) {
- props.load(propsStream);
- } else {
- // next try file location
- try(FileInputStream fis = new FileInputStream(new File(fullyQualifiedFileName))) {
- if (fis != null) {
- props.load(fis);
- }
- }
- }
+ props.load(propsStream);
} catch (IOException e) {
throw new StartupException(e);
}
- // check for empty properties
- if (props.isEmpty()) {
- throw new StartupException("Cannot load configuration properties : " + fullyQualifiedFileName);
- }
- System.out.println("Start.java using configuration file " + fullyQualifiedFileName);
+ System.out.println("Config.java using configuration file " + fileName);
return props;
}
private String determineOfbizPropertiesFileName(List<StartupCommand> ofbizCommands) {
String fileName = null;
if (ofbizCommands.stream().anyMatch(command ->
- command.getName().equals(StartupCommandUtil.StartupOption.START.getName())
- || command.getName().equals(StartupCommandUtil.StartupOption.SHUTDOWN.getName())
- || command.getName().equals(StartupCommandUtil.StartupOption.STATUS.getName()))
- || ofbizCommands.isEmpty()
- || ofbizCommands.stream().allMatch(command ->
+ command.getName().equals(StartupCommandUtil.StartupOption.START.getName())
+ || command.getName().equals(StartupCommandUtil.StartupOption.SHUTDOWN.getName())
+ || command.getName().equals(StartupCommandUtil.StartupOption.STATUS.getName()))
+ || ofbizCommands.isEmpty()
+ || ofbizCommands.stream().allMatch(command ->
command.getName().equals(StartupCommandUtil.StartupOption.PORTOFFSET.getName()))) {
fileName = "start.properties";
} else if(ofbizCommands.stream().anyMatch(
@@ -148,39 +127,12 @@
return fileName;
}
- private List<String> getLoaders(Properties props) {
- String loadersProp = getProperty(props, "ofbiz.start.loaders", "");
- List<String> loaders = new ArrayList<String>();
- for(String loader : StringUtil.split(loadersProp, ",")) {
- loaders.add(loader);
- }
- return loaders;
- }
-
- private void setDefaultLocale(Properties props) {
- String localeString = props.getProperty("ofbiz.locale.default");
- if (localeString != null && localeString.length() > 0) {
- String locales[] = localeString.split("_");
- switch (locales.length) {
- case 1:
- Locale.setDefault(new Locale(locales[0]));
- break;
- case 2:
- Locale.setDefault(new Locale(locales[0], locales[1]));
- break;
- case 3:
- Locale.setDefault(new Locale(locales[0], locales[1], locales[2]));
- }
- System.setProperty("user.language", localeString);
- }
- }
-
- private int getPortOffsetValue(List<StartupCommand> ofbizCommands) throws StartupException {
+ private int getPortOffsetValue(List<StartupCommand> ofbizCommands, String defaultOffset) throws StartupException {
String extractedPortOffset = ofbizCommands.stream()
.filter(command -> command.getName().equals(StartupCommandUtil.StartupOption.PORTOFFSET.getName()))
.findFirst()
.map(ofbizCommand -> ofbizCommand.getProperties().keySet().iterator().next())
- .orElse("0");
+ .orElse(defaultOffset);
try {
return Integer.parseInt(extractedPortOffset);
} catch(NumberFormatException e) {
@@ -188,8 +140,17 @@
}
}
- private InetAddress getAdminAddress(Properties props) throws StartupException {
- String serverHost = getProperty(props, "ofbiz.admin.host", "127.0.0.1");
+ private int getAdminPort(Properties props, int defaultAdminPort, int portOffsetValue) {
+ String adminPortStr = getProperty(props, "ofbiz.admin.port", String.valueOf(defaultAdminPort));
+ try {
+ return Integer.parseInt(adminPortStr) + portOffsetValue;
+ } catch (NumberFormatException e) {
+ System.out.println("Error parsing admin port: " + adminPortStr + " -- " + e.getMessage());
+ return defaultAdminPort + portOffsetValue;
+ }
+ }
+
+ private InetAddress getAdminAddress(String serverHost) throws StartupException {
try {
return InetAddress.getByName(serverHost);
} catch (UnknownHostException e) {
@@ -197,46 +158,18 @@
}
}
- private int getAdminPort(Properties props, int portOffsetValue) {
- String adminPortStr = getProperty(props, "ofbiz.admin.port", "0");
- int calculatedAdminPort;
- try {
- calculatedAdminPort = Integer.parseInt(adminPortStr);
- calculatedAdminPort = calculatedAdminPort != 0 ? calculatedAdminPort : 10523; // This is necessary because the ASF machines don't allow ports 1 to 3, see INFRA-6790
- calculatedAdminPort += portOffsetValue;
- } catch (Exception e) {
- System.out.println("Error while parsing admin port number (so default to 10523) = " + e);
- calculatedAdminPort = 10523;
+ private void setDefaultLocale(String localeString) {
+ String locales[] = localeString.split("_");
+ switch (locales.length) {
+ case 1:
+ Locale.setDefault(new Locale(locales[0]));
+ break;
+ case 2:
+ Locale.setDefault(new Locale(locales[0], locales[1]));
+ break;
+ case 3:
+ Locale.setDefault(new Locale(locales[0], locales[1], locales[2]));
}
- return calculatedAdminPort;
- }
-
- private String getOfbizHome(Properties props) {
- String extractedOfbizHome = props.getProperty("ofbiz.home", ".");
- if (extractedOfbizHome.equals(".")) {
- extractedOfbizHome = System.getProperty("user.dir");
- extractedOfbizHome = extractedOfbizHome.replace('\\', '/');
- }
- return extractedOfbizHome;
- }
-
- private boolean isShutdownAfterLoad(Properties props) {
- if (System.getProperty("ofbiz.auto.shutdown") != null && System.getProperty("ofbiz.auto.shutdown").length() > 0) {
- return "true".equalsIgnoreCase(System.getProperty("ofbiz.auto.shutdown"));
- } else if (props.getProperty("ofbiz.auto.shutdown") != null && props.getProperty("ofbiz.auto.shutdown").length() > 0) {
- return "true".equalsIgnoreCase(props.getProperty("ofbiz.auto.shutdown"));
- } else {
- return false;
- }
- }
-
- private boolean isUseShutdownHook(Properties props) {
- if (System.getProperty("ofbiz.enable.hook") != null && System.getProperty("ofbiz.enable.hook").length() > 0) {
- return "true".equalsIgnoreCase(System.getProperty("ofbiz.enable.hook"));
- } else if (props.getProperty("ofbiz.enable.hook") != null && props.getProperty("ofbiz.enable.hook").length() > 0) {
- return "true".equalsIgnoreCase(props.getProperty("ofbiz.enable.hook"));
- } else {
- return true;
- }
+ System.setProperty("user.language", localeString);
}
}