Author: jukka
Date: Mon Mar  1 10:25:51 2010
New Revision: 917446

URL: http://svn.apache.org/viewvc?rev=917446&view=rev
Log:
PDFBOX-637: problem with static code in COSInteger/COSNumber

Fixed as suggested by Johannes Koch. We need to keep the COSNumber.ZERO and 
COSNumber.ONE constants around for backwards compatibility with PDFBox 1.0.

Also use lazy initialization for the the COSInteger.STATIC array.

Added:
    pdfbox/trunk/src/test/java/org/apache/pdfbox/cos/TestCOSInteger.java
Modified:
    pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSInteger.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSNumber.java
    
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java
    
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
    
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1AfmPfbFont.java
    
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDLineDashPattern.java
    
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderStyleDictionary.java

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSInteger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSInteger.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSInteger.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSInteger.java Mon Mar  1 
10:25:51 2010
@@ -22,7 +22,6 @@
 import org.apache.pdfbox.exceptions.COSVisitorException;
 
 /**
- *
  * This class represents an integer number in a PDF document.
  *
  * @author <a href="mailto:[email protected]";>Ben Litchfield</a>
@@ -47,11 +46,17 @@
      */
     private static final COSInteger[] STATIC = new COSInteger[HIGH - LOW + 1];
 
