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
This commit is contained in:
Yegor Kozlov 2012-02-02 10:37:49 +00:00
parent 9bb021d9c0
commit 46bc4f45f7
3 changed files with 52 additions and 2 deletions

View File

@ -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>

View File

@ -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
*/

View File

@ -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();