OfflineImageViewer { public static void main(String[] args) throws IOException { Options options = buildOptions(); if(args.length == 0) { printUsage(); return; } CommandLineParser parser = new PosixParser(); CommandLine cmd; try { cmd = parser.parse(options, args); } catch (ParseException e) { System.out.println("Error parsing command-line options: "); printUsage(); return; } if(cmd.hasOption("h")) { printUsage(); return; } boolean skipBlocks = cmd.hasOption("skipBlocks"); boolean printToScreen = cmd.hasOption("printToScreen"); String inputFile = cmd.getOptionValue("i"); String processor = cmd.getOptionValue("p", "Ls"); String outputFile = cmd.getOptionValue("o"); String delimiter = cmd.getOptionValue("delimiter"); if( !(delimiter == null || processor.equals("Delimited")) ) { System.out.println("Can only specify -delimiter with Delimited processor"); printUsage(); return; } ImageVisitor v; if(processor.equals("Indented")) { v = new IndentedImageVisitor(outputFile, printToScreen); } else if (processor.equals("XML")) { v = new XmlImageVisitor(outputFile, printToScreen); } else if (processor.equals("Delimited")) { v = delimiter == null ? new DelimitedImageVisitor(outputFile, printToScreen) : new DelimitedImageVisitor(outputFile, printToScreen, delimiter); skipBlocks = false; } else if (processor.equals("FileDistribution")) { long maxSize = Long.parseLong(cmd.getOptionValue("maxSize", "0")); int step = Integer.parseInt(cmd.getOptionValue("step", "0")); boolean formatOutput = cmd.hasOption("format"); v = new FileDistributionVisitor(outputFile, maxSize, step, formatOutput); } else if (processor.equals("NameDistribution")) { v = new NameDistributionVisitor(outputFile, printToScreen); } else { v = new LsImageVisitor(outputFile, printToScreen); skipBlocks = false; } try { OfflineImageViewer d = new OfflineImageViewer(inputFile, v, skipBlocks); d.go(); } catch (EOFException e) { System.err.println("Input file ended unexpectedly. Exiting"); } catch(IOException e) { System.err.println("Encountered exception. Exiting: " + e.getMessage()); } } OfflineImageViewer(String inputFile, ImageVisitor processor, 
             boolean skipBlocks); void go(); static Options buildOptions(); static void main(String[] args); static final Logger LOG; }
@Test public void testOfflineImageViewerMaxSizeAndStepOptions() throws Exception { final ByteArrayOutputStream bytes = new ByteArrayOutputStream(); final PrintStream out = new PrintStream(bytes); final PrintStream oldOut = System.out; try { System.setOut(out); OfflineImageViewer.main(new String[] {"-i", "-", "-o", "-", "-p", "FileDistribution", "-maxSize", "512", "-step", "8", "-h"}); Assert.assertFalse(bytes.toString().contains( "Error parsing command-line options: ")); } finally { System.setOut(oldOut); IOUtils.closeStream(out); } }