From 1fdb4c4627f4c8ff8b177557f293df287bf06723 Mon Sep 17 00:00:00 2001 From: Jeremy Long Date: Sun, 10 May 2015 08:19:01 -0400 Subject: [PATCH] checkstyle corrections Former-commit-id: 982cd5df66cc4b41e73deddd7e1ae749a2cb955e --- .../dependencycheck/utils/ExtractionUtil.java | 308 +++++++++--------- 1 file changed, 163 insertions(+), 145 deletions(-) diff --git a/dependency-check-core/src/main/java/org/owasp/dependencycheck/utils/ExtractionUtil.java b/dependency-check-core/src/main/java/org/owasp/dependencycheck/utils/ExtractionUtil.java index e10651076..13e23fa0a 100644 --- a/dependency-check-core/src/main/java/org/owasp/dependencycheck/utils/ExtractionUtil.java +++ b/dependency-check-core/src/main/java/org/owasp/dependencycheck/utils/ExtractionUtil.java @@ -42,6 +42,7 @@ import org.owasp.dependencycheck.analyzer.exception.AnalysisException; import org.owasp.dependencycheck.analyzer.exception.ArchiveExtractionException; /** + * Set of utilities to extract files from archives. * * @author Jeremy Long */ @@ -74,9 +75,8 @@ public final class ExtractionUtil { } /** - * Extracts the contents of an archive into the specified directory. The files are only extracted if they are - * supported by the analyzers loaded into the specified engine. If the engine is specified as null then all files - * are extracted. + * Extracts the contents of an archive into the specified directory. The files are only extracted if they are supported by the + * analyzers loaded into the specified engine. If the engine is specified as null then all files are extracted. * * @param archive an archive file such as a WAR or EAR * @param extractTo a directory to extract the contents to @@ -140,153 +140,171 @@ public final class ExtractionUtil { } } - /** - * Extracts the contents of an archive into the specified directory. - * - * @param archive - * an archive file such as a WAR or EAR - * @param destination - * a directory to extract the contents to - * @param filter - * determines which files get extracted - * @throws ExtractionException - * thrown if the archive is not found - */ - public static void extractFilesUsingFilter(File archive, File destination, - FilenameFilter filter) throws ExtractionException { - if (archive == null || destination == null) { - return; - } + /** + * Extracts the contents of an archive into the specified directory. + * + * @param archive an archive file such as a WAR or EAR + * @param destination a directory to extract the contents to + * @param filter determines which files get extracted + * @throws ExtractionException thrown if the archive is not found + */ + public static void extractFilesUsingFilter(File archive, File destination, + FilenameFilter filter) throws ExtractionException { + if (archive == null || destination == null) { + return; + } - FileInputStream fis = null; - try { - fis = new FileInputStream(archive); - } catch (FileNotFoundException ex) { - LOGGER.log(Level.FINE, null, ex); - throw new ExtractionException("Archive file was not found.", ex); - } - try { - extractArchive(new ZipArchiveInputStream(new BufferedInputStream( - fis)), destination, filter); - } catch (ArchiveExtractionException ex) { - final String msg = String.format( - "Exception extracting archive '%s'.", archive.getName()); - LOGGER.log(Level.WARNING, msg); - LOGGER.log(Level.FINE, null, ex); - } finally { - try { - fis.close(); - } catch (IOException ex) { - LOGGER.log(Level.FINE, null, ex); - } - } - } + FileInputStream fis = null; + try { + fis = new FileInputStream(archive); + } catch (FileNotFoundException ex) { + LOGGER.log(Level.FINE, null, ex); + throw new ExtractionException("Archive file was not found.", ex); + } + try { + extractArchive(new ZipArchiveInputStream(new BufferedInputStream( + fis)), destination, filter); + } catch (ArchiveExtractionException ex) { + final String msg = String.format( + "Exception extracting archive '%s'.", archive.getName()); + LOGGER.log(Level.WARNING, msg); + LOGGER.log(Level.FINE, null, ex); + } finally { + try { + fis.close(); + } catch (IOException ex) { + LOGGER.log(Level.FINE, null, ex); + } + } + } - /** - * Extracts files from an archive. - * - * @param input - * the archive to extract files from - * @param destination - * the location to write the files too - * @param filter - * determines which files get extracted - * @throws ArchiveExtractionException - * thrown if there is an exception extracting files from the - * archive - */ - private static void extractArchive(ArchiveInputStream input, - File destination, FilenameFilter filter) - throws ArchiveExtractionException { - ArchiveEntry entry; - try { - while ((entry = input.getNextEntry()) != null) { - if (entry.isDirectory()) { - final File dir = new File(destination, entry.getName()); - if (!dir.exists()) { - if (!dir.mkdirs()) { - final String msg = String.format( - "Unable to create directory '%s'.", - dir.getAbsolutePath()); - throw new AnalysisException(msg); - } - } - } else { - extractFile(input, destination, filter, entry); - } - } - } catch (IOException ex) { - throw new ArchiveExtractionException(ex); - } catch (Throwable ex) { - throw new ArchiveExtractionException(ex); - } finally { - closeStream(input); - } - } + /** + * Extracts files from an archive. + * + * @param input the archive to extract files from + * @param destination the location to write the files too + * @param filter determines which files get extracted + * @throws ArchiveExtractionException thrown if there is an exception extracting files from the archive + */ + private static void extractArchive(ArchiveInputStream input, + File destination, FilenameFilter filter) + throws ArchiveExtractionException { + ArchiveEntry entry; + try { + while ((entry = input.getNextEntry()) != null) { + if (entry.isDirectory()) { + final File dir = new File(destination, entry.getName()); + if (!dir.exists()) { + if (!dir.mkdirs()) { + final String msg = String.format( + "Unable to create directory '%s'.", + dir.getAbsolutePath()); + throw new AnalysisException(msg); + } + } + } else { + extractFile(input, destination, filter, entry); + } + } + } catch (IOException ex) { + throw new ArchiveExtractionException(ex); + } catch (Throwable ex) { + throw new ArchiveExtractionException(ex); + } finally { + closeStream(input); + } + } - private static void extractFile(ArchiveInputStream input, File destination, - FilenameFilter filter, ArchiveEntry entry) throws ExtractionException { - final File file = new File(destination, entry.getName()); - if (filter.accept(file.getParentFile(), file.getName())) { - final String extracting = String.format("Extracting '%s'", - file.getPath()); - LOGGER.fine(extracting); - BufferedOutputStream bos = null; - FileOutputStream fos = null; - try { - createParentFile(file); - fos = new FileOutputStream(file); - bos = new BufferedOutputStream(fos, BUFFER_SIZE); - transferUsingBuffer(input, bos); - } catch (FileNotFoundException ex) { - LOGGER.log(Level.FINE, null, ex); - final String msg = String.format("Unable to find file '%s'.", - file.getName()); - throw new ExtractionException(msg, ex); - } catch (IOException ex) { - LOGGER.log(Level.FINE, null, ex); - final String msg = String - .format("IO Exception while parsing file '%s'.", - file.getName()); - throw new ExtractionException(msg, ex); - } finally { - closeStream(bos); - closeStream(fos); - } - } - } + /** + * Extracts a file from an archive (input stream) and correctly builds the directory structure. + * + * @param input the archive input stream + * @param destination where to write the file + * @param filter the file filter to apply to the files being extracted + * @param entry the entry from the archive to extract + * @throws ExtractionException thrown if there is an error reading from the archive stream + */ + private static void extractFile(ArchiveInputStream input, File destination, + FilenameFilter filter, ArchiveEntry entry) throws ExtractionException { + final File file = new File(destination, entry.getName()); + if (filter.accept(file.getParentFile(), file.getName())) { + final String extracting = String.format("Extracting '%s'", + file.getPath()); + LOGGER.fine(extracting); + BufferedOutputStream bos = null; + FileOutputStream fos = null; + try { + createParentFile(file); + fos = new FileOutputStream(file); + bos = new BufferedOutputStream(fos, BUFFER_SIZE); + transferUsingBuffer(input, bos); + } catch (FileNotFoundException ex) { + LOGGER.log(Level.FINE, null, ex); + final String msg = String.format("Unable to find file '%s'.", + file.getName()); + throw new ExtractionException(msg, ex); + } catch (IOException ex) { + LOGGER.log(Level.FINE, null, ex); + final String msg = String + .format("IO Exception while parsing file '%s'.", + file.getName()); + throw new ExtractionException(msg, ex); + } finally { + closeStream(bos); + closeStream(fos); + } + } + } - private static void transferUsingBuffer(InputStream input, - BufferedOutputStream bos) throws IOException { - int count; - final byte[] data = new byte[BUFFER_SIZE]; - while ((count = input.read(data, 0, BUFFER_SIZE)) != -1) { - bos.write(data, 0, count); - } - bos.flush(); - } + /** + * Transfers data from one stream to another using a buffer. + * + * @param input the input stream + * @param bos the output stream + * @throws IOException thrown if there is an error reading/writing to the streams + */ + private static void transferUsingBuffer(InputStream input, + BufferedOutputStream bos) throws IOException { + int count; + final byte[] data = new byte[BUFFER_SIZE]; + while ((count = input.read(data, 0, BUFFER_SIZE)) != -1) { + bos.write(data, 0, count); + } + bos.flush(); + } - private static void closeStream(Closeable stream) { - if (stream != null) { - try { - stream.close(); - } catch (IOException ex) { - LOGGER.log(Level.FINEST, null, ex); - } - } - } + /** + * Closes the stream. + * + * @param stream the stream to close + */ + private static void closeStream(Closeable stream) { + if (stream != null) { + try { + stream.close(); + } catch (IOException ex) { + LOGGER.log(Level.FINEST, null, ex); + } + } + } - private static void createParentFile(final File file) - throws ExtractionException { - final File parent = file.getParentFile(); - if (!parent.isDirectory()) { - if (!parent.mkdirs()) { - final String msg = String.format( - "Unable to build directory '%s'.", - parent.getAbsolutePath()); - throw new ExtractionException(msg); - } - } - } + /** + * Ensures the parent path is correctly created on disk so that the file can be extracted to the correct location. + * + * @param file the file path + * @throws ExtractionException thrown if the parent paths could not be created + */ + private static void createParentFile(final File file) + throws ExtractionException { + final File parent = file.getParentFile(); + if (!parent.isDirectory()) { + if (!parent.mkdirs()) { + final String msg = String.format( + "Unable to build directory '%s'.", + parent.getAbsolutePath()); + throw new ExtractionException(msg); + } + } + } }