private static Option<?> createOption(final OptionTemplate t, final String value) { switch (t.getType()) { case "string": // default value null return new Option<>(value); case "timezone": // default value "TimeZone.getDefault()" return new Option<>(TimeZone.getTimeZone(value)); case "locale": return new Option<>(Locale.forLanguageTag(value)); case "keyvalues": return new KeyValueOption(value); case "log": final KeyValueOption kv = new KeyValueOption(value); Logging.initialize(kv.getValues()); return kv; case "boolean": return new Option<>(value != null && Boolean.parseBoolean(value)); case "integer": try { return new Option<>((value == null) ? 0 : Integer.parseInt(value)); } catch (final NumberFormatException nfe) { throw new IllegalOptionException(t); } case "properties": //swallow the properties and set them initProps(new KeyValueOption(value)); return null; default: break; } throw new IllegalArgumentException(value); }