Search in sources :

Example 26 with Variable

use of uk.ac.ed.ph.jqtiplus.node.expression.general.Variable in project OpenOLAT by OpenOLAT.

the class AssessmentItemFactory method appendVariableBaseValue.

/*
		<variable identifier="SCORE" />
		<baseValue baseType="float">4</baseValue>
	 */
/**
 * @param var
 * @param value
 * @param responseIdentifier
 * @param parentExpression
 * @param reverse if true, reverse the order, first baseValue and then variable
 */
private static void appendVariableBaseValue(ModalFeedbackCondition.Variable var, String value, Identifier responseIdentifier, Expression parentExpression, boolean reverse) {
    Variable variable = new Variable(parentExpression);
    BaseValue bValue = new BaseValue(parentExpression);
    if (reverse) {
        parentExpression.getExpressions().add(bValue);
        parentExpression.getExpressions().add(variable);
    } else {
        parentExpression.getExpressions().add(variable);
        parentExpression.getExpressions().add(bValue);
    }
    switch(var) {
        case score:
            bValue.setBaseTypeAttrValue(BaseType.FLOAT);
            bValue.setSingleValue(new FloatValue(Double.parseDouble(value)));
            variable.setIdentifier(QTI21Constants.SCORE_CLX_IDENTIFIER);
            break;
        case attempts:
            bValue.setBaseTypeAttrValue(BaseType.INTEGER);
            bValue.setSingleValue(new IntegerValue(Integer.parseInt(value)));
            variable.setIdentifier(QTI21Constants.NUM_ATTEMPTS_CLX_IDENTIFIER);
            break;
        case response:
            bValue.setBaseTypeAttrValue(BaseType.IDENTIFIER);
            bValue.setSingleValue(new IdentifierValue(Identifier.parseString(value)));
            variable.setIdentifier(ComplexReferenceIdentifier.parseString(responseIdentifier.toString()));
            break;
    }
}
Also used : Variable(uk.ac.ed.ph.jqtiplus.node.expression.general.Variable) BaseValue(uk.ac.ed.ph.jqtiplus.node.expression.general.BaseValue) IntegerValue(uk.ac.ed.ph.jqtiplus.value.IntegerValue) IdentifierValue(uk.ac.ed.ph.jqtiplus.value.IdentifierValue) FloatValue(uk.ac.ed.ph.jqtiplus.value.FloatValue)

Example 27 with Variable

use of uk.ac.ed.ph.jqtiplus.node.expression.general.Variable in project OpenOLAT by OpenOLAT.

the class AssessmentItemFactory method createMaxScoreBoundLimitRule.

/**
 * Rule which ensure that the final score is not above the max. score value.
 */
public static ResponseRule createMaxScoreBoundLimitRule(ResponseProcessing responseProcessing) {
    /*
		<responseCondition>
			<responseIf>
				<gt>
					<variable identifier="SCORE" /><variable identifier="MAXSCORE" />
				</gt>
				<setOutcomeValue identifier="SCORE">
					<variable identifier="MAXSCORE" />
				</setOutcomeValue>
			</responseIf>
		</responseCondition>
		*/
    ResponseCondition rule = new ResponseCondition(responseProcessing);
    ResponseIf responseIf = new ResponseIf(rule);
    rule.setResponseIf(responseIf);
    Gt gt = new Gt(responseIf);
    responseIf.setExpression(gt);
    Variable scoreVar = new Variable(gt);
    scoreVar.setIdentifier(SCORE_CLX_IDENTIFIER);
    gt.getExpressions().add(scoreVar);
    Variable maxScoreVar = new Variable(gt);
    maxScoreVar.setIdentifier(MAXSCORE_CLX_IDENTIFIER);
    gt.getExpressions().add(maxScoreVar);
    SetOutcomeValue setOutcomeValue = new SetOutcomeValue(responseIf);
    setOutcomeValue.setIdentifier(SCORE_IDENTIFIER);
    Variable maxScoreOutcomeVar = new Variable(setOutcomeValue);
    maxScoreOutcomeVar.setIdentifier(MAXSCORE_CLX_IDENTIFIER);
    setOutcomeValue.setExpression(maxScoreOutcomeVar);
    responseIf.getResponseRules().add(setOutcomeValue);
    return rule;
}
Also used : Variable(uk.ac.ed.ph.jqtiplus.node.expression.general.Variable) SetOutcomeValue(uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue) ResponseIf(uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseIf) Gt(uk.ac.ed.ph.jqtiplus.node.expression.operator.Gt) ResponseCondition(uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseCondition)

