Author: lehmi
Date: Wed Jun  8 10:24:36 2011
New Revision: 1133328

URL: http://svn.apache.org/viewvc?rev=1133328&view=rev
Log:
PDFBOX-1013: fixed NPE as proposed by Craig Stires, added some more COSName 
constants, introduced more default values

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDShading.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=1133328&r1=1133327&r2=1133328&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Wed 
Jun  8 10:24:36 2011
@@ -86,6 +86,10 @@ public final class COSName extends COSBa
     /**
      * A common COSName value.
      */
+    public static final COSName ANTI_ALIAS = new COSName( "AntiAlias" );
+    /**
+     * A common COSName value.
+     */
     public static final COSName AP_REF = new COSName( "APRef" );
     /**
      * "Artifact"
@@ -275,9 +279,13 @@ public final class COSName extends COSBa
      */
     public static final COSName COLUMNS = new COSName( "Columns" );
     /**
-    * A common COSName value.
-    */
+     * A common COSName value.
+     */
     public static final COSName CONTENTS = new COSName( "Contents" );
+     /**
+      * A common COSName value.
+      */
+    public static final COSName COORDS = new COSName( "Coords" );
     /**
     * A common COSName value.
     */
@@ -433,6 +441,11 @@ public final class COSName extends COSBa
     /** "ExtGState" */
     public static final COSName EXT_G_STATE = new COSName( "ExtGState" );
 
+    /**
+     * A common COSName value.
+     */
+    public static final COSName EXTEND = new COSName( "Extend" );
+
     /** "Extends" */
     public static final COSName EXTENDS = new COSName( "Extends" );
 
@@ -536,6 +549,10 @@ public final class COSName extends COSBa
     /**
      * A common COSName value.
      */
+    public static final COSName FUNCTION = new COSName( "Function" );
+    /**
+     * A common COSName value.
+     */
     public static final COSName FUNCTION_TYPE = new COSName( "FunctionType" );
     /**
      * A common COSName value.
@@ -947,6 +964,10 @@ public final class COSName extends COSBa
     /**
      * A common COSName value.
      */
+    public static final COSName SHADING_TYPE = new COSName( "ShadingType" );
+    /**
+     * A common COSName value.
+     */
     public static final COSName SM = new COSName( "SM" );
     /**
      * A common COSName value.

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDShading.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDShading.java?rev=1133328&r1=1133327&r2=1133328&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDShading.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDShading.java
 Wed Jun  8 10:24:36 2011
@@ -20,6 +20,7 @@ import org.apache.pdfbox.pdmodel.common.
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSBoolean;
 import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSFloat;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpaceFactory;
@@ -41,7 +42,11 @@ public class PDShading implements COSObj
 {
     private COSDictionary DictShading;
     private COSName shadingname;
-
+    private COSArray domain = null;
+    private COSArray extend = null;
+    private PDFunction function = null;
+    private PDColorSpace colorspace = null;
+    
     /**
      * The name of this object.
      */
@@ -105,7 +110,7 @@ public class PDShading implements COSObj
     */
     public int getShadingType()
     {
-        return DictShading.getInt("ShadingType");
+        return DictShading.getInt(COSName.SHADING_TYPE);
     }
     
     /**
@@ -116,7 +121,11 @@ public class PDShading implements COSObj
     */
     public PDColorSpace getColorSpace() throws IOException
     {
-        return 
PDColorSpaceFactory.createColorSpace(DictShading.getDictionaryObject("ColorSpace"));
+        if (colorspace == null)
+        {
+            colorspace = 
PDColorSpaceFactory.createColorSpace(DictShading.getDictionaryObject(COSName.COLORSPACE));
+        }
+        return colorspace;
     }
     
     /**
@@ -126,7 +135,7 @@ public class PDShading implements COSObj
     */
     public boolean getAntiAlias()
     {
-        return DictShading.getBoolean("AntiAlias",false);
+        return DictShading.getBoolean(COSName.ANTI_ALIAS,false);
     }
     
     /**
@@ -136,7 +145,7 @@ public class PDShading implements COSObj
     */
     public COSArray getCoords()
     {
-        return (COSArray)(DictShading.getDictionaryObject("Coords"));
+        return (COSArray)(DictShading.getDictionaryObject(COSName.COORDS));
     }
     
     /**
@@ -146,7 +155,11 @@ public class PDShading implements COSObj
     */
     public PDFunction getFunction() throws IOException
     {
-        return PDFunction.create(DictShading.getDictionaryObject("Function"));
+        if (function == null)
+        {
+            function = 
PDFunction.create(DictShading.getDictionaryObject(COSName.FUNCTION));
+        }
+        return function;
     }
     
     /**
@@ -156,7 +169,18 @@ public class PDShading implements COSObj
     */
     public COSArray getDomain()
     {
-        return (COSArray)(DictShading.getDictionaryObject("Domain"));
+        if (domain == null) 
+        {
+            domain = 
(COSArray)(DictShading.getDictionaryObject(COSName.DOMAIN));
+            // use default values
+            if (domain == null) 
+            {
+                domain = new COSArray();
+                domain.add(new COSFloat(0.0f));
+                domain.add(new COSFloat(1.0f));
+            }
+        }
+        return domain;
     }
     
     /**
@@ -167,15 +191,18 @@ public class PDShading implements COSObj
     */
     public COSArray getExtend()
     {
-        COSArray 
arExtend=(COSArray)(DictShading.getDictionaryObject("Extend"));
-        if (arExtend == null)
+        if (extend == null)
         {
-            arExtend = new COSArray();
-            arExtend.add(COSBoolean.FALSE);
-            arExtend.add(COSBoolean.FALSE);
+            extend = 
(COSArray)(DictShading.getDictionaryObject(COSName.EXTEND));
+            // use default values
+            if (extend == null)
+            {
+                extend = new COSArray();
+                extend.add(COSBoolean.FALSE);
+                extend.add(COSBoolean.FALSE);
+            }
         }
-        
-        return arExtend;
+        return extend;
     }
     
     /**
@@ -205,7 +232,7 @@ public class PDShading implements COSObj
             + "\tShadingType: " + getShadingType() + "\n"
             + "\tColorSpace: " + sColorSpace + "\n"
             + "\tAntiAlias: " + getAntiAlias() + "\n"
-            + "\tCoords: " + getCoords().toString() + "\n"
+            + "\tCoords: " + (getCoords() != null ? getCoords().toString() : 
"") + "\n"
             + "\tDomain: " + getDomain().toString() + "\n"
             + "\tFunction: " + sFunction + "\n"
             + "\tExtend: " + getExtend().toString() + "\n"


Reply via email to