You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2012/02/02 11:37:50 UTC

svn commit: r1239529 - in /poi/trunk/src: documentation/content/xdocs/status.xml ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java

Author: yegor
Date: Thu Feb  2 10:37:49 2012
New Revision: 1239529

URL: http://svn.apache.org/viewvc?rev=1239529&view=rev
Log:
validate hyperlink address as discussed on poi-user

Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1239529&r1=1239528&r2=1239529&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Thu Feb  2 10:37:49 2012
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta6" date="2012-??-??">
+           <action dev="poi-developers" type="add">Validate address of hyperlinks in XSSF</action>
            <action dev="poi-developers" type="fix">52540 - Relax the M4.1 constraint on reading OOXML files, as some Office produced ones do have 2 Core Properties, despite the specification explicitly forbidding this</action>
            <action dev="poi-developers" type="add">52462 - Added implementation for SUMIFS()</action>
            <action dev="poi-developers" type="add">POIXMLPropertiesTextExtractor support for extracting custom OOXML properties as text</action>

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java?rev=1239529&r1=1239528&r2=1239529&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java Thu Feb  2 10:37:49 2012
@@ -17,6 +17,7 @@
 package org.apache.poi.xssf.usermodel;
 
 import java.net.URI;
+import java.net.URISyntaxException;
 
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
@@ -181,18 +182,37 @@ public class XSSFHyperlink implements Hy
     }
 
     /**
-     * Hypelink address. Depending on the hyperlink type it can be URL, e-mail, path to a file
+     * Hyperlink address. Depending on the hyperlink type it can be URL, e-mail, path to a file
      *
      * @param address - the address of this hyperlink
      */
     public void setAddress(String address) {
-        _location = address;
+        validate(address);
+
+       _location = address;
         //we must set location for internal hyperlinks
         if (_type == Hyperlink.LINK_DOCUMENT) {
             setLocation(address);
         }
     }
 
+    private void validate(String address) {
+        switch (_type){
+            // email, path to file and url must be valid URIs
+            case Hyperlink.LINK_EMAIL:
+            case Hyperlink.LINK_FILE:
+            case Hyperlink.LINK_URL:
+                try {
+                    new URI(address);
+                } catch (URISyntaxException x) {
+                    IllegalArgumentException y = new IllegalArgumentException("Address of hyperlink must be a valid URI");
+                    y.initCause(x);
+                    throw y;
+                }
+                break;
+        }
+    }
+
     /**
      * Assigns this hyperlink to the given cell reference
      */

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java?rev=1239529&r1=1239528&r2=1239529&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java Thu Feb  2 10:37:49 2012
@@ -50,6 +50,35 @@ public final class TestXSSFHyperlink ext
 		doTestHyperlinkContents(sheet);
 	}
 
+    public void testCreate() {
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        XSSFCreationHelper createHelper = workbook.getCreationHelper();
+        
+        String[] validURLs = {
+                "http://apache.org",
+                "www.apache.org",
+                "/temp",
+                "c:/temp",
+                "http://apache.org/default.php?s=isTramsformed&submit=Search&la=*&li=*"};
+        for(String s : validURLs){
+            createHelper.createHyperlink(Hyperlink.LINK_URL).setAddress(s);
+        }
+
+        String[] invalidURLs = {
+                "http:\\apache.org",
+                "www.apache .org",
+                "c:\\temp",
+                "\\poi"};
+        for(String s : invalidURLs){
+            try {
+                createHelper.createHyperlink(Hyperlink.LINK_URL).setAddress(s);
+                fail("expected IllegalArgumentException: " + s);
+            } catch (IllegalArgumentException e){
+                
+            }
+        }
+    }
+
 	public void testLoadSave() {
 		XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx");
 		CreationHelper createHelper = workbook.getCreationHelper();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org