use of uk.ac.ed.ph.jqtiplus.node.item.interaction.Interaction in project openolat by klemens.
the class ManifestMetadataBuilder method appendMetadataFrom.
/**
* This method will add new metadata to the current ones.
*
* @param item
* @param locale
*/
public void appendMetadataFrom(QuestionItem item, AssessmentItem assessmentItem, Locale locale) {
String lang = item.getLanguage();
if (!StringHelper.containsNonWhitespace(lang)) {
lang = locale.getLanguage();
}
// LOM : General
if (StringHelper.containsNonWhitespace(item.getTitle())) {
setTitle(item.getTitle(), lang);
}
if (StringHelper.containsNonWhitespace(item.getCoverage())) {
setCoverage(item.getCoverage(), lang);
}
if (StringHelper.containsNonWhitespace(item.getKeywords())) {
setGeneralKeywords(item.getKeywords(), lang);
}
if (StringHelper.containsNonWhitespace(item.getDescription())) {
setDescription(item.getDescription(), lang);
}
// LOM : Technical
setTechnicalFormat(ManifestBuilder.ASSESSMENTITEM_MIMETYPE);
// LOM : Educational
if (StringHelper.containsNonWhitespace(item.getEducationalContextLevel())) {
setEducationalContext(item.getEducationalContextLevel(), lang);
}
if (StringHelper.containsNonWhitespace(item.getEducationalLearningTime())) {
setEducationalLearningTime(item.getEducationalLearningTime());
}
if (item.getLanguage() != null) {
setLanguage(item.getLanguage(), lang);
}
// LOM : Lifecycle
if (StringHelper.containsNonWhitespace(item.getItemVersion())) {
setLifecycleVersion(item.getItemVersion());
}
// LOM : Rights
LicenseService lService = CoreSpringFactory.getImpl(LicenseService.class);
ResourceLicense license = lService.loadLicense(item);
if (license != null) {
String licenseText = null;
LicenseType licenseType = license.getLicenseType();
if (lService.isFreetext(licenseType)) {
licenseText = license.getFreetext();
} else if (!lService.isNoLicense(licenseType)) {
licenseText = license.getLicenseType().getName();
}
if (StringHelper.containsNonWhitespace(licenseText)) {
setLicense(licenseText);
}
setOpenOLATMetadataCreator(license.getLicensor());
}
// LOM : classification
if (StringHelper.containsNonWhitespace(item.getTaxonomicPath())) {
setClassificationTaxonomy(item.getTaxonomicPath(), lang);
}
// QTI 2.1
setQtiMetadataTool(item.getEditor(), null, item.getEditorVersion());
if (assessmentItem != null) {
List<Interaction> interactions = assessmentItem.getItemBody().findInteractions();
List<String> interactionNames = new ArrayList<>(interactions.size());
for (Interaction interaction : interactions) {
interactionNames.add(interaction.getQtiClassName());
}
setQtiMetadataInteractionTypes(interactionNames);
}
// OpenOLAT
if (item.getType() != null) {
setOpenOLATMetadataQuestionType(item.getType().getType());
} else {
setOpenOLATMetadataQuestionType(null);
}
setOpenOLATMetadataIdentifier(item.getIdentifier());
setOpenOLATMetadataDifficulty(item.getDifficulty());
setOpenOLATMetadataDiscriminationIndex(item.getDifferentiation());
setOpenOLATMetadataDistractors(item.getNumOfAnswerAlternatives());
setOpenOLATMetadataStandardDeviation(item.getStdevDifficulty());
setOpenOLATMetadataUsage(item.getUsage());
setOpenOLATMetadataAssessmentType(item.getAssessmentType());
setOpenOLATMetadataTopic(item.getTopic());
setOpenOLATMetadataAdditionalInformations(item.getAdditionalInformations());
}
use of uk.ac.ed.ph.jqtiplus.node.item.interaction.Interaction in project openolat by klemens.
the class AssessmentTestDisplayController method handleTemporaryResponse.
private void handleTemporaryResponse(UserRequest ureq, Map<Identifier, ResponseInput> stringResponseMap) {
NotificationRecorder notificationRecorder = new NotificationRecorder(NotificationLevel.INFO);
TestSessionState testSessionState = testSessionController.getTestSessionState();
TestPlanNodeKey currentItemKey = testSessionState.getCurrentItemKey();
if (currentItemKey == null) {
//
return;
}
String cmd = ureq.getParameter("tmpResponse");
if (!qtiWorksCtrl.validateResponseIdentifierCommand(cmd, currentItemKey)) {
// this is not the right node in the plan
return;
}
final Date timestamp = ureq.getRequestTimestamp();
final Map<Identifier, ResponseData> responseDataMap = new HashMap<>();
if (stringResponseMap != null) {
for (final Entry<Identifier, ResponseInput> responseEntry : stringResponseMap.entrySet()) {
final Identifier identifier = responseEntry.getKey();
final ResponseInput responseData = responseEntry.getValue();
if (responseData instanceof StringInput) {
responseDataMap.put(identifier, new StringResponseData(((StringInput) responseData).getResponseData()));
}
}
}
ParentPartItemRefs parentParts = getParentSection(currentItemKey);
String assessmentItemIdentifier = currentItemKey.getIdentifier().toString();
AssessmentItemSession itemSession = qtiService.getOrCreateAssessmentItemSession(candidateSession, parentParts, assessmentItemIdentifier);
TestPlanNode currentItemRefNode = testSessionState.getTestPlan().getNode(currentItemKey);
ItemSessionController itemSessionController = (ItemSessionController) testSessionController.getItemProcessingContext(currentItemRefNode);
ItemSessionState itemSessionState = itemSessionController.getItemSessionState();
List<Interaction> interactions = itemSessionController.getInteractions();
Map<Identifier, Interaction> interactionMap = new HashMap<>();
for (Interaction interaction : interactions) {
interactionMap.put(interaction.getResponseIdentifier(), interaction);
}
Map<Identifier, AssessmentResponse> candidateResponseMap = qtiService.getAssessmentResponses(itemSession);
for (Entry<Identifier, ResponseData> responseEntry : responseDataMap.entrySet()) {
Identifier responseIdentifier = responseEntry.getKey();
ResponseData responseData = responseEntry.getValue();
AssessmentResponse candidateItemResponse;
if (candidateResponseMap.containsKey(responseIdentifier)) {
candidateItemResponse = candidateResponseMap.get(responseIdentifier);
} else {
candidateItemResponse = qtiService.createAssessmentResponse(candidateSession, itemSession, responseIdentifier.toString(), ResponseLegality.VALID, responseData.getType());
}
switch(responseData.getType()) {
case STRING:
{
List<String> data = ((StringResponseData) responseData).getResponseData();
String stringuifiedResponse = ResponseFormater.format(data);
candidateItemResponse.setStringuifiedResponse(stringuifiedResponse);
break;
}
default:
throw new OLATRuntimeException("Unexpected switch case: " + responseData.getType());
}
candidateResponseMap.put(responseIdentifier, candidateItemResponse);
itemSessionState.setRawResponseData(responseIdentifier, responseData);
try {
Interaction interaction = interactionMap.get(responseIdentifier);
interaction.bindResponse(itemSessionController, responseData);
} catch (final ResponseBindingException e) {
//
}
}
/* Copy uncommitted responses over */
for (final Entry<Identifier, Value> uncommittedResponseEntry : itemSessionState.getUncommittedResponseValues().entrySet()) {
final Identifier identifier = uncommittedResponseEntry.getKey();
final Value value = uncommittedResponseEntry.getValue();
itemSessionState.setResponseValue(identifier, value);
}
/* Persist CandidateResponse entities */
qtiService.recordTestAssessmentResponses(itemSession, candidateResponseMap.values());
/* Record resulting event */
final CandidateEvent candidateEvent = qtiService.recordCandidateTestEvent(candidateSession, testEntry, entry, CandidateTestEventType.ITEM_EVENT, null, currentItemKey, testSessionState, notificationRecorder);
candidateAuditLogger.logCandidateEvent(candidateEvent, candidateResponseMap);
/* Record current result state */
AssessmentResult assessmentResult = computeTestAssessmentResult(timestamp, candidateSession);
synchronized (this) {
qtiService.recordTestAssessmentResult(candidateSession, testSessionState, assessmentResult, candidateAuditLogger);
}
}
use of uk.ac.ed.ph.jqtiplus.node.item.interaction.Interaction in project openolat by klemens.
the class AssessmentItemBuilder method getInteractionNames.
public List<String> getInteractionNames() {
List<Interaction> interactions = assessmentItem.getItemBody().findInteractions();
List<String> interactionNames = new ArrayList<>(interactions.size());
for (Interaction interaction : interactions) {
String interactionName = interaction.getQtiClassName();
interactionNames.add(interactionName);
}
return interactionNames;
}
use of uk.ac.ed.ph.jqtiplus.node.item.interaction.Interaction in project openolat by klemens.
the class AlienItemAnalyzer method checkItemBody.
/**
* Check if there are text after the interaction
*/
private void checkItemBody(Report report) {
if (report.getType() == QTI21QuestionType.sc || report.getType() == QTI21QuestionType.mc || report.getType() == QTI21QuestionType.kprim || report.getType() == QTI21QuestionType.match || report.getType() == QTI21QuestionType.matchdraganddrop || report.getType() == QTI21QuestionType.hotspot || report.getType() == QTI21QuestionType.essay || report.getType() == QTI21QuestionType.upload) {
ItemBody itemBody = item.getItemBody();
List<Block> blocks = itemBody.getBlocks();
Block lastBlock = blocks.get(blocks.size() - 1);
if (!(lastBlock instanceof Interaction)) {
report.addWarning(ReportWarningEnum.textAfterInteraction);
}
}
}
use of uk.ac.ed.ph.jqtiplus.node.item.interaction.Interaction in project openolat by klemens.
the class QTI21ArchiveFormat method writeHeaders_1.
private void writeHeaders_1(OpenXMLWorksheet exportSheet, OpenXMLWorkbook workbook) {
CellStyle headerStyle = workbook.getStyles().getHeaderStyle();
// first header
Row header1Row = exportSheet.newRow();
int col = 1;
if (anonymizerCallback != null) {
// anonymized name -> test duration
col += 0;
} else {
for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
if (userPropertyHandler != null) {
col++;
}
}
// homepage -> test duration
col += 1;
}
// course node points and passed
if (courseNode instanceof AssessableCourseNode) {
AssessableCourseNode assessableCourseNode = (AssessableCourseNode) courseNode;
if (assessableCourseNode.hasScoreConfigured()) {
header1Row.addCell(col++, translator.translate("archive.table.header.node"), headerStyle);
}
if (assessableCourseNode.hasPassedConfigured()) {
if (assessableCourseNode.hasScoreConfigured()) {
col++;
} else {
header1Row.addCell(col++, translator.translate("archive.table.header.node"), headerStyle);
}
}
}
// test points, passed and dates
header1Row.addCell(col++, translator.translate("archive.table.header.test"), headerStyle);
col += 5;
List<AbstractInfos> infos = getItemInfos();
for (int i = 0; i < infos.size(); i++) {
int delta = col;
AbstractInfos info = infos.get(i);
if (info instanceof ItemInfos) {
ItemInfos item = (ItemInfos) info;
if (exportConfig.isResponseCols() || exportConfig.isPointCol() || exportConfig.isTimeCols() || exportConfig.isCommentCol()) {
List<Interaction> interactions = item.getInteractions();
for (int j = 0; j < interactions.size(); j++) {
Interaction interaction = interactions.get(j);
col = interactionArchiveMap.get(interaction.getQtiClassName()).writeHeader1(item.getAssessmentItem(), interaction, i, j, header1Row, col, workbook);
}
}
if (!exportConfig.isResponseCols()) {
col -= col - delta;
}
if (exportConfig.isPointCol()) {
col++;
}
if (exportConfig.isCommentCol()) {
col++;
}
if (exportConfig.isTimeCols()) {
col += anonymizerCallback != null ? 1 : 2;
}
} else if (numOfSections > 1 && info instanceof SectionInfos) {
SectionInfos section = (SectionInfos) info;
if (!section.getItemInfos().isEmpty()) {
String sectionTitle = translator.translate("archive.table.header.section", new String[] { section.getAssessmentSection().getTitle() });
header1Row.addCell(col++, sectionTitle, headerStyle);
}
}
}
}
Aggregations