Author: nick
Date: Tue Apr  3 03:13:20 2007
New Revision: 525127

URL: http://svn.apache.org/viewvc?view=rev&rev=525127
Log:
It seems that some PPT files only have linkAtom + linkDetailsA for their 
ExHyperlink, and miss the linkDetailsB. For those files, do the right thing

Modified:
    
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java

Modified: 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java?view=diff&rev=525127&r1=525126&r2=525127
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
 (original)
+++ 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/ExHyperlink.java
 Tue Apr  3 03:13:20 2007
@@ -33,7 +33,6 @@
        private ExHyperlinkAtom linkAtom;
        private CString linkDetailsA;
        private CString linkDetailsB;
-       private Comment2000Atom commentAtom; 
        
        /** 
         * Returns the ExHyperlinkAtom of this link
@@ -55,7 +54,11 @@
         */
        public void setLinkURL(String url) {
                linkDetailsA.setText(url);
-               linkDetailsB.setText(url);
+
+               // linkDetailsB isn't present in all PPT versions
+               if(linkDetailsB != null) {
+                       linkDetailsB.setText(url);
+               }
        }
        
        /**
@@ -90,6 +93,11 @@
         *  methods.
         */     
        private void findInterestingChildren() {
+               // We need to have 2 children, ideally 3, and sometimes have 
more
+               if(_children.length < 2) {
+                       throw new IllegalStateException("We need at least two 
child records, but we only had " + _children.length);
+               }
+
                // First child should be the ExHyperlinkAtom
                if(_children[0] instanceof ExHyperlinkAtom) {
                        linkAtom = (ExHyperlinkAtom)_children[0];
@@ -103,11 +111,16 @@
                } else {
                        throw new IllegalStateException("Second child record 
wasn't a CString, was of type " + _children[1].getRecordType());
                }
-               // Third child should be the second link details
-               if(_children[2] instanceof CString) {
-                       linkDetailsB = (CString)_children[2];
+
+               // Third child, if it exists, should be the second link details
+               if(_children.length >= 3) {
+                       if(_children[2] instanceof CString) {
+                               linkDetailsB = (CString)_children[2];
+                       } else {
+                               throw new IllegalStateException("Third child 
record wasn't a CString, was of type " + _children[2].getRecordType());
+                       }
                } else {
-                       throw new IllegalStateException("Third child record 
wasn't a CString, was of type " + _children[2].getRecordType());
+                       // Should be fine to not have one
                }
        }
        



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/

Reply via email to