Author: mthl
Date: Sat Jul 6 14:33:19 2019 New Revision: 1862664 URL: http://svn.apache.org/viewvc?rev=1862664&view=rev Log: Improved: Rewrite ‘Start#determineCommandType’ (OFBIZ-11137) Rename it to ‘Start.CommandType#valueOf’ and use a set to determine the type of command instead of repetitive stream iterations. Assuming ‘Set#contains’ is a constant operation, The algorithmic complexity in worth case has dropped from O(n*m) to O(n+m) where n is the number of command types and m is the number of startup commands. In this particular case where n and m are small, the theorical gain is not significative in term of actual performance. Modified: ofbiz/ofbiz-framework/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java Modified: ofbiz/ofbiz-framework/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java?rev=1862664&r1=1862663&r2=1862664&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java (original) +++ ofbiz/ofbiz-framework/trunk/framework/start/src/main/java/org/apache/ofbiz/base/start/Start.java Sat Jul 6 14:33:19 2019 @@ -20,7 +20,9 @@ package org.apache.ofbiz.base.start; import java.util.List; import java.util.Locale; +import java.util.Set; import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; /** * OFBiz startup class. @@ -66,7 +68,7 @@ public final class Start { System.exit(1); } - CommandType commandType = determineCommandType(ofbizCommands); + CommandType commandType = CommandType.valueOf(ofbizCommands); if(!commandType.equals(CommandType.HELP)) { instance.config = StartupControlPanel.init(ofbizCommands); } @@ -123,22 +125,29 @@ public final class Start { } } - private static CommandType determineCommandType(List<StartupCommand> ofbizCommands) { - if (ofbizCommands.stream().anyMatch( - command -> command.getName().equals(StartupCommandUtil.StartupOption.HELP.getName()))) { - return CommandType.HELP; - } else if (ofbizCommands.stream().anyMatch( - command -> command.getName().equals(StartupCommandUtil.StartupOption.STATUS.getName()))) { - return CommandType.STATUS; - } else if (ofbizCommands.stream().anyMatch( - command -> command.getName().equals(StartupCommandUtil.StartupOption.SHUTDOWN.getName()))) { - return CommandType.SHUTDOWN; - } else { - return CommandType.START; - } - } - + /** + * The type of command that allow dispatching to various startup behavior. + */ private enum CommandType { - HELP, STATUS, SHUTDOWN, START + HELP, STATUS, SHUTDOWN, START; + + /** + * Determines the type of command from a list of command-line commands + * + * @param ofbizCommands the list of parsed command-line arguments which cannot be {@code null} + * @return the corresponding command type. + */ + static CommandType valueOf(List<StartupCommand> ofbizCommands) { + Set<String> commandNames = ofbizCommands.stream().map(StartupCommand::getName).collect(Collectors.toSet()); + if (commandNames.contains(StartupCommandUtil.StartupOption.HELP.getName())) { + return CommandType.HELP; + } else if (commandNames.contains(StartupCommandUtil.StartupOption.STATUS.getName())) { + return CommandType.STATUS; + } else if (commandNames.contains(StartupCommandUtil.StartupOption.SHUTDOWN.getName())) { + return CommandType.SHUTDOWN; + } else { + return CommandType.START; + } + } } } |
Free forum by Nabble | Edit this page |