aboutsummaryrefslogtreecommitdiffstats
path: root/src/ooxml
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2012-02-02 10:37:49 +0000
committerYegor Kozlov <yegor@apache.org>2012-02-02 10:37:49 +0000
commit4b1b2f4af28b21b5e7992e6f02f20d2c1542c60d (patch)
tree841136a9633c2df61b14f5a63d43e508a59a01ed /src/ooxml
parent3ab1ff03047cdc5a2f39adf03189fe8a3904415f (diff)
downloadpoi-4b1b2f4af28b21b5e7992e6f02f20d2c1542c60d.tar.gz
poi-4b1b2f4af28b21b5e7992e6f02f20d2c1542c60d.zip
validate hyperlink address as discussed on poi-user
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1239529 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml')
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java24
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java29
2 files changed, 51 insertions, 2 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
index 21fd54b844..2fd47d9d42 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
@@ -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 Hyperlink {
}
/**
- * 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
*/
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
index 6e226e331b..49f79365f3 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
@@ -50,6 +50,35 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink {
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();