diff --git a/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java b/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java index f797311a649a30166ca417d4a63a56ea6356850e..0357b84f2858849f3264b5d07a2597ff1ef07362 100644 --- a/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java +++ b/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java @@ -55,6 +55,7 @@ public class HTMLToOpenXMLHandler extends DefaultHandler { private boolean latex = false; private StringBuilder textBuffer; private Spacing startSpacing; + protected String relPath; private boolean appendToCursor = true; protected final OpenXMLDocument factory; @@ -72,17 +73,17 @@ public class HTMLToOpenXMLHandler extends DefaultHandler { public HTMLToOpenXMLHandler(OpenXMLDocument document) { this.factory = document; } - /** * @param document The OpenXML document * @param paragraph The current paragraph * @param appendToCursor If true, append automatically to the document */ - public HTMLToOpenXMLHandler(OpenXMLDocument document, Element paragraph, boolean appendToCursor) { + public HTMLToOpenXMLHandler(OpenXMLDocument document, String relPath, Element paragraph, boolean appendToCursor) { this(document); this.currentParagraph = paragraph; this.appendToCursor = appendToCursor; + this.relPath = relPath; } public HTMLToOpenXMLHandler(OpenXMLDocument document, Spacing spacing) { @@ -239,7 +240,7 @@ public class HTMLToOpenXMLHandler extends DefaultHandler { if(cssStyles == null) { return setTextPreferences(); } else { - List<Style> styles = new ArrayList<Style>(4); + List<Style> styles = new ArrayList<>(4); if(cssStyles.contains("bold")) styles.add(Style.bold); if(cssStyles.contains("italic")) styles.add(Style.italic); if(cssStyles.contains("underline")) styles.add(Style.underline); @@ -497,7 +498,10 @@ public class HTMLToOpenXMLHandler extends DefaultHandler { } } - protected String path(String path) { + public String path(String path) { + if(relPath != null) { + return relPath.concat(path); + } return path; } diff --git a/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java b/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java index 57f25cca3defd6482b6d1072f1832cb7adb2928f..b8ac1e4c3de0a966e4de7e879bf689fac6f4a368 100644 --- a/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java +++ b/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java @@ -435,7 +435,7 @@ public class OpenXMLDocument { html = cleanUpHTML(html); SAXParser parser = new SAXParser(); Element paragraphEl = getParagraphToAppendTo(newParagraph); - parser.setContentHandler(new HTMLToOpenXMLHandler(this, paragraphEl, true)); + parser.setContentHandler(new HTMLToOpenXMLHandler(this, null, paragraphEl, true)); parser.parse(new InputSource(new StringReader(html))); } catch (SAXException e) { log.error("", e); diff --git a/src/main/java/org/olat/ims/qti21/manager/openxml/QTI21WordExport.java b/src/main/java/org/olat/ims/qti21/manager/openxml/QTI21WordExport.java index 7ce330be6c302143baea920e88843521e456e2f5..0860be054553e5178994ddc11fbfacbb426370cc 100644 --- a/src/main/java/org/olat/ims/qti21/manager/openxml/QTI21WordExport.java +++ b/src/main/java/org/olat/ims/qti21/manager/openxml/QTI21WordExport.java @@ -374,7 +374,6 @@ public class QTI21WordExport implements MediaResource { private static class QTI21AndHTMLToOpenXMLHandler extends HTMLToOpenXMLHandler { private final File itemFile; - private final String relPath; private final AssessmentItem assessmentItem; private final boolean withResponses; private final AssessmentHtmlBuilder htmlBuilder; @@ -489,11 +488,6 @@ public class QTI21WordExport implements MediaResource { } } } - - @Override - protected String path(String path) { - return relPath.concat(path); - } @Override public void characters(char[] ch, int start, int length) { @@ -773,7 +767,7 @@ public class QTI21WordExport implements MediaResource { // add the drop panels Element wrapEl = factory.createParagraphEl(); - HTMLToOpenXMLHandler dropTable = new HTMLToOpenXMLHandler(factory, wrapEl, false); + HTMLToOpenXMLHandler dropTable = new HTMLToOpenXMLHandler(factory, relPath, wrapEl, false); dropTable.setMaxWidthCm(7); dropTable.startTable(Columns.valueOf(columnWidthPct - 50)); if(withResponses) { @@ -941,7 +935,7 @@ public class QTI21WordExport implements MediaResource { String backgroundColor = "FFFFFF"; Border sourceBorder = new Border(0, 6, "E9EAF2"); - HTMLToOpenXMLHandler innerTable = new HTMLToOpenXMLHandler(factory, wrapEl, false); + HTMLToOpenXMLHandler innerTable = new HTMLToOpenXMLHandler(factory, relPath, wrapEl, false); innerTable.setMaxWidthCm(7.5); innerTable.startTable(Columns.valueOf(columnWidthPct)); for(SimpleAssociableChoice choice:choices) { @@ -950,7 +944,7 @@ public class QTI21WordExport implements MediaResource { String html = htmlBuilder.flowStaticString(choice.getFlowStatics()); List<Node> nodes = appendHtmlText(html, factory.createParagraphEl(), 7.5); - if(nodes.size() == 0) { + if(nodes.isEmpty()) { contentCell.appendChild(factory.createParagraphEl()); } else { for(Node node:nodes) { @@ -978,7 +972,7 @@ public class QTI21WordExport implements MediaResource { Border dropBorder = new Border(0, 6, "EEEEEE"); Element wrapEl = factory.createParagraphEl(); - HTMLToOpenXMLHandler innerTable = new HTMLToOpenXMLHandler(factory, wrapEl, false); + HTMLToOpenXMLHandler innerTable = new HTMLToOpenXMLHandler(factory, relPath, wrapEl, false); innerTable.setMaxWidthCm(7.5); innerTable.startTable(Columns.valueOf(columnWidthPct)); for(SimpleAssociableChoice choice:targetChoices) { @@ -992,7 +986,7 @@ public class QTI21WordExport implements MediaResource { } // add the drop panels - HTMLToOpenXMLHandler dropTable = new HTMLToOpenXMLHandler(factory, wrapEl, false); + HTMLToOpenXMLHandler dropTable = new HTMLToOpenXMLHandler(factory, relPath, wrapEl, false); dropTable.setMaxWidthCm(7); dropTable.startTable(Columns.valueOf(columnWidthPct - 50)); if(withResponses) { @@ -1003,7 +997,7 @@ public class QTI21WordExport implements MediaResource { Node answerCell = dropTable.addCell(factory.createTableCell(dropBackgroundColor, targetBorder, columnWidthPct - 10, Unit.pct)); String answerHtml = htmlBuilder.flowStaticString(sourceChoice.getFlowStatics()); List<Node> answerNodes = appendHtmlText(answerHtml, factory.createParagraphEl(), 7.5); - if(answerNodes.size() == 0) { + if(answerNodes.isEmpty()) { answerCell.appendChild(factory.createParagraphEl()); } else { for(Node answerNode:answerNodes) { @@ -1115,7 +1109,7 @@ public class QTI21WordExport implements MediaResource { } try { SAXParser parser = new SAXParser(); - HTMLToOpenXMLHandler handler = new HTMLToOpenXMLHandler(factory, wrapEl, false); + HTMLToOpenXMLHandler handler = new HTMLToOpenXMLHandler(factory, relPath, wrapEl, false); handler.setMaxWidthCm(widthCm); parser.setContentHandler(handler); parser.parse(new InputSource(new StringReader(html)));