use of uk.ac.ed.ph.jqtiplus.node.QtiNode in project openolat by klemens.
the class AssessmentTestHelper method getParentSection.
public static ParentPartItemRefs getParentSection(TestPlanNodeKey itemKey, TestSessionState testSessionState, ResolvedAssessmentTest resolvedAssessmentTest) {
ParentPartItemRefs parentParts = new ParentPartItemRefs();
try {
TestPlanNode currentItem = testSessionState.getTestPlan().getNode(itemKey);
List<AssessmentItemRef> itemRefs = resolvedAssessmentTest.getItemRefsBySystemIdMap().get(currentItem.getItemSystemId());
AssessmentItemRef itemRef = null;
if (itemRefs.size() == 1) {
itemRef = itemRefs.get(0);
} else {
Identifier itemId = itemKey.getIdentifier();
for (AssessmentItemRef ref : itemRefs) {
if (ref.getIdentifier().equals(itemId)) {
itemRef = ref;
break;
}
}
}
if (itemRef != null) {
for (QtiNode parentPart = itemRef.getParent(); parentPart != null; parentPart = parentPart.getParent()) {
if (parentParts.getSectionIdentifier() == null && parentPart instanceof AssessmentSection) {
AssessmentSection section = (AssessmentSection) parentPart;
parentParts.setSectionIdentifier(section.getIdentifier().toString());
} else if (parentParts.getTestPartIdentifier() == null && parentPart instanceof TestPart) {
TestPart testPart = (TestPart) parentPart;
parentParts.setTestPartIdentifier(testPart.getIdentifier().toString());
}
}
}
} catch (Exception e) {
log.error("", e);
}
return parentParts;
}
use of uk.ac.ed.ph.jqtiplus.node.QtiNode in project openolat by klemens.
the class AssessmentObjectComponentRenderer method renderGap.
/*
<xsl:template match="qti:gap">
<xsl:variable name="gmi" select="ancestor::qti:gapMatchInteraction" as="element(qti:gapMatchInteraction)"/>
<xsl:variable name="gaps" select="$gmi//qti:gap" as="element(qti:gap)+"/>
<xsl:variable name="thisGap" select="." as="element(qti:gap)"/>
<span class="gap" id="qtiworks_id_{$gmi/@responseIdentifier}_{@identifier}">
<!-- (Print index of this gap wrt all gaps in the interaction) -->
GAP <xsl:value-of select="for $i in 1 to count($gaps) return
if ($gaps[$i]/@identifier = $thisGap/@identifier) then $i else ()"/>
</span>
</xsl:template>
*/
private void renderGap(StringOutput sb, Gap gap, ItemSessionState itemSessionState, AssessmentObjectComponent component) {
GapMatchInteraction interaction = null;
for (QtiNode parentNode = gap.getParent(); parentNode.getParent() != null; parentNode = parentNode.getParent()) {
if (parentNode instanceof GapMatchInteraction) {
interaction = (GapMatchInteraction) parentNode;
break;
}
}
if (interaction != null) {
List<Gap> gaps = QueryUtils.search(Gap.class, interaction.getBlockStatics());
String responseUniqueId = component.getResponseUniqueIdentifier(itemSessionState, interaction);
sb.append("<span class='gap' id=\"qtiworks_id_").append(responseUniqueId).append("_").append(gap.getIdentifier().toString()).append("\">");
sb.append("GAP ").append(gaps.indexOf(gap));
sb.append("</span>");
}
}
use of uk.ac.ed.ph.jqtiplus.node.QtiNode in project openolat by klemens.
the class AssessmentTestComposerController method doExportPool.
private void doExportPool() {
TreeNode selectedNode = menuTree.getSelectedNode();
if (selectedNode == null)
return;
AtomicInteger counter = new AtomicInteger();
Object uobject = selectedNode.getUserObject();
if (uobject instanceof AssessmentItemRef) {
doExportPool((AssessmentItemRef) uobject);
counter.incrementAndGet();
} else if (uobject instanceof QtiNode) {
QtiNode qtiNode = (QtiNode) uobject;
QueryUtils.walkTree(new TreeWalkNodeHandler() {
@Override
public boolean handleNode(QtiNode node) {
if (node instanceof AssessmentItemRef) {
doExportPool((AssessmentItemRef) node);
counter.incrementAndGet();
}
return true;
}
}, qtiNode);
}
if (counter.get() > 0) {
showInfo("export.qpool.successful", counter.toString());
}
}
Aggregations