Author: nick
Date: Wed May 15 00:27:59 2013
New Revision: 1482647

URL: http://svn.apache.org/r1482647
Log:
Where possible, allow fetching of the size of the OPC Package Part (-1 if not)

Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagePart.java
    poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java
    
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/MemoryPackagePart.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java

Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagePart.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagePart.java?rev=1482647&r1=1482646&r2=1482647&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagePart.java 
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackagePart.java Wed 
May 15 00:27:59 2013
@@ -624,6 +624,13 @@ public abstract class PackagePart implem
        public void setDeleted(boolean isDeleted) {
                this._isDeleted = isDeleted;
        }
+       
+       /**
+        * @return The length of the part in bytes, or -1 if not known
+        */
+       public long getSize() {
+          return -1;
+       }
 
        @Override
        public String toString() {

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java?rev=1482647&r1=1482646&r2=1482647&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java 
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java 
Wed May 15 00:27:59 2013
@@ -114,6 +114,11 @@ public class ZipPackagePart extends Pack
        }
 
        @Override
+       public long getSize() {
+               return zipEntry.getSize();
+       }
+
+       @Override
        public boolean save(OutputStream os) throws OpenXML4JException {
                return new ZipPartMarshaller().marshall(this, os);
        }

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/MemoryPackagePart.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/MemoryPackagePart.java?rev=1482647&r1=1482646&r2=1482647&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/MemoryPackagePart.java
 (original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/MemoryPackagePart.java
 Wed May 15 00:27:59 2013
@@ -102,6 +102,11 @@ public final class MemoryPackagePart ext
                return new MemoryPackagePartOutputStream(this);
        }
 
+       @Override
+       public long getSize() {
+               return length;
+       }
+
        public void clear() {
                data = null;
                length = 0;

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java?rev=1482647&r1=1482646&r2=1482647&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java 
(original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java 
Wed May 15 00:27:59 2013
@@ -30,6 +30,7 @@ import org.apache.poi.openxml4j.exceptio
 import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
 import org.apache.poi.openxml4j.opc.internal.ContentTypeManager;
 import org.apache.poi.openxml4j.opc.internal.FileHelper;
+import org.apache.poi.openxml4j.opc.internal.PackagePropertiesPart;
 import org.apache.poi.util.TempFile;
 import org.apache.poi.util.POILogger;
 import org.apache.poi.util.POILogFactory;
@@ -523,6 +524,35 @@ public final class TestPackage extends T
         assertTrue(selected.containsKey("/word/theme/theme1.xml"));
         assertTrue(selected.containsKey("/word/webSettings.xml"));
     }
+    
+    public void testGetPartSize() throws Exception {
+       String filepath =  
OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
+       OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ);
+
+       int checked = 0;
+       for (PackagePart part : pkg.getParts()) {
+          // Can get the size of zip parts
+          if (part.getPartName().getName().equals("/word/document.xml")) {
+             checked++;
+             assertEquals(ZipPackagePart.class, part.getClass());
+             assertEquals(6031l, part.getSize());
+          }
+          if (part.getPartName().getName().equals("/word/fontTable.xml")) {
+             checked++;
+             assertEquals(ZipPackagePart.class, part.getClass());
+             assertEquals(1312l, part.getSize());
+          }
+          
+          // But not from the others
+          if (part.getPartName().getName().equals("/docProps/core.xml")) {
+             checked++;
+             assertEquals(PackagePropertiesPart.class, part.getClass());
+             assertEquals(-1, part.getSize());
+          }
+       }
+       // Ensure we actually found the parts we want to check
+       assertEquals(3, checked);
+    }
 
     public void testReplaceContentType() throws Exception {
         InputStream is = 
OpenXML4JTestDataSamples.openSampleStream("sample.xlsx");



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to