-    static {
-        for (int i = 0; i < STATIC.length; i++) {
-            STATIC[i] = new COSInteger(i + LOW);
-        }
-    }
+    /** Constant for the number zero. */
+    public static final COSInteger ZERO = get(0); 
+
+    /** Constant for the number one. */
+    public static final COSInteger ONE = get(1); 
+
+    /** Constant for the number two. */
+    public static final COSInteger TWO = get(2); 
+
+    /** Constant for the number three. */
+    public static final COSInteger THREE = get(3); 
 
     /**
      * Returns a COSInteger instance with the given value.
@@ -61,7 +66,12 @@
      */
     public static COSInteger get(long val) {
         if (LOW <= val && val <= HIGH) {
-            return STATIC[(int) val - LOW];
+            int index = (int) val - LOW;
+            // no synchronization needed
+            if (STATIC[index] == null) {
+                STATIC[index] = new COSInteger(val);
+            }
+            return STATIC[index];
         } else {
             return new COSInteger(val);
         }
@@ -209,4 +219,5 @@
     {
         output.write(String.valueOf(value).getBytes());
     }
+
 }

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSNumber.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSNumber.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSNumber.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/cos/COSNumber.java Mon Mar  1 
10:25:51 2010
@@ -26,28 +26,17 @@
  */
 public abstract class COSNumber extends COSBase
 {
-    
-    /**
-     * ZERO.
-    */
-    public static final COSInteger ZERO = COSInteger.get( 0 );
-
-    /**
-     * ONE.
-    */
-    public static final COSInteger ONE = COSInteger.get( 1 );
 
     /**
-     * TWO.
-    */
-    public static final COSInteger TWO = COSInteger.get( 2 );
+     * @deprecated Use the {...@link COSInteger#ZERO} constant instead
+     */
+    public static final COSInteger ZERO = COSInteger.ZERO;
 
     /**
-     * THREE.
-    */
-    public static final COSInteger THREE = COSInteger.get( 3 );
+     * @deprecated Use the {...@link COSInteger#ONE} constant instead
+     */
+    public static final COSInteger ONE = COSInteger.ONE;
 
-    
     /**
      * This will get the float value of this number.
      *

Modified: 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java 
(original)
+++ 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java 
Mon Mar  1 10:25:51 2010
@@ -25,7 +25,6 @@
 import org.apache.pdfbox.cos.COSDocument;
 import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.persistence.util.COSObjectKey;
 
@@ -71,7 +70,7 @@
             if(indexArray == null)
             {
                 indexArray = new COSArray();
-                indexArray.add(COSNumber.ZERO);
+                indexArray.add(COSInteger.ZERO);
                 indexArray.add(stream.getDictionaryObject(COSName.SIZE));
             }
             

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java 
(original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java Mon 
Mar  1 10:25:51 2010
@@ -41,7 +41,6 @@
 import org.apache.pdfbox.cos.COSDocument;
 import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.exceptions.COSVisitorException;
@@ -143,7 +142,7 @@
         pages.setItem( COSName.TYPE, COSName.PAGES );
         COSArray kidsArray = new COSArray();
         pages.setItem( COSName.KIDS, kidsArray );
-        pages.setItem( COSName.COUNT, COSNumber.ZERO );
+        pages.setItem( COSName.COUNT, COSInteger.ZERO );
     }
 
     private void generatePageMap() 

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java 
(original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/PDPageNode.java Mon 
Mar  1 10:25:51 2010
@@ -19,6 +19,7 @@
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSNumber;
 
@@ -48,7 +49,7 @@
         page = new COSDictionary();
         page.setItem( COSName.TYPE, COSName.PAGES );
         page.setItem( COSName.KIDS, new COSArray() );
-        page.setItem( COSName.COUNT, COSNumber.ZERO );
+        page.setItem( COSName.COUNT, COSInteger.ZERO );
     }
 
     /**

Modified: 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java
 (original)
+++ 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java
 Mon Mar  1 10:25:51 2010
@@ -20,7 +20,6 @@
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSInteger;
-import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorState;
@@ -181,13 +180,13 @@
         if( d == null )
         {
             d = new COSArray();
-            d.add( COSNumber.THREE );
+            d.add( COSInteger.THREE );
             dictionary.setItem( "D", d );
         }
         COSArray lineArray = new COSArray();
         lineArray.add( d );
         //dash phase is not specified and assumed to be zero.
-        lineArray.add( COSNumber.ZERO );
+        lineArray.add( COSInteger.ZERO );
         pattern = new PDLineDashPattern( lineArray );
         return pattern;
     }

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java 
(original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java Mon 
Mar  1 10:25:51 2010
@@ -30,8 +30,8 @@
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSFloat;
+import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.cos.COSString;
 
@@ -734,11 +734,11 @@
         {
             array = new COSArray();
             array.add( new COSFloat( 0.001f ) );
-            array.add( COSNumber.ZERO );
-            array.add( COSNumber.ZERO );
+            array.add( COSInteger.ZERO );
+            array.add( COSInteger.ZERO );
             array.add( new COSFloat( 0.001f ) );
-            array.add( COSNumber.ZERO );
-            array.add( COSNumber.ZERO );
+            array.add( COSInteger.ZERO );
+            array.add( COSInteger.ZERO );
         }
         matrix = new PDMatrix(array);
 

Modified: 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1AfmPfbFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1AfmPfbFont.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1AfmPfbFont.java
 (original)
+++ 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1AfmPfbFont.java
 Mon Mar  1 10:25:51 2010
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.pdfbox.pdmodel.font;
 
 import java.io.BufferedInputStream;
@@ -39,8 +38,9 @@
 import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSNumber;
+
 /**
  * This is implementation of the Type1 Font
  * with a afm and a pfb file.
@@ -226,7 +226,7 @@
     private DictionaryEncoding afmToDictionary(AFMEncoding encoding) throws 
java.io.IOException 
     {
         COSArray array = new COSArray();
-        array.add(COSNumber.ZERO);
+        array.add(COSInteger.ZERO);
         for (int i = 0; i < 256; i++) 
         {
             array.add(encoding.getName(i));

Modified: 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDLineDashPattern.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDLineDashPattern.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDLineDashPattern.java
 (original)
+++ 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDLineDashPattern.java
 Mon Mar  1 10:25:51 2010
@@ -44,7 +44,7 @@
     {
         lineDashPattern = new COSArray();
         lineDashPattern.add( new COSArray() );
-        lineDashPattern.add( COSNumber.ZERO );
+        lineDashPattern.add( COSInteger.ZERO );
     }
 
     /**

Modified: 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderStyleDictionary.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderStyleDictionary.java?rev=917446&r1=917445&r2=917446&view=diff
==============================================================================
--- 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderStyleDictionary.java
 (original)
+++ 
pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderStyleDictionary.java
 Mon Mar  1 10:25:51 2010
@@ -19,7 +19,7 @@
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSArray;
-import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.cos.COSInteger;
 
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern;
@@ -174,7 +174,7 @@
         if (d == null)
         {
             d = new COSArray();
-            d.add( COSNumber.THREE );
+            d.add( COSInteger.THREE );
             getDictionary().setItem( "D", d );
         }
         return new PDLineDashPattern( d, 0 );

Added: pdfbox/trunk/src/test/java/org/apache/pdfbox/cos/TestCOSInteger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/src/test/java/org/apache/pdfbox/cos/TestCOSInteger.java?rev=917446&view=auto
==============================================================================
--- pdfbox/trunk/src/test/java/org/apache/pdfbox/cos/TestCOSInteger.java (added)
+++ pdfbox/trunk/src/test/java/org/apache/pdfbox/cos/TestCOSInteger.java Mon 
Mar  1 10:25:51 2010
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.cos;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ * A test case for COSInteger
+ * 
+ * @author Koch
+ */
+public class TestCOSInteger extends TestCase
+{
+
+    public void testGet()
+    {
+        for (int i = -200; i <= 300; i++)
+        {
+            Assert.assertEquals(i, COSInteger.get(i).intValue());
+        }
+    }
+
+}
\ No newline at end of file


Reply via email to