Example 28 with Variable

use of uk.ac.ed.ph.jqtiplus.node.expression.general.Variable in project OpenOLAT by OpenOLAT.

the class AssessmentItemFactory method createModalFeedbackResponseConditionByScore.

/**
 * This generate a response rule which compare the max score and the score
 * to set the feedback as "correct".
 *
 *	<responseCondition>
 *		<responseIf>
 *			<and>
 *				<not>
 *					<match>
 *						<variable identifier="FEEDBACKBASIC" />
 *						<baseValue baseType="identifier">empty</baseValue>
 *					</match>
 *				</not>
 *				<equal toleranceMode="exact">
 *					<variable identifier="SCORE" />
 *					<variable identifier="MAXSCORE" />
 *				</equal>
 *			</and>
 *			<setOutcomeValue identifier="FEEDBACKBASIC">
 *				<baseValue baseType="identifier">correct</baseValue>
 *			</setOutcomeValue>
 *		</responseIf>
 *	</responseCondition>
 */
public static ResponseCondition createModalFeedbackResponseConditionByScore(ResponseProcessing responseProcessing) {
    ResponseCondition responseCondition = new ResponseCondition(responseProcessing);
    ResponseIf responseIf = new ResponseIf(responseCondition);
    responseCondition.setResponseIf(responseIf);
    And and = new And(responseIf);
    responseIf.getExpressions().add(and);
    Not not = new Not(and);
    and.getExpressions().add(not);
    Match match = new Match(not);
    not.getExpressions().add(match);
    Variable feedbackbasicVar = new Variable(match);
    feedbackbasicVar.setIdentifier(QTI21Constants.FEEDBACKBASIC_CLX_IDENTIFIER);
    match.getExpressions().add(feedbackbasicVar);
    BaseValue emptyValue = new BaseValue(match);
    emptyValue.setBaseTypeAttrValue(BaseType.IDENTIFIER);
    emptyValue.setSingleValue(QTI21Constants.EMPTY_IDENTIFIER_VALUE);
    match.getExpressions().add(emptyValue);
    // SCORE >= MAXSCORE ( > is for security and special case where the max score is smalle than the sum of correct answers)
    Gte greaterOrEqual = new Gte(and);
    and.getExpressions().add(greaterOrEqual);
    Variable scoreVar = new Variable(greaterOrEqual);
    scoreVar.setIdentifier(QTI21Constants.SCORE_CLX_IDENTIFIER);
    greaterOrEqual.getExpressions().add(scoreVar);
    Variable maxScoreVar = new Variable(greaterOrEqual);
    maxScoreVar.setIdentifier(QTI21Constants.MAXSCORE_CLX_IDENTIFIER);
    greaterOrEqual.getExpressions().add(maxScoreVar);
    // outcome value
    SetOutcomeValue correctOutcomeValue = new SetOutcomeValue(responseIf);
    correctOutcomeValue.setIdentifier(QTI21Constants.FEEDBACKBASIC_IDENTIFIER);
    responseIf.getResponseRules().add(correctOutcomeValue);
    BaseValue correctValue = new BaseValue(correctOutcomeValue);
    correctValue.setBaseTypeAttrValue(BaseType.IDENTIFIER);
    correctValue.setSingleValue(QTI21Constants.CORRECT_IDENTIFIER_VALUE);
    correctOutcomeValue.setExpression(correctValue);
    return responseCondition;
}
Also used : Not(uk.ac.ed.ph.jqtiplus.node.expression.operator.Not) Variable(uk.ac.ed.ph.jqtiplus.node.expression.general.Variable) SetOutcomeValue(uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue) And(uk.ac.ed.ph.jqtiplus.node.expression.operator.And) BaseValue(uk.ac.ed.ph.jqtiplus.node.expression.general.BaseValue) Gte(uk.ac.ed.ph.jqtiplus.node.expression.operator.Gte) ResponseIf(uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseIf) ResponseCondition(uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseCondition) Match(uk.ac.ed.ph.jqtiplus.node.expression.operator.Match)

Example 29 with Variable

use of uk.ac.ed.ph.jqtiplus.node.expression.general.Variable in project OpenOLAT by OpenOLAT.

the class AssessmentItemFactory method appendSetOutcomeScoreMaxScore.

