Author: nick
Date: Fri Mar 25 16:53:26 2011
New Revision: 1085467

URL: http://svn.apache.org/viewvc?rev=1085467&view=rev
Log:
Fix up constructor to ensure that the filesystem objects are around when we 
need them, and not just after we wanted them as it was...

Modified:
    poi/trunk/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
    
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java

Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java?rev=1085467&r1=1085466&r2=1085467&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/DirectoryNode.java Fri 
Mar 25 16:53:26 2011
@@ -70,8 +70,7 @@ public class DirectoryNode
                   final POIFSFileSystem filesystem,
                   final DirectoryNode parent)
     {
-       this(property, parent);
-       _ofilesystem = filesystem;
+       this(property, parent, filesystem, (NPOIFSFileSystem)null);
     }
     
     /**
@@ -86,14 +85,18 @@ public class DirectoryNode
                   final NPOIFSFileSystem nfilesystem,
                   final DirectoryNode parent)
     {
-       this(property, parent);
-       _nfilesystem = nfilesystem;
+       this(property, parent, (POIFSFileSystem)null, nfilesystem);
     }
     
     private DirectoryNode(final DirectoryProperty property,
-                          final DirectoryNode parent)
+                          final DirectoryNode parent,
+                          final POIFSFileSystem ofilesystem,
+                          final NPOIFSFileSystem nfilesystem)
     {
         super(property, parent);
+        this._ofilesystem = ofilesystem;
+        this._nfilesystem = nfilesystem;
+        
         if (parent == null)
         {
             _path = new POIFSDocumentPath();

Modified: 
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java?rev=1085467&r1=1085466&r2=1085467&view=diff
==============================================================================
--- 
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java
 (original)
+++ 
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestDocumentInputStream.java
 Fri Mar 25 16:53:26 2011
@@ -18,11 +18,14 @@
 package org.apache.poi.poifs.filesystem;
 
 import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.util.Arrays;
 
 import junit.framework.TestCase;
 
+import org.apache.poi.POIDataSamples;
 import org.apache.poi.poifs.property.DirectoryProperty;
 import org.apache.poi.poifs.storage.RawDataBlock;
 
@@ -365,4 +368,47 @@ public final class TestDocumentInputStre
                      stream.skip(2 + ( long ) Integer.MAX_VALUE));
         assertEquals(0, stream.available());
     }
+    
+    /**
+     * Test that we can read files at multiple levels down the tree
+     */
+    public void testReadMultipleTreeLevels() throws Exception {
+       final POIDataSamples _samples = POIDataSamples.getPublisherInstance();
+       File sample = _samples.getFile("Sample.pub");
+       
+       DocumentInputStream stream;
+       
+       NPOIFSFileSystem npoifs = new NPOIFSFileSystem(sample);
+       POIFSFileSystem  opoifs = new POIFSFileSystem(new 
FileInputStream(sample));
+       
+       // Ensure we have what we expect on the root
+       assertEquals(npoifs, npoifs.getRoot().getNFileSystem());
+       assertEquals(null,   npoifs.getRoot().getFileSystem());
+       assertEquals(opoifs, opoifs.getRoot().getFileSystem());
+       assertEquals(null,   opoifs.getRoot().getNFileSystem());
+       
+       // Check inside
+       for(DirectoryNode root : new DirectoryNode[] { opoifs.getRoot(), 
npoifs.getRoot() }) {
+          // Top Level
+          Entry top = root.getEntry("Contents");
+          assertEquals(true, top.isDocumentEntry());
+          stream = root.createDocumentInputStream(top);
+          stream.read();
+          
+          // One Level Down
+          DirectoryNode escher = (DirectoryNode)root.getEntry("Escher");
+          Entry one = escher.getEntry("EscherStm");
+          assertEquals(true, one.isDocumentEntry());
+          stream = escher.createDocumentInputStream(one);
+          stream.read();
+          
+          // Two Levels Down
+          DirectoryNode quill = (DirectoryNode)root.getEntry("Quill");
+          DirectoryNode quillSub = (DirectoryNode)quill.getEntry("QuillSub");
+          Entry two = quillSub.getEntry("CONTENTS");
+          assertEquals(true, two.isDocumentEntry());
+          stream = quillSub.createDocumentInputStream(two);
+          stream.read();
+       }
+    }
 }



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

Reply via email to