Merge pull request #2263 from OpenRefine/issue-2213-xlsx-export-url
More robust URI detection in tabular exporter.
This commit is contained in:
commit
60089ab716
@ -34,6 +34,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
package com.google.refine.exporters;
|
package com.google.refine.exporters;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
@ -371,10 +373,13 @@ abstract public class CustomizableTabularExporterUtilities {
|
|||||||
if (value instanceof String) {
|
if (value instanceof String) {
|
||||||
text = (String) value;
|
text = (String) value;
|
||||||
|
|
||||||
if(text.contains(":")) {
|
if(text.contains(":") && urlValidator.isValid(text)) {
|
||||||
if(urlValidator.isValid(text)) {
|
// Extra check for https://github.com/OpenRefine/OpenRefine/issues/2213
|
||||||
link = text;
|
try {
|
||||||
}
|
link = new URI(text).toString();
|
||||||
|
} catch(URISyntaxException e) {
|
||||||
|
;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (value instanceof OffsetDateTime) {
|
} else if (value instanceof OffsetDateTime) {
|
||||||
text = ((OffsetDateTime) value).format(DateTimeFormatter.ISO_INSTANT);
|
text = ((OffsetDateTime) value).format(DateTimeFormatter.ISO_INSTANT);
|
||||||
|
@ -39,7 +39,7 @@ import java.time.OffsetDateTime;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.apache.poi.common.usermodel.Hyperlink;
|
import org.apache.poi.ss.usermodel.Hyperlink;
|
||||||
import org.apache.poi.common.usermodel.HyperlinkType;
|
import org.apache.poi.common.usermodel.HyperlinkType;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
@ -127,9 +127,15 @@ public class XlsExporter implements StreamExporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cellData.link != null) {
|
if (cellData.link != null) {
|
||||||
Hyperlink hl = wb.getCreationHelper().createHyperlink(HyperlinkType.URL);
|
try {
|
||||||
hl.setLabel(cellData.text);
|
Hyperlink hl = wb.getCreationHelper().createHyperlink(HyperlinkType.URL);
|
||||||
hl.setAddress(cellData.link);
|
hl.setLabel(cellData.text);
|
||||||
|
hl.setAddress(cellData.link);
|
||||||
|
c.setHyperlink(hl);
|
||||||
|
} catch(IllegalArgumentException e) {
|
||||||
|
// If we failed to create the hyperlink and add it to the cell,
|
||||||
|
// we just use the string value as fallback
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ import static org.mockito.Mockito.mock;
|
|||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.Serializable;
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
@ -155,6 +156,30 @@ public class XlsxExporterTests extends RefineTest {
|
|||||||
Assert.fail();
|
Assert.fail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void exportXlsxStringWithURLs() throws IOException{
|
||||||
|
String url = "GET /primo-library/,http:%2F%2Fcatalogue.unice.fr HTTP/1.1";
|
||||||
|
createDateGrid(2, 2, url);
|
||||||
|
|
||||||
|
try {
|
||||||
|
SUT.export(project, options, engine, stream);
|
||||||
|
} catch (IOException e) {
|
||||||
|
Assert.fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteArrayInputStream inStream = new ByteArrayInputStream( stream.toByteArray() );
|
||||||
|
try {
|
||||||
|
XSSFWorkbook wb = new XSSFWorkbook(inStream);
|
||||||
|
XSSFSheet ws = wb.getSheetAt(0);
|
||||||
|
XSSFRow row1 = ws.getRow(1);
|
||||||
|
XSSFCell cell0 = row1.getCell(0);
|
||||||
|
Assert.assertTrue(cell0.toString().contains("primo-library"));
|
||||||
|
wb.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
Assert.fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//helper methods
|
//helper methods
|
||||||
|
|
||||||
@ -180,13 +205,13 @@ public class XlsxExporterTests extends RefineTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createDateGrid(int noOfRows, int noOfColumns, OffsetDateTime now){
|
private void createDateGrid(int noOfRows, int noOfColumns, Serializable value){
|
||||||
CreateColumns(noOfColumns);
|
CreateColumns(noOfColumns);
|
||||||
|
|
||||||
for(int i = 0; i < noOfRows; i++){
|
for(int i = 0; i < noOfRows; i++){
|
||||||
Row row = new Row(noOfColumns);
|
Row row = new Row(noOfColumns);
|
||||||
for(int j = 0; j < noOfColumns; j++){
|
for(int j = 0; j < noOfColumns; j++){
|
||||||
row.cells.add(new Cell(now, null));
|
row.cells.add(new Cell(value, null));
|
||||||
}
|
}
|
||||||
project.rows.add(row);
|
project.rows.add(row);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user