/*
	<setOutcomeValue identifier="SCORE">
	    <sum>
	      <variable identifier="SCORE"/>
	      <variable identifier="MAXSCORE"/>
	    </sum>
	  </setOutcomeValue>
	*/
public static void appendSetOutcomeScoreMaxScore(ResponseConditionChild responseCondition) {
    SetOutcomeValue scoreOutcomeValue = new SetOutcomeValue(responseCondition);
    scoreOutcomeValue.setIdentifier(QTI21Constants.SCORE_IDENTIFIER);
    responseCondition.getResponseRules().add(scoreOutcomeValue);
    Sum sum = new Sum(scoreOutcomeValue);
    scoreOutcomeValue.getExpressions().add(sum);
    Variable scoreVar = new Variable(sum);
    scoreVar.setIdentifier(QTI21Constants.SCORE_CLX_IDENTIFIER);
    sum.getExpressions().add(scoreVar);
    Variable maxScoreVar = new Variable(sum);
    maxScoreVar.setIdentifier(QTI21Constants.MAXSCORE_CLX_IDENTIFIER);
    sum.getExpressions().add(maxScoreVar);
}
Also used : Variable(uk.ac.ed.ph.jqtiplus.node.expression.general.Variable) SetOutcomeValue(uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue) Sum(uk.ac.ed.ph.jqtiplus.node.expression.operator.Sum)

Example 30 with Variable

use of uk.ac.ed.ph.jqtiplus.node.expression.general.Variable in project OpenOLAT by OpenOLAT.

the class AssessmentItemFactory method appendSetOutcomeScoreMapResponse.

/*
    <setOutcomeValue identifier="SCORE">
      <sum>
        <variable identifier="SCORE"/>
        <mapResponse identifier="RESPONSE_1"/>
      </sum>
    </setOutcomeValue>
	*/
public static void appendSetOutcomeScoreMapResponse(ResponseConditionChild responseCondition, Identifier responseIdentifier) {
    SetOutcomeValue scoreOutcome = new SetOutcomeValue(responseCondition);
    scoreOutcome.setIdentifier(QTI21Constants.SCORE_IDENTIFIER);
    responseCondition.getResponseRules().add(scoreOutcome);
    Sum sum = new Sum(scoreOutcome);
    scoreOutcome.getExpressions().add(sum);
    Variable scoreVar = new Variable(sum);
    scoreVar.setIdentifier(QTI21Constants.SCORE_CLX_IDENTIFIER);
    sum.getExpressions().add(scoreVar);
    MapResponse mapResponse = new MapResponse(sum);
    mapResponse.setIdentifier(responseIdentifier);
    sum.getExpressions().add(mapResponse);
}
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) Sum(uk.ac.ed.ph.jqtiplus.node.expression.operator.Sum)

Aggregations

Variable (uk.ac.ed.ph.jqtiplus.node.expression.general.Variable)62 ResponseIf (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseIf)48 SetOutcomeValue (uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue)46 BaseValue (uk.ac.ed.ph.jqtiplus.node.expression.general.BaseValue)40 Match (uk.ac.ed.ph.jqtiplus.node.expression.operator.Match)30 Sum (uk.ac.ed.ph.jqtiplus.node.expression.operator.Sum)28 ResponseElse (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseElse)26 Correct (uk.ac.ed.ph.jqtiplus.node.expression.general.Correct)24 ComplexReferenceIdentifier (uk.ac.ed.ph.jqtiplus.types.ComplexReferenceIdentifier)24 IsNull (uk.ac.ed.ph.jqtiplus.node.expression.operator.IsNull)22 ResponseCondition (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseCondition)22 MapResponse (uk.ac.ed.ph.jqtiplus.node.expression.general.MapResponse)16 IdentifierValue (uk.ac.ed.ph.jqtiplus.value.IdentifierValue)16 And (uk.ac.ed.ph.jqtiplus.node.expression.operator.And)14 ResponseElseIf (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseElseIf)10 Multiple (uk.ac.ed.ph.jqtiplus.node.expression.operator.Multiple)8 Not (uk.ac.ed.ph.jqtiplus.node.expression.operator.Not)6 FloatValue (uk.ac.ed.ph.jqtiplus.value.FloatValue)6 ArrayList (java.util.ArrayList)4 AssessmentItemFactory.appendSetOutcomeFeedbackCorrect (org.olat.ims.qti21.model.xml.AssessmentItemFactory.appendSetOutcomeFeedbackCorrect)4