]> source.dussan.org Git - poi.git/commitdiff
Sonarqube fixes
authorAndreas Beeker <kiwiwings@apache.org>
Mon, 2 Jan 2017 00:55:49 +0000 (00:55 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Mon, 2 Jan 2017 00:55:49 +0000 (00:55 +0000)
- replace RuntimeException with application specific runtime exception
- clean-up sources - add braces to if statements and add override annotations
- fix a few hslf blockers

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1776896 13f79535-47bb-0310-9956-ffa450edef68

16 files changed:
src/scratchpad/src/org/apache/poi/hslf/record/ColorSchemeAtom.java
src/scratchpad/src/org/apache/poi/hslf/record/FontEntityAtom.java
src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java
src/scratchpad/src/org/apache/poi/hslf/record/Record.java
src/scratchpad/src/org/apache/poi/hslf/record/RecordTypes.java
src/scratchpad/src/org/apache/poi/hslf/record/SlideAtom.java
src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java
src/scratchpad/src/org/apache/poi/hslf/record/TextHeaderAtom.java
src/scratchpad/src/org/apache/poi/hslf/record/TextSpecInfoAtom.java
src/scratchpad/src/org/apache/poi/hslf/record/UserEditAtom.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFreeformShape.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSimpleShape.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowEncrypted.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java

index 9d14b7bff54ce17a175b7b15fb82e22447f35691..c720a555ce57940cf88ef9bfb2b264e6b5afe5fb 100644 (file)
 
 package org.apache.poi.hslf.record;
 
-import org.apache.poi.util.LittleEndian;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
+
+import org.apache.poi.hslf.exceptions.HSLFException;
+import org.apache.poi.util.LittleEndian;
 
 /**
  * A ColorSchemeAtom (type 2032). Holds the 8 RGB values for the different
@@ -97,7 +99,7 @@ public final class ColorSchemeAtom extends RecordAtom {
                if(len < 40) {
                        len = 40;
                        if(source.length - start < 40) {
-                               throw new RuntimeException("Not enough data to form a ColorSchemeAtom (always 40 bytes long) - found " + (source.length - start));
+                               throw new HSLFException("Not enough data to form a ColorSchemeAtom (always 40 bytes long) - found " + (source.length - start));
                        }
                }
 
@@ -140,7 +142,8 @@ public final class ColorSchemeAtom extends RecordAtom {
        /**
         * We are of type 3999
         */
-       public long getRecordType() { return _type; }
+       @Override
+    public long getRecordType() { return _type; }
 
 
        /**
@@ -155,7 +158,7 @@ public final class ColorSchemeAtom extends RecordAtom {
                        writeLittleEndian(rgb,baos);
                } catch(IOException ie) {
                        // Should never happen
-                       throw new RuntimeException(ie);
+                       throw new HSLFException(ie);
                }
                byte[] b = baos.toByteArray();
                System.arraycopy(b,0,ret,0,3);
@@ -174,7 +177,7 @@ public final class ColorSchemeAtom extends RecordAtom {
         */
        public static int joinRGB(byte[] rgb) {
                if(rgb.length != 3) {
-                       throw new RuntimeException("joinRGB accepts a byte array of 3 values, but got one of " + rgb.length + " values!");
+                       throw new HSLFException("joinRGB accepts a byte array of 3 values, but got one of " + rgb.length + " values!");
                }
                byte[] with_zero = new byte[4];
                System.arraycopy(rgb,0,with_zero,0,3);
@@ -188,7 +191,8 @@ public final class ColorSchemeAtom extends RecordAtom {
         * Write the contents of the record back, so it can be written
         *  to disk
         */
-       public void writeOut(OutputStream out) throws IOException {
+       @Override
+    public void writeOut(OutputStream out) throws IOException {
                // Header - size or type unchanged
                out.write(_header);
 
index 23a7fe1e406ec682433973a0eb7e31c1fe77c2cf..80126fdb9fae8dffa090ef0120056f588324be8f 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.poi.hslf.record;
 import java.io.IOException;
 import java.io.OutputStream;
 
+import org.apache.poi.hslf.exceptions.HSLFException;
 import org.apache.poi.util.LittleEndian;
 import org.apache.poi.util.StringUtil;
 
@@ -67,6 +68,7 @@ public final class FontEntityAtom extends RecordAtom {
         LittleEndian.putInt(_header, 4, _recdata.length);
     }
 
+    @Override
     public long getRecordType() {
         return RecordTypes.FontEntityAtom.typeID;
     }
@@ -103,7 +105,7 @@ public final class FontEntityAtom extends RecordAtom {
 
                // Ensure it's not now too long
                if(name.length() > 32) {
-                       throw new RuntimeException("The length of the font name, including null termination, must not exceed 32 characters");
+                       throw new HSLFException("The length of the font name, including null termination, must not exceed 32 characters");
                }
 
                // Everything's happy, so save the name
@@ -207,7 +209,8 @@ public final class FontEntityAtom extends RecordAtom {
     /**
         * Write the contents of the record back, so it can be written to disk
         */
-       public void writeOut(OutputStream out) throws IOException {
+       @Override
+    public void writeOut(OutputStream out) throws IOException {
                out.write(_header);
                out.write(_recdata);
        }
index 85f0eb92739b492def45b2d5953a15a84e31ed09..8a1c48269697d2655184c3ef442e4b9778f003a2 100644 (file)
@@ -27,6 +27,7 @@ import java.util.Map.Entry;
 import java.util.TreeMap;
 
 import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException;
+import org.apache.poi.hslf.exceptions.HSLFException;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.LittleEndian;
 import org.apache.poi.util.POILogger;
@@ -215,7 +216,7 @@ public final class PersistPtrHolder extends PositionDependentRecordAtom
                 lastSlideId = nextSlideId;
             } catch (IOException e) {
                 // ByteArrayOutputStream is very unlikely throwing a IO exception (maybe because of OOM ...)
-                throw new RuntimeException(e);
+                throw new HSLFException(e);
             }
         }
         
index e2987b3d62aab950d78460cd51d14a131941a697..73017b798d6f5df80ce00b800a00cc2bd195a4f5 100644 (file)
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException;
+import org.apache.poi.hslf.exceptions.HSLFException;
 import org.apache.poi.util.LittleEndian;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
@@ -180,13 +181,13 @@ public abstract class Record
                        // Instantiate
                        toReturn = con.newInstance(new Object[] { b, start, len });
                } catch(InstantiationException ie) {
-                       throw new RuntimeException("Couldn't instantiate the class for type with id " + type + " on class " + c + " : " + ie, ie);
+                       throw new HSLFException("Couldn't instantiate the class for type with id " + type + " on class " + c + " : " + ie, ie);
                } catch(java.lang.reflect.InvocationTargetException ite) {
-                       throw new RuntimeException("Couldn't instantiate the class for type with id " + type + " on class " + c + " : " + ite + "\nCause was : " + ite.getCause(), ite);
+                       throw new HSLFException("Couldn't instantiate the class for type with id " + type + " on class " + c + " : " + ite + "\nCause was : " + ite.getCause(), ite);
                } catch(IllegalAccessException iae) {
-                       throw new RuntimeException("Couldn't access the constructor for type with id " + type + " on class " + c + " : " + iae, iae);
+                       throw new HSLFException("Couldn't access the constructor for type with id " + type + " on class " + c + " : " + iae, iae);
                } catch(NoSuchMethodException nsme) {
-                       throw new RuntimeException("Couldn't access the constructor for type with id " + type + " on class " + c + " : " + nsme, nsme);
+                       throw new HSLFException("Couldn't access the constructor for type with id " + type + " on class " + c + " : " + nsme, nsme);
                }
 
                // Handling for special kinds of records follow
index 6e3932606a947b16f9a5dc46139c1dde64c77907..c0c57255f334bf518125284c7086da7d58ae61aa 100644 (file)
@@ -279,7 +279,7 @@ public enum RecordTypes {
 //               }
 //            }
 //        } catch (IllegalAccessException e){
-//            throw new RuntimeException("Failed to initialize records types");
+//            throw new HSLFException("Failed to initialize records types");
 //        }
 //    }
 
index 68f75c09b16291d7fe217439589bf10d540b8257..16be0c6a808d60dcd2957cde4434d584c5cb7d78 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.poi.hslf.record;
 import java.io.IOException;
 import java.io.OutputStream;
 
+import org.apache.poi.hslf.exceptions.HSLFException;
 import org.apache.poi.util.LittleEndian;
 
 /**
@@ -138,13 +139,15 @@ public final class SlideAtom extends RecordAtom
        /**
         * We are of type 1007
         */
-       public long getRecordType() { return _type; }
+       @Override
+    public long getRecordType() { return _type; }
 
        /**
         * Write the contents of the record back, so it can be written
         *  to disk
         */
-       public void writeOut(OutputStream out) throws IOException {
+       @Override
+    public void writeOut(OutputStream out) throws IOException {
                // Header
                out.write(_header);
 
@@ -211,7 +214,7 @@ public final class SlideAtom extends RecordAtom
                 */
                public SSlideLayoutAtom(byte[] data) {
                        if(data.length != 12) {
-                               throw new RuntimeException("SSlideLayoutAtom created with byte array not 12 bytes long - was " + data.length + " bytes in size");
+                               throw new HSLFException("SSlideLayoutAtom created with byte array not 12 bytes long - was " + data.length + " bytes in size");
                        }
 
                        // Grab out our data
index bfb9d741abd7977512f29e724a42d818f6d78016..238385b684e56d3f53a259cc65adb18faff5a084 100644 (file)
 
 package org.apache.poi.hslf.record;
 
-import java.io.*;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.poi.hslf.model.textproperties.*;
+import org.apache.poi.hslf.exceptions.HSLFException;
+import org.apache.poi.hslf.model.textproperties.TextPropCollection;
 import org.apache.poi.hslf.model.textproperties.TextPropCollection.TextPropType;
-import org.apache.poi.util.*;
+import org.apache.poi.util.HexDump;
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.POILogger;
 
 /**
  * A StyleTextPropAtom (type 4001). Holds basic character properties
@@ -121,7 +126,7 @@ public final class StyleTextPropAtom extends RecordAtom
         if(len < 18) {
             len = 18;
             if(source.length - start < 18) {
-                throw new RuntimeException("Not enough data to form a StyleTextPropAtom (min size 18 bytes long) - found " + (source.length - start));
+                throw new HSLFException("Not enough data to form a StyleTextPropAtom (min size 18 bytes long) - found " + (source.length - start));
             }
         }
 
@@ -167,7 +172,7 @@ public final class StyleTextPropAtom extends RecordAtom
         try {
             updateRawContents();
         } catch (IOException e) {
-            throw new RuntimeException(e);
+            throw new HSLFException(e);
         }
     }
 
@@ -175,6 +180,7 @@ public final class StyleTextPropAtom extends RecordAtom
     /**
      * We are of type 4001
      */
+    @Override
     public long getRecordType() { return _type; }
 
 
@@ -182,6 +188,7 @@ public final class StyleTextPropAtom extends RecordAtom
      * Write the contents of the record back, so it can be written
      *  to disk
      */
+    @Override
     public void writeOut(OutputStream out) throws IOException {
         // First thing to do is update the raw bytes of the contents, based
         //  on the properties
@@ -203,7 +210,9 @@ public final class StyleTextPropAtom extends RecordAtom
      *  contains, so we can go ahead and initialise ourselves.
      */
     public void setParentTextSize(int size) {
-        if (initialised) return;
+        if (initialised) {
+            return;
+        }
         
         int pos = 0;
         int textHandled = 0;
@@ -365,6 +374,7 @@ public final class StyleTextPropAtom extends RecordAtom
      *
      * @return the string representation of the record data
      */
+    @Override
     public String toString(){
         StringBuffer out = new StringBuffer();
 
index 3fab236a1c218a90db0f208ea419ba86fffce9c8..2d4f41bddc80bcffc7222d9e9f49466e100cd7be 100644 (file)
 
 package org.apache.poi.hslf.record;
 
-import org.apache.poi.util.LittleEndian;
 import java.io.IOException;
 import java.io.OutputStream;
 
+import org.apache.poi.hslf.exceptions.HSLFException;
+import org.apache.poi.util.LittleEndian;
+
 /**
  * A TextHeaderAtom  (type 3999). Holds information on what kind of
  *  text is contained in the TextBytesAtom / TextCharsAtom that follows
@@ -62,8 +64,10 @@ public final class TextHeaderAtom extends RecordAtom implements ParentAwareRecor
      */
        public void setIndex(int index) { this.index = index; }
 
-       public RecordContainer getParentRecord() { return parentRecord; }
-       public void setParentRecord(RecordContainer record) { this.parentRecord = record; }
+       @Override
+    public RecordContainer getParentRecord() { return parentRecord; }
+       @Override
+    public void setParentRecord(RecordContainer record) { this.parentRecord = record; }
 
        /* *************** record code follows ********************** */
 
@@ -75,7 +79,7 @@ public final class TextHeaderAtom extends RecordAtom implements ParentAwareRecor
                if(len < 12) {
                        len = 12;
                        if(source.length - start < 12) {
-                               throw new RuntimeException("Not enough data to form a TextHeaderAtom (always 12 bytes long) - found " + (source.length - start));
+                               throw new HSLFException("Not enough data to form a TextHeaderAtom (always 12 bytes long) - found " + (source.length - start));
                        }
                }
 
@@ -102,13 +106,15 @@ public final class TextHeaderAtom extends RecordAtom implements ParentAwareRecor
        /**
         * We are of type 3999
         */
-       public long getRecordType() { return _type; }
+       @Override
+    public long getRecordType() { return _type; }
 
        /**
         * Write the contents of the record back, so it can be written
         *  to disk
         */
-       public void writeOut(OutputStream out) throws IOException {
+       @Override
+    public void writeOut(OutputStream out) throws IOException {
                // Header - size or type unchanged
                out.write(_header);
 
index d18054ee61301b99a84970351c817afcb3bf9f82..7f87086bfa2038d20c2e2584842d8f7e2bbabfbf 100644 (file)
@@ -112,7 +112,7 @@ public final class TextSpecInfoAtom extends RecordAtom {
         try {
             sir.writeOut(bos);
         } catch (IOException e) {
-            throw new RuntimeException(e);
+            throw new HSLFException(e);
         }
         _data = bos.toByteArray();
 
index b1bd6bba3e4ee59e67093feec37355e61a6bf7df..54a0e5033aa6a449cc4c9239a351943ac208d8ba 100644 (file)
 
 package org.apache.poi.hslf.record;
 
-import org.apache.poi.util.LittleEndian;
-import org.apache.poi.util.LittleEndianConsts;
-
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Map;
 
+import org.apache.poi.hslf.exceptions.HSLFException;
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianConsts;
+
 /**
  * A UserEdit Atom (type 4085). Holds information which bits of the file
  *  were last used by powerpoint, the version of powerpoint last used etc.
@@ -140,18 +141,20 @@ public final class UserEditAtom extends PositionDependentRecordAtom
        /**
         * We are of type 4085
         */
-       public long getRecordType() { return _type; }
+       @Override
+    public long getRecordType() { return _type; }
 
        /**
         * At write-out time, update the references to PersistPtrs and
         *  other UserEditAtoms to point to their new positions
         */
-       public void updateOtherRecordReferences(Map<Integer,Integer> oldToNewReferencesLookup) {
+       @Override
+    public void updateOtherRecordReferences(Map<Integer,Integer> oldToNewReferencesLookup) {
                // Look up the new positions of our preceding UserEditAtomOffset
                if(lastUserEditAtomOffset != 0) {
                        Integer newLocation = oldToNewReferencesLookup.get(Integer.valueOf(lastUserEditAtomOffset));
                        if(newLocation == null) {
-                               throw new RuntimeException("Couldn't find the new location of the UserEditAtom that used to be at " + lastUserEditAtomOffset);
+                               throw new HSLFException("Couldn't find the new location of the UserEditAtom that used to be at " + lastUserEditAtomOffset);
                        }
                        lastUserEditAtomOffset = newLocation.intValue();
                }
@@ -159,7 +162,7 @@ public final class UserEditAtom extends PositionDependentRecordAtom
                // Ditto for our PersistPtr
                Integer newLocation = oldToNewReferencesLookup.get(Integer.valueOf(persistPointersOffset));
                if(newLocation == null) {
-                       throw new RuntimeException("Couldn't find the new location of the PersistPtr that used to be at " + persistPointersOffset);
+                       throw new HSLFException("Couldn't find the new location of the PersistPtr that used to be at " + persistPointersOffset);
                }
                persistPointersOffset = newLocation.intValue();
        }
@@ -168,7 +171,8 @@ public final class UserEditAtom extends PositionDependentRecordAtom
         * Write the contents of the record back, so it can be written
         *  to disk
         */
-       public void writeOut(OutputStream out) throws IOException {
+       @Override
+    public void writeOut(OutputStream out) throws IOException {
                // Header
                out.write(_header);
 
index ee8c50a716aa68b8cccc5834c6743cfb3a070729..dc05075368a081cab07be0f19c4f1f0b518469a4 100644 (file)
@@ -232,7 +232,9 @@ public final class HSLFFreeformShape extends HSLFAutoShape implements FreeformSh
 
             it.next();
         }
-        if(!isClosed) segInfo.add(SEGMENTINFO_LINETO);
+        if(!isClosed) {
+            segInfo.add(SEGMENTINFO_LINETO);
+        }
         segInfo.add(new byte[]{0x00, (byte)0x80});
 
         AbstractEscherOptRecord opt = getEscherOptRecord();
@@ -357,9 +359,11 @@ public final class HSLFFreeformShape extends HSLFAutoShape implements FreeformSh
     }
     
     private void fillPoint(byte xyMaster[], double xyPoints[]) {
-        int masterCnt = (xyMaster == null) ? 0 : xyMaster.length;
-        int pointCnt = (xyPoints == null) ? 0 : xyPoints.length;
-        if ((masterCnt != 4 && masterCnt != 8) || pointCnt != 2) {
+        if (xyMaster == null || xyPoints == null) {
+            LOG.log(POILogger.WARN, "Master bytes or points not set - ignore point");
+            return;
+        }
+        if ((xyMaster.length != 4 && xyMaster.length != 8) || xyPoints.length != 2) {
             LOG.log(POILogger.WARN, "Invalid number of master bytes for a single point - ignore point");
             return;
         }
index d8352e5bf08c63781ff6b5624b690089a2c92d22..8618dbeb0ead4ba7053056815e52a3a472106718 100644 (file)
@@ -166,7 +166,9 @@ public abstract class HSLFSimpleShape extends HSLFShape implements SimpleShape<H
         AbstractEscherOptRecord opt = getEscherOptRecord();
 
         EscherSimpleProperty p = getEscherProperty(opt, EscherProperties.LINESTYLE__NOLINEDRAWDASH);
-        if(p != null && (p.getPropertyValue() & 0x8) == 0) return null;
+        if(p != null && (p.getPropertyValue() & 0x8) == 0) {
+            return null;
+        }
 
         Color clr = getColor(EscherProperties.LINESTYLE__COLOR, EscherProperties.LINESTYLE__OPACITY, -1);
         return clr == null ? null : clr;
@@ -179,7 +181,9 @@ public abstract class HSLFSimpleShape extends HSLFShape implements SimpleShape<H
         AbstractEscherOptRecord opt = getEscherOptRecord();
 
         EscherSimpleProperty p = getEscherProperty(opt, EscherProperties.LINESTYLE__NOLINEDRAWDASH);
-        if(p != null && (p.getPropertyValue() & 0x8) == 0) return null;
+        if(p != null && (p.getPropertyValue() & 0x8) == 0) {
+            return null;
+        }
 
         Color clr = getColor(EscherProperties.LINESTYLE__BACKCOLOR, EscherProperties.LINESTYLE__OPACITY, -1);
         return clr == null ? null : clr;
@@ -319,7 +323,9 @@ public abstract class HSLFSimpleShape extends HSLFShape implements SimpleShape<H
         }
 
         name = name.replace("adj", "");
-        if ("".equals(name)) name = "1";
+        if ("".equals(name)) {
+            name = "1";
+        }
 
         short escherProp;
         switch (Integer.parseInt(name)) {
@@ -333,7 +339,7 @@ public abstract class HSLFSimpleShape extends HSLFShape implements SimpleShape<H
             case 8: escherProp = EscherProperties.GEOMETRY__ADJUST8VALUE; break;
             case 9: escherProp = EscherProperties.GEOMETRY__ADJUST9VALUE; break;
             case 10: escherProp = EscherProperties.GEOMETRY__ADJUST10VALUE; break;
-            default: throw new RuntimeException();
+            default: throw new HSLFException();
         }
 
         // TODO: the adjust values need to be corrected somehow depending on the shape width/height
@@ -392,9 +398,13 @@ public abstract class HSLFSimpleShape extends HSLFShape implements SimpleShape<H
     @Override
     public Shadow<HSLFShape,HSLFTextParagraph> getShadow() {
         AbstractEscherOptRecord opt = getEscherOptRecord();
-        if (opt == null) return null;
+        if (opt == null) {
+            return null;
+        }
         EscherProperty shadowType = opt.lookup(EscherProperties.SHADOWSTYLE__TYPE);
-        if (shadowType == null) return null;
+        if (shadowType == null) {
+            return null;
+        }
 
         return new Shadow<HSLFShape,HSLFTextParagraph>(){
             @Override
index d3a613222b61d26da69d39dcdadbc66fe77fd588..a37b7abbca2eb44ba1a4f2631f02536d0b96c22c 100644 (file)
@@ -25,6 +25,7 @@ import org.apache.poi.ddf.EscherContainerRecord;
 import org.apache.poi.ddf.EscherDgRecord;
 import org.apache.poi.ddf.EscherDggRecord;
 import org.apache.poi.ddf.EscherSpRecord;
+import org.apache.poi.hslf.exceptions.HSLFException;
 import org.apache.poi.hslf.model.Comment;
 import org.apache.poi.hslf.model.HeadersFooters;
 import org.apache.poi.hslf.record.ColorSchemeAtom;
@@ -83,7 +84,7 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
                    // Grab text from SlideListWithTexts entries
                    _paragraphs.addAll(HSLFTextParagraph.findTextParagraphs(_atomSet.getSlideRecords()));
                if (_paragraphs.isEmpty()) {
-                   throw new RuntimeException("No text records found for slide");
+                   throw new HSLFException("No text records found for slide");
                }
                } else {
                        // No text on the slide, must just be pictures
@@ -91,7 +92,9 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
 
                // Grab text from slide's PPDrawing
                for (List<HSLFTextParagraph> l : HSLFTextParagraph.findTextParagraphs(getPPDrawing(), this)) {
-                   if (!_paragraphs.contains(l)) _paragraphs.add(l);
+                   if (!_paragraphs.contains(l)) {
+                _paragraphs.add(l);
+            }
                }
        }
 
@@ -153,6 +156,7 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
      *  <li> set shapeId for the container descriptor and background
      * </p>
      */
+    @Override
     public void onCreate(){
         //initialize drawing group id
         EscherDggRecord dgg = getSlideShow().getDocumentRecord().getPPDrawingGroup().getEscherDggRecord();
@@ -176,7 +180,9 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
                 default:
                     break;
             }
-            if(spr != null) spr.setShapeId(allocateShapeId());
+            if(spr != null) {
+                spr.setShapeId(allocateShapeId());
+            }
         }
 
         //PPT doen't increment the number of saved shapes for group descriptor and background
@@ -213,7 +219,9 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
        @Override
        public String getTitle(){
                for (List<HSLFTextParagraph> tp : getTextParagraphs()) {
-                   if (tp.isEmpty()) continue;
+                   if (tp.isEmpty()) {
+                continue;
+            }
                        int type = tp.get(0).getRunType();
                        switch (type) {
                        case TextHeaderAtom.CENTER_TITLE_TYPE:
@@ -230,7 +238,8 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
        /**
         * Returns an array of all the TextRuns found
         */
-       public List<List<HSLFTextParagraph>> getTextParagraphs() { return _paragraphs; }
+       @Override
+    public List<List<HSLFTextParagraph>> getTextParagraphs() { return _paragraphs; }
 
        /**
         * Returns the (public facing) page number of this slide
@@ -257,13 +266,18 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
      *
      * @return the master sheet associated with this slide.
      */
-     public HSLFMasterSheet getMasterSheet(){
+     @Override
+    public HSLFMasterSheet getMasterSheet(){
         int masterId = getSlideRecord().getSlideAtom().getMasterID();
         for (HSLFSlideMaster sm : getSlideShow().getSlideMasters()) {
-            if (masterId == sm._getSheetNumber()) return sm;
+            if (masterId == sm._getSheetNumber()) {
+                return sm;
+            }
         }
         for (HSLFTitleMaster tm : getSlideShow().getTitleMasters()) {
-            if (masterId == tm._getSheetNumber()) return tm;
+            if (masterId == tm._getSheetNumber()) {
+                return tm;
+            }
         }
         return null;
     }
@@ -283,6 +297,7 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
      * @param flag  <code>true</code> if the slide follows master,
      * <code>false</code> otherwise
      */
+    @Override
     public void setFollowMasterBackground(boolean flag){
         SlideAtom sa = getSlideRecord().getSlideAtom();
         sa.setFollowMasterBackground(flag);
@@ -294,6 +309,7 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
      * @return <code>true</code> if the slide follows master background,
      * <code>false</code> otherwise
      */
+    @Override
     public boolean getFollowMasterBackground(){
         SlideAtom sa = getSlideRecord().getSlideAtom();
         return sa.getFollowMasterBackground();
@@ -305,6 +321,7 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
      * @param flag  <code>true</code> if the slide draws master sheet objects,
      * <code>false</code> otherwise
      */
+    @Override
     public void setFollowMasterObjects(boolean flag){
         SlideAtom sa = getSlideRecord().getSlideAtom();
         sa.setFollowMasterObjects(flag);
@@ -338,6 +355,7 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
      * @return <code>true</code> if the slide draws master sheet objects,
      * <code>false</code> otherwise
      */
+    @Override
     public boolean getFollowMasterObjects(){
         SlideAtom sa = getSlideRecord().getSlideAtom();
         return sa.getFollowMasterObjects();
@@ -346,7 +364,8 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
     /**
      * Background for this slide.
      */
-     public HSLFBackground getBackground() {
+     @Override
+    public HSLFBackground getBackground() {
         if(getFollowMasterBackground()) {
             return getMasterSheet().getBackground();
         }
@@ -356,6 +375,7 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
     /**
      * Color scheme for this slide.
      */
+    @Override
     public ColorSchemeAtom getColorScheme() {
         if(getFollowMasterScheme()){
             return getMasterSheet().getColorScheme();
@@ -425,6 +445,7 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
         return new HeadersFooters(this, HeadersFootersContainer.SlideHeadersFootersContainer);
     }
 
+    @Override
     protected void onAddTextShape(HSLFTextShape shape) {
         List<HSLFTextParagraph> newParas = shape.getTextParagraphs();
         _paragraphs.add(newParas);
@@ -467,14 +488,13 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
         draw.draw(graphics);
     }
     
+    @Override
     public boolean getFollowMasterColourScheme() {
-        // TODO Auto-generated method stub
         return false;
     }
 
+    @Override
     public void setFollowMasterColourScheme(boolean follow) {
-        // TODO Auto-generated method stub
-
     }
     
     @Override
index d17b87f120fde3c8301380af4171be283b884747..b20af62ec9833bce7783694396047b6e87be63e2 100644 (file)
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.NavigableMap;
 import java.util.TreeMap;
 
+import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException;
 import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException;
 import org.apache.poi.hslf.record.DocumentEncryptionAtom;
@@ -206,14 +207,8 @@ public class HSLFSlideShowEncrypted implements Closeable {
         } catch (Exception e) {
             throw new EncryptedPowerPointFileException(e);
         } finally {
-            try {
-                if (ccis != null) {
-                    ccis.close();
-                }
-                lei.close();
-            } catch (IOException e) {
-                throw new EncryptedPowerPointFileException(e);
-            }
+            IOUtils.closeQuietly(ccis);
+            IOUtils.closeQuietly(lei);
         }
     }
 
@@ -465,7 +460,9 @@ public class HSLFSlideShowEncrypted implements Closeable {
             recordMap.put(pdr.getLastOnDiskOffset(), r);
         }
 
-        assert(uea != null && pph != null && uea.getPersistPointersOffset() == pph.getLastOnDiskOffset());
+        if (uea == null || pph == null || uea.getPersistPointersOffset() != pph.getLastOnDiskOffset()) {
+            throw new EncryptedDocumentException("UserEditAtom and PersistPtrHolder must exist and their offset need to match.");
+        }
 
         recordMap.put(pph.getLastOnDiskOffset(), pph);
         recordMap.put(uea.getLastOnDiskOffset(), uea);
@@ -508,7 +505,9 @@ public class HSLFSlideShowEncrypted implements Closeable {
             recordList.add(r);
         }
 
-        assert(ptr != null);
+        if (ptr == null || uea == null) {
+            throw new EncryptedDocumentException("UserEditAtom or PersistPtrholder not found.");
+        }
         if (deaSlideId == -1 && deaOffset == -1) {
             return records;
         }
index 62f3b877f336dc5d0a1994b6cc5e08e319db744a..f908739080c2c3b1eb287ed67b602d7953a23d64 100644 (file)
@@ -74,8 +74,12 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
     protected HSLFTable(int numRows, int numCols, ShapeContainer<HSLFShape,HSLFTextParagraph> parent) {
         super(parent);
 
-        if(numRows < 1) throw new IllegalArgumentException("The number of rows must be greater than 1");
-        if(numCols < 1) throw new IllegalArgumentException("The number of columns must be greater than 1");
+        if(numRows < 1) {
+            throw new IllegalArgumentException("The number of rows must be greater than 1");
+        }
+        if(numCols < 1) {
+            throw new IllegalArgumentException("The number of columns must be greater than 1");
+        }
 
         double x=0, y=0, tblWidth=0, tblHeight=0;
         cells = new HSLFTableCell[numRows][numCols];
@@ -310,16 +314,16 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
                     }
                 }
 
-                if (lfit < threshold) {
+                if (lfit < threshold && lline != null) {
                     tc.borderLeft = lline.l;
                 }
-                if (tfit < threshold) {
+                if (tfit < threshold && tline != null) {
                     tc.borderTop = tline.l;
                 }
-                if (rfit < threshold) {
+                if (rfit < threshold && rline != null) {
                     tc.borderRight = rline.l;
                 }
-                if (bfit < threshold) {
+                if (bfit < threshold && bline != null) {
                     tc.borderBottom = bline.l;
                 }
             }
index 322cb10d2b2bad87e2806b38a543bdcd06e7a9cd..4cb3a310c353333ffd1aaa8db54faefdae6bc46d 100644 (file)
@@ -36,28 +36,7 @@ import org.apache.poi.hslf.model.textproperties.TextPFException9;
 import org.apache.poi.hslf.model.textproperties.TextProp;\r
 import org.apache.poi.hslf.model.textproperties.TextPropCollection;\r
 import org.apache.poi.hslf.model.textproperties.TextPropCollection.TextPropType;\r
-import org.apache.poi.hslf.record.ColorSchemeAtom;\r
-import org.apache.poi.hslf.record.EscherTextboxWrapper;\r
-import org.apache.poi.hslf.record.FontCollection;\r
-import org.apache.poi.hslf.record.InteractiveInfo;\r
-import org.apache.poi.hslf.record.MasterTextPropAtom;\r
-import org.apache.poi.hslf.record.OEPlaceholderAtom;\r
-import org.apache.poi.hslf.record.OutlineTextRefAtom;\r
-import org.apache.poi.hslf.record.PPDrawing;\r
-import org.apache.poi.hslf.record.Record;\r
-import org.apache.poi.hslf.record.RecordContainer;\r
-import org.apache.poi.hslf.record.RecordTypes;\r
-import org.apache.poi.hslf.record.RoundTripHFPlaceholder12;\r
-import org.apache.poi.hslf.record.SlideListWithText;\r
-import org.apache.poi.hslf.record.SlidePersistAtom;\r
-import org.apache.poi.hslf.record.StyleTextProp9Atom;\r
-import org.apache.poi.hslf.record.StyleTextPropAtom;\r
-import org.apache.poi.hslf.record.TextBytesAtom;\r
-import org.apache.poi.hslf.record.TextCharsAtom;\r
-import org.apache.poi.hslf.record.TextHeaderAtom;\r
-import org.apache.poi.hslf.record.TextRulerAtom;\r
-import org.apache.poi.hslf.record.TextSpecInfoAtom;\r
-import org.apache.poi.hslf.record.TxInteractiveInfoAtom;\r
+import org.apache.poi.hslf.record.*;\r
 import org.apache.poi.sl.draw.DrawPaint;\r
 import org.apache.poi.sl.usermodel.AutoNumberingScheme;\r
 import org.apache.poi.sl.usermodel.PaintStyle;\r
@@ -195,7 +174,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
     private void supplySheet(HSLFSheet sheet) {\r
         this._sheet = sheet;\r
 \r
-        if (_runs == null) return;\r
+        if (_runs == null) {\r
+            return;\r
+        }\r
         for (HSLFTextRun rt : _runs) {\r
             rt.updateSheet();\r
         }\r
@@ -232,7 +213,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
      * @param index\r
      */\r
     protected void setIndex(int index) {\r
-        if (_headerAtom != null) _headerAtom.setIndex(index);\r
+        if (_headerAtom != null) {\r
+            _headerAtom.setIndex(index);\r
+        }\r
     }\r
 \r
     /**\r
@@ -245,7 +228,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
     }\r
 \r
     public void setRunType(int runType) {\r
-        if (_headerAtom != null) _headerAtom.setTextType(runType);\r
+        if (_headerAtom != null) {\r
+            _headerAtom.setTextType(runType);\r
+        }\r
     }\r
 \r
     /**\r
@@ -265,8 +250,12 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         if (_ruler == null) {\r
             _ruler = TextRulerAtom.getParagraphInstance();\r
             Record childAfter = _byteAtom;\r
-            if (childAfter == null) childAfter = _charAtom;\r
-            if (childAfter == null) childAfter = _headerAtom;\r
+            if (childAfter == null) {\r
+                childAfter = _charAtom;\r
+            }\r
+            if (childAfter == null) {\r
+                childAfter = _headerAtom;\r
+            }\r
             _headerAtom.getParentRecord().addChildAfter(_ruler, childAfter);\r
         }\r
         return _ruler;\r
@@ -290,7 +279,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
 \r
         for (; startIdx[0] < records.length; startIdx[0]++) {\r
             Record r = records[startIdx[0]];\r
-            if (r instanceof TextHeaderAtom && (headerAtom == null || r == headerAtom)) break;\r
+            if (r instanceof TextHeaderAtom && (headerAtom == null || r == headerAtom)) {\r
+                break;\r
+            }\r
         }\r
 \r
         if (startIdx[0] >= records.length) {\r
@@ -301,7 +292,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         int length;\r
         for (length = 1; startIdx[0] + length < records.length; length++) {\r
             Record r = records[startIdx[0]+length];\r
-            if (r instanceof TextHeaderAtom || r instanceof SlidePersistAtom) break;\r
+            if (r instanceof TextHeaderAtom || r instanceof SlidePersistAtom) {\r
+                break;\r
+            }\r
         }\r
 \r
         Record result[] = new Record[length];\r
@@ -383,15 +376,17 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
     @Override\r
     public void setTextAlign(TextAlign align) {\r
         Integer alignInt = null;\r
-        if (align != null) switch (align) {\r
-            default:\r
-            case LEFT: alignInt = TextAlignmentProp.LEFT;break;\r
-            case CENTER: alignInt = TextAlignmentProp.CENTER; break;\r
-            case RIGHT: alignInt = TextAlignmentProp.RIGHT; break;\r
-            case DIST: alignInt = TextAlignmentProp.DISTRIBUTED; break;\r
-            case JUSTIFY: alignInt = TextAlignmentProp.JUSTIFY; break;\r
-            case JUSTIFY_LOW: alignInt = TextAlignmentProp.JUSTIFYLOW; break;\r
-            case THAI_DIST: alignInt = TextAlignmentProp.THAIDISTRIBUTED; break;\r
+        if (align != null) {\r
+            switch (align) {\r
+                default:\r
+                case LEFT: alignInt = TextAlignmentProp.LEFT;break;\r
+                case CENTER: alignInt = TextAlignmentProp.CENTER; break;\r
+                case RIGHT: alignInt = TextAlignmentProp.RIGHT; break;\r
+                case DIST: alignInt = TextAlignmentProp.DISTRIBUTED; break;\r
+                case JUSTIFY: alignInt = TextAlignmentProp.JUSTIFY; break;\r
+                case JUSTIFY_LOW: alignInt = TextAlignmentProp.JUSTIFYLOW; break;\r
+                case THAI_DIST: alignInt = TextAlignmentProp.THAIDISTRIBUTED; break;\r
+            }\r
         }\r
         setParagraphTextPropVal("alignment", alignInt);\r
     }\r
@@ -399,7 +394,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
     @Override\r
     public TextAlign getTextAlign() {\r
         TextProp tp = getPropVal(_paragraphStyle, "alignment", this);\r
-        if (tp == null) return null;\r
+        if (tp == null) {\r
+            return null;\r
+        }\r
         switch (tp.getValue()) {\r
             default:\r
             case TextAlignmentProp.LEFT: return TextAlign.LEFT;\r
@@ -415,7 +412,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
     @Override\r
     public FontAlign getFontAlign() {\r
         TextProp tp = getPropVal(_paragraphStyle, FontAlignmentProp.NAME, this);\r
-        if (tp == null) return null;\r
+        if (tp == null) {\r
+            return null;\r
+        }\r
 \r
         switch (tp.getValue()) {\r
             case FontAlignmentProp.BASELINE: return FontAlign.BASELINE;\r
@@ -427,18 +426,26 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
     }\r
 \r
     public AutoNumberingScheme getAutoNumberingScheme() {\r
-        if (styleTextProp9Atom == null) return null;\r
+        if (styleTextProp9Atom == null) {\r
+            return null;\r
+        }\r
         TextPFException9[] ant = styleTextProp9Atom.getAutoNumberTypes();\r
         int level = getIndentLevel();\r
-        if (ant == null || level == -1 || level  >= ant.length) return null;\r
+        if (ant == null || level == -1 || level  >= ant.length) {\r
+            return null;\r
+        }\r
         return ant[level].getAutoNumberScheme();\r
     }\r
 \r
     public Integer getAutoNumberingStartAt() {\r
-        if (styleTextProp9Atom == null) return null;\r
+        if (styleTextProp9Atom == null) {\r
+            return null;\r
+        }\r
         TextPFException9[] ant = styleTextProp9Atom.getAutoNumberTypes();\r
         int level = getIndentLevel();\r
-        if (ant == null || level  >= ant.length) return null;\r
+        if (ant == null || level  >= ant.length) {\r
+            return null;\r
+        }\r
         Short startAt = ant[level].getAutoNumberStartNumber();\r
         assert(startAt != null);\r
         return startAt.intValue();\r
@@ -447,7 +454,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
 \r
     @Override\r
     public BulletStyle getBulletStyle() {\r
-        if (!isBullet() && getAutoNumberingScheme() == null) return null;\r
+        if (!isBullet() && getAutoNumberingScheme() == null) {\r
+            return null;\r
+        }\r
 \r
         return new BulletStyle() {\r
             @Override\r
@@ -537,7 +546,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
 \r
     @Override\r
     public void setIndentLevel(int level) {\r
-       if( _paragraphStyle != null ) _paragraphStyle.setIndentLevel((short)level);\r
+       if( _paragraphStyle != null ) {\r
+        _paragraphStyle.setIndentLevel((short)level);\r
+    }\r
     }\r
 \r
     /**\r
@@ -638,7 +649,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
     public String getBulletFont() {\r
         TextProp tp = getPropVal(_paragraphStyle, "bullet.font", this);\r
         boolean hasFont = getFlag(ParagraphFlagsTextProp.BULLET_HARDFONT_IDX);\r
-        if (tp == null || !hasFont) return getDefaultFontFamily();\r
+        if (tp == null || !hasFont) {\r
+            return getDefaultFontFamily();\r
+        }\r
         PPFont ppFont = getSheet().getSlideShow().getFont(tp.getValue());\r
         assert(ppFont != null);\r
         return ppFont.getFontName();\r
@@ -682,7 +695,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
 \r
     private Double getPctOrPoints(String propName) {\r
         TextProp tp = getPropVal(_paragraphStyle, propName, this);\r
-        if (tp == null) return null;\r
+        if (tp == null) {\r
+            return null;\r
+        }\r
         int val = tp.getValue();\r
         return (val < 0) ? Units.masterToPoints(val) : val;\r
     }\r
@@ -739,7 +754,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         \r
         BitMaskTextProp maskProp = (BitMaskTextProp) props.findByName(ParagraphFlagsTextProp.NAME);\r
         boolean hardAttribute = (maskProp != null && maskProp.getValue() == 0);\r
-        if (hardAttribute) return null;\r
+        if (hardAttribute) {\r
+            return null;\r
+        }\r
 \r
         HSLFSheet sheet = paragraph.getSheet();\r
         int txtype = paragraph.getRunType();\r
@@ -753,7 +770,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
 \r
         for (String pn : propNames) {\r
             TextProp prop = master.getStyleAttribute(txtype, paragraph.getIndentLevel(), pn, isChar);\r
-            if (prop != null) return prop;\r
+            if (prop != null) {\r
+                return prop;\r
+            }\r
         }\r
 \r
         return null;\r
@@ -791,7 +810,7 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
             }\r
             List<HSLFTextRun> ltr = p.getTextRuns();\r
             if (ltr.isEmpty()) {\r
-                throw new RuntimeException("paragraph without textruns found");\r
+                throw new HSLFException("paragraph without textruns found");\r
             }\r
             lastRun = ltr.get(ltr.size() - 1);\r
             assert (lastRun.getRawText() != null);\r
@@ -889,9 +908,13 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         int /* headerIdx = -1, */ textIdx = -1, styleIdx = -1;\r
         for (int i = 0; i < cr.length; i++) {\r
             Record r = cr[i];\r
-            if (r == headerAtom) ; // headerIdx = i;\r
-            else if (r == oldRecord || r == newRecord) textIdx = i;\r
-            else if (r == styleAtom) styleIdx = i;\r
+            if (r == headerAtom) {\r
+                ; // headerIdx = i;\r
+            } else if (r == oldRecord || r == newRecord) {\r
+                textIdx = i;\r
+            } else if (r == styleAtom) {\r
+                styleIdx = i;\r
+            }\r
         }\r
 \r
         if (textIdx == -1) {\r
@@ -957,7 +980,10 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
             }\r
         }\r
 \r
-        assert (lastPTPC != null && lastRTPC != null && ptpc != null && rtpc != null);\r
+        if (lastPTPC == null || lastRTPC == null || ptpc == null || rtpc == null) {\r
+            throw new HSLFException("Not all TextPropCollection could be determined.");\r
+        }\r
+        \r
         ptpc.updateTextSize(ptpc.getCharactersCovered() + 1);\r
         rtpc.updateTextSize(rtpc.getCharactersCovered() + 1);\r
         lastPTPC.updateTextSize(lastPTPC.getCharactersCovered() + 1);\r
@@ -1025,7 +1051,7 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
             try {\r
                 ((EscherTextboxWrapper) _txtbox).writeOut(null);\r
             } catch (IOException e) {\r
-                throw new RuntimeException("failed dummy write", e);\r
+                throw new HSLFException("failed dummy write", e);\r
             }\r
         }\r
     }\r
@@ -1183,7 +1209,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         List<List<HSLFTextParagraph>> runsV = new ArrayList<List<HSLFTextParagraph>>();\r
         for (EscherTextboxWrapper wrapper : ppdrawing.getTextboxWrappers()) {\r
             List<HSLFTextParagraph> p = findTextParagraphs(wrapper, sheet);\r
-            if (p != null) runsV.add(p);\r
+            if (p != null) {\r
+                runsV.add(p);\r
+            }\r
         }\r
         return runsV;\r
     }\r
@@ -1205,7 +1233,7 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         if (ota != null) {\r
             // if we are based on an outline, there are no further records to be parsed from the wrapper\r
             if (sheet == null) {\r
-                throw new RuntimeException("Outline atom reference can't be solved without a sheet record");\r
+                throw new HSLFException("Outline atom reference can't be solved without a sheet record");\r
             }\r
 \r
             List<List<HSLFTextParagraph>> sheetRuns = sheet.getTextParagraphs();\r
@@ -1213,9 +1241,13 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
 \r
             int idx = ota.getTextIndex();\r
             for (List<HSLFTextParagraph> r : sheetRuns) {\r
-                if (r.isEmpty()) continue;\r
+                if (r.isEmpty()) {\r
+                    continue;\r
+                }\r
                 int ridx = r.get(0).getIndex();\r
-                if (ridx > idx) break;\r
+                if (ridx > idx) {\r
+                    break;\r
+                }\r
                 if (ridx == idx) {\r
                     if (rv == null) {\r
                         rv = r;\r
@@ -1251,7 +1283,7 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
                 case 0: break; // nothing found\r
                 case 1: rv = rvl.get(0); break; // normal case\r
                 default:\r
-                    throw new RuntimeException("TextBox contains more than one list of paragraphs.");\r
+                    throw new HSLFException("TextBox contains more than one list of paragraphs.");\r
                 }\r
             }\r
         }\r
@@ -1302,7 +1334,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
                 // don't search for RecordTypes.StyleTextPropAtom.typeID here ... see findStyleAtomPresent below\r
             }\r
 \r
-            if (header == null) break;\r
+            if (header == null) {\r
+                break;\r
+            }\r
 \r
             if (header.getParentRecord() instanceof SlideListWithText) {\r
                 // runs found in PPDrawing are not linked with SlideListWithTexts\r
@@ -1353,7 +1387,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         for (HSLFHyperlink h : links) {\r
             int csIdx = 0;\r
             for (HSLFTextParagraph p : paragraphs) {\r
-                if (csIdx > h.getEndIndex()) break;\r
+                if (csIdx > h.getEndIndex()) {\r
+                    break;\r
+                }\r
                 List<HSLFTextRun> runs = p.getTextRuns();\r
                 for (int rlen=0,rIdx=0; rIdx < runs.size(); csIdx+=rlen, rIdx++) {\r
                     HSLFTextRun run = runs.get(rIdx);\r
@@ -1443,7 +1479,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         int paraIdx = 0;\r
         for (TextPropCollection p : paraStyles) {\r
             for (int ccPara = 0, ccStyle = p.getCharactersCovered(); ccPara < ccStyle; paraIdx++) {\r
-                if (paraIdx >= paragraphs.size()) return;\r
+                if (paraIdx >= paragraphs.size()) {\r
+                    return;\r
+                }\r
                 HSLFTextParagraph htp = paragraphs.get(paraIdx);\r
                 TextPropCollection pCopy = new TextPropCollection(0, TextPropType.paragraph);\r
                 pCopy.copy(p);\r
@@ -1452,7 +1490,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
                 for (HSLFTextRun trun : htp.getTextRuns()) {\r
                     len += trun.getLength();\r
                 }\r
-                if (paraIdx == paragraphs.size()-1) len++;\r
+                if (paraIdx == paragraphs.size()-1) {\r
+                    len++;\r
+                }\r
                 pCopy.updateTextSize(len);\r
                 ccPara += len;\r
             }\r
@@ -1463,7 +1503,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         int paraIdx = 0;\r
         for (IndentProp p : paraStyles) {\r
             for (int ccPara = 0, ccStyle = p.getCharactersCovered(); ccPara < ccStyle; paraIdx++) {\r
-                if (paraIdx >= paragraphs.size() || ccPara >= ccStyle-1) return;\r
+                if (paraIdx >= paragraphs.size() || ccPara >= ccStyle-1) {\r
+                    return;\r
+                }\r
                 HSLFTextParagraph para = paragraphs.get(paraIdx);\r
                 int len = 0;\r
                 for (HSLFTextRun trun : para.getTextRuns()) {\r
@@ -1517,7 +1559,9 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         switch (cidx) {\r
             // Background ... Accent 3 color\r
             case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:\r
-                if (sheet == null) return null;\r
+                if (sheet == null) {\r
+                    return null;\r
+                }\r
                 ColorSchemeAtom ca = sheet.getColorScheme();\r
                 tmp = new Color(ca.getColor(cidx), true);\r
                 break;\r