mirror of https://github.com/apache/poi.git
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:
parent
3ab1ff0304
commit
4b1b2f4af2
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue