From 3916175e4d47332331934a39efc0bb1476f78465 Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Fri, 21 Jun 2013 14:56:31 -0700 Subject: [PATCH] FIX: Add ArchiveRecordHeader.getContentLength() to specifically return the warc/arc record content length, not including headers --- .../main/java/org/archive/io/ArchiveRecordHeader.java | 6 ++++++ .../java/org/archive/io/arc/ARCRecordMetaData.java | 8 ++++++++ .../src/main/java/org/archive/io/warc/WARCRecord.java | 11 +++++++++-- .../org/archive/io/HeaderedArchiveRecordTest.java | 5 +++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/org/archive/io/ArchiveRecordHeader.java b/commons/src/main/java/org/archive/io/ArchiveRecordHeader.java index 51fbc3ea..953537b1 100644 --- a/commons/src/main/java/org/archive/io/ArchiveRecordHeader.java +++ b/commons/src/main/java/org/archive/io/ArchiveRecordHeader.java @@ -38,6 +38,12 @@ public interface ArchiveRecordHeader { * @return Return length of record. */ public abstract long getLength(); + + /** + * @return Return Content-Length of the contents of the record + */ + public abstract long getContentLength(); + /** * @return Record subject-url. diff --git a/commons/src/main/java/org/archive/io/arc/ARCRecordMetaData.java b/commons/src/main/java/org/archive/io/arc/ARCRecordMetaData.java index 2b541196..3f617041 100644 --- a/commons/src/main/java/org/archive/io/arc/ARCRecordMetaData.java +++ b/commons/src/main/java/org/archive/io/arc/ARCRecordMetaData.java @@ -129,6 +129,14 @@ public class ARCRecordMetaData implements ArchiveRecordHeader, ARCConstants { return Long.parseLong((String)this.headerFields. get(LENGTH_FIELD_KEY)); } + + /** + * @return Return Content-Length of the contents of the record + * Same as record length for arcs? TODO + */ + public long getContentLength() { + return getLength(); + } /** * @return Header url. diff --git a/commons/src/main/java/org/archive/io/warc/WARCRecord.java b/commons/src/main/java/org/archive/io/warc/WARCRecord.java index e8611f31..635d1c3b 100644 --- a/commons/src/main/java/org/archive/io/warc/WARCRecord.java +++ b/commons/src/main/java/org/archive/io/warc/WARCRecord.java @@ -168,14 +168,21 @@ public class WARCRecord extends ArchiveRecord implements WARCConstants { return this.headers.get(key); } - public long getLength() { + // Returns just the Content-Length of the warc record + public long getContentLength() { Object o = this.headers.get(CONTENT_LENGTH); if (o == null) { return -1; } long contentLength = (o instanceof Long)? ((Long)o).longValue(): Long.parseLong((String)o); - return contentLength + contentOffset; + return contentLength; + } + + // Returns the full record length + public long getLength() + { + return getContentLength() + contentOffset; } public String getMimetype() { diff --git a/commons/src/test/java/org/archive/io/HeaderedArchiveRecordTest.java b/commons/src/test/java/org/archive/io/HeaderedArchiveRecordTest.java index 94a216ca..9f7e2a15 100644 --- a/commons/src/test/java/org/archive/io/HeaderedArchiveRecordTest.java +++ b/commons/src/test/java/org/archive/io/HeaderedArchiveRecordTest.java @@ -82,6 +82,7 @@ public class HeaderedArchiveRecordTest extends TestCase { public void testParseHttpHeadersInARC() throws IOException { final int len = HTTPHEADER.length() + BODY.length(); + final int contentLength = BODY.length(); final String url = "http://www.ly.gov.tw:80/accpart.htm"; final String hdr = HTTPHEADER + BODY; // Interesting difference between ARCRecord and WARCRecord is that the @@ -122,6 +123,10 @@ public class HeaderedArchiveRecordTest extends TestCase { public long getLength() { return len; } + + public long getContentLength() { + return contentLength; + } public String getMimetype() { return null;