java/copy-image-resizer/src/cz/frantovo/copyImageResizer/RecursiveOptions.java
author František Kučera <franta-hg@frantovo.cz>
Mon, 17 Nov 2014 20:23:58 +0100
changeset 14 dec0dd934a64
parent 12 27e41d7f5e8d
child 18 a5a36526ff71
permissions -rw-r--r--
option: --skip-errors
     1 /**
     2  * copy-image-resizer
     3  * Copyright © 2014 František Kučera (frantovo.cz)
     4  *
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, either version 3 of the License, or
     8  * (at your option) any later version.
     9  *
    10  * This program is distributed in the hope that it will be useful,
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    13  * GNU General Public License for more details.
    14  *
    15  * You should have received a copy of the GNU General Public License
    16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
    17  */
    18 package cz.frantovo.copyImageResizer;
    19 
    20 import java.io.File;
    21 import java.util.ArrayList;
    22 import java.util.Collection;
    23 
    24 /**
    25  *
    26  * @author Ing. František Kučera (frantovo.cz)
    27  */
    28 public class RecursiveOptions {
    29 
    30 	/**
    31 	 * Source directory
    32 	 */
    33 	private File input;
    34 	/**
    35 	 * Output directory
    36 	 */
    37 	private File output;
    38 	/**
    39 	 * Image resolutions to create
    40 	 */
    41 	private final Collection<SizeSpecification> sizes = new ArrayList<>();
    42 	/**
    43 	 * Whether errors (while resizing/copying particular images) should be just logged and skipped.
    44 	 */
    45 	private boolean skipErrors;
    46 
    47 	public File getInput() {
    48 		return input;
    49 	}
    50 
    51 	public void setInput(File input) {
    52 		this.input = input;
    53 	}
    54 
    55 	public File getOutput() {
    56 		return output;
    57 	}
    58 
    59 	public void setOutput(File output) {
    60 		this.output = output;
    61 	}
    62 
    63 	public Collection<SizeSpecification> getSizes() {
    64 		return sizes;
    65 	}
    66 
    67 	public void addSize(SizeSpecification size) {
    68 		sizes.add(size);
    69 	}
    70 
    71 	public boolean isSkipErrors() {
    72 		return skipErrors;
    73 	}
    74 
    75 	public void setSkipErrors(boolean skipErrors) {
    76 		this.skipErrors = skipErrors;
    77 	}
    78 
    79 	public void validate() throws InvalidOptionsException {
    80 		InvalidOptionsException e = new InvalidOptionsException();
    81 
    82 		if (input == null) {
    83 			e.addProblem(new InvalidOptionsException.OptionProblem("input directory must be specified"));
    84 		} else if (!input.isDirectory()) {
    85 			e.addProblem(new InvalidOptionsException.OptionProblem("input directory must exist and be a directory: " + input));
    86 		}
    87 
    88 		if (output == null) {
    89 			e.addProblem(new InvalidOptionsException.OptionProblem("output directory must be specified"));
    90 		}
    91 
    92 		if (sizes.isEmpty()) {
    93 			e.addProblem(new InvalidOptionsException.OptionProblem("at least one size (output resolution) must be specified"));
    94 		}
    95 
    96 		if (e.hasProblems()) {
    97 			throw e;
    98 		}
    99 	}
   100 }