private void buildMainScoreRulePerAnswer(ResponseCondition rule) { ensureFeedbackBasicOutcomeDeclaration(); /* <responseCondition> <responseIf> <not> <isNull> <variable identifier="RESPONSE_1" /> </isNull> </not> <setOutcomeValue identifier="SCORE"> <sum> <variable identifier="SCORE" /> <mapResponse identifier="RESPONSE_1" /> </sum> </setOutcomeValue> <setOutcomeValue identifier="FEEDBACKBASIC"> <baseValue baseType="identifier"> incorrect </baseValue> </setOutcomeValue> </responseIf> </responseCondition> */ ResponseIf responseIf = new ResponseIf(rule); rule.setResponseIf(responseIf); Not not = new Not(responseIf); responseIf.getExpressions().add(not); IsNull isNull = new IsNull(not); not.getExpressions().add(isNull); Variable responseVar = new Variable(isNull); ComplexReferenceIdentifier choiceResponseIdentifier = ComplexReferenceIdentifier.parseString( choiceInteraction.getResponseIdentifier().toString()); responseVar.setIdentifier(choiceResponseIdentifier); isNull.getExpressions().add(responseVar); { // outcome score SetOutcomeValue scoreOutcome = new SetOutcomeValue(responseIf); scoreOutcome.setIdentifier(QTI21Constants.SCORE_IDENTIFIER); responseIf.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(choiceInteraction.getResponseIdentifier()); sum.getExpressions().add(mapResponse); } { // outcome feedback SetOutcomeValue incorrectOutcomeValue = new SetOutcomeValue(responseIf); incorrectOutcomeValue.setIdentifier(QTI21Constants.FEEDBACKBASIC_IDENTIFIER); responseIf.getResponseRules().add(incorrectOutcomeValue); BaseValue incorrectValue = new BaseValue(incorrectOutcomeValue); incorrectValue.setBaseTypeAttrValue(BaseType.IDENTIFIER); incorrectValue.setSingleValue(QTI21Constants.INCORRECT_IDENTIFIER_VALUE); incorrectOutcomeValue.setExpression(incorrectValue); } }
private void buildMainScoreRuleAllCorrectAnswers(ResponseCondition rule) { ensureFeedbackBasicOutcomeDeclaration(); /* <responseIf> <isNull> <variable identifier="RESPONSE_1" /> </isNull> <setOutcomeValue identifier="FEEDBACKBASIC"> <baseValue baseType="identifier"> empty </baseValue> </setOutcomeValue> </responseIf> */ // if no response ResponseIf responseIf = new ResponseIf(rule); rule.setResponseIf(responseIf); IsNull isNull = new IsNull(responseIf); responseIf.getExpressions().add(isNull); Variable variable = new Variable(isNull); variable.setIdentifier(ComplexReferenceIdentifier.parseString(responseIdentifier.toString())); isNull.getExpressions().add(variable); { SetOutcomeValue feedbackVar = new SetOutcomeValue(responseIf); feedbackVar.setIdentifier(QTI21Constants.FEEDBACKBASIC_IDENTIFIER); BaseValue feedbackVal = new BaseValue(feedbackVar); feedbackVal.setBaseTypeAttrValue(BaseType.IDENTIFIER); feedbackVal.setSingleValue(new IdentifierValue("empty")); feedbackVar.setExpression(feedbackVal); responseIf.getResponseRules().add(feedbackVar); } /* <responseElseIf> <match> <variable identifier="RESPONSE_1" /> <correct identifier="RESPONSE_1" /> </match> <setOutcomeValue identifier="SCORE"> <sum> <variable identifier="SCORE" /> <variable identifier="MAXSCORE" /> </sum> </setOutcomeValue> <setOutcomeValue identifier="FEEDBACKBASIC"> <baseValue baseType="identifier"> correct </baseValue> </setOutcomeValue> </responseElseIf> */ // else if correct response ResponseElseIf responseElseIf = new ResponseElseIf(rule); rule.getResponseElseIfs().add(responseElseIf); // match { Match match = new Match(responseElseIf); responseElseIf.getExpressions().add(match); Variable responseVar = new Variable(match); responseVar.setIdentifier( ComplexReferenceIdentifier.parseString(responseIdentifier.toString())); match.getExpressions().add(responseVar); Correct correct = new Correct(match); correct.setIdentifier(ComplexReferenceIdentifier.parseString(responseIdentifier.toString())); match.getExpressions().add(correct); } // outcome score { SetOutcomeValue scoreOutcomeVar = new SetOutcomeValue(responseIf); scoreOutcomeVar.setIdentifier(QTI21Constants.SCORE_IDENTIFIER); responseElseIf.getResponseRules().add(scoreOutcomeVar); Sum sum = new Sum(scoreOutcomeVar); scoreOutcomeVar.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); } // outcome feedback { SetOutcomeValue correctFeedbackVar = new SetOutcomeValue(responseIf); correctFeedbackVar.setIdentifier(QTI21Constants.FEEDBACKBASIC_IDENTIFIER); BaseValue correctFeedbackVal = new BaseValue(correctFeedbackVar); correctFeedbackVal.setBaseTypeAttrValue(BaseType.IDENTIFIER); correctFeedbackVal.setSingleValue(QTI21Constants.CORRECT_IDENTIFIER_VALUE); correctFeedbackVar.setExpression(correctFeedbackVal); responseElseIf.getResponseRules().add(correctFeedbackVar); } /* <responseElse> <setOutcomeValue identifier="FEEDBACKBASIC"> <baseValue baseType="identifier"> incorrect </baseValue> </setOutcomeValue> </responseElse> </responseCondition> */ ResponseElse responseElse = new ResponseElse(rule); rule.setResponseElse(responseElse); { // feedback incorrect SetOutcomeValue incorrectFeedbackVar = new SetOutcomeValue(responseIf); incorrectFeedbackVar.setIdentifier(QTI21Constants.FEEDBACKBASIC_IDENTIFIER); BaseValue incorrectFeedbackVal = new BaseValue(incorrectFeedbackVar); incorrectFeedbackVal.setBaseTypeAttrValue(BaseType.IDENTIFIER); incorrectFeedbackVal.setSingleValue(QTI21Constants.INCORRECT_IDENTIFIER_VALUE); incorrectFeedbackVar.setExpression(incorrectFeedbackVal); responseElse.getResponseRules().add(incorrectFeedbackVar); } }