mirror of https://github.com/apache/poi.git
Bugzilla 52716 - tolerate hyperlinks that have neither location nor relation
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1292295 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e94b5e52f1
commit
37149e9d6b
|
@ -34,6 +34,7 @@
|
|||
|
||||
<changes>
|
||||
<release version="3.8-beta6" date="2012-??-??">
|
||||
<action dev="poi-developers" type="fix">52716 - tolerate hyperlinks that have neither location nor relation </action>
|
||||
<action dev="poi-developers" type="fix">52599 - avoid duplicate text when rendering slides in HSLF</action>
|
||||
<action dev="poi-developers" type="fix">52598 - respect slide background when rendering slides in HSLF</action>
|
||||
<action dev="poi-developers" type="fix">51731 - fixed painting shape outlines in HSLF</action>
|
||||
|
|
|
@ -68,23 +68,27 @@ public class XSSFHyperlink implements Hyperlink {
|
|||
// the relation to see how
|
||||
if (_externalRel == null) {
|
||||
if (ctHyperlink.getId() != null) {
|
||||
throw new IllegalStateException("The hyperlink for cell " + ctHyperlink.getRef() + " references relation " + ctHyperlink.getId() + ", but that didn't exist!");
|
||||
throw new IllegalStateException("The hyperlink for cell " + ctHyperlink.getRef() +
|
||||
" references relation " + ctHyperlink.getId() + ", but that didn't exist!");
|
||||
}
|
||||
throw new IllegalStateException("A sheet hyperlink must either have a location, or a relationship. Found:\n" + ctHyperlink);
|
||||
}
|
||||
|
||||
URI target = _externalRel.getTargetURI();
|
||||
_location = target.toString();
|
||||
|
||||
// Try to figure out the type
|
||||
if (_location.startsWith("http://") || _location.startsWith("https://")
|
||||
|| _location.startsWith("ftp://")) {
|
||||
_type = Hyperlink.LINK_URL;
|
||||
} else if (_location.startsWith("mailto:")) {
|
||||
_type = Hyperlink.LINK_EMAIL;
|
||||
// hyperlink is internal and is not related to other parts
|
||||
_type = Hyperlink.LINK_DOCUMENT;
|
||||
} else {
|
||||
_type = Hyperlink.LINK_FILE;
|
||||
URI target = _externalRel.getTargetURI();
|
||||
_location = target.toString();
|
||||
|
||||
// Try to figure out the type
|
||||
if (_location.startsWith("http://") || _location.startsWith("https://")
|
||||
|| _location.startsWith("ftp://")) {
|
||||
_type = Hyperlink.LINK_URL;
|
||||
} else if (_location.startsWith("mailto:")) {
|
||||
_type = Hyperlink.LINK_EMAIL;
|
||||
} else {
|
||||
_type = Hyperlink.LINK_FILE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -306,4 +310,18 @@ public class XSSFHyperlink implements Hyperlink {
|
|||
public void setLastRow(int row) {
|
||||
setFirstRow(row);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return additional text to help the user understand more about the hyperlink
|
||||
*/
|
||||
public String getTooltip() {
|
||||
return _ctHyperlink.getTooltip();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param text additional text to help the user understand more about the hyperlink
|
||||
*/
|
||||
public void setTooltip(String text) {
|
||||
_ctHyperlink.setTooltip(text);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -189,4 +189,24 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink {
|
|||
assertEquals("mailto:dev@poi.apache.org?subject=XSSF%20Hyperlinks",
|
||||
sheet.getRow(16).getCell(2).getHyperlink().getAddress());
|
||||
}
|
||||
|
||||
public void test52716() {
|
||||
XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("52716.xlsx");
|
||||
XSSFSheet sh1 = wb1.getSheetAt(0);
|
||||
|
||||
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1);
|
||||
XSSFSheet sh2 = wb2.getSheetAt(0);
|
||||
|
||||
assertEquals(sh1.getNumberOfComments(), sh2.getNumberOfComments());
|
||||
XSSFHyperlink l1 = sh1.getHyperlink(0, 1);
|
||||
assertEquals(XSSFHyperlink.LINK_DOCUMENT, l1.getType());
|
||||
assertEquals("B1", l1.getCellRef());
|
||||
assertEquals("Sort on Titel", l1.getTooltip());
|
||||
|
||||
XSSFHyperlink l2 = sh2.getHyperlink(0, 1);
|
||||
assertEquals(l1.getTooltip(), l2.getTooltip());
|
||||
assertEquals(XSSFHyperlink.LINK_DOCUMENT, l2.getType());
|
||||
assertEquals("B1", l2.getCellRef());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue