You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2013/03/10 18:07:26 UTC

svn commit: r1454877 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/ main/java/org/apache/pdfbox/pdmodel/ main/java/org/apache/pdfbox/pdmodel/common/ test/java/org/apache/pdfbox/ test/java/org/apache/pdfbox/pdmodel/common/

Author: lehmi
Date: Sun Mar 10 17:07:26 2013
New Revision: 1454877

URL: http://svn.apache.org/r1454877
Log:
PDFBOX-1380: improved calculation of the Limits values based on a proposal by Dominic Tubach

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractText.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDestinationNameTreeNode.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDEmbeddedFilesNameTreeNode.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDJavascriptNameTreeNode.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNameTreeNode.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractText.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractText.java?rev=1454877&r1=1454876&r2=1454877&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractText.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractText.java Sun Mar 10 17:07:26 2013
@@ -28,6 +28,7 @@ import org.apache.pdfbox.pdmodel.PDDocum
 import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
 import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary;
 import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification;
 import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile;
 import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
@@ -281,9 +282,9 @@ public class ExtractText
                     PDEmbeddedFilesNameTreeNode embeddedFiles = names.getEmbeddedFiles();
                     if (embeddedFiles != null)
                     {
-                        Map<String,Object> embeddedFileNames = embeddedFiles.getNames();
+                        Map<String,COSObjectable> embeddedFileNames = embeddedFiles.getNames();
                         if (embeddedFileNames != null) {
-                            for (Map.Entry<String,Object> ent : embeddedFileNames.entrySet()) 
+                            for (Map.Entry<String,COSObjectable> ent : embeddedFileNames.entrySet()) 
                             {
                                 if (debug)
                                 {

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDestinationNameTreeNode.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDestinationNameTreeNode.java?rev=1454877&r1=1454876&r2=1454877&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDestinationNameTreeNode.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDestinationNameTreeNode.java Sun Mar 10 17:07:26 2013
@@ -21,6 +21,7 @@ import java.io.IOException;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.common.PDNameTreeNode;
 import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination;
 import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination;
@@ -55,7 +56,7 @@ public class PDDestinationNameTreeNode e
     /**
      * {@inheritDoc}
      */
-    protected Object convertCOSToPD( COSBase base ) throws IOException
+    protected COSObjectable convertCOSToPD( COSBase base ) throws IOException
     {
         COSBase destination = base;
         if( base instanceof COSDictionary )

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDEmbeddedFilesNameTreeNode.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDEmbeddedFilesNameTreeNode.java?rev=1454877&r1=1454876&r2=1454877&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDEmbeddedFilesNameTreeNode.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDEmbeddedFilesNameTreeNode.java Sun Mar 10 17:07:26 2013
@@ -20,6 +20,7 @@ import java.io.IOException;
 
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.common.PDNameTreeNode;
 import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification;
 
@@ -52,10 +53,9 @@ public class PDEmbeddedFilesNameTreeNode
     /**
      * {@inheritDoc}
      */
-    protected Object convertCOSToPD( COSBase base ) throws IOException
+    protected COSObjectable convertCOSToPD( COSBase base ) throws IOException
     {
-        COSBase destination = base;
-        return new PDComplexFileSpecification( (COSDictionary)destination );
+        return new PDComplexFileSpecification( (COSDictionary)base );
     }
 
     /**

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDJavascriptNameTreeNode.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDJavascriptNameTreeNode.java?rev=1454877&r1=1454876&r2=1454877&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDJavascriptNameTreeNode.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDJavascriptNameTreeNode.java Sun Mar 10 17:07:26 2013
@@ -22,6 +22,7 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.cos.COSString;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.common.PDNameTreeNode;
 import org.apache.pdfbox.pdmodel.common.PDTextStream;
 
@@ -54,7 +55,7 @@ public class PDJavascriptNameTreeNode ex
     /**
      * {@inheritDoc}
      */
-    protected Object convertCOSToPD( COSBase base ) throws IOException
+    protected COSObjectable convertCOSToPD( COSBase base ) throws IOException
     {
         PDTextStream stream = null;
         if( base instanceof COSString )

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNameTreeNode.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNameTreeNode.java?rev=1454877&r1=1454876&r2=1454877&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNameTreeNode.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNameTreeNode.java Sun Mar 10 17:07:26 2013
@@ -17,15 +17,14 @@
 package org.apache.pdfbox.pdmodel.common;
 
 import java.io.IOException;
-import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
@@ -33,7 +32,7 @@ import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSString;
 
 /**
- * This class represends a PDF Name tree.  See the PDF Reference 1.5 section 3.8.5
+ * This class represents a PDF Name tree.  See the PDF Reference 1.5 section 3.8.5
  * for more details.
  *
  * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
@@ -41,16 +40,17 @@ import org.apache.pdfbox.cos.COSString;
  */
 public class PDNameTreeNode implements COSObjectable
 {
-    private static final Log log = LogFactory.getLog(PDNameTreeNode.class);
+    private static final Log LOG = LogFactory.getLog(PDNameTreeNode.class);
     private COSDictionary node;
-    private Class valueType = null;
+    private Class<? extends COSObjectable> valueType = null;
+    private PDNameTreeNode parent = null;
 
     /**
      * Constructor.
      *
      * @param valueClass The PD Model type of object that is the value.
      */
-    public PDNameTreeNode( Class valueClass )
+    public PDNameTreeNode( Class<? extends COSObjectable> valueClass )
     {
         node = new COSDictionary();
         valueType = valueClass;
@@ -62,7 +62,7 @@ public class PDNameTreeNode implements C
      * @param dict The dictionary that holds the name information.
      * @param valueClass The PD Model type of object that is the value.
      */
-    public PDNameTreeNode( COSDictionary dict, Class valueClass )
+    public PDNameTreeNode( COSDictionary dict, Class<? extends COSObjectable> valueClass )
     {
         node = dict;
         valueType = valueClass;
@@ -89,23 +89,53 @@ public class PDNameTreeNode implements C
     }
 
     /**
+     * Returns the parent node.
+     * 
+     * @return parent node
+     */
+    public PDNameTreeNode getParent()
+    {
+        return parent;
+    }
+
+    /**
+     * Sets the parent to the given node.
+     * 
+     * @param parentNode the node to be set as parent
+     */
+    public void setParent(PDNameTreeNode parentNode)
+    {
+        parent = parentNode;
+        calculateLimits();
+    }
+    
+    /**
+     * Determines if this is a root node or not.
+     * 
+     * @return true if this is a root node
+     */
+    public boolean isRootNode()
+    {
+        return parent == null;
+    }
+    /**
      * Return the children of this node.  This list will contain PDNameTreeNode objects.
      *
      * @return The list of children or null if there are no children.
      */
-    public List getKids()
+    public List<PDNameTreeNode> getKids()
     {
 
-        List retval = null;
+        List<PDNameTreeNode> retval = null;
         COSArray kids = (COSArray)node.getDictionaryObject( COSName.KIDS );
         if( kids != null )
         {
-            List pdObjects = new ArrayList();
+            List<PDNameTreeNode> pdObjects = new ArrayList<PDNameTreeNode>();
             for( int i=0; i<kids.size(); i++ )
             {
                 pdObjects.add( createChildNode( (COSDictionary)kids.getObject(i) ) );
             }
-            retval = new COSArrayList(pdObjects,kids);
+            retval = new COSArrayList<PDNameTreeNode>(pdObjects,kids);
         }
 
         return retval;
@@ -116,20 +146,68 @@ public class PDNameTreeNode implements C
      *
      * @param kids The children of this named tree.
      */
-    public void setKids( List kids )
+    public void setKids( List<? extends PDNameTreeNode> kids )
     {
         if (kids != null && kids.size() > 0)
         {
-            PDNameTreeNode firstKid = (PDNameTreeNode) kids.get(0);
-            PDNameTreeNode lastKid = (PDNameTreeNode) kids.get(kids.size() - 1);
-            String lowerLimit = firstKid.getLowerLimit();
-            this.setLowerLimit(lowerLimit);
-            String upperLimit = lastKid.getUpperLimit();
-            this.setUpperLimit(upperLimit);
+            for (PDNameTreeNode kidsNode : kids)
+                kidsNode.setParent(this);
+            node.setItem( COSName.KIDS, COSArrayList.converterToCOSArray( kids ) );
+            calculateLimits();
+        }
+        else 
+        {
+            // Remove Names and Limits if there are no kids
+            node.setItem(COSName.NAMES, null);
+            node.setItem(COSName.LIMITS, null);
+            node.setItem(COSName.KIDS, null);
         }
-        node.setItem( "Kids", COSArrayList.converterToCOSArray( kids ) );
     }
 
+    private void calculateLimits()
+    {
+        if (isRootNode())
+        {
+            node.setItem(COSName.LIMITS, null);
+        }
+        else
+        {
+            List<PDNameTreeNode> kids = getKids();
+            if (kids != null && kids.size() > 0)
+            {
+                PDNameTreeNode firstKid = kids.get(0);
+                PDNameTreeNode lastKid = kids.get(kids.size() - 1);
+                String lowerLimit = firstKid.getLowerLimit();
+                setLowerLimit(lowerLimit);
+                String upperLimit = lastKid.getUpperLimit();
+                setUpperLimit(upperLimit);
+            }
+            else
+            {
+                try 
+                {
+                    Map<String, COSObjectable> names = getNames();
+                    if (names != null && names.size() >= 2)
+                    {
+                        Object[] keys = names.keySet().toArray();
+                        String lowerLimit = (String)keys[0];
+                        setLowerLimit(lowerLimit);
+                        String upperLimit = (String)keys[keys.length-1];
+                        setUpperLimit(upperLimit);
+                    }
+                    else
+                    {
+                        node.setItem(COSName.LIMITS, null);
+                    }
+                }
+                catch (IOException exception)
+                {
+                    node.setItem(COSName.LIMITS, null);
+                    LOG.error("Error while calculating the Limits of a PageNameTreeNode:", exception);
+                }
+            }
+        }
+    }
     /**
      * The name to retrieve.
      *
@@ -142,19 +220,19 @@ public class PDNameTreeNode implements C
     public Object getValue( String name ) throws IOException
     {
         Object retval = null;
-        Map names = getNames();
+        Map<String, COSObjectable> names = getNames();
         if( names != null )
         {
             retval = names.get( name );
         }
         else
         {
-            List kids = getKids();
-            if (kids != null) 
+            List<PDNameTreeNode> kids = getKids();
+            if (kids != null)
             {
                 for( int i=0; i<kids.size() && retval == null; i++ )
                 {
-                    PDNameTreeNode childNode = (PDNameTreeNode)kids.get( i );
+                    PDNameTreeNode childNode = kids.get( i );
                     if( childNode.getLowerLimit().compareTo( name ) <= 0 &&
                         childNode.getUpperLimit().compareTo( name ) >= 0 )
                     {
@@ -164,7 +242,7 @@ public class PDNameTreeNode implements C
             }
             else
             {
-                log.warn("NameTreeNode does not have \"names\" nor \"kids\" objects.");
+                LOG.warn("NameTreeNode does not have \"names\" nor \"kids\" objects.");
             }
         }
         return retval;
@@ -179,17 +257,17 @@ public class PDNameTreeNode implements C
      *         contains no 'Names' entry
      * @throws IOException If there is an error while creating the sub types.
      */
-    public Map<String, Object> getNames() throws IOException
+    public Map<String, COSObjectable> getNames() throws IOException
     {
         COSArray namesArray = (COSArray)node.getDictionaryObject( COSName.NAMES );
         if( namesArray != null )
         {
-            Map<String, Object> names = new LinkedHashMap<String, Object>();
+            Map<String, COSObjectable> names = new LinkedHashMap<String, COSObjectable>();
             for( int i=0; i<namesArray.size(); i+=2 )
             {
                 COSString key = (COSString)namesArray.getObject(i);
                 COSBase cosValue = namesArray.getObject( i+1 );
-                names.put( key.getString(), convertCOSToPD( cosValue ) );
+                names.put( key.getString(), convertCOSToPD(cosValue) );
             }
             return Collections.unmodifiableMap(names);
         }
@@ -200,28 +278,17 @@ public class PDNameTreeNode implements C
     }
 
     /**
-     * Method to convert the COS value in the name tree to the PD Model object.  The
-     * default implementation will simply use reflection to create the correct object
-     * type.  Subclasses can do whatever they want.
+     * Method to convert the COS value in the name tree to the PD Model object. The
+     * default implementation will simply return the given COSBase object.
+     * Subclasses should do something specific.
      *
      * @param base The COS object to convert.
      * @return The converted PD Model object.
      * @throws IOException If there is an error during creation.
      */
-    protected Object convertCOSToPD( COSBase base ) throws IOException
+    protected COSObjectable convertCOSToPD( COSBase base ) throws IOException
     {
-        Object retval = null;
-        try
-        {
-            Constructor ctor = valueType.getConstructor( new Class[] { base.getClass() } );
-            retval = ctor.newInstance( new Object[] { base } );
-        }
-        catch( Throwable t )
-        {
-            throw new IOException( "Error while trying to create value in named tree:" + t.getMessage());
-
-        }
-        return retval;
+        return base;
     }
 
     /**
@@ -246,7 +313,7 @@ public class PDNameTreeNode implements C
     {
         if( names == null )
         {
-            node.setItem( "Names", (COSObjectable)null );
+            node.setItem( COSName.NAMES, (COSObjectable)null );
             node.setItem( COSName.LIMITS, (COSObjectable)null);
         }
         else
@@ -254,13 +321,13 @@ public class PDNameTreeNode implements C
             COSArray array = new COSArray();
             List<String> keys = new ArrayList<String>(names.keySet());
             Collections.sort(keys);
-            for (String key : keys) {
+            for (String key : keys) 
+            {
                 array.add(new COSString(key));
                 array.add(names.get(key));
             }
-            setLowerLimit(keys.get(0));
-            setUpperLimit(keys.get(keys.size() - 1));
-            node.setItem("Names", array);
+            node.setItem(COSName.NAMES, array);
+            calculateLimits();
         }
     }
 

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java?rev=1454877&r1=1454876&r2=1454877&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java Sun Mar 10 17:07:26 2013
@@ -31,6 +31,8 @@ import org.apache.pdfbox.io.ccitt.TestPa
 import org.apache.pdfbox.pdmodel.TestFDF;
 import org.apache.pdfbox.pdmodel.TestPDDocumentCatalog;
 import org.apache.pdfbox.pdmodel.TestPDDocumentInformation;
+import org.apache.pdfbox.pdmodel.common.TestPDNameTreeNode;
+import org.apache.pdfbox.pdmodel.common.TestPDNumberTreeNode;
 import org.apache.pdfbox.pdmodel.edit.TestPDPageContentStream;
 import org.apache.pdfbox.pdmodel.interactive.form.TestFields;
 import org.apache.pdfbox.util.TestDateUtil;
@@ -99,6 +101,9 @@ public class TestAll extends TestCase
         suite.addTestSuite( TestExtractText.class );
         
         suite.addTestSuite(TestPDPageContentStream.class);
+        
+        suite.addTestSuite(TestPDNameTreeNode.class);
+        suite.addTestSuite(TestPDNumberTreeNode.class);
 
         return suite;
     }

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java?rev=1454877&r1=1454876&r2=1454877&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java Sun Mar 10 17:07:26 2013
@@ -22,7 +22,6 @@ import java.util.SortedMap;
 import java.util.TreeMap;
 
 import org.apache.pdfbox.cos.COSInteger;
-import org.apache.pdfbox.cos.COSObject;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
@@ -44,50 +43,49 @@ public class TestPDNameTreeNode extends 
     @Override
     protected void setUp() throws Exception
     {
-        this.node5 = new PDNameTreeNode(COSObject.class);
-        SortedMap<String, COSObject> names = new TreeMap<String, COSObject>();
-        COSInteger i = COSInteger.get(89);
-        names.put("Actinium", new COSObject(i));
-        names.put("Aluminum", new COSObject(COSInteger.get(13)));
-        names.put("Americium", new COSObject(COSInteger.get(95)));
-        names.put("Antimony", new COSObject(COSInteger.get(51)));
-        names.put("Argon", new COSObject(COSInteger.get(18)));
-        names.put("Arsenic", new COSObject(COSInteger.get(33)));
-        names.put("Astatine", new COSObject(COSInteger.get(85)));
+        this.node5 = new PDNameTreeNode(COSInteger.class);
+        SortedMap<String, COSObjectable> names = new TreeMap<String, COSObjectable>();
+        names.put("Actinium", COSInteger.get(89));
+        names.put("Aluminum", COSInteger.get(13));
+        names.put("Americium", COSInteger.get(95));
+        names.put("Antimony", COSInteger.get(51));
+        names.put("Argon", COSInteger.get(18));
+        names.put("Arsenic", COSInteger.get(33));
+        names.put("Astatine", COSInteger.get(85));
         this.node5.setNames(names);
 
-        this.node24 = new PDNameTreeNode(COSObject.class);
-        names = new TreeMap<String, COSObject>();
-        names.put("Xenon", new COSObject(COSInteger.get(54)));
-        names.put("Ytterbium", new COSObject(COSInteger.get(70)));
-        names.put("Yttrium", new COSObject(COSInteger.get(39)));
-        names.put("Zinc", new COSObject(COSInteger.get(30)));
-        names.put("Zirconium", new COSObject(COSInteger.get(40)));
+        this.node24 = new PDNameTreeNode(COSInteger.class);
+        names = new TreeMap<String, COSObjectable>();
+        names.put("Xenon", COSInteger.get(54));
+        names.put("Ytterbium", COSInteger.get(70));
+        names.put("Yttrium", COSInteger.get(39));
+        names.put("Zinc", COSInteger.get(30));
+        names.put("Zirconium", COSInteger.get(40));
         this.node24.setNames(names);
 
-        this.node2 = new PDNameTreeNode(COSObject.class);
+        this.node2 = new PDNameTreeNode(COSInteger.class);
         List<PDNameTreeNode> kids = this.node2.getKids();
         if (kids == null)
         {
-            kids = new COSArrayList();
+            kids = new COSArrayList<PDNameTreeNode>();
         }
         kids.add(this.node5);
         this.node2.setKids(kids);
 
-        this.node4 = new PDNameTreeNode(COSObject.class);
+        this.node4 = new PDNameTreeNode(COSInteger.class);
         kids = this.node4.getKids();
         if (kids == null)
         {
-            kids = new COSArrayList();
+            kids = new COSArrayList<PDNameTreeNode>();
         }
         kids.add(this.node24);
         this.node4.setKids(kids);
 
-        this.node1 = new PDNameTreeNode(COSObject.class);
+        this.node1 = new PDNameTreeNode(COSInteger.class);
         kids = this.node1.getKids();
         if (kids == null)
         {
-            kids = new COSArrayList();
+            kids = new COSArrayList<PDNameTreeNode>();
         }
         kids.add(this.node2);
         kids.add(this.node4);
@@ -103,7 +101,7 @@ public class TestPDNameTreeNode extends 
         Assert.assertEquals("Zirconium", this.node24.getUpperLimit());
         Assert.assertEquals("Zirconium", this.node4.getUpperLimit());
 
-        Assert.assertEquals("Zirconium", this.node1.getUpperLimit());
+        Assert.assertEquals(null, this.node1.getUpperLimit());
     }
 
     public void testLowerLimit() throws IOException
@@ -114,7 +112,7 @@ public class TestPDNameTreeNode extends 
         Assert.assertEquals("Xenon", this.node24.getLowerLimit());
         Assert.assertEquals("Xenon", this.node4.getLowerLimit());
 
-        Assert.assertEquals("Actinium", this.node1.getLowerLimit());
+        Assert.assertEquals(null, this.node1.getLowerLimit());
     }
 
 }