poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n...@apache.org
Subject svn commit: r1051029 - in /poi/trunk/src: java/org/apache/poi/poifs/filesystem/ java/org/apache/poi/poifs/property/ testcases/org/apache/poi/poifs/property/ testcases/org/apache/poi/poifs/storage/
Date Mon, 20 Dec 2010 09:30:32 GMT
Author: nick
Date: Mon Dec 20 09:30:32 2010
New Revision: 1051029

URL: http://svn.apache.org/viewvc?rev=1051029&view=rev
Log:
More PropertyTable refactoring - pull common code out into a Base, so we can plug in a different
block reader/writer for NIO

Added:
    poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTableBase.java
      - copied, changed from r1051025, poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java
Modified:
    poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
    poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java
    poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java
    poi/trunk/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java
    poi/trunk/src/testcases/org/apache/poi/poifs/storage/TestSmallBlockTableWriter.java

Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java?rev=1051029&r1=1051028&r2=1051029&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java Mon Dec 20 09:30:32
2010
@@ -102,9 +102,10 @@ public class NPOIFSFileSystem
      */
     public NPOIFSFileSystem()
     {
-        _property_table = new PropertyTable(bigBlockSize);
-        _blocks = new ArrayList<BATBlock>();
-        _root   = null;
+        _header         = new HeaderBlock(bigBlockSize);
+        _property_table = new PropertyTable(_header);// TODO Needs correct type
+        _blocks         = new ArrayList<BATBlock>();
+        _root           = null;
     }
 
     /**

Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java?rev=1051029&r1=1051028&r2=1051029&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/POIFSFileSystem.java Mon Dec 20 09:30:32
2010
@@ -90,7 +90,8 @@ public class POIFSFileSystem
      */
     public POIFSFileSystem()
     {
-        _property_table = new PropertyTable(bigBlockSize);
+        HeaderBlock header_block = new HeaderBlock(bigBlockSize);
+        _property_table = new PropertyTable(header_block);
         _documents      = new ArrayList();
         _root           = null;
     }

Modified: poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java?rev=1051029&r1=1051028&r2=1051029&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java Mon Dec 20 09:30:32
2010
@@ -19,13 +19,8 @@ package org.apache.poi.poifs.property;
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Stack;
 
 import org.apache.poi.poifs.common.POIFSBigBlockSize;
-import org.apache.poi.poifs.common.POIFSConstants;
-import org.apache.poi.poifs.filesystem.BATManaged;
 import org.apache.poi.poifs.storage.BlockWritable;
 import org.apache.poi.poifs.storage.HeaderBlock;
 import org.apache.poi.poifs.storage.PropertyBlock;
@@ -38,18 +33,14 @@ import org.apache.poi.poifs.storage.RawD
  *
  * @author Marc Johnson (mjohnson at apache dot org)
  */
