From 7d8ecb08e6fb1171d221a7c0039c45cabffb2076 Mon Sep 17 00:00:00 2001 From: John Scancella Date: Tue, 22 Nov 2016 12:09:24 -0500 Subject: [PATCH] a little bit of refactoring --- .../gov/loc/repository/bagit/reader/BagReader.java | 3 ++- .../bagit/tasks/CheckIfFileExistsTask.java | 12 ++++++------ .../gov/loc/repository/bagit/verify/BagVerifier.java | 12 ++++++------ .../gov/loc/repository/bagit/writer/BagWriter.java | 3 ++- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/java/gov/loc/repository/bagit/reader/BagReader.java b/src/main/java/gov/loc/repository/bagit/reader/BagReader.java index 3f86838e6..fb522e641 100644 --- a/src/main/java/gov/loc/repository/bagit/reader/BagReader.java +++ b/src/main/java/gov/loc/repository/bagit/reader/BagReader.java @@ -34,7 +34,6 @@ /** * Responsible for reading a bag from the filesystem. */ -@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") public class BagReader { private static final Logger logger = LoggerFactory.getLogger(PayloadFileExistsInManifestVistor.class); @@ -265,6 +264,7 @@ public Bag readBagMetadata(final Path rootDir, final Bag bag) throws IOException * * @throws IOException if there is a problem reading a file */ + @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") public Bag readFetch(final Path fetchFile, final Bag bag) throws IOException{ logger.info("Attempting to read [{}]", fetchFile); final Bag newBag = new Bag(bag); @@ -289,6 +289,7 @@ public Bag readFetch(final Path fetchFile, final Bag bag) throws IOException{ return newBag; } + @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") protected List> readKeyValuesFromFile(final Path file, final String splitRegex) throws IOException, InvalidBagMetadataException{ final List> keyValues = new ArrayList<>(); final BufferedReader br = Files.newBufferedReader(file); diff --git a/src/main/java/gov/loc/repository/bagit/tasks/CheckIfFileExistsTask.java b/src/main/java/gov/loc/repository/bagit/tasks/CheckIfFileExistsTask.java index 5651a3e32..4b1c29067 100644 --- a/src/main/java/gov/loc/repository/bagit/tasks/CheckIfFileExistsTask.java +++ b/src/main/java/gov/loc/repository/bagit/tasks/CheckIfFileExistsTask.java @@ -2,29 +2,29 @@ import java.nio.file.Files; import java.nio.file.Path; +import java.util.List; import java.util.concurrent.CountDownLatch; /** * A simple task to check if a file exists on the filesystem. This is thread safe, so many can be called at once. */ -@SuppressWarnings(value = {"PMD.DoNotUseThreads", "PMD.AvoidStringBufferField"}) +@SuppressWarnings(value = {"PMD.DoNotUseThreads"}) public class CheckIfFileExistsTask implements Runnable { private transient final Path file; - private transient final StringBuilder messageBuilder; + private transient final List missingFiles; private transient final CountDownLatch latch; - public CheckIfFileExistsTask(final Path file, final StringBuilder messageBuilder, final CountDownLatch latch) { + public CheckIfFileExistsTask(final Path file, final List missingFiles, final CountDownLatch latch) { this.file = file; - this.messageBuilder = messageBuilder; this.latch = latch; + this.missingFiles = missingFiles; } @Override public void run() { if(!Files.exists(file)){ - messageBuilder.append("Manifest lists file [").append(file).append("] but it does not exist").append(System.lineSeparator()); + missingFiles.add(file); } latch.countDown(); } - } diff --git a/src/main/java/gov/loc/repository/bagit/verify/BagVerifier.java b/src/main/java/gov/loc/repository/bagit/verify/BagVerifier.java index 818806e02..2c048377c 100644 --- a/src/main/java/gov/loc/repository/bagit/verify/BagVerifier.java +++ b/src/main/java/gov/loc/repository/bagit/verify/BagVerifier.java @@ -44,7 +44,6 @@ /** * Responsible for verifying if a bag is valid, complete */ -@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") public class BagVerifier { private static final Logger logger = LoggerFactory.getLogger(BagVerifier.class); @@ -165,6 +164,7 @@ public void isValid(final Bag bag, final boolean ignoreHiddenFiles) throws IOExc * @throws InterruptedException if the thread is interrupted * @throws VerificationException if there is some other exception while checking the checksum(s) */ + @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") protected void checkHashes(final Manifest manifest) throws CorruptChecksumException, InterruptedException, VerificationException{ final ExecutorService executor = Executors.newCachedThreadPool(); final CountDownLatch latch = new CountDownLatch( manifest.getFileToChecksumMap().size()); @@ -318,22 +318,22 @@ protected Set getAllFilesListedInManifests(final Bag bag) throws IOExcepti return filesListedInManifests; } + @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") protected void checkAllFilesListedInManifestExist(final Set files) throws FileNotInPayloadDirectoryException, InterruptedException{ final ExecutorService executor = Executors.newCachedThreadPool(); final CountDownLatch latch = new CountDownLatch(files.size()); - final StringBuilder messageBuilder = new StringBuilder(); + final List missingFiles = new ArrayList<>(); logger.debug("Checking if all files listed in the manifest(s) exist"); for(final Path file : files){ - executor.execute(new CheckIfFileExistsTask(file, messageBuilder, latch)); + executor.execute(new CheckIfFileExistsTask(file, missingFiles, latch)); } latch.await(); executor.shutdown(); - final String missingFilesMessage = messageBuilder.toString(); - if(!missingFilesMessage.isEmpty()){ - throw new FileNotInPayloadDirectoryException(missingFilesMessage); + if(!missingFiles.isEmpty()){ + throw new FileNotInPayloadDirectoryException("Manifest(s) contains file(s) " + missingFiles + " but they don't exist!"); } } diff --git a/src/main/java/gov/loc/repository/bagit/writer/BagWriter.java b/src/main/java/gov/loc/repository/bagit/writer/BagWriter.java index 79cb69353..66c1901df 100644 --- a/src/main/java/gov/loc/repository/bagit/writer/BagWriter.java +++ b/src/main/java/gov/loc/repository/bagit/writer/BagWriter.java @@ -28,7 +28,7 @@ /** * responsible for writing out a bag. */ -@SuppressWarnings(value = {"PMD.TooManyMethods", "PMD.AvoidInstantiatingObjectsInLoops"}) //TODO refactor to remove methods? +@SuppressWarnings("PMD.TooManyMethods") public final class BagWriter { private static final Logger logger = LoggerFactory.getLogger(BagWriter.class); private static final Version VERSION_0_98 = new Version(0, 98); @@ -152,6 +152,7 @@ public static void writePayloadManifests(final Set manifests, final Pa writeManifests(manifests, outputDir, bagitRootDir, "manifest-", charsetName); } + @SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") private static Set updateTagManifests(final Bag bag, final Path newBagRootDir) throws NoSuchAlgorithmException, IOException{ final Set newManifests = new HashSet<>();