use of uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration in project OpenOLAT by OpenOLAT.
the class AssessmentItemFactory method createOutcomeDeclarationForHint.
public static OutcomeDeclaration createOutcomeDeclarationForHint(AssessmentItem assessmentItem) {
OutcomeDeclaration feedbackOutcomeDeclaration = new OutcomeDeclaration(assessmentItem);
feedbackOutcomeDeclaration.setIdentifier(QTI21Constants.HINT_FEEDBACKMODAL_IDENTIFIER);
feedbackOutcomeDeclaration.setCardinality(Cardinality.SINGLE);
feedbackOutcomeDeclaration.setBaseType(BaseType.IDENTIFIER);
return feedbackOutcomeDeclaration;
}
use of uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration in project OpenOLAT by OpenOLAT.
the class AssessmentItemFactory method createOutcomeDeclarationForMaxScore.
public static OutcomeDeclaration createOutcomeDeclarationForMaxScore(AssessmentItem assessmentItem, double maxScore) {
OutcomeDeclaration maxScoreOutcomeDeclaration = new OutcomeDeclaration(assessmentItem);
maxScoreOutcomeDeclaration.setIdentifier(QTI21Constants.MAXSCORE_IDENTIFIER);
maxScoreOutcomeDeclaration.setCardinality(Cardinality.SINGLE);
maxScoreOutcomeDeclaration.setBaseType(BaseType.FLOAT);
DefaultValue maxScoreDefaultVal = new DefaultValue(maxScoreOutcomeDeclaration);
maxScoreOutcomeDeclaration.setDefaultValue(maxScoreDefaultVal);
FieldValue maxScoreDefaultFieldVal = new FieldValue(maxScoreDefaultVal, new FloatValue(maxScore));
maxScoreDefaultVal.getFieldValues().add(maxScoreDefaultFieldVal);
return maxScoreOutcomeDeclaration;
}
use of uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration in project OpenOLAT by OpenOLAT.
the class AssessmentItemFactory method appendDefaultOutcomeDeclarations.
/**
* Append the default outcome declaration for score, max score and feedback basic.
*
* @param assessmentItem
*/
public static void appendDefaultOutcomeDeclarations(AssessmentItem assessmentItem, double maxScore) {
NodeGroupList nodeGroups = assessmentItem.getNodeGroups();
// outcomes
OutcomeDeclarationGroup outcomeDeclarations = nodeGroups.getOutcomeDeclarationGroup();
// outcome score
OutcomeDeclaration scoreOutcomeDeclaration = createOutcomeDeclarationForScore(assessmentItem);
outcomeDeclarations.getOutcomeDeclarations().add(scoreOutcomeDeclaration);
// outcome max score
OutcomeDeclaration maxScoreOutcomeDeclaration = createOutcomeDeclarationForMaxScore(assessmentItem, maxScore);
outcomeDeclarations.getOutcomeDeclarations().add(maxScoreOutcomeDeclaration);
// outcome min score
OutcomeDeclaration minScoreOutcomeDeclaration = createOutcomeDeclarationForMinScore(assessmentItem, 0.0d);
outcomeDeclarations.getOutcomeDeclarations().add(minScoreOutcomeDeclaration);
// outcome feedback
OutcomeDeclaration feedbackOutcomeDeclaration = createOutcomeDeclarationForFeedbackBasic(assessmentItem);
outcomeDeclarations.getOutcomeDeclarations().add(feedbackOutcomeDeclaration);
}
use of uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration in project OpenOLAT by OpenOLAT.
the class AssessmentTestBuilder method buildScore.
private void buildScore() {
OutcomeDeclaration scoreDeclaration = assessmentTest.getOutcomeDeclaration(QTI21Constants.SCORE_IDENTIFIER);
if (scoreDeclaration == null) {
scoreDeclaration = AssessmentTestFactory.createOutcomeDeclaration(assessmentTest, QTI21Constants.SCORE_IDENTIFIER, 0.0d);
assessmentTest.getOutcomeDeclarations().add(0, scoreDeclaration);
}
if (maxScore != null) {
OutcomeDeclaration maxScoreDeclaration = assessmentTest.getOutcomeDeclaration(QTI21Constants.MAXSCORE_IDENTIFIER);
if (maxScoreDeclaration == null) {
maxScoreDeclaration = AssessmentTestFactory.createOutcomeDeclaration(assessmentTest, QTI21Constants.MAXSCORE_IDENTIFIER, maxScore);
assessmentTest.getOutcomeDeclarations().add(0, maxScoreDeclaration);
} else {
// update value
AssessmentTestFactory.updateDefaultValue(maxScoreDeclaration, maxScore);
}
} else {
OutcomeDeclaration maxScoreDeclaration = assessmentTest.getOutcomeDeclaration(QTI21Constants.MAXSCORE_IDENTIFIER);
if (maxScoreDeclaration != null) {
assessmentTest.getOutcomeDeclarations().remove(maxScoreDeclaration);
}
}
// add min. score
OutcomeDeclaration minScoreDeclaration = assessmentTest.getOutcomeDeclaration(QTI21Constants.MINSCORE_IDENTIFIER);
if (minScoreDeclaration == null) {
minScoreDeclaration = AssessmentTestFactory.createOutcomeDeclaration(assessmentTest, QTI21Constants.MINSCORE_IDENTIFIER, 0.0d);
assessmentTest.getOutcomeDeclarations().add(0, minScoreDeclaration);
} else {
// update value
AssessmentTestFactory.updateDefaultValue(minScoreDeclaration, 0.0d);
}
}
use of uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration in project OpenOLAT by OpenOLAT.
the class FIBAssessmentItemBuilder method buildMainScoreRulePerAnswer.
private void buildMainScoreRulePerAnswer(List<OutcomeDeclaration> outcomeDeclarations, List<ResponseRule> responseRules) {
/*
<setOutcomeValue identifier="SCORE_RESPONSE_1">
<mapResponse identifier="RESPONSE_1" />
</setOutcomeValue>
*/
/*
<responseCondition>
<responseIf>
<equal toleranceMode="absolute" tolerance="2.0 2.0" includeLowerBound="true" includeUpperBound="true">
<variable identifier="RESPONSE_3"/>
<correct identifier="RESPONSE_3"/>
</equal>
<setOutcomeValue identifier="SCORE_RESPONSE_3">
<baseValue baseType="float">3.0</baseValue>
</setOutcomeValue>
</responseIf>
</responseCondition>
*/
int count = 0;
for (Map.Entry<String, AbstractEntry> textEntryEntry : responseIdentifierToTextEntry.entrySet()) {
AbstractEntry entry = textEntryEntry.getValue();
String scoreIdentifier = "SCORE_" + entry.getResponseIdentifier().toString();
if (entry instanceof TextEntry) {
// outcome mapResonse
SetOutcomeValue mapOutcomeValue = new SetOutcomeValue(assessmentItem.getResponseProcessing());
responseRules.add(count++, mapOutcomeValue);
mapOutcomeValue.setIdentifier(Identifier.parseString(scoreIdentifier));
MapResponse mapResponse = new MapResponse(mapOutcomeValue);
mapResponse.setIdentifier(entry.getResponseIdentifier());
mapOutcomeValue.setExpression(mapResponse);
} else if (entry instanceof NumericalEntry) {
NumericalEntry numericalEntry = (NumericalEntry) entry;
ResponseCondition rule = new ResponseCondition(assessmentItem.getResponseProcessing());
responseRules.add(count++, rule);
ResponseIf responseIf = new ResponseIf(rule);
rule.setResponseIf(responseIf);
Equal equal = new Equal(responseIf);
equal.setToleranceMode(numericalEntry.getToleranceMode());
if (numericalEntry.getLowerTolerance() != null && numericalEntry.getUpperTolerance() != null) {
List<FloatOrVariableRef> tolerances = new ArrayList<>();
tolerances.add(new FloatOrVariableRef(numericalEntry.getLowerTolerance().doubleValue()));
tolerances.add(new FloatOrVariableRef(numericalEntry.getUpperTolerance().doubleValue()));
equal.setTolerances(tolerances);
}
equal.setIncludeLowerBound(Boolean.TRUE);
equal.setIncludeUpperBound(Boolean.TRUE);
responseIf.getExpressions().add(equal);
ComplexReferenceIdentifier responseIdentifier = ComplexReferenceIdentifier.assumedLegal(numericalEntry.getResponseIdentifier().toString());
Correct correct = new Correct(equal);
correct.setIdentifier(responseIdentifier);
equal.getExpressions().add(correct);
Variable variable = new Variable(equal);
variable.setIdentifier(responseIdentifier);
equal.getExpressions().add(variable);
SetOutcomeValue mapOutcomeValue = new SetOutcomeValue(responseIf);
responseIf.getResponseRules().add(mapOutcomeValue);
mapOutcomeValue.setIdentifier(Identifier.parseString(scoreIdentifier));
BaseValue correctValue = new BaseValue(mapOutcomeValue);
correctValue.setBaseTypeAttrValue(BaseType.FLOAT);
correctValue.setSingleValue(new FloatValue(entry.getScore()));
mapOutcomeValue.setExpression(correctValue);
}
}
/*
<setOutcomeValue identifier="SCORE">
<sum>
<variable identifier="SCORE_RESPONSE_1" />
<variable identifier="MINSCORE_RESPONSE_1" />
<variable identifier="SCORE_RESPONSE_2" />
<variable identifier="MINSCORE_RESPONSE_2" />
</sum>
</setOutcomeValue>
*/
{
SetOutcomeValue scoreOutcome = new SetOutcomeValue(assessmentItem.getResponseProcessing());
scoreOutcome.setIdentifier(QTI21Constants.SCORE_IDENTIFIER);
responseRules.add(count++, scoreOutcome);
Sum sum = new Sum(scoreOutcome);
scoreOutcome.setExpression(sum);
for (Map.Entry<String, AbstractEntry> textEntryEntry : responseIdentifierToTextEntry.entrySet()) {
AbstractEntry textEntry = textEntryEntry.getValue();
{
// variable score
Variable scoreVariable = new Variable(sum);
sum.getExpressions().add(scoreVariable);
String scoreIdentifier = "SCORE_" + textEntry.getResponseIdentifier().toString();
scoreVariable.setIdentifier(ComplexReferenceIdentifier.parseString(scoreIdentifier));
// create associated outcomeDeclaration
OutcomeDeclaration modalOutcomeDeclaration = AssessmentItemFactory.createOutcomeDeclarationForScoreResponse(assessmentItem, scoreIdentifier);
outcomeDeclarations.add(modalOutcomeDeclaration);
}
{
// variable minscore
Variable minScoreVariable = new Variable(sum);
sum.getExpressions().add(minScoreVariable);
String scoreIdentifier = "MINSCORE_" + textEntry.getResponseIdentifier().toString();
minScoreVariable.setIdentifier(ComplexReferenceIdentifier.parseString(scoreIdentifier));
// create associated outcomeDeclaration
OutcomeDeclaration modalOutcomeDeclaration = AssessmentItemFactory.createOutcomeDeclarationForScoreResponse(assessmentItem, scoreIdentifier);
outcomeDeclarations.add(modalOutcomeDeclaration);
}
}
}
if (correctFeedback != null || incorrectFeedback != null) {
SetOutcomeValue incorrectOutcomeValue = new SetOutcomeValue(assessmentItem.getResponseProcessing());
incorrectOutcomeValue.setIdentifier(QTI21Constants.FEEDBACKBASIC_IDENTIFIER);
BaseValue correctValue = new BaseValue(incorrectOutcomeValue);
correctValue.setBaseTypeAttrValue(BaseType.IDENTIFIER);
correctValue.setSingleValue(QTI21Constants.INCORRECT_IDENTIFIER_VALUE);
incorrectOutcomeValue.setExpression(correctValue);
responseRules.add(count++, incorrectOutcomeValue);
}
}
Aggregations