001// SECTION-START[License Header] 002// <editor-fold defaultstate="collapsed" desc=" Generated License "> 003/* 004 * Java Object Management and Configuration 005 * Copyright (C) Christian Schulte, 2005-206 006 * All rights reserved. 007 * 008 * Redistribution and use in source and binary forms, with or without 009 * modification, are permitted provided that the following conditions 010 * are met: 011 * 012 * o Redistributions of source code must retain the above copyright 013 * notice, this list of conditions and the following disclaimer. 014 * 015 * o Redistributions in binary form must reproduce the above copyright 016 * notice, this list of conditions and the following disclaimer in 017 * the documentation and/or other materials provided with the 018 * distribution. 019 * 020 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 021 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 022 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 023 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, 024 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 025 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 026 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 027 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 029 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 030 * 031 * $JOMC: Jomc.java 4795 2013-04-21 09:09:02Z schulte $ 032 * 033 */ 034// </editor-fold> 035// SECTION-END 036package org.jomc.cli; 037 038import java.io.BufferedReader; 039import java.io.IOException; 040import java.io.PrintWriter; 041import java.io.StringReader; 042import java.io.StringWriter; 043import java.util.Date; 044import java.util.logging.Level; 045import org.apache.commons.cli.CommandLine; 046import org.apache.commons.cli.HelpFormatter; 047import org.apache.commons.cli.Options; 048import org.apache.commons.cli.ParseException; 049import org.apache.commons.lang.StringUtils; 050import org.jomc.model.modlet.DefaultModelProcessor; 051import org.jomc.model.modlet.DefaultModelProvider; 052import org.jomc.modlet.DefaultModletProvider; 053 054// SECTION-START[Documentation] 055// <editor-fold defaultstate="collapsed" desc=" Generated Documentation "> 056/** 057 * JOMC command line interface. 058 * 059 * <dl> 060 * <dt><b>Identifier:</b></dt><dd>JOMC ⁑ CLI ⁑ Application</dd> 061 * <dt><b>Name:</b></dt><dd>JOMC ⁑ CLI ⁑ Application</dd> 062 * <dt><b>Abstract:</b></dt><dd>No</dd> 063 * <dt><b>Final:</b></dt><dd>No</dd> 064 * <dt><b>Stateless:</b></dt><dd>No</dd> 065 * </dl> 066 * 067 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 1.0 068 * @version 1.5 069 */ 070// </editor-fold> 071// SECTION-END 072// SECTION-START[Annotations] 073// <editor-fold defaultstate="collapsed" desc=" Generated Annotations "> 074@javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 075// </editor-fold> 076// SECTION-END 077public final class Jomc 078{ 079 // SECTION-START[Jomc] 080 081 /** 082 * Log level events are logged at by default. 083 * @see #getDefaultLogLevel() 084 */ 085 private static final Level DEFAULT_LOG_LEVEL = Level.WARNING; 086 087 /** Default log level. */ 088 private static volatile Level defaultLogLevel; 089 090 /** Print writer of the instance. */ 091 private PrintWriter printWriter; 092 093 /** Log level of the instance. */ 094 private Level logLevel; 095 096 /** Greatest severity logged by the command. */ 097 private Level severity = Level.ALL; 098 099 /** 100 * Gets the print writer of the instance. 101 * 102 * @return The print writer of the instance. 103 * 104 * @see #setPrintWriter(java.io.PrintWriter) 105 */ 106 public PrintWriter getPrintWriter() 107 { 108 if ( this.printWriter == null ) 109 { 110 // JDK: As of JDK 6, "this.printWriter = System.console().writer()". 111 this.printWriter = new PrintWriter( System.out, true ); 112 } 113 114 return this.printWriter; 115 } 116 117 /** 118 * Sets the print writer of the instance. 119 * 120 * @param value The new print writer of the instance or {@code null}. 121 * 122 * @see #getPrintWriter() 123 */ 124 public void setPrintWriter( final PrintWriter value ) 125 { 126 this.printWriter = value; 127 } 128 129 /** 130 * Gets the default log level events are logged at. 131 * <p>The default log level is controlled by system property {@code org.jomc.cli.Jomc.defaultLogLevel} holding the 132 * log level to log events at by default. If that property is not set, the {@code WARNING} default is returned.</p> 133 * 134 * @return The log level events are logged at by default. 135 * 136 * @see #getLogLevel() 137 * @see Level#parse(java.lang.String) 138 */ 139 public static Level getDefaultLogLevel() 140 { 141 if ( defaultLogLevel == null ) 142 { 143 defaultLogLevel = Level.parse( System.getProperty( 144 "org.jomc.cli.Jomc.defaultLogLevel", DEFAULT_LOG_LEVEL.getName() ) ); 145 146 } 147 148 return defaultLogLevel; 149 } 150 151 /** 152 * Sets the default log level events are logged at. 153 * 154 * @param value The new default level events are logged at or {@code null}. 155 * 156 * @see #getDefaultLogLevel() 157 */ 158 public static void setDefaultLogLevel( final Level value ) 159 { 160 defaultLogLevel = value; 161 } 162 163 /** 164 * Gets the log level of the instance. 165 * 166 * @return The log level of the instance. 167 * 168 * @see #getDefaultLogLevel() 169 * @see #setLogLevel(java.util.logging.Level) 170 * @see #isLoggable(java.util.logging.Level) 171 */ 172 public Level getLogLevel() 173 { 174 if ( this.logLevel == null ) 175 { 176 this.logLevel = getDefaultLogLevel(); 177 178 if ( this.isLoggable( Level.CONFIG ) ) 179 { 180 this.log( Level.CONFIG, 181 this.getDefaultLogLevelInfo( this.getLocale(), this.logLevel.getLocalizedName() ), null ); 182 183 } 184 } 185 186 return this.logLevel; 187 } 188 189 /** 190 * Sets the log level of the instance. 191 * 192 * @param value The new log level of the instance or {@code null}. 193 * 194 * @see #getLogLevel() 195 * @see #isLoggable(java.util.logging.Level) 196 */ 197 public void setLogLevel( final Level value ) 198 { 199 this.logLevel = value; 200 } 201 202 /** 203 * Checks if a message at a given level is provided to the listeners of the instance. 204 * 205 * @param level The level to test. 206 * 207 * @return {@code true}, if messages at {@code level} are provided to the listeners of the instance; 208 * {@code false}, if messages at {@code level} are not provided to the listeners of the instance. 209 * 210 * @throws NullPointerException if {@code level} is {@code null}. 211 * 212 * @see #getLogLevel() 213 * @see #setLogLevel(java.util.logging.Level) 214 */ 215 public boolean isLoggable( final Level level ) 216 { 217 if ( level == null ) 218 { 219 throw new NullPointerException( "level" ); 220 } 221 222 return level.intValue() >= this.getLogLevel().intValue(); 223 } 224 225 /** 226 * Processes the given arguments and executes the corresponding command. 227 * 228 * @param args Arguments to process. 229 * 230 * @return Status code. 231 * 232 * @see Command#STATUS_SUCCESS 233 * @see Command#STATUS_FAILURE 234 */ 235 public int jomc( final String[] args ) 236 { 237 Command cmd = null; 238 this.severity = Level.ALL; 239 240 try 241 { 242 DefaultModelProvider.setDefaultModuleLocation( "META-INF/jomc-cli.xml" ); 243 DefaultModelProcessor.setDefaultTransformerLocation( "META-INF/jomc-cli.xsl" ); 244 DefaultModletProvider.setDefaultModletLocation( "META-INF/jomc-modlet.xml" ); 245 246 final StringBuilder commandInfo = new StringBuilder(); 247 248 for ( Command c : this.getCommands() ) 249 { 250 if ( cmd == null && args != null && args.length > 0 251 && ( args[0].equals( c.getName() ) || args[0].equals( c.getAbbreviatedName() ) ) ) 252 { 253 cmd = c; 254 } 255 256 commandInfo.append( StringUtils.rightPad( c.getName(), 25 ) ).append( " : " ). 257 append( c.getShortDescription( this.getLocale() ) ).append( " (" ).append( c.getAbbreviatedName() ). 258 append( ")" ).append( System.getProperty( "line.separator", "\n" ) ); 259 260 } 261 262 if ( cmd == null ) 263 { 264 this.getPrintWriter().println( this.getUsage( this.getLocale(), this.getHelpCommandName() ) ); 265 this.getPrintWriter().println(); 266 this.getPrintWriter().println( commandInfo.toString() ); 267 return Command.STATUS_FAILURE; 268 } 269 270 final String[] commandArguments = new String[ args.length - 1 ]; 271 System.arraycopy( args, 1, commandArguments, 0, commandArguments.length ); 272 273 final Options options = cmd.getOptions(); 274 options.addOption( this.getDebugOption() ); 275 options.addOption( this.getVerboseOption() ); 276 options.addOption( this.getFailOnWarningsOption() ); 277 278 if ( commandArguments.length > 0 && this.getHelpCommandName().equals( commandArguments[0] ) ) 279 { 280 final StringWriter usage = new StringWriter(); 281 final StringWriter opts = new StringWriter(); 282 final HelpFormatter formatter = new HelpFormatter(); 283 284 PrintWriter pw = new PrintWriter( usage ); 285 formatter.printUsage( pw, this.getWidth(), cmd.getName(), options ); 286 pw.close(); 287 assert !pw.checkError() : "Unexpected error printing usage."; 288 289 pw = new PrintWriter( opts ); 290 formatter.printOptions( pw, this.getWidth(), options, this.getLeftPad(), this.getDescPad() ); 291 pw.close(); 292 assert !pw.checkError() : "Unexpected error printing options."; 293 294 this.getPrintWriter().println( cmd.getShortDescription( this.getLocale() ) ); 295 this.getPrintWriter().println(); 296 this.getPrintWriter().println( usage.toString() ); 297 this.getPrintWriter().println( opts.toString() ); 298 this.getPrintWriter().println(); 299 this.getPrintWriter().println( cmd.getLongDescription( this.getLocale() ) ); 300 this.getPrintWriter().println(); 301 return Command.STATUS_SUCCESS; 302 } 303 304 cmd.getListeners().add( new Command.Listener() 305 { 306 307 public void onLog( final Level level, final String message, final Throwable t ) 308 { 309 log( level, message, t ); 310 } 311 312 } ); 313 314 DefaultModelProvider.setDefaultModuleLocation( null ); 315 DefaultModelProcessor.setDefaultTransformerLocation( null ); 316 DefaultModletProvider.setDefaultModletLocation( null ); 317 318 final CommandLine commandLine = this.getCommandLineParser().parse( options, commandArguments ); 319 final boolean debug = commandLine.hasOption( this.getDebugOption().getOpt() ); 320 final boolean verbose = commandLine.hasOption( this.getVerboseOption().getOpt() ); 321 Level debugLevel = Level.ALL; 322 323 if ( debug ) 324 { 325 final String debugOption = commandLine.getOptionValue( this.getDebugOption().getOpt() ); 326 if ( debugOption != null ) 327 { 328 debugLevel = Level.parse( debugOption ); 329 } 330 } 331 332 if ( debug || verbose ) 333 { 334 this.setLogLevel( debug ? debugLevel : Level.INFO ); 335 } 336 337 cmd.setLogLevel( this.getLogLevel() ); 338 339 if ( this.isLoggable( Level.FINER ) ) 340 { 341 for ( int i = 0; i < args.length; i++ ) 342 { 343 this.log( Level.FINER, new StringBuilder().append( "[" ).append( i ).append( "] -> '" ). 344 append( args[i] ).append( "'" ).append( System.getProperty( "line.separator", "\n" ) ). 345 toString(), null ); 346 347 } 348 } 349 350 final boolean failOnWarnings = commandLine.hasOption( this.getFailOnWarningsOption().getOpt() ); 351 352 final int status = cmd.execute( commandLine ); 353 if ( status == Command.STATUS_SUCCESS && failOnWarnings 354 && this.severity.intValue() >= Level.WARNING.intValue() ) 355 { 356 return Command.STATUS_FAILURE; 357 } 358 359 return status; 360 } 361 catch ( final ParseException e ) 362 { 363 this.log( Level.SEVERE, this.getIllegalArgumentsInfo( 364 this.getLocale(), cmd.getName(), this.getHelpCommandName() ), e ); 365 366 return Command.STATUS_FAILURE; 367 } 368 catch ( final Throwable t ) 369 { 370 this.log( Level.SEVERE, null, t ); 371 return Command.STATUS_FAILURE; 372 } 373 finally 374 { 375 DefaultModelProvider.setDefaultModuleLocation( null ); 376 DefaultModelProcessor.setDefaultTransformerLocation( null ); 377 DefaultModletProvider.setDefaultModletLocation( null ); 378 this.getPrintWriter().flush(); 379 this.severity = Level.ALL; 380 } 381 } 382 383 /** 384 * Main entry point. 385 * 386 * @param args The application arguments. 387 */ 388 public static void main( final String[] args ) 389 { 390 System.exit( run( args ) ); 391 } 392 393 /** 394 * Main entry point without exiting the VM. 395 * 396 * @param args The application arguments. 397 * 398 * @return Status code. 399 * 400 * @see Command#STATUS_SUCCESS 401 * @see Command#STATUS_FAILURE 402 */ 403 public static int run( final String[] args ) 404 { 405 return new Jomc().jomc( args ); 406 } 407 408 /** 409 * Logs to the print writer of the instance. 410 * 411 * @param level The level of the event. 412 * @param message The message of the event or {@code null}. 413 * @param throwable The throwable of the event {@code null}. 414 * 415 * @throws NullPointerException if {@code level} is {@code null}. 416 */ 417 private void log( final Level level, final String message, final Throwable throwable ) 418 { 419 if ( level == null ) 420 { 421 throw new NullPointerException( "level" ); 422 } 423 424 if ( this.severity.intValue() < level.intValue() ) 425 { 426 this.severity = level; 427 } 428 429 if ( this.isLoggable( level ) ) 430 { 431 if ( message != null ) 432 { 433 this.getPrintWriter().print( this.formatLogLines( level, "" ) ); 434 this.getPrintWriter().print( this.formatLogLines( level, message ) ); 435 } 436 437 if ( throwable != null ) 438 { 439 this.getPrintWriter().print( this.formatLogLines( level, "" ) ); 440 final String m = getMessage( throwable ); 441 442 if ( m != null && m.length() > 0 ) 443 { 444 this.getPrintWriter().print( this.formatLogLines( level, m ) ); 445 } 446 else 447 { 448 this.getPrintWriter().print( this.formatLogLines( 449 level, this.getDefaultExceptionMessage( this.getLocale() ) ) ); 450 451 } 452 453 if ( this.getLogLevel().intValue() < Level.INFO.intValue() ) 454 { 455 final StringWriter stackTrace = new StringWriter(); 456 final PrintWriter pw = new PrintWriter( stackTrace ); 457 throwable.printStackTrace( pw ); 458 pw.flush(); 459 this.getPrintWriter().print( this.formatLogLines( level, stackTrace.toString() ) ); 460 } 461 } 462 } 463 464 this.getPrintWriter().flush(); 465 } 466 467 private String formatLogLines( final Level level, final String text ) 468 { 469 BufferedReader reader = null; 470 boolean suppressExceptionOnClose = true; 471 472 try 473 { 474 final StringBuilder lines = new StringBuilder( text.length() ); 475 reader = new BufferedReader( new StringReader( text ) ); 476 477 String line; 478 while ( ( line = reader.readLine() ) != null ) 479 { 480 final boolean debug = this.getLogLevel().intValue() < Level.INFO.intValue(); 481 lines.append( "[" ).append( level.getLocalizedName() ); 482 483 if ( debug ) 484 { 485 lines.append( "|" ).append( Thread.currentThread().getName() ).append( "|" ). 486 append( this.getTimeInfo( this.getLocale(), new Date( System.currentTimeMillis() ) ) ); 487 488 } 489 490 lines.append( "] " ).append( line ).append( System.getProperty( "line.separator", "\n" ) ); 491 } 492 493 suppressExceptionOnClose = false; 494 return lines.toString(); 495 } 496 catch ( final IOException e ) 497 { 498 throw new AssertionError( e ); 499 } 500 finally 501 { 502 try 503 { 504 if ( reader != null ) 505 { 506 reader.close(); 507 } 508 } 509 catch ( final IOException e ) 510 { 511 if ( suppressExceptionOnClose ) 512 { 513 this.log( Level.SEVERE, getMessage( e ), e ); 514 } 515 else 516 { 517 throw new AssertionError( e ); 518 } 519 } 520 } 521 } 522 523 private static String getMessage( final Throwable t ) 524 { 525 return t != null 526 ? t.getMessage() != null && t.getMessage().trim().length() > 0 527 ? t.getMessage() 528 : getMessage( t.getCause() ) 529 : null; 530 531 } 532 533 // SECTION-END 534 // SECTION-START[Constructors] 535 // <editor-fold defaultstate="collapsed" desc=" Generated Constructors "> 536 /** Creates a new {@code Jomc} instance. */ 537 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 538 public Jomc() 539 { 540 // SECTION-START[Default Constructor] 541 super(); 542 // SECTION-END 543 } 544 // </editor-fold> 545 // SECTION-END 546 // SECTION-START[Dependencies] 547 // <editor-fold defaultstate="collapsed" desc=" Generated Dependencies "> 548 /** 549 * Gets the {@code <Command Line Parser>} dependency. 550 * <p> 551 * This method returns the {@code <Commons CLI - GNU Command Line Parser>} object of the {@code <org.apache.commons.cli.CommandLineParser>} specification at any specification level. 552 * That specification does not apply to any scope. A new object is returned whenever requested. 553 * </p> 554 * <dl> 555 * <dt><b>Final:</b></dt><dd>No</dd> 556 * </dl> 557 * @return The {@code <Command Line Parser>} dependency. 558 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails. 559 */ 560 @SuppressWarnings("unused") 561 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 562 private org.apache.commons.cli.CommandLineParser getCommandLineParser() 563 { 564 final org.apache.commons.cli.CommandLineParser _d = (org.apache.commons.cli.CommandLineParser) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "Command Line Parser" ); 565 assert _d != null : "'Command Line Parser' dependency not found."; 566 return _d; 567 } 568 /** 569 * Gets the {@code <Commands>} dependency. 570 * <p> 571 * This method returns any available object of the {@code <JOMC ⁑ CLI ⁑ Command>} specification at specification level 1.0. 572 * That specification does not apply to any scope. A new object is returned whenever requested. 573 * </p> 574 * <dl> 575 * <dt><b>Final:</b></dt><dd>No</dd> 576 * </dl> 577 * @return The {@code <Commands>} dependency. 578 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails. 579 */ 580 @SuppressWarnings("unused") 581 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 582 private org.jomc.cli.Command[] getCommands() 583 { 584 final org.jomc.cli.Command[] _d = (org.jomc.cli.Command[]) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "Commands" ); 585 assert _d != null : "'Commands' dependency not found."; 586 return _d; 587 } 588 /** 589 * Gets the {@code <Debug Option>} dependency. 590 * <p> 591 * This method returns the {@code <JOMC ⁑ CLI ⁑ Debug Option>} object of the {@code <JOMC ⁑ CLI ⁑ Application Option>} specification at specification level 1.2. 592 * That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance. 593 * </p> 594 * <dl> 595 * <dt><b>Final:</b></dt><dd>No</dd> 596 * </dl> 597 * @return The {@code <Debug Option>} dependency. 598 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails. 599 */ 600 @SuppressWarnings("unused") 601 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 602 private org.apache.commons.cli.Option getDebugOption() 603 { 604 final org.apache.commons.cli.Option _d = (org.apache.commons.cli.Option) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "Debug Option" ); 605 assert _d != null : "'Debug Option' dependency not found."; 606 return _d; 607 } 608 /** 609 * Gets the {@code <Fail On Warnings Option>} dependency. 610 * <p> 611 * This method returns the {@code <JOMC ⁑ CLI ⁑ Fail-On-Warnings Option>} object of the {@code <JOMC ⁑ CLI ⁑ Application Option>} specification at specification level 1.2. 612 * That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance. 613 * </p> 614 * <dl> 615 * <dt><b>Final:</b></dt><dd>No</dd> 616 * </dl> 617 * @return The {@code <Fail On Warnings Option>} dependency. 618 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails. 619 */ 620 @SuppressWarnings("unused") 621 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 622 private org.apache.commons.cli.Option getFailOnWarningsOption() 623 { 624 final org.apache.commons.cli.Option _d = (org.apache.commons.cli.Option) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "Fail On Warnings Option" ); 625 assert _d != null : "'Fail On Warnings Option' dependency not found."; 626 return _d; 627 } 628 /** 629 * Gets the {@code <Locale>} dependency. 630 * <p> 631 * This method returns the {@code <default>} object of the {@code <java.util.Locale>} specification at specification level 1.1. 632 * That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance. 633 * </p> 634 * <dl> 635 * <dt><b>Final:</b></dt><dd>No</dd> 636 * </dl> 637 * @return The {@code <Locale>} dependency. 638 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails. 639 */ 640 @SuppressWarnings("unused") 641 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 642 private java.util.Locale getLocale() 643 { 644 final java.util.Locale _d = (java.util.Locale) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "Locale" ); 645 assert _d != null : "'Locale' dependency not found."; 646 return _d; 647 } 648 /** 649 * Gets the {@code <Verbose Option>} dependency. 650 * <p> 651 * This method returns the {@code <JOMC ⁑ CLI ⁑ Verbose Option>} object of the {@code <JOMC ⁑ CLI ⁑ Application Option>} specification at specification level 1.2. 652 * That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance. 653 * </p> 654 * <dl> 655 * <dt><b>Final:</b></dt><dd>No</dd> 656 * </dl> 657 * @return The {@code <Verbose Option>} dependency. 658 * @throws org.jomc.ObjectManagementException if getting the dependency instance fails. 659 */ 660 @SuppressWarnings("unused") 661 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 662 private org.apache.commons.cli.Option getVerboseOption() 663 { 664 final org.apache.commons.cli.Option _d = (org.apache.commons.cli.Option) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "Verbose Option" ); 665 assert _d != null : "'Verbose Option' dependency not found."; 666 return _d; 667 } 668 // </editor-fold> 669 // SECTION-END 670 // SECTION-START[Properties] 671 // <editor-fold defaultstate="collapsed" desc=" Generated Properties "> 672 /** 673 * Gets the value of the {@code <Desc Pad>} property. 674 * <p><dl> 675 * <dt><b>Final:</b></dt><dd>No</dd> 676 * </dl></p> 677 * @return The number of characters of padding to be prefixed to each description line. 678 * @throws org.jomc.ObjectManagementException if getting the property instance fails. 679 */ 680 @SuppressWarnings("unused") 681 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 682 private int getDescPad() 683 { 684 final java.lang.Integer _p = (java.lang.Integer) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Desc Pad" ); 685 assert _p != null : "'Desc Pad' property not found."; 686 return _p.intValue(); 687 } 688 /** 689 * Gets the value of the {@code <Help Command Name>} property. 690 * <p><dl> 691 * <dt><b>Final:</b></dt><dd>No</dd> 692 * </dl></p> 693 * @return The name of the command used to request help. 694 * @throws org.jomc.ObjectManagementException if getting the property instance fails. 695 */ 696 @SuppressWarnings("unused") 697 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 698 private java.lang.String getHelpCommandName() 699 { 700 final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Help Command Name" ); 701 assert _p != null : "'Help Command Name' property not found."; 702 return _p; 703 } 704 /** 705 * Gets the value of the {@code <Left Pad>} property. 706 * <p><dl> 707 * <dt><b>Final:</b></dt><dd>No</dd> 708 * </dl></p> 709 * @return The number of characters of padding to be prefixed to each line. 710 * @throws org.jomc.ObjectManagementException if getting the property instance fails. 711 */ 712 @SuppressWarnings("unused") 713 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 714 private int getLeftPad() 715 { 716 final java.lang.Integer _p = (java.lang.Integer) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "Left Pad" ); 717 assert _p != null : "'Left Pad' property not found."; 718 return _p.intValue(); 719 } 720 /** 721 * Gets the value of the {@code <width>} property. 722 * <p><dl> 723 * <dt><b>Final:</b></dt><dd>No</dd> 724 * </dl></p> 725 * @return The number of characters per line for the usage statement. 726 * @throws org.jomc.ObjectManagementException if getting the property instance fails. 727 */ 728 @SuppressWarnings("unused") 729 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 730 private int getWidth() 731 { 732 final java.lang.Integer _p = (java.lang.Integer) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "width" ); 733 assert _p != null : "'width' property not found."; 734 return _p.intValue(); 735 } 736 // </editor-fold> 737 // SECTION-END 738 // SECTION-START[Messages] 739 // <editor-fold defaultstate="collapsed" desc=" Generated Messages "> 740 /** 741 * Gets the text of the {@code <Default Exception Message>} message. 742 * <p><dl> 743 * <dt><b>Languages:</b></dt> 744 * <dd>English (default)</dd> 745 * <dd>Deutsch</dd> 746 * <dt><b>Final:</b></dt><dd>No</dd> 747 * </dl></p> 748 * @param locale The locale of the message to return. 749 * @return The text of the {@code <Default Exception Message>} message for {@code locale}. 750 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 751 */ 752 @SuppressWarnings("unused") 753 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 754 private String getDefaultExceptionMessage( final java.util.Locale locale ) 755 { 756 final String _m = org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getMessage( this, "Default Exception Message", locale ); 757 assert _m != null : "'Default Exception Message' message not found."; 758 return _m; 759 } 760 /** 761 * Gets the text of the {@code <Default Log Level Info>} message. 762 * <p><dl> 763 * <dt><b>Languages:</b></dt> 764 * <dd>English (default)</dd> 765 * <dd>Deutsch</dd> 766 * <dt><b>Final:</b></dt><dd>No</dd> 767 * </dl></p> 768 * @param locale The locale of the message to return. 769 * @param defaultLogLevel Format argument. 770 * @return The text of the {@code <Default Log Level Info>} message for {@code locale}. 771 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 772 */ 773 @SuppressWarnings("unused") 774 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 775 private String getDefaultLogLevelInfo( final java.util.Locale locale, final java.lang.String defaultLogLevel ) 776 { 777 final String _m = org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getMessage( this, "Default Log Level Info", locale, defaultLogLevel ); 778 assert _m != null : "'Default Log Level Info' message not found."; 779 return _m; 780 } 781 /** 782 * Gets the text of the {@code <Illegal Arguments Info>} message. 783 * <p><dl> 784 * <dt><b>Languages:</b></dt> 785 * <dd>English (default)</dd> 786 * <dd>Deutsch</dd> 787 * <dt><b>Final:</b></dt><dd>No</dd> 788 * </dl></p> 789 * @param locale The locale of the message to return. 790 * @param command Format argument. 791 * @param helpCommandName Format argument. 792 * @return The text of the {@code <Illegal Arguments Info>} message for {@code locale}. 793 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 794 */ 795 @SuppressWarnings("unused") 796 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 797 private String getIllegalArgumentsInfo( final java.util.Locale locale, final java.lang.String command, final java.lang.String helpCommandName ) 798 { 799 final String _m = org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getMessage( this, "Illegal Arguments Info", locale, command, helpCommandName ); 800 assert _m != null : "'Illegal Arguments Info' message not found."; 801 return _m; 802 } 803 /** 804 * Gets the text of the {@code <Time Info>} message. 805 * <p><dl> 806 * <dt><b>Languages:</b></dt> 807 * <dd>English (default)</dd> 808 * <dd>Deutsch</dd> 809 * <dt><b>Final:</b></dt><dd>No</dd> 810 * </dl></p> 811 * @param locale The locale of the message to return. 812 * @param time Format argument. 813 * @return The text of the {@code <Time Info>} message for {@code locale}. 814 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 815 */ 816 @SuppressWarnings("unused") 817 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 818 private String getTimeInfo( final java.util.Locale locale, final java.util.Date time ) 819 { 820 final String _m = org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getMessage( this, "Time Info", locale, time ); 821 assert _m != null : "'Time Info' message not found."; 822 return _m; 823 } 824 /** 825 * Gets the text of the {@code <Usage>} message. 826 * <p><dl> 827 * <dt><b>Languages:</b></dt> 828 * <dd>English (default)</dd> 829 * <dd>Deutsch</dd> 830 * <dt><b>Final:</b></dt><dd>No</dd> 831 * </dl></p> 832 * @param locale The locale of the message to return. 833 * @param helpCommandName Format argument. 834 * @return The text of the {@code <Usage>} message for {@code locale}. 835 * @throws org.jomc.ObjectManagementException if getting the message instance fails. 836 */ 837 @SuppressWarnings("unused") 838 @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.5", comments = "See http://www.jomc.org/jomc/1.5/jomc-tools-1.5" ) 839 private String getUsage( final java.util.Locale locale, final java.lang.String helpCommandName ) 840 { 841 final String _m = org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getMessage( this, "Usage", locale, helpCommandName ); 842 assert _m != null : "'Usage' message not found."; 843 return _m; 844 } 845 // </editor-fold> 846 // SECTION-END 847}