diff -r 5019e3e93a4e -r b329573c76d7 java/copy-image-resizer/src/cz/frantovo/copyImageResizer/RecursiveImageResizer.java --- a/java/copy-image-resizer/src/cz/frantovo/copyImageResizer/RecursiveImageResizer.java Sun Nov 16 23:47:28 2014 +0100 +++ b/java/copy-image-resizer/src/cz/frantovo/copyImageResizer/RecursiveImageResizer.java Mon Nov 17 01:17:02 2014 +0100 @@ -17,13 +17,69 @@ */ package cz.frantovo.copyImageResizer; +import cz.frantovo.copyImageResizer.SingleImageResizer.ImageFormat; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.util.logging.Level; +import java.util.logging.Logger; + /** * * @author Ing. František Kučera (frantovo.cz) */ public class RecursiveImageResizer { + private static final Logger log = Logger.getLogger(RecursiveImageResizer.class.getName()); + + private final SingleImageResizer resizer = new SingleImageResizer(); + public void resize(RecursiveOptions options) throws RecursiveException, ResizeException { + resizeDirectory(options.getInput(), options); + } + + private void resizeFile(File file, RecursiveOptions options) throws ResizeException { + log.log(Level.FINE, "Resizing file: {0}", relativize(options.getInput(), file)); + + ImageFormat format = ImageFormat.getMatching(file.getName()); + + if (format == null) { + log.log(Level.FINE, "Skipping file: {0} (no image format matched this extension)", relativize(options.getInput(), file)); + } else { + try { + FileInputStream input = new FileInputStream(file); + File relative = relativize(options.getInput(), file); + File outputFile = new File(options.getOutput(), relative.getPath()); + FileOutputStream output = new FileOutputStream(outputFile); + resizer.resize(input, output, format); + } catch (FileNotFoundException e) { + throw new ResizeException("Error while opening stream", e); + } + } + + } + + private void resizeDirectory(File directory, RecursiveOptions options) throws ResizeException { + + log.log(Level.FINE, "Resizing directory: {0}", directory); + + File relative = relativize(options.getInput(), directory); + File output = new File(options.getOutput(), relative.getPath()); + output.mkdirs(); + + for (File entry : directory.listFiles()) { + if (entry.isDirectory()) { + resizeDirectory(entry, options); + } else { + resizeFile(entry, options); + } + } + + } + + private static File relativize(File root, File child) { + return root.toPath().relativize(child.toPath()).toFile(); } }