Java tutorial
/* * Copyright (C) 2016 Hobrasoft s.r.o. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package cz.hobrasoft.pdfmu.operation.args; import com.itextpdf.text.pdf.PdfReader; import cz.hobrasoft.pdfmu.PdfmuUtils; import static cz.hobrasoft.pdfmu.error.ErrorType.INPUT_CLOSE; import static cz.hobrasoft.pdfmu.error.ErrorType.INPUT_NOT_FOUND; import static cz.hobrasoft.pdfmu.error.ErrorType.INPUT_NOT_VALID_PDF; import cz.hobrasoft.pdfmu.operation.OperationException; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.logging.Logger; import net.sourceforge.argparse4j.impl.Arguments; import net.sourceforge.argparse4j.inf.ArgumentParser; import net.sourceforge.argparse4j.inf.Namespace; public class InPdfArgs implements ArgsConfiguration, AutoCloseable { private final String name = "in"; private final String help = "input PDF document"; private final String metavar; private static final Logger logger = Logger.getLogger(InPdfArgs.class.getName()); public InPdfArgs(String metavar) { this.metavar = metavar; } public InPdfArgs() { this("IN.pdf"); } @Override public void addArguments(ArgumentParser parser) { parser.addArgument(name).help(help).metavar(metavar).type(Arguments.fileType().acceptSystemIn()); } private File file = null; public File getFile() { return file; } private InputStream is = null; private PdfReader pdfReader = null; @Override public void setFromNamespace(Namespace namespace) { file = namespace.get(name); assert file != null; // Required argument (because it is positional) } public PdfReader open() throws OperationException { assert file != null; assert is == null; assert pdfReader == null; logger.info(String.format("Input file: %s", file)); // Open the input stream try { is = new FileInputStream(file); } catch (FileNotFoundException ex) { throw new OperationException(INPUT_NOT_FOUND, ex, PdfmuUtils.sortedMap(new String[] { "file" }, new Object[] { file })); } // Open the PDF reader try { pdfReader = new PdfReader(is); } catch (IOException ex) { throw new OperationException(INPUT_NOT_VALID_PDF, ex, PdfmuUtils.sortedMap(new String[] { "file" }, new Object[] { file })); } return pdfReader; } @Override public void close() throws OperationException { if (pdfReader != null) { // Close the PDF reader pdfReader.close(); pdfReader = null; } if (is != null) { // Close the input stream try { is.close(); // May throw IOException } catch (IOException ex) { throw new OperationException(INPUT_CLOSE, ex); } is = null; } } public PdfReader getPdfReader() { return pdfReader; } }