use of uk.ac.ed.ph.jqtiplus.node.test.AssessmentSection in project OpenOLAT by OpenOLAT.
the class AssessmentTestComposerController method doCopy.
private void doCopy(UserRequest ureq) {
TreeNode selectedNode = menuTree.getSelectedNode();
if (selectedNode == null || !(selectedNode.getUserObject() instanceof AssessmentItemRef))
return;
AssessmentItemRef itemRefToCopy = (AssessmentItemRef) selectedNode.getUserObject();
AssessmentSection section = itemRefToCopy.getParentSection();
ResolvedAssessmentItem resolvedAssessmentItem = resolvedAssessmentTest.getResolvedAssessmentItem(itemRefToCopy);
AssessmentItem originalAssessmentItem = resolvedAssessmentItem.getItemLookup().extractIfSuccessful();
if (originalAssessmentItem == null) {
showError("error.assessment.item");
return;
}
QTI21QuestionType type = QTI21QuestionType.getType(originalAssessmentItem);
File itemFile = null;
try {
AssessmentItemRef itemRef = new AssessmentItemRef(section);
String itemId = IdentifierGenerator.newAsString(getTypePrefix(type));
itemRef.setIdentifier(Identifier.parseString(itemId));
itemFile = new File(unzippedDirRoot, itemId + ".xml");
itemRef.setHref(new URI(itemFile.getName()));
try (OutputStream out = new FileOutputStream(itemFile)) {
// make the copy
qtiService.qtiSerializer().serializeJqtiObject(originalAssessmentItem, out);
// change identifier and title
ResolvedAssessmentItem resolvedCopyItem = qtiService.loadAndResolveAssessmentItemForCopy(itemFile.toURI(), unzippedDirRoot);
AssessmentItem copiedAssessmentItem = resolvedCopyItem.getRootNodeLookup().extractIfSuccessful();
copiedAssessmentItem.setIdentifier(IdentifierGenerator.newAsString(getTypePrefix(type)));
copiedAssessmentItem.setTitle(originalAssessmentItem.getTitle() + " (Copy)");
qtiService.updateAssesmentObject(itemFile, resolvedCopyItem);
// add to section
section.getSectionParts().add(itemRef);
Map<AssessmentItemRef, AssessmentItem> flyingObjects = Collections.singletonMap(itemRef, copiedAssessmentItem);
doSaveAssessmentTest(ureq, flyingObjects);
manifestBuilder.appendAssessmentItem(itemFile.getName());
doSaveManifest();
} catch (Exception e) {
logError("", e);
}
updateTreeModel(false);
TreeNode newItemNode = menuTree.getTreeModel().getNodeById(itemId);
menuTree.setSelectedNode(newItemNode);
menuTree.open(newItemNode);
partEditorFactory(ureq, newItemNode);
} catch (URISyntaxException e) {
logError("", e);
}
}
use of uk.ac.ed.ph.jqtiplus.node.test.AssessmentSection in project OpenOLAT by OpenOLAT.
the class QTI21StatisticResourceResult method buildRecursively.
private TreeNode buildRecursively(AssessmentSection section, TreeNode parentNode) {
GenericTreeNode sectionNode = new GenericTreeNode();
sectionNode.setTitle(section.getTitle());
sectionNode.setIconCssClass("o_icon o_mi_qtisection");
sectionNode.setUserObject(section);
parentNode.addChild(sectionNode);
TreeNode firstItem = null;
for (SectionPart part : section.getSectionParts()) {
TreeNode itemNode = null;
if (part instanceof AssessmentItemRef) {
itemNode = buildRecursively((AssessmentItemRef) part, sectionNode);
} else if (part instanceof AssessmentSection) {
itemNode = buildRecursively((AssessmentSection) part, sectionNode);
}
if (firstItem == null) {
firstItem = itemNode;
}
}
sectionNode.setDelegate(firstItem);
return firstItem;
}
use of uk.ac.ed.ph.jqtiplus.node.test.AssessmentSection in project OpenOLAT by OpenOLAT.
the class QTI21StatisticResourceResult method buildRecursively.
private void buildRecursively(AssessmentTest test, GenericTreeNode rootTreeNode) {
// list all test parts
List<TestPart> parts = test.getTestParts();
if (parts.size() == 1) {
TreeNode firstItem = null;
List<AssessmentSection> sections = test.getTestParts().get(0).getAssessmentSections();
for (AssessmentSection section : sections) {
TreeNode itemNode = buildRecursively(section, rootTreeNode);
if (firstItem == null) {
firstItem = itemNode;
}
}
} else {
int counter = 0;
for (TestPart part : parts) {
buildRecursively(part, ++counter, rootTreeNode);
}
}
}
use of uk.ac.ed.ph.jqtiplus.node.test.AssessmentSection in project OpenOLAT by OpenOLAT.
the class QTI21StatisticResourceResult method buildRecursively.
private void buildRecursively(TestPart part, int pos, TreeNode parentNode) {
GenericTreeNode partNode = new GenericTreeNode();
partNode.setTitle(pos + ". Test part");
partNode.setIconCssClass("o_icon o_qtiassessment_icon");
partNode.setUserObject(part);
parentNode.addChild(partNode);
TreeNode firstItem = null;
List<AssessmentSection> sections = part.getAssessmentSections();
for (AssessmentSection section : sections) {
TreeNode itemNode = buildRecursively(section, partNode);
if (firstItem == null) {
firstItem = itemNode;
}
}
partNode.setDelegate(firstItem);
}
use of uk.ac.ed.ph.jqtiplus.node.test.AssessmentSection in project OpenOLAT by OpenOLAT.
the class AssessmentTestEditorAndComposerTreeModel method buildRecursively.
private void buildRecursively(AssessmentSection section, TreeNode parentNode) {
GenericTreeNode sectionNode = new GenericTreeNode(section.getIdentifier().toString());
sectionNode.setTitle(section.getTitle());
sectionNode.setIconCssClass("o_icon o_mi_qtisection");
sectionNode.setUserObject(section);
parentNode.addChild(sectionNode);
for (SectionPart part : section.getSectionParts()) {
if (part instanceof AssessmentItemRef) {
buildRecursively((AssessmentItemRef) part, sectionNode);
} else if (part instanceof AssessmentSection) {
buildRecursively((AssessmentSection) part, sectionNode);
}
}
}
Aggregations