diff --git a/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java b/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java index 40c442ef732f22e52a9dd5a637ae84e8ecf011a1..7fdd5ec75b814b99322b0d866681534ef4c973ec 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java +++ b/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java @@ -17,10 +17,14 @@ package ch.systemsx.cisd.bds.check; import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.apache.commons.io.IOUtils; + import ch.systemsx.cisd.bds.StringUtils; import ch.systemsx.cisd.bds.Utilities; import ch.systemsx.cisd.bds.exception.DataStructureException; @@ -191,6 +195,9 @@ public abstract class AbstractChecker private static final String MSG_ERROR_IN_STANDARD_ORIGINAL_MAPPING_LINE = "Error in standard-original mapping line "; + private static final String IO_EXCEPTION_WHILE_COMPARING_FILES = + "I/O Exception while comparing file '%s' with file '%s': %s"; + protected static final String path(final String... args) { final String separator = "/"; @@ -364,7 +371,7 @@ public abstract class AbstractChecker final String fileName2 = values[2]; if ("I".equals(relationshipOperator)) { - checkFilesIdenticat(bdsRoot, currentLineNumber, fileName1, fileName2); + checkFilesIdentical(bdsRoot, currentLineNumber, fileName1, fileName2); } else if ("T".equals(relationshipOperator) == false) { @@ -382,14 +389,11 @@ public abstract class AbstractChecker } } - private void checkFilesIdenticat(final IDirectory bdsRoot, final int currentLineNumber, + private void checkFilesIdentical(final IDirectory bdsRoot, final int currentLineNumber, final String fileName1, final String fileName2) { - IFile file1 = null; - IFile file2 = null; - file1 = tryGetFile(bdsRoot, path(DATA, STANDARD, fileName1)); - - file2 = tryGetFile(bdsRoot, path(DATA, ORIGINAL, fileName2)); + final IFile file1 = tryGetFile(bdsRoot, path(DATA, STANDARD, fileName1)); + final IFile file2 = tryGetFile(bdsRoot, path(DATA, ORIGINAL, fileName2)); if (file1 == null || file2 == null) { final List<String> missing = new ArrayList<String>(); @@ -403,11 +407,28 @@ public abstract class AbstractChecker } problemReport.error(MSG_ERROR_IN_STANDARD_ORIGINAL_MAPPING_LINE + currentLineNumber + ": missing files " + missing); - } else if (file1.getStringContent().equals(file2.getStringContent()) == false) + return; + } + InputStream input1 = null; + InputStream input2 = null; + try { - problemReport.error(MSG_ERROR_IN_STANDARD_ORIGINAL_MAPPING_LINE + currentLineNumber - + ": content of the files is supposed to be identical but is different (" - + fileName1 + "," + fileName2 + ")"); + input1 = file1.getInputStream(); + input2 = file2.getInputStream(); + if (IOUtils.contentEquals(input1, input2) == false) + { + problemReport.error(MSG_ERROR_IN_STANDARD_ORIGINAL_MAPPING_LINE + currentLineNumber + + ": content of the files is supposed to be identical but is different (" + + fileName1 + "," + fileName2 + ")"); + } + } catch (final IOException ex) + { + problemReport.error(String.format(IO_EXCEPTION_WHILE_COMPARING_FILES, fileName1, + fileName2, ex.getMessage())); + } finally + { + IOUtils.closeQuietly(input1); + IOUtils.closeQuietly(input2); } }