use of org.olat.ims.qti21.model.xml.AssessmentHtmlBuilder in project openolat by klemens.
the class HottextAssessmentItemBuilder method getAnswers.
@Override
public List<Answer> getAnswers() {
List<Hottext> hottexts = getChoices();
List<Answer> answers = new ArrayList<>(hottexts.size());
for (Hottext hottext : hottexts) {
String answer = new AssessmentHtmlBuilder().inlineStaticString(hottext.getInlineStatics());
answer = FilterFactory.getHtmlTagAndDescapingFilter().filter(answer);
answers.add(new Answer(hottext.getIdentifier(), answer));
}
return answers;
}
use of org.olat.ims.qti21.model.xml.AssessmentHtmlBuilder in project openolat by klemens.
the class QTI12And21PoolWordExport method exportItems.
private void exportItems(List<QuestionItemFull> fullItems, OutputStream out, boolean withResponses) {
ZipOutputStream zout = null;
try {
OpenXMLDocument document = new OpenXMLDocument();
document.setDocumentHeader("");
Translator qti12Translator = Util.createPackageTranslator(QTIWordExport.class, locale);
Translator translator = Util.createPackageTranslator(AssessmentTestDisplayController.class, locale, Util.createPackageTranslator(AssessmentTestComposerController.class, locale, qti12Translator));
AssessmentHtmlBuilder htmlBuilder = new AssessmentHtmlBuilder();
for (Iterator<QuestionItemFull> itemIt = fullItems.iterator(); itemIt.hasNext(); ) {
QuestionItemFull fullItem = itemIt.next();
if (QTIConstants.QTI_12_FORMAT.equals(fullItem.getFormat())) {
String dir = fullItem.getDirectory();
VFSContainer container = qpoolFileStorage.getContainer(dir);
document.setMediaContainer(container);
VFSItem rootItem = container.resolve(fullItem.getRootFilename());
Item item = QTIEditHelper.readItemXml((VFSLeaf) rootItem);
if (item.isAlient()) {
QTIWordExport.renderAlienItem(item, document, translator);
} else {
QTIWordExport.renderItem(item, document, withResponses, translator);
}
} else {
File resourceDirectory = qpoolService.getRootDirectory(fullItem);
VFSContainer resourceContainer = qpoolService.getRootContainer(fullItem);
document.setMediaContainer(resourceContainer);
File resourceFile = qpoolService.getRootFile(fullItem);
URI assessmentItemUri = resourceFile.toURI();
ResolvedAssessmentItem resolvedAssessmentItem = qtiService.loadAndResolveAssessmentItem(assessmentItemUri, resourceDirectory);
AssessmentItem item = resolvedAssessmentItem.getItemLookup().extractIfSuccessful();
QTI21WordExport.renderAssessmentItem(item, resourceFile, resourceDirectory, document, withResponses, translator, htmlBuilder);
}
if (itemIt.hasNext()) {
document.appendPageBreak();
}
}
zout = new ZipOutputStream(out);
zout.setLevel(9);
OpenXMLDocumentWriter writer = new OpenXMLDocumentWriter();
writer.createDocument(zout, document);
} catch (Exception e) {
log.error("", e);
} finally {
if (zout != null) {
try {
zout.finish();
} catch (IOException e) {
log.error("", e);
}
}
}
}
use of org.olat.ims.qti21.model.xml.AssessmentHtmlBuilder in project OpenOLAT by OpenOLAT.
the class HottextAssessmentItemBuilder method getAnswers.
@Override
public List<Answer> getAnswers() {
List<Hottext> hottexts = getChoices();
List<Answer> answers = new ArrayList<>(hottexts.size());
for (Hottext hottext : hottexts) {
String answer = new AssessmentHtmlBuilder().inlineStaticString(hottext.getInlineStatics());
answer = FilterFactory.getHtmlTagAndDescapingFilter().filter(answer);
answers.add(new Answer(hottext.getIdentifier(), answer));
}
return answers;
}
use of org.olat.ims.qti21.model.xml.AssessmentHtmlBuilder in project OpenOLAT by OpenOLAT.
the class QTI12And21PoolWordExport method exportItems.
private void exportItems(List<QuestionItemFull> fullItems, OutputStream out, boolean withResponses) {
ZipOutputStream zout = null;
try {
OpenXMLDocument document = new OpenXMLDocument();
document.setDocumentHeader("");
Translator qti12Translator = Util.createPackageTranslator(QTIWordExport.class, locale);
Translator translator = Util.createPackageTranslator(AssessmentTestDisplayController.class, locale, Util.createPackageTranslator(AssessmentTestComposerController.class, locale, qti12Translator));
AssessmentHtmlBuilder htmlBuilder = new AssessmentHtmlBuilder();
for (Iterator<QuestionItemFull> itemIt = fullItems.iterator(); itemIt.hasNext(); ) {
QuestionItemFull fullItem = itemIt.next();
if (QTIConstants.QTI_12_FORMAT.equals(fullItem.getFormat())) {
String dir = fullItem.getDirectory();
VFSContainer container = qpoolFileStorage.getContainer(dir);
document.setMediaContainer(container);
VFSItem rootItem = container.resolve(fullItem.getRootFilename());
Item item = QTIEditHelper.readItemXml((VFSLeaf) rootItem);
if (item.isAlient()) {
QTIWordExport.renderAlienItem(item, document, translator);
} else {
QTIWordExport.renderItem(item, document, withResponses, translator);
}
} else {
File resourceDirectory = qpoolService.getRootDirectory(fullItem);
VFSContainer resourceContainer = qpoolService.getRootContainer(fullItem);
document.setMediaContainer(resourceContainer);
File resourceFile = qpoolService.getRootFile(fullItem);
URI assessmentItemUri = resourceFile.toURI();
ResolvedAssessmentItem resolvedAssessmentItem = qtiService.loadAndResolveAssessmentItem(assessmentItemUri, resourceDirectory);
AssessmentItem item = resolvedAssessmentItem.getItemLookup().extractIfSuccessful();
QTI21WordExport.renderAssessmentItem(item, resourceFile, resourceDirectory, document, withResponses, translator, htmlBuilder);
}
if (itemIt.hasNext()) {
document.appendPageBreak();
}
}
zout = new ZipOutputStream(out);
zout.setLevel(9);
OpenXMLDocumentWriter writer = new OpenXMLDocumentWriter();
writer.createDocument(zout, document);
} catch (Exception e) {
log.error("", e);
} finally {
if (zout != null) {
try {
zout.finish();
} catch (IOException e) {
log.error("", e);
}
}
}
}
use of org.olat.ims.qti21.model.xml.AssessmentHtmlBuilder in project OpenOLAT by OpenOLAT.
the class QTI21WordExport method renderAssessmentItem.
public static void renderAssessmentItem(AssessmentItem item, File itemFile, File mediaDir, OpenXMLDocument document, boolean withResponses, Translator translator, AssessmentHtmlBuilder htmlBuilder) {
StringBuilder addText = new StringBuilder();
QTI21QuestionType type = QTI21QuestionType.getType(item);
String typeDescription = "";
switch(type) {
case sc:
typeDescription = translator.translate("form.choice");
break;
case mc:
typeDescription = translator.translate("form.choice");
break;
case fib:
typeDescription = translator.translate("form.fib");
break;
case numerical:
typeDescription = translator.translate("form.fib");
break;
case kprim:
typeDescription = translator.translate("form.kprim");
break;
case hotspot:
typeDescription = translator.translate("form.hotspot");
break;
case essay:
typeDescription = translator.translate("form.essay");
break;
case upload:
typeDescription = translator.translate("form.upload");
break;
case drawing:
typeDescription = translator.translate("form.drawing");
break;
case match:
typeDescription = translator.translate("form.match");
break;
default:
typeDescription = null;
break;
}
Double maxScore = QtiNodesExtractor.extractMaxScore(item);
if (StringHelper.containsNonWhitespace(typeDescription) || maxScore != null) {
if (StringHelper.containsNonWhitespace(typeDescription)) {
addText.append("(").append(typeDescription).append(")");
}
if (maxScore != null) {
addText.append(" - ").append(AssessmentHelper.getRoundedScore(maxScore));
}
}
String title = item.getTitle();
document.appendHeading1(title, addText.toString());
List<Block> itemBodyBlocks = item.getItemBody().getBlocks();
String html = htmlBuilder.blocksString(itemBodyBlocks);
document.appendHtmlText(html, true, new QTI21AndHTMLToOpenXMLHandler(document, item, itemFile, mediaDir, withResponses, htmlBuilder, translator));
if (withResponses && (type == QTI21QuestionType.essay || type == QTI21QuestionType.upload || type == QTI21QuestionType.drawing)) {
renderCorrectSolutionForWord(item, document, translator, htmlBuilder);
}
}
Aggregations