Selaa lähdekoodia

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
tags/REL_3_8_FINAL
Yegor Kozlov 12 vuotta sitten
vanhempi
commit
37149e9d6b

+ 1
- 0
src/documentation/content/xdocs/status.xml Näytä tiedosto



<changes> <changes>
<release version="3.8-beta6" date="2012-??-??"> <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">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">52598 - respect slide background when rendering slides in HSLF</action>
<action dev="poi-developers" type="fix">51731 - fixed painting shape outlines in HSLF</action> <action dev="poi-developers" type="fix">51731 - fixed painting shape outlines in HSLF</action>

+ 31
- 13
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java Näytä tiedosto

// the relation to see how // the relation to see how
if (_externalRel == null) { if (_externalRel == null) {
if (ctHyperlink.getId() != 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!");
}
// hyperlink is internal and is not related to other parts
_type = Hyperlink.LINK_DOCUMENT;
} else {
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;
} }
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;
} else {
_type = Hyperlink.LINK_FILE;
}
} }
} }


public void setLastRow(int row) { public void setLastRow(int row) {
setFirstRow(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);
}
} }

+ 20
- 0
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java Näytä tiedosto

assertEquals("mailto:dev@poi.apache.org?subject=XSSF%20Hyperlinks", assertEquals("mailto:dev@poi.apache.org?subject=XSSF%20Hyperlinks",
sheet.getRow(16).getCell(2).getHyperlink().getAddress()); 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());
}

} }

BIN
test-data/spreadsheet/52716.xlsx Näytä tiedosto


Loading…
Peruuta
Tallenna