1 /* 2 * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.javafx.tools.packager; 27 28 import com.oracle.tools.packager.*; 29 import com.oracle.tools.packager.ConfigException; 30 import com.oracle.tools.packager.UnsupportedPlatformException; 31 import com.sun.javafx.tools.packager.bundlers.Bundler.BundleType; 32 33 import java.io.File; 34 import java.io.FileInputStream; 35 import java.io.IOException; 36 import java.text.MessageFormat; 37 import java.util.*; 38 import java.util.stream.Stream; 39 import java.nio.file.Files; 40 import java.nio.file.Path; 41 42 import jdk.packager.internal.JLinkBundlerHelper; 43 44 45 public class Main { 46 47 private static final ResourceBundle bundle = 48 ResourceBundle.getBundle("com/sun/javafx/tools/packager/Bundle"); 49 50 private static final String version = bundle.getString("MSG_Version") 51 + " " + PackagerLib.JAVAFX_VERSION + "\n"; 52 private static final String help = bundle.getString("MSG_Help_1") 53 + bundle.getString("MSG_Help_2") 54 + bundle.getString("MSG_Help_3") 55 + bundle.getString("MSG_Help_4") 56 + bundle.getString("MSG_Help_5") 57 + bundle.getString("MSG_Help_6") 58 + bundle.getString("MSG_Help_7"); 59 60 private static String nextArg(String args[], int i) { 61 return (i == args.length - 1) ? "" : args[i + 1]; 62 } 63 64 private static boolean verbose = false; 65 private static boolean packageAsJar = false; 66 private static boolean genJNLP = false; 67 private static boolean genPackages = false; 68 private static boolean css2Bin = false; 69 private static boolean signJar = false; 70 private static boolean makeAll = false; 71 72 private static void addResources(CommonParams commonParams, 73 String srcdir, String srcfiles) { 74 if (srcdir == null || "".equals(srcdir)) { 75 return; 76 } 77 78 File baseDir = new File(srcdir); 79 80 if (!baseDir.isDirectory()) { 81 Log.info("Unable to add resources: \"-srcdir\" is not a directory."); 82 return; 83 } 84 85 List<String> fileNames; 86 if (srcfiles != null) { 87 fileNames = Arrays.asList(srcfiles.split(File.pathSeparator)); 88 } else { 89 // "-srcfiles" is omitted, all files in srcdir (which 90 // is a mandatory argument in this case) will be packed. 91 fileNames = new ArrayList<>(); 92 try (Stream<Path> files = Files.list(baseDir.toPath())) { 93 files.forEach(file -> fileNames.add(file.getFileName().toString())); 94 } catch (IOException e) { 95 Log.info("Unable to add resources: " + e.getMessage()); 96 } 97 } 98 99 fileNames.forEach(file -> commonParams.addResource(baseDir, file)); 100 } 101 102 private static void addArgument(DeployParams deployParams, String argument) { 103 if (deployParams.arguments != null) { 104 deployParams.arguments.add(argument); 105 } else { 106 List<String> list = new LinkedList<>(); 107 list.add(argument); 108 deployParams.setArguments(list); 109 } 110 } 111 112 private static void addArgument(CreateJarParams deployParams, String argument) { 113 if (deployParams.arguments != null) { 114 deployParams.arguments.add(argument); 115 } else { 116 List<String> list = new LinkedList<>(); 117 list.add(argument); 118 deployParams.setArguments(list); 119 } 120 } 121 122 private static Map<String, String> createAttrMap(String arg) { 123 Map<String, String> map = new HashMap<>(); 124 if (arg == null || "".equals(arg)) { 125 return null; 126 } 127 String[] pairsArray = arg.split(","); 128 for (String pair: pairsArray) { 129 String[] attr = pair.split("="); 130 map.put(attr[0].trim(), attr[1].trim()); 131 } 132 return map; 133 } 134 135 private static List<Param> parseParams(String filename) throws IOException { 136 File paramFile = new File(filename); 137 Properties properties = new Properties(); 138 FileInputStream in = new FileInputStream(paramFile); 139 properties.load(in); 140 in.close(); 141 142 List<Param> parameters = new ArrayList<>(properties.size()); 143 144 for (Map.Entry en : properties.entrySet()) { 145 Param p = new Param(); 146 p.setName((String)en.getKey()); 147 p.setValue((String)en.getValue()); 148 parameters.add(p); 149 } 150 return parameters; 151 } 152 153 private static List<HtmlParam> parseHtmlParams(String filename) throws IOException { 154 File paramFile = new File(filename); 155 Properties properties = new Properties(); 156 FileInputStream in = new FileInputStream(paramFile); 157 properties.load(in); 158 in.close(); 159 160 List<HtmlParam> parameters = new ArrayList<>(properties.size()); 161 162 for (Map.Entry en : properties.entrySet()) { 163 HtmlParam p = new HtmlParam(); 164 p.setName((String)en.getKey()); 165 p.setValue((String)en.getValue()); 166 parameters.add(p); 167 } 168 return parameters; 169 } 170 171 private static List<JSCallback> parseCallbacks(String param) { 172 String[] callbacks = param.split(","); 173 List<JSCallback> list = new ArrayList<>(callbacks.length); 174 175 for (String cb: callbacks) { 176 String[] nameCmd = cb.split(":"); 177 if (nameCmd.length == 2) { 178 list.add(new JSCallback(nameCmd[0], nameCmd[1])); 179 } 180 } 181 return list; 182 } 183 184 185 @SuppressWarnings("deprecation") 186 public static void main(String... args) throws Exception { 187 BundleType bundleType = BundleType.NONE; 188 189 if (args.length == 0 || args.length == 1 && args[0].equals("-help")) { 190 System.out.println(help); 191 } else if (args.length == 1 && args[0].equals("-version")) { 192 System.out.println(version); 193 } else { 194 PackagerLib packager = new PackagerLib(); 195 CreateJarParams createJarParams = new CreateJarParams(); 196 DeployParams deployParams = new DeployParams(); 197 CreateBSSParams createBssParams = new CreateBSSParams(); 198 SignJarParams signJarParams = new SignJarParams(); 199 MakeAllParams makeAllParams = new MakeAllParams(); 200 String srcdir = null; 201 String srcfiles = null; 202 203 try { 204 if (args[0].equalsIgnoreCase("-createjar")) { 205 for (int i = 1; i < args.length; i++) { 206 String arg = args[i]; 207 if (arg.equalsIgnoreCase("-appclass")) { 208 createJarParams.setApplicationClass(nextArg(args, i++)); 209 } else if (arg.equalsIgnoreCase("-preloader")) { 210 createJarParams.setPreloader(nextArg(args, i++)); 211 } else if (arg.equalsIgnoreCase("-classpath")) { 212 createJarParams.setClasspath(nextArg(args, i++)); 213 } else if (arg.equalsIgnoreCase("-manifestAttrs")) { 214 createJarParams.setManifestAttrs(createAttrMap(nextArg(args, i++))); 215 } else if (arg.equalsIgnoreCase("-noembedlauncher")) { 216 System.err.println("-noembedlauncher is deprecated"); 217 } else if (arg.equalsIgnoreCase("-nocss2bin")) { 218 createJarParams.setCss2bin(false); 219 } else if (arg.equalsIgnoreCase("-runtimeVersion")) { 220 createJarParams.setFxVersion(nextArg(args, i++)); 221 System.err.println("-runtimeVersion is deprecated"); 222 } else if (arg.equalsIgnoreCase("-verbose") || arg.equalsIgnoreCase("-v")) { 223 createJarParams.setVerbose(true); 224 verbose = true; 225 } else if (arg.equalsIgnoreCase("-outdir")) { 226 createJarParams.setOutdir(new File(nextArg(args, i++))); 227 } else if (arg.equalsIgnoreCase("-outfile")) { 228 createJarParams.setOutfile(nextArg(args, i++)); 229 } else if (arg.equalsIgnoreCase("-" + StandardBundlerParam.SOURCE_DIR.getID())) { 230 srcdir = nextArg(args, i++); 231 } else if (arg.equalsIgnoreCase("-srcfiles")) { 232 srcfiles = nextArg(args, i++); 233 } else if (arg.equalsIgnoreCase("-argument")) { 234 addArgument(createJarParams, nextArg(args, i++)); 235 } else if (arg.equalsIgnoreCase("-paramFile")) { 236 createJarParams.setParams(parseParams(nextArg(args, i++))); 237 } else { 238 throw new PackagerException("ERR_UnknownArgument", arg); 239 } 240 } 241 242 addResources(createJarParams, srcdir, srcfiles); 243 packageAsJar = true; 244 } else if (args[0].equalsIgnoreCase("-deploy")) { 245 File templateInFile = null; 246 File templateOutFile = null; 247 deployParams.setBundleType(BundleType.JNLP); 248 deployParams.setTargetFormat("jnlp"); 249 250 //can only set it to true with command line, reset default 251 deployParams.setEmbedJNLP(false); 252 253 for (int i = 1; i < args.length; i++) { 254 String arg = args[i]; 255 if (arg.startsWith("-B")) { 256 String key; 257 String value; 258 259 int keyStart = 2; 260 int equals = arg.indexOf("="); 261 int len = arg.length(); 262 if (equals < keyStart) { 263 if (keyStart < len) { 264 key = arg.substring(keyStart, len); 265 value = Boolean.TRUE.toString(); 266 } else { 267 continue; 268 } 269 } else if (keyStart < equals) { 270 key = arg.substring(keyStart, equals); 271 value = arg.substring(equals+1, len); 272 } else { 273 continue; 274 } 275 deployParams.addBundleArgument(key, value); 276 } else if (arg.equalsIgnoreCase("-title")) { 277 deployParams.setTitle(nextArg(args, i++)); 278 } else if (arg.equalsIgnoreCase("-vendor")) { 279 deployParams.setVendor(nextArg(args, i++)); 280 } else if (arg.equalsIgnoreCase("-native")) { 281 bundleType = BundleType.NATIVE; 282 String format = null; //null means ANY 283 if (i+1 < args.length && !args[i+1].startsWith("-")) { 284 String v = args[++i]; 285 com.sun.javafx.tools.packager.bundlers.Bundler.Bundle bundle = 286 com.sun.javafx.tools.packager.bundlers.Bundler.stringToBundle(v); 287 bundleType = bundle.type; 288 format = bundle.format; 289 } 290 deployParams.setBundleType(bundleType); 291 deployParams.setTargetFormat(format); 292 } else if (arg.equalsIgnoreCase("-description")) { 293 deployParams.setDescription(nextArg(args, i++)); 294 } else if(arg.equalsIgnoreCase("-appclass")) { 295 deployParams.setApplicationClass(nextArg(args, i++)); 296 } else if(arg.equalsIgnoreCase("-daemon")) { 297 deployParams.setServiceHint(true); 298 } else if(arg.equalsIgnoreCase("-installdirChooser")) { 299 deployParams.setInstalldirChooser(true); 300 } else if (arg.equalsIgnoreCase("-preloader")) { 301 deployParams.setPreloader(nextArg(args, i++)); 302 } else if (arg.equalsIgnoreCase("-paramFile")) { 303 deployParams.setParams(parseParams(nextArg(args, i++))); 304 } else if (arg.equalsIgnoreCase("-htmlParamFile")) { 305 deployParams.setHtmlParams(parseHtmlParams(nextArg(args, i++))); 306 } else if (arg.equalsIgnoreCase("-width")) { 307 deployParams.setWidth(Integer.parseInt(nextArg(args, i++))); 308 } else if (arg.equalsIgnoreCase("-height")) { 309 deployParams.setHeight(Integer.parseInt(nextArg(args, i++))); 310 } else if (arg.equalsIgnoreCase("-name")) { 311 deployParams.setAppName(nextArg(args, i++)); 312 } else if (arg.equalsIgnoreCase("-embedJNLP")) { 313 deployParams.setEmbedJNLP(true); 314 } else if (arg.equalsIgnoreCase("-embedCertificates")) { 315 System.err.println("-embedCertificates is deprecated"); 316 } else if (arg.equalsIgnoreCase("-allpermissions")) { 317 deployParams.setAllPermissions(true); 318 } else if (arg.equalsIgnoreCase("-updatemode")) { 319 deployParams.setUpdateMode(nextArg(args, i++)); 320 } else if (arg.equalsIgnoreCase("-isExtension")) { 321 deployParams.setExtension(true); 322 } else if (arg.equalsIgnoreCase("-callbacks")) { 323 deployParams.setJSCallbacks(parseCallbacks(nextArg(args, i++))); 324 } else if (arg.equalsIgnoreCase("-templateInFilename")) { 325 templateInFile = new File(nextArg(args, i++)); 326 } else if (arg.equalsIgnoreCase("-templateOutFilename")) { 327 templateOutFile = new File(nextArg(args, i++)); 328 } else if (arg.equalsIgnoreCase("-appId") || arg.equalsIgnoreCase("-templateId")) { 329 String appIdArg = nextArg(args, i++); 330 deployParams.setAppId(appIdArg); 331 deployParams.setId(appIdArg); 332 } else if (arg.equalsIgnoreCase("-verbose") || arg.equalsIgnoreCase("-v")) { 333 deployParams.setVerbose(true); 334 verbose = true; 335 } else if (arg.equalsIgnoreCase("-includedt")) { 336 deployParams.setIncludeDT(true); 337 } else if (arg.equalsIgnoreCase("-outdir")) { 338 deployParams.setOutdir(new File(nextArg(args, i++))); 339 } else if (arg.equalsIgnoreCase("-outfile")) { 340 deployParams.setOutfile(nextArg(args, i++)); 341 } else if (arg.equalsIgnoreCase("-" + StandardBundlerParam.SOURCE_DIR.getID())) { 342 srcdir = nextArg(args, i++); 343 deployParams.srcdir = srcdir; 344 } else if (arg.equalsIgnoreCase("-srcfiles")) { 345 srcfiles = nextArg(args, i++); 346 } else if (arg.equalsIgnoreCase("-argument")) { 347 addArgument(deployParams, nextArg(args, i++)); 348 } else if (arg.equalsIgnoreCase("-nosign")) { 349 deployParams.setSignBundle(false); 350 } else if (arg.equals(ADD_MODULES)) { 351 deployParams.addAddModule(nextArg(args, i++)); 352 } else if (arg.startsWith(ADD_MODULES + "=")) { 353 deployParams.addAddModule(arg.replace(ADD_MODULES + "=", "")); 354 } else if (arg.equals(LIMIT_MODULES)) { 355 deployParams.addLimitModule(nextArg(args, i++)); 356 } else if (arg.startsWith(LIMIT_MODULES + "=")) { 357 deployParams.addLimitModule(arg.replace(LIMIT_MODULES + "=", "")); 358 } else if (arg.equals(STRIP_NATIVE_COMMANDS)) { 359 deployParams.setStripNativeCommands(Boolean.valueOf(nextArg(args, i++))); 360 } else if (arg.equals(STRIP_NATIVE_COMMANDS + "=")) { 361 deployParams.setStripNativeCommands(Boolean.valueOf(arg.replace(STRIP_NATIVE_COMMANDS + "=", ""))); 362 } else if (arg.equals(DETECT_MODULES)) { 363 deployParams.setDetectModules(true); 364 } else if (arg.equals(MODULE_PATH) || arg.equals(P)) { 365 deployParams.modulePath = nextArg(args, i++); 366 } else if (arg.equals(MODULE_PATH + "=")) { 367 deployParams.modulePath = arg.replace(MODULE_PATH + "=", ""); 368 } else if (arg.equals(MODULE) || arg.equals(M)) { 369 deployParams.setModule(nextArg(args, i++)); 370 } else if (arg.equals(MODULE + "=")) { 371 deployParams.setModule(arg.replace(MODULE + "=", "")); 372 } else if (arg.startsWith(J_XDEBUG)) { 373 deployParams.setDebug(arg.replace(J_XDEBUG, "")); 374 } else { 375 throw new PackagerException("ERR_UnknownArgument", arg); 376 } 377 } 378 if (templateInFile != null) { 379 deployParams.addTemplate(templateInFile, templateOutFile); 380 } 381 382 if (deployParams.validateForJNLP()) { 383 genJNLP = true; 384 } 385 386 if (deployParams.validateForBundle()) { 387 genPackages = true; 388 } 389 390 addResources(deployParams, srcdir, srcfiles); 391 } else if (args[0].equalsIgnoreCase("-createbss")) { 392 for (int i = 1; i < args.length; i++) { 393 String arg = args[i]; 394 if (arg.equalsIgnoreCase("-verbose") || arg.equalsIgnoreCase("-v")) { 395 createBssParams.setVerbose(true); 396 verbose = true; 397 } else if (arg.equalsIgnoreCase("-outdir")) { 398 createBssParams.setOutdir(new File(nextArg(args, i++))); 399 } else if (arg.equalsIgnoreCase("-srcdir")) { 400 srcdir = nextArg(args, i++); 401 } else if (arg.equalsIgnoreCase("-srcfiles")) { 402 srcfiles = nextArg(args, i++); 403 } else { 404 throw new PackagerException("ERR_UnknownArgument", arg); 405 } 406 } 407 408 addResources(createBssParams, srcdir, srcfiles); 409 css2Bin = true; 410 } else if (args[0].equalsIgnoreCase("-signJar")) { 411 for (int i = 1; i < args.length; i++) { 412 String arg = args[i]; 413 if (arg.equalsIgnoreCase("-keyStore")) { 414 signJarParams.setKeyStore(new File(nextArg(args, i++))); 415 } else if(arg.equalsIgnoreCase("-alias")) { 416 signJarParams.setAlias(nextArg(args, i++)); 417 } else if(arg.equalsIgnoreCase("-storePass")) { 418 signJarParams.setStorePass(nextArg(args, i++)); 419 } else if(arg.equalsIgnoreCase("-keyPass")) { 420 signJarParams.setKeyPass(nextArg(args, i++)); 421 } else if(arg.equalsIgnoreCase("-storeType")) { 422 signJarParams.setStoreType(nextArg(args, i++)); 423 } else if(arg.equalsIgnoreCase("-verbose") || arg.equalsIgnoreCase("-v")) { 424 signJarParams.setVerbose(true); 425 verbose = true; 426 } else if (arg.equalsIgnoreCase("-outdir")) { 427 signJarParams.setOutdir(new File(nextArg(args, i++))); 428 } else if (arg.equalsIgnoreCase("-srcdir")) { 429 srcdir = nextArg(args, i++); 430 } else if (arg.equalsIgnoreCase("-srcfiles")) { 431 srcfiles = nextArg(args, i++); 432 } else { 433 throw new PackagerException("ERR_UnknownArgument", arg); 434 } 435 } 436 437 addResources(signJarParams, srcdir, srcfiles); 438 signJar = true; 439 } else if (args[0].equalsIgnoreCase("-makeall")) { 440 System.err.println("-makeall is deprecated"); 441 for (int i = 1; i < args.length; i++) { 442 String arg = args[i]; 443 if (arg.equalsIgnoreCase("-appclass")) { 444 makeAllParams.setAppClass(nextArg(args, i++)); 445 } else if (arg.equalsIgnoreCase("-preloader")) { 446 makeAllParams.setPreloader(nextArg(args, i++)); 447 } else if (arg.equalsIgnoreCase("-classpath")) { 448 makeAllParams.setClasspath(nextArg(args, i++)); 449 } else if (arg.equalsIgnoreCase("-name")) { 450 makeAllParams.setAppName(nextArg(args, i++)); 451 } else if(arg.equalsIgnoreCase("-width")) { 452 makeAllParams.setWidth(Integer.parseInt(nextArg(args, i++))); 453 } else if(arg.equalsIgnoreCase("-height")) { 454 makeAllParams.setHeight(Integer.parseInt(nextArg(args, i++))); 455 } else if(arg.equalsIgnoreCase("-v")) { 456 makeAllParams.setVerbose(true); 457 } else { 458 throw new PackagerException("ERR_UnknownArgument", arg); 459 } 460 } 461 makeAll = true; 462 } else if (args[0].equalsIgnoreCase("-help")) { 463 showBundlerHelp(args[1], args.length > 2 && "-verbose".equals(args[2])); 464 } else { 465 System.err.println(MessageFormat.format( 466 bundle.getString("ERR_UnknownCommand"), 467 args[0])); 468 System.exit(-1); 469 } 470 471 //set default logger 472 if (verbose) { 473 com.oracle.tools.packager.Log.setLogger(new com.oracle.tools.packager.Log.Logger(true)); 474 } else { 475 com.oracle.tools.packager.Log.setLogger(new com.oracle.tools.packager.Log.Logger(false)); 476 } 477 478 if (css2Bin) { 479 createBssParams.validate(); 480 packager.generateBSS(createBssParams); 481 } 482 if (packageAsJar) { 483 createJarParams.validate(); 484 packager.packageAsJar(createJarParams); 485 } 486 if (genJNLP) { 487 deployParams.setBundleType(BundleType.JNLP); 488 deployParams.validate(); 489 packager.generateDeploymentPackages(deployParams); 490 } 491 if (genPackages) { 492 deployParams.setBundleType(bundleType); 493 deployParams.validate(); 494 packager.generateDeploymentPackages(deployParams); 495 } 496 if (signJar) { 497 signJarParams.validate(); 498 if (signJarParams.storePass == null) { 499 char[] passwd = System.console().readPassword(bundle.getString("MSG_EnterKeystorePassword")); 500 if (passwd == null) { 501 signJarParams.storePass = ""; 502 } else { 503 signJarParams.storePass = new String(passwd); 504 } 505 } 506 if (signJarParams.keyPass == null) { 507 char[] passwd = System.console().readPassword(bundle.getString("MSG_EnterKeyPassword"), signJarParams.alias); 508 if (passwd == null) { 509 signJarParams.keyPass = ""; 510 } else { 511 signJarParams.keyPass = new String(passwd); 512 } 513 } 514 packager.signJar(signJarParams); 515 } 516 if (makeAll) { 517 makeAllParams.validate(); 518 packager.makeAll(makeAllParams); 519 } 520 521 } catch (Exception e) { 522 if (verbose) { 523 throw e; 524 } else { 525 System.err.println(e.getMessage()); 526 if (e.getCause() != null && e.getCause() != e) { 527 System.err.println(e.getCause().getMessage()); 528 } 529 System.exit(-1); 530 } 531 } 532 } 533 } 534 535 private static final String MODULE = "--" + StandardBundlerParam.MODULE.getID(); 536 private static final String M = "-m"; 537 private static final String MODULE_PATH = "--" + StandardBundlerParam.MODULE_PATH.getID(); 538 private static final String P = "-p"; 539 private static final String ADD_MODULES = "--" + StandardBundlerParam.ADD_MODULES.getID(); 540 private static final String LIMIT_MODULES = "--" + StandardBundlerParam.LIMIT_MODULES.getID(); 541 private static final String STRIP_NATIVE_COMMANDS = "--" + StandardBundlerParam.STRIP_NATIVE_COMMANDS.getID(); 542 543 private static final String J_XDEBUG = JLinkBundlerHelper.DEBUG.getID() + ":"; 544 private static final String DETECT_MODULES = "--" + JLinkBundlerHelper.DETECT_MODULES.getID(); 545 546 public static void showBundlerHelp(String bundlerName, boolean verbose) { 547 //TODO I18N 548 if ("bundlers".equals(bundlerName)) { 549 // enumerate bundlers 550 System.out.println("Known Bundlers -- \n"); 551 for (Bundler bundler : Bundlers.createBundlersInstance().getBundlers()) { 552 try { 553 bundler.validate(new HashMap<>()); 554 } catch (UnsupportedPlatformException upe) { 555 // don't list bundlers this platform cannot run 556 continue; 557 } catch (ConfigException ignore) { 558 // but requiring more than an empty map is perfectly fine. 559 //} catch (RuntimeException re) { 560 // re.printStackTrace(); 561 } 562 563 if (verbose) { 564 System.out.printf( 565 "%s - %s - %s\n\t%s\n", 566 bundler.getID(), 567 bundler.getName(), 568 bundler.getBundleType(), 569 bundler.getDescription() 570 ); 571 } else { 572 System.out.printf( 573 "%s - %s - %s\n", 574 bundler.getID(), 575 bundler.getName(), 576 bundler.getBundleType() 577 ); 578 } 579 } 580 } else { 581 // enumerate parameters for a bundler 582 for (Bundler bundler : Bundlers.createBundlersInstance().getBundlers()) { 583 if (bundler.getID().equals(bundlerName)) { 584 System.out.printf("Bundler Parameters for %s (%s) --\n", bundler.getName(), bundler.getID()); 585 for (BundlerParamInfo bpi : bundler.getBundleParameters()) { 586 if (bpi.getStringConverter() == null) continue; 587 if (verbose) { 588 System.out.printf( 589 "%s - %s - %s\n\t%s\n", 590 bpi.getID(), 591 bpi.getName(), 592 bpi.getValueType().getSimpleName(), 593 bpi.getDescription() 594 ); 595 } else { 596 System.out.printf( 597 "%s - %s - %s\n", 598 bpi.getID(), 599 bpi.getName(), 600 bpi.getValueType().getSimpleName() 601 ); 602 } 603 } 604 return; 605 } 606 } 607 System.out.printf("Sorry, no bundler matching the id %s was found.\n", bundlerName); 608 } 609 } 610 }