-public final class PropertyTable implements BATManaged, BlockWritable {
+public final class PropertyTable extends PropertyTableBase implements BlockWritable {
     private POIFSBigBlockSize _bigBigBlockSize;
-    private int               _start_block;
-    private List<Property>    _properties;
     private BlockWritable[]   _blocks;
 
-    public PropertyTable(POIFSBigBlockSize bigBlockSize)
+    public PropertyTable(HeaderBlock headerBlock)
     {
-        _bigBigBlockSize = bigBlockSize;
-        _start_block = POIFSConstants.END_OF_CHAIN;
-        _properties  = new ArrayList<Property>();
-        addProperty(new RootProperty());
+        super(headerBlock);
+        _bigBigBlockSize = headerBlock.getBigBlockSize();
         _blocks = null;
     }
 
@@ -68,45 +59,14 @@ public final class PropertyTable impleme
                          final RawDataBlockList blockList)
         throws IOException
     {
+        super(
+              headerBlock,
+              PropertyFactory.convertToProperties(
+                    blockList.fetchBlocks(headerBlock.getPropertyStart(), -1)
+              )
+        );
         _bigBigBlockSize = headerBlock.getBigBlockSize();
-        _start_block = POIFSConstants.END_OF_CHAIN;
         _blocks      = null;
-        _properties  = PropertyFactory.convertToProperties(
-              blockList.fetchBlocks(headerBlock.getPropertyStart(), -1)
-        );
-        populatePropertyTree(( DirectoryProperty ) _properties.get(0));
-    }
-
-    /**
-     * Add a property to the list of properties we manage
-     *
-     * @param property the new Property to manage
-     */
-    public void addProperty(Property property)
-    {
-        _properties.add(property);
-    }
-
-    /**
-     * Remove a property from the list of properties we manage
-     *
-     * @param property the Property to be removed
-     */
-    public void removeProperty(final Property property)
-    {
-        _properties.remove(property);
-    }
-
-    /**
-     * Get the root property
-     *
-     * @return the root property
-     */
-    public RootProperty getRoot()
-    {
-
-        // it's always the first element in the List
-        return ( RootProperty ) _properties.get(0);
     }
 
     /**
@@ -131,53 +91,7 @@ public final class PropertyTable impleme
             properties[ k ].preWrite();
         }
     }
-
-    /**
-     * Get the start block for the property table
-     *
-     * @return start block index
-     */
-    public int getStartBlock()
-    {
-        return _start_block;
-    }
-
-    private void populatePropertyTree(DirectoryProperty root)
-        throws IOException
-    {
-        int index = root.getChildIndex();
-
-        if (!Property.isValidIndex(index))
-        {
-
-            // property has no children
-            return;
-        }
-        Stack<Property> children = new Stack<Property>();
-
-        children.push(_properties.get(index));
-        while (!children.empty())
-        {
-            Property property = children.pop();
-
-            root.addChild(property);
-            if (property.isDirectory())
-            {
-                populatePropertyTree(( DirectoryProperty ) property);
-            }
-            index = property.getPreviousChildIndex();
-            if (Property.isValidIndex(index))
-            {
-                children.push(_properties.get(index));
-            }
-            index = property.getNextChildIndex();
-            if (Property.isValidIndex(index))
-            {
-                children.push(_properties.get(index));
-            }
-        }
-    }
-
+    
     /**
      * Return the number of BigBlock's this instance uses
      *
@@ -190,17 +104,6 @@ public final class PropertyTable impleme
     }
 
     /**
-     * Set the start block for this instance
-     *
-     * @param index index into the array of BigBlock instances making
-     *              up the the filesystem
-     */
-    public void setStartBlock(final int index)
-    {
-        _start_block = index;
-    }
-
-    /**
      * Write the storage to an OutputStream
      *
      * @param stream the OutputStream to which the stored data should

Copied: poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTableBase.java (from r1051025,
poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java)
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTableBase.java?p2=poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTableBase.java&p1=poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java&r1=1051025&r2=1051029&rev=1051029&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTable.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/property/PropertyTableBase.java Mon Dec 20 09:30:32
2010
@@ -18,43 +18,33 @@
 package org.apache.poi.poifs.property;
 
 import java.io.IOException;
-import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Stack;
 
-import org.apache.poi.poifs.common.POIFSBigBlockSize;
-import org.apache.poi.poifs.common.POIFSConstants;
 import org.apache.poi.poifs.filesystem.BATManaged;
-import org.apache.poi.poifs.storage.BlockWritable;
 import org.apache.poi.poifs.storage.HeaderBlock;
-import org.apache.poi.poifs.storage.PropertyBlock;
-import org.apache.poi.poifs.storage.RawDataBlockList;
 
 /**
- * This class embodies the Property Table for the filesystem; this is
- * basically the directory for all of the documents in the
- * filesystem.
- *
- * @author Marc Johnson (mjohnson at apache dot org)
+ * This class embodies the Property Table for the filesystem,
+ *  which looks up entries in the filesystem to their
+ *  chain of blocks.
+ * This is the core support, there are implementations
+ *  for the different block schemes as needed.
  */
-public final class PropertyTable implements BATManaged, BlockWritable {
-    private POIFSBigBlockSize _bigBigBlockSize;
-    private int               _start_block;
-    private List<Property>    _properties;
-    private BlockWritable[]   _blocks;
+public abstract class PropertyTableBase implements BATManaged {
+    private   final HeaderBlock    _header_block;
+    protected final List<Property> _properties;
 
-    public PropertyTable(POIFSBigBlockSize bigBlockSize)
+    public PropertyTableBase(final HeaderBlock header_block)
     {
-        _bigBigBlockSize = bigBlockSize;
-        _start_block = POIFSConstants.END_OF_CHAIN;
+        _header_block = header_block;
         _properties  = new ArrayList<Property>();
         addProperty(new RootProperty());
-        _blocks = null;
     }
 
     /**
-     * reading constructor (used when we've read in a file and we want
+     * Reading constructor (used when we've read in a file and we want
      * to extract the property table from it). Populates the
      * properties thoroughly
      *
@@ -64,17 +54,13 @@ public final class PropertyTable impleme
      * @exception IOException if anything goes wrong (which should be
      *            a result of the input being NFG)
      */
-    public PropertyTable(final HeaderBlock headerBlock,
-                         final RawDataBlockList blockList)
+    public PropertyTableBase(final HeaderBlock header_block,
+                         final List<Property> properties)
         throws IOException
     {
-        _bigBigBlockSize = headerBlock.getBigBlockSize();
-        _start_block = POIFSConstants.END_OF_CHAIN;
-        _blocks      = null;
-        _properties  = PropertyFactory.convertToProperties(
-              blockList.fetchBlocks(headerBlock.getPropertyStart(), -1)
-        );
-        populatePropertyTree(( DirectoryProperty ) _properties.get(0));
+        _header_block = header_block;
+        _properties   = properties;
+        populatePropertyTree( (DirectoryProperty)_properties.get(0));
     }
 
     /**
@@ -104,44 +90,10 @@ public final class PropertyTable impleme
      */
     public RootProperty getRoot()
     {
-
         // it's always the first element in the List
         return ( RootProperty ) _properties.get(0);
     }
-
-    /**
-     * Prepare to be written
-     */
-    public void preWrite()
-    {
-        Property[] properties = _properties.toArray(new Property[_properties.size()]);
-
-        // give each property its index
-        for (int k = 0; k < properties.length; k++)
-        {
-            properties[ k ].setIndex(k);
-        }
-
-        // allocate the blocks for the property table
-        _blocks = PropertyBlock.createPropertyBlockArray(_bigBigBlockSize, _properties);
-
-        // prepare each property for writing
-        for (int k = 0; k < properties.length; k++)
-        {
-            properties[ k ].preWrite();
-        }
-    }
-
-    /**
-     * Get the start block for the property table
-     *
-     * @return start block index
-     */
-    public int getStartBlock()
-    {
-        return _start_block;
-    }
-
+    
     private void populatePropertyTree(DirectoryProperty root)
         throws IOException
     {
@@ -179,14 +131,13 @@ public final class PropertyTable impleme
     }
 
     /**
-     * Return the number of BigBlock's this instance uses
+     * Get the start block for the property table
      *
-     * @return count of BigBlock instances
+     * @return start block index
      */
-    public int countBlocks()
+    public int getStartBlock()
     {
-        return (_blocks == null) ? 0
-                                 : _blocks.length;
+        return _header_block.getPropertyStart();
     }
 
     /**
@@ -197,27 +148,6 @@ public final class PropertyTable impleme
      */
     public void setStartBlock(final int index)
     {
-        _start_block = index;
-    }
-
-    /**
-     * Write the storage to an OutputStream
-     *
-     * @param stream the OutputStream to which the stored data should
-     *               be written
-     *
-     * @exception IOException on problems writing to the specified
-     *            stream
-     */
-    public void writeBlocks(final OutputStream stream)
-        throws IOException
-    {
-        if (_blocks != null)
-        {
-            for (int j = 0; j < _blocks.length; j++)
-            {
-                _blocks[ j ].writeBlocks(stream);
-            }
-        }
+        _header_block.setPropertyStart(index);
     }
 }

Modified: poi/trunk/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java?rev=1051029&r1=1051028&r2=1051029&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java Mon Dec 20
09:30:32 2010
@@ -71,7 +71,8 @@ public final class TestPropertyTable ext
 	public void testWriterPropertyTable() throws IOException {
 
 		// create the PropertyTable
-		PropertyTable table = new PropertyTable(POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS);
+	   HeaderBlock   headerBlock = new HeaderBlock(POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS);
+		PropertyTable table = new PropertyTable(headerBlock);
 
 		// create three DocumentProperty instances and add them to the
 		// PropertyTable

Modified: poi/trunk/src/testcases/org/apache/poi/poifs/storage/TestSmallBlockTableWriter.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/storage/TestSmallBlockTableWriter.java?rev=1051029&r1=1051028&r2=1051029&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/storage/TestSmallBlockTableWriter.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/storage/TestSmallBlockTableWriter.java Mon
Dec 20 09:30:32 2010
@@ -75,7 +75,9 @@ public final class TestSmallBlockTableWr
         documents
             .add(new POIFSDocument("doc9",
                                    new ByteArrayInputStream(new byte[ 9 ])));
-        RootProperty               root = new PropertyTable(POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS).getRoot();
+        
+        HeaderBlock              header = new HeaderBlock(POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS);
+        RootProperty               root = new PropertyTable(header).getRoot();
         SmallBlockTableWriter      sbtw = new SmallBlockTableWriter(
               POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS, documents,root);
         BlockAllocationTableWriter bat  = sbtw.getSBAT();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message