Search in sources :

Example 31 with OutcomeDeclaration

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;
}
Also used : OutcomeDeclaration(uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration)

Example 32 with OutcomeDeclaration

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;
}
Also used : DefaultValue(uk.ac.ed.ph.jqtiplus.node.shared.declaration.DefaultValue) FieldValue(uk.ac.ed.ph.jqtiplus.node.shared.FieldValue) FloatValue(uk.ac.ed.ph.jqtiplus.value.FloatValue) OutcomeDeclaration(uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration)

Example 33 with OutcomeDeclaration

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);
}
Also used : NodeGroupList(uk.ac.ed.ph.jqtiplus.group.NodeGroupList) OutcomeDeclarationGroup(uk.ac.ed.ph.jqtiplus.group.outcome.declaration.OutcomeDeclarationGroup) OutcomeDeclaration(uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration)

Example 34 with OutcomeDeclaration

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);
    }
}
Also used : OutcomeDeclaration(uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration)

Example 35 with OutcomeDeclaration

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);
    }
}
Also used : MapResponse(uk.ac.ed.ph.jqtiplus.node.expression.general.MapResponse) Variable(uk.ac.ed.ph.jqtiplus.node.expression.general.Variable) SetOutcomeValue(uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue) BaseValue(uk.ac.ed.ph.jqtiplus.node.expression.general.BaseValue) ResponseIf(uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseIf) Sum(uk.ac.ed.ph.jqtiplus.node.expression.operator.Sum) Correct(uk.ac.ed.ph.jqtiplus.node.expression.general.Correct) OutcomeDeclaration(uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration) ComplexReferenceIdentifier(uk.ac.ed.ph.jqtiplus.types.ComplexReferenceIdentifier) MapEntry(uk.ac.ed.ph.jqtiplus.node.item.response.declaration.MapEntry) Equal(uk.ac.ed.ph.jqtiplus.node.expression.operator.Equal) FloatOrVariableRef(uk.ac.ed.ph.jqtiplus.types.FloatOrVariableRef) List(java.util.List) ArrayList(java.util.ArrayList) FloatValue(uk.ac.ed.ph.jqtiplus.value.FloatValue) Map(java.util.Map) HashMap(java.util.HashMap) ResponseCondition(uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseCondition)

Aggregations

OutcomeDeclaration (uk.ac.ed.ph.jqtiplus.node.outcome.declaration.OutcomeDeclaration)52 DefaultValue (uk.ac.ed.ph.jqtiplus.node.shared.declaration.DefaultValue)18 FloatValue (uk.ac.ed.ph.jqtiplus.value.FloatValue)16 FieldValue (uk.ac.ed.ph.jqtiplus.node.shared.FieldValue)14 ArrayList (java.util.ArrayList)12 BaseValue (uk.ac.ed.ph.jqtiplus.node.expression.general.BaseValue)10 View (uk.ac.ed.ph.jqtiplus.node.test.View)10 SetOutcomeValue (uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue)8 IdentifierValue (uk.ac.ed.ph.jqtiplus.value.IdentifierValue)8 Value (uk.ac.ed.ph.jqtiplus.value.Value)8 ModalFeedback (uk.ac.ed.ph.jqtiplus.node.item.ModalFeedback)6 Variable (uk.ac.ed.ph.jqtiplus.node.expression.general.Variable)4 Sum (uk.ac.ed.ph.jqtiplus.node.expression.operator.Sum)4 ResponseDeclaration (uk.ac.ed.ph.jqtiplus.node.item.response.declaration.ResponseDeclaration)4 ResponseCondition (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseCondition)4 ResponseIf (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseIf)4 ResponseRule (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseRule)4 TemplateDeclaration (uk.ac.ed.ph.jqtiplus.node.item.template.declaration.TemplateDeclaration)4 SetOutcomeValue (uk.ac.ed.ph.jqtiplus.node.test.outcome.processing.SetOutcomeValue)4 Identifier (uk.ac.ed.ph.jqtiplus.types.Identifier)4