diff options
author | Benoit Foucher <benoit@zeroc.com> | 2017-02-01 14:25:17 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2017-02-01 14:25:17 +0100 |
commit | 3bb38c886e9dbd636ae39f3b216d0f7a5c43f1e0 (patch) | |
tree | 0db6754abde6c94529d8bfb876181d800a9047f2 /java/src | |
parent | Fix argv processing in gulpfile (diff) | |
download | ice-3bb38c886e9dbd636ae39f3b216d0f7a5c43f1e0.tar.bz2 ice-3bb38c886e9dbd636ae39f3b216d0f7a5c43f1e0.tar.xz ice-3bb38c886e9dbd636ae39f3b216d0f7a5c43f1e0.zip |
Fixed ICE-7536 - Simplified Ice.Util createProperties/initialize methods
Diffstat (limited to 'java/src')
7 files changed, 155 insertions, 109 deletions
diff --git a/java/src/Glacier2/src/main/java/com/zeroc/Glacier2/Application.java b/java/src/Glacier2/src/main/java/com/zeroc/Glacier2/Application.java index 920a9fa7ca1..b386826dcf7 100644 --- a/java/src/Glacier2/src/main/java/com/zeroc/Glacier2/Application.java +++ b/java/src/Glacier2/src/main/java/com/zeroc/Glacier2/Application.java @@ -274,8 +274,8 @@ public abstract class Application extends com.zeroc.Ice.Application try { - Util.InitializeResult ir = Util.initialize(args, initData); - _communicator = ir.communicator; + java.util.List<String> remainingArgs = new java.util.ArrayList<>(); + _communicator = Util.initialize(args, initData, remainingArgs); _router = com.zeroc.Glacier2.RouterPrx.uncheckedCast(communicator().getDefaultRouter()); if(_router == null) @@ -331,7 +331,7 @@ public abstract class Application extends com.zeroc.Ice.Application connection.setCloseCallback(con -> sessionDestroyed()); } _category = _router.getCategoryForClient(); - r.returnValue = runWithSession(ir.args); + r.returnValue = runWithSession(remainingArgs.toArray(new String[remainingArgs.size()])); } } } diff --git a/java/src/Ice/src/main/java/com/zeroc/Ice/Application.java b/java/src/Ice/src/main/java/com/zeroc/Ice/Application.java index b0ace4a8692..7533dfece23 100644 --- a/java/src/Ice/src/main/java/com/zeroc/Ice/Application.java +++ b/java/src/Ice/src/main/java/com/zeroc/Ice/Application.java @@ -167,11 +167,10 @@ public abstract class Application initData = new InitializationData(); } - Util.CreatePropertiesResult cpr = null; + java.util.List<String> remainingArgs = new java.util.ArrayList<>(); try { - cpr = Util.createProperties(args, initData.properties); - initData.properties = cpr.properties; + initData.properties = Util.createProperties(args, initData.properties, remainingArgs); } catch(LocalException ex) { @@ -194,7 +193,7 @@ public abstract class Application Util.setProcessLogger(new LoggerI(initData.properties.getProperty("Ice.ProgramName"), "")); } - return doMain(cpr.args, initData); + return doMain(remainingArgs.toArray(new String[remainingArgs.size()]), initData); } protected int doMain(String[] args, InitializationData initData) @@ -203,9 +202,8 @@ public abstract class Application try { - Util.InitializeResult ir = Util.initialize(args, initData); - - _communicator = ir.communicator; + java.util.List<String> remainingArgs = new java.util.ArrayList<>(); + _communicator = Util.initialize(args, initData, remainingArgs); // // The default is to destroy when a signal is received. @@ -215,7 +213,7 @@ public abstract class Application destroyOnInterrupt(); } - status = run(ir.args); + status = run(remainingArgs.toArray(new String[remainingArgs.size()])); } catch(LocalException ex) { diff --git a/java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java b/java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java index 1f9041840b0..90d1d89467f 100644 --- a/java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java +++ b/java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java @@ -314,11 +314,19 @@ public final class CommunicatorI implements Communicator // Certain initialization tasks need to be completed after the // constructor. // - String[] finishSetup(String[] args) + void finishSetup(String[] args, java.util.List<String> rArgs) { try { - return _instance.finishSetup(args, this); + args = _instance.finishSetup(args, this); + if(rArgs != null) + { + rArgs.clear(); + if(args.length > 0) + { + rArgs.addAll(java.util.Arrays.asList(args)); + } + } } catch(RuntimeException ex) { diff --git a/java/src/Ice/src/main/java/com/zeroc/Ice/PropertiesI.java b/java/src/Ice/src/main/java/com/zeroc/Ice/PropertiesI.java index 29ae6ddc1e5..5e25b849050 100644 --- a/java/src/Ice/src/main/java/com/zeroc/Ice/PropertiesI.java +++ b/java/src/Ice/src/main/java/com/zeroc/Ice/PropertiesI.java @@ -485,7 +485,7 @@ public final class PropertiesI implements Properties { } - String[] init(String[] args, Properties defaults) + void init(String[] args, Properties defaults, java.util.List<String> rArgs) { if(defaults != null) { @@ -537,7 +537,15 @@ public final class PropertiesI implements Properties loadConfig(); } - return parseIceCommandLineOptions(args); + args = parseIceCommandLineOptions(args); + if(rArgs != null) + { + rArgs.clear(); + if(args.length > 0) + { + rArgs.addAll(java.util.Arrays.asList(args)); + } + } } private void diff --git a/java/src/Ice/src/main/java/com/zeroc/Ice/Util.java b/java/src/Ice/src/main/java/com/zeroc/Ice/Util.java index b4e008352da..646c97e1c9a 100644 --- a/java/src/Ice/src/main/java/com/zeroc/Ice/Util.java +++ b/java/src/Ice/src/main/java/com/zeroc/Ice/Util.java @@ -27,15 +27,41 @@ public final class Util } /** - * Encapsulates the results of a call to createProperties(). + * Creates a property set initialized from an argument vector. + * + * @param args A command-line argument vector, possibly containing + * options to set properties. If the command-line options include + * a <code>--Ice.Config</code> option, the corresponding configuration + * files are parsed. If the same property is set in a configuration + * file and in the argument vector, the argument vector takes precedence. + * + * @return A new property set initialized with the property settings + * that were removed from the argument vector. **/ - public static class CreatePropertiesResult + public static Properties createProperties(String[] args) { - /** The new property set. */ - public Properties properties; + return createProperties(args, null, null); + } - /** The original command-line arguments with Ice-related arguments removed. */ - public String[] args; + /** + * Creates a property set initialized from an argument vector and + * return the remaining arguments. + * + * @param args A command-line argument vector, possibly containing + * options to set properties. If the command-line options include + * a <code>--Ice.Config</code> option, the corresponding configuration + * files are parsed. If the same property is set in a configuration + * file and in the argument vector, the argument vector takes precedence. + * + * @param remainingArgs If non null, the given list will contain on + * return the command-line arguments that were not used to set properties. + * + * @return A new property set initialized with the property settings + * that were removed from the argument vector. + **/ + public static Properties createProperties(String[] args, java.util.List<String> remainingArgs) + { + return createProperties(args, null, remainingArgs); } /** @@ -47,17 +73,20 @@ public final class Util * files are parsed. If the same property is set in a configuration * file and in the argument vector, the argument vector takes precedence. * + * @param defaults Default values for the property set. Settings in + * configuration files and <code>args</code> override these defaults. + * * @return A new property set initialized with the property settings - * that were removed from the argument vector, along with the filtered - * argument vector. + * that were removed from the argument vector. **/ - public static CreatePropertiesResult createProperties(String[] args) + public static Properties createProperties(String[] args, Properties defaults) { - return createProperties(args, null); + return createProperties(args, defaults, null); } /** - * Creates a property set initialized from an argument vector. + * Creates a property set initialized from an argument vector and + * return the remaining arguments. * * @param args A command-line argument vector, possibly containing * options to set properties. If the command-line options include @@ -65,45 +94,32 @@ public final class Util * files are parsed. If the same property is set in a configuration * file and in the argument vector, the argument vector takes precedence. * - * @param defaults Default values for the property set. Settings in configuration - * files and <code>args</code> override these defaults. + * @param defaults Default values for the property set. Settings in + * configuration files and <code>args</code> override these defaults. + * + * @param remainingArgs If non null, the given list will contain on + * return the command-line arguments that were not used to set properties. * * @return A new property set initialized with the property settings - * that were removed from the argument vector, along with the filtered - * argument vector. + * that were removed from the argument vector. **/ - public static CreatePropertiesResult createProperties(String[] args, Properties defaults) + public static Properties createProperties(String[] args, + Properties defaults, + java.util.List<String> remainingArgs) { PropertiesI properties = new PropertiesI(); - CreatePropertiesResult cpr = new CreatePropertiesResult(); - cpr.properties = properties; - cpr.args = properties.init(args, defaults); - return cpr; + properties.init(args, defaults, remainingArgs); + return properties; } /** - * Encapsulates the results of a call to initialize(). + * Creates a communicator using a default configuration. + * + * @return A new communicator instance. **/ - public static class InitializeResult implements java.lang.AutoCloseable + public static Communicator initialize() { - @Override - public void close() - { - try - { - communicator.close(); - } - catch(java.lang.Exception ex) - { - assert(false); - } - } - - /** The new communicator. */ - public Communicator communicator; - - /** The original command-line arguments with Ice-related arguments removed. */ - public String[] args; + return initialize(new InitializationData()); } /** @@ -114,9 +130,9 @@ public final class Util * * @return The new communicator and a filtered argument vector. **/ - public static InitializeResult initialize(String[] args) + public static Communicator initialize(String[] args) { - return initialize(args, null); + return initialize(args, null, null); } /** @@ -125,45 +141,62 @@ public final class Util * @param args A command-line argument vector. Any Ice-related options * in this vector are used to initialize the communicator. * - * @param initData Additional initialization data. Property settings in <code>args</code> - * override property settings in <code>initData</code>. + * @param remainingArgs If non null, the given list will contain on + * return the command-line arguments that were not used to set properties. * * @return The new communicator and a filtered argument vector. - * - * @see InitializationData **/ - public static InitializeResult initialize(String[] args, InitializationData initData) + public static Communicator initialize(String[] args, java.util.List<String> remainingArgs) { - if(initData == null) - { - initData = new InitializationData(); - } - else - { - initData = initData.clone(); - } - - CreatePropertiesResult cpr = createProperties(args, initData.properties); - initData.properties = cpr.properties; - - InitializeResult ir = new InitializeResult(); + return initialize(args, null, remainingArgs); + } - CommunicatorI c = new CommunicatorI(initData); - ir.communicator = c; - ir.args = c.finishSetup(cpr.args); - return ir; + /** + * Creates a communicator. + * + * @param initData Additional initialization data. + * + * @return The new communicator and a filtered argument vector. + **/ + public static Communicator initialize(InitializationData initData) + { + return initialize(null, initData, null); } /** * Creates a communicator. * + * @param args A command-line argument vector. Any Ice-related options + * in this vector are used to initialize the communicator. + * * @param initData Additional initialization data. * - * @return The new communicator. + * @return The new communicator and a filtered argument vector. + **/ + public static Communicator initialize(String[] args, InitializationData initData) + { + return initialize(args, initData, null); + } + + /** + * Creates a communicator. + * + * @param args A command-line argument vector. Any Ice-related options + * in this vector are used to initialize the communicator. + * + * @param initData Additional initialization data. Property settings in <code>args</code> + * override property settings in <code>initData</code>. + * + * @param remainingArgs If non null, the given list will contain on + * return the command-line arguments that were not used to set properties. + * + * @return The new communicator and a filtered argument vector. * * @see InitializationData **/ - public static Communicator initialize(InitializationData initData) + public static Communicator initialize(String[] args, + InitializationData initData, + java.util.List<String> remainingArgs) { if(initData == null) { @@ -174,19 +207,16 @@ public final class Util initData = initData.clone(); } - CommunicatorI result = new CommunicatorI(initData); - result.finishSetup(new String[0]); - return result; - } + if(args != null) + { + java.util.List<String> rArgs = new java.util.ArrayList<>(); + initData.properties = createProperties(args, initData.properties, rArgs); + args = rArgs.toArray(new String[rArgs.size()]); + } - /** - * Creates a communicator using a default configuration. - * - * @return A new communicator instance. - **/ - public static Communicator initialize() - { - return initialize(new InitializationData()); + CommunicatorI communicator = new CommunicatorI(initData); + communicator.finishSetup(args != null ? args : new String[0], remainingArgs); + return communicator; } /** diff --git a/java/src/IceBox/src/main/java/com/zeroc/IceBox/ServiceManagerI.java b/java/src/IceBox/src/main/java/com/zeroc/IceBox/ServiceManagerI.java index f2c60fcf1f7..bd09415c3a2 100644 --- a/java/src/IceBox/src/main/java/com/zeroc/IceBox/ServiceManagerI.java +++ b/java/src/IceBox/src/main/java/com/zeroc/IceBox/ServiceManagerI.java @@ -329,8 +329,9 @@ public class ServiceManagerI implements ServiceManager // Load the service properties using the shared communicator properties as // the default properties. // - Util.CreatePropertiesResult cpr = Util.createProperties(service.args, initData.properties); - service.args = cpr.args; + java.util.List<String> remainingArgs = new java.util.ArrayList<>(); + Properties serviceProps = Util.createProperties(service.args, initData.properties, remainingArgs); + service.args = remainingArgs.toArray(new String[remainingArgs.size()]); // // Remove properties from the shared property set that a service explicitly clears. @@ -338,7 +339,7 @@ public class ServiceManagerI implements ServiceManager java.util.Map<String, String> allProps = initData.properties.getPropertiesForPrefix(""); for(String key : allProps.keySet()) { - if(cpr.properties.getProperty(key).length() == 0) + if(serviceProps.getProperty(key).length() == 0) { initData.properties.setProperty(key, ""); } @@ -347,7 +348,7 @@ public class ServiceManagerI implements ServiceManager // // Add the service properties to the shared communicator properties. // - for(java.util.Map.Entry<String, String> p : cpr.properties.getPropertiesForPrefix("").entrySet()) + for(java.util.Map.Entry<String, String> p : serviceProps.getPropertiesForPrefix("").entrySet()) { initData.properties.setProperty(p.getKey(), p.getValue()); } @@ -590,14 +591,15 @@ public class ServiceManagerI implements ServiceManager // Create the service properties with the given service arguments. This should // read the service config file if it's specified with --Ice.Config. // - Util.CreatePropertiesResult cpr = Util.createProperties(serviceArgs, initData.properties); - initData.properties = cpr.properties; + java.util.List<String> remainingArgs = new java.util.ArrayList<>(); + initData.properties = Util.createProperties(serviceArgs, initData.properties, remainingArgs); + serviceArgs = remainingArgs.toArray(new String[remainingArgs.size()]); // // Next, parse the service "<service>.*" command line options (the Ice command // line options were parsed by the createProperties above). // - serviceArgs = initData.properties.parseCommandLineOptions(service, cpr.args); + serviceArgs = initData.properties.parseCommandLineOptions(service, serviceArgs); } // @@ -623,9 +625,9 @@ public class ServiceManagerI implements ServiceManager // Remaining command line options are passed to the communicator. This is // necessary for Ice plug-in properties (e.g.: IceSSL). // - Util.InitializeResult ir = Util.initialize(serviceArgs, initData); - info.communicator = ir.communicator; - info.args = ir.args; + java.util.List<String> remainingArgs = new java.util.ArrayList<>(); + info.communicator = Util.initialize(serviceArgs, initData, remainingArgs); + info.args = remainingArgs.toArray(new String[remainingArgs.size()]); communicator = info.communicator; if(addFacets) diff --git a/java/src/IceGridGUI/src/main/java/com/zeroc/IceGridGUI/Coordinator.java b/java/src/IceGridGUI/src/main/java/com/zeroc/IceGridGUI/Coordinator.java index 73a49d83926..354a20cd3bd 100644 --- a/java/src/IceGridGUI/src/main/java/com/zeroc/IceGridGUI/Coordinator.java +++ b/java/src/IceGridGUI/src/main/java/com/zeroc/IceGridGUI/Coordinator.java @@ -2454,7 +2454,7 @@ public class Coordinator return _saveIceLogChooser; } - static private com.zeroc.Ice.Util.CreatePropertiesResult createProperties(String[] args) + static private com.zeroc.Ice.Properties createProperties(String[] args, java.util.List<String> rArgs) { com.zeroc.Ice.Properties properties = com.zeroc.Ice.Util.createProperties(); @@ -2468,7 +2468,7 @@ public class Coordinator // properties.setProperty("Ice.RetryIntervals", "-1"); - return com.zeroc.Ice.Util.createProperties(args, properties); + return com.zeroc.Ice.Util.createProperties(args, properties, rArgs); } Coordinator(JFrame mainFrame, String[] args, Preferences prefs) @@ -2479,17 +2479,17 @@ public class Coordinator _initData = new com.zeroc.Ice.InitializationData(); _initData.logger = new Logger(mainFrame); - com.zeroc.Ice.Util.CreatePropertiesResult cpr = createProperties(args); - _initData.properties = cpr.properties; + java.util.List<String> rArgs = new java.util.ArrayList<>(); + _initData.properties = createProperties(args, rArgs); // // We enable IceSSL so the communicator knows how to parse ssl endpoints. // _initData.properties.setProperty("Ice.Plugin.IceSSL", "com.zeroc.IceSSL.PluginFactory"); - if(cpr.args.length > 0) + if(!rArgs.isEmpty()) { String msg = "Extra command-line arguments: "; - for(String arg : cpr.args) + for(String arg : rArgs) { msg += arg + " "; } |