Search in sources :

Example 11 with Expression

use of uk.ac.ed.ph.jqtiplus.node.expression.Expression in project openolat by klemens.

the class ModalFeedbackBuilder method extractConditions.

public void extractConditions() {
    ResponseCondition feedbackRule = findFeedbackResponseCondition(modalFeedback.getIdentifier(), QTI21Constants.FEEDBACKMODAL_IDENTIFIER);
    ResponseIf responseIf = feedbackRule.getResponseIf();
    if (responseIf != null && responseIf.getExpressions() != null && responseIf.getExpressions().size() == 1 && responseIf.getExpressions().get(0) instanceof And && responseIf.getResponseRules().size() == 1 && responseIf.getResponseRules().get(0) instanceof SetOutcomeValue) {
        And and = (And) responseIf.getExpression();
        List<Expression> conditionElements = and.getExpressions();
        List<ModalFeedbackCondition> extractedConditions = new ArrayList<>();
        for (Expression conditionElement : conditionElements) {
            ModalFeedbackCondition condition = extractCondition(conditionElement);
            if (condition != null) {
                extractedConditions.add(condition);
            }
        }
        if (extractedConditions != null) {
            conditions = extractedConditions;
        }
    }
}
Also used : SetOutcomeValue(uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue) AssessmentItemFactory.findBaseValueInExpression(org.olat.ims.qti21.model.xml.AssessmentItemFactory.findBaseValueInExpression) Expression(uk.ac.ed.ph.jqtiplus.node.expression.Expression) And(uk.ac.ed.ph.jqtiplus.node.expression.operator.And) ArrayList(java.util.ArrayList) ResponseIf(uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseIf) ResponseCondition(uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseCondition)

Example 12 with Expression

use of uk.ac.ed.ph.jqtiplus.node.expression.Expression in project openolat by klemens.

the class AssessmentItemChecker method checkSetCorrectResponse.

/**
 * responseDeclaration -> float
 *
 * templateVraiable -> integer
 *
 * setCorrectResponse
 *   -> variable -> integer doesn't match float -> issue
 * @param item
 * @return
 */
private static boolean checkSetCorrectResponse(AssessmentItem item) {
    boolean allOk = true;
    List<SetCorrectResponse> setCorrectResponses = QueryUtils.search(SetCorrectResponse.class, item);
    for (SetCorrectResponse setCorrectResponse : setCorrectResponses) {
        Identifier responseIdentifier = setCorrectResponse.getIdentifier();
        ResponseDeclaration responseDeclaration = item.getResponseDeclaration(responseIdentifier);
        BaseType baseType = responseDeclaration.getBaseType();
        Expression expression = setCorrectResponse.getExpression();
        if (expression instanceof Variable) {
            Variable variable = (Variable) expression;
            ComplexReferenceIdentifier cpxVariableIdentifier = variable.getIdentifier();
            Identifier variableIdentifier = Identifier.assumedLegal(cpxVariableIdentifier.toString());
            TemplateDeclaration templateDeclaration = item.getTemplateDeclaration(variableIdentifier);
            if (templateDeclaration != null && !templateDeclaration.hasBaseType(baseType)) {
                templateDeclaration.setBaseType(baseType);
                allOk &= false;
            }
        }
    }
    return allOk;
}
Also used : ComplexReferenceIdentifier(uk.ac.ed.ph.jqtiplus.types.ComplexReferenceIdentifier) SetCorrectResponse(uk.ac.ed.ph.jqtiplus.node.item.template.processing.SetCorrectResponse) Identifier(uk.ac.ed.ph.jqtiplus.types.Identifier) ComplexReferenceIdentifier(uk.ac.ed.ph.jqtiplus.types.ComplexReferenceIdentifier) Variable(uk.ac.ed.ph.jqtiplus.node.expression.general.Variable) BaseType(uk.ac.ed.ph.jqtiplus.value.BaseType) Expression(uk.ac.ed.ph.jqtiplus.node.expression.Expression) TemplateDeclaration(uk.ac.ed.ph.jqtiplus.node.item.template.declaration.TemplateDeclaration) ResponseDeclaration(uk.ac.ed.ph.jqtiplus.node.item.response.declaration.ResponseDeclaration)

Example 13 with Expression

use of uk.ac.ed.ph.jqtiplus.node.expression.Expression in project openolat by klemens.

the class AssessmentItemFactory method findBaseValueInExpression.

public static boolean findBaseValueInExpression(Expression expression, Identifier feedbackIdentifier) {
    if (expression instanceof BaseValue) {
        BaseValue bValue = (BaseValue) expression;
        SingleValue sValue = bValue.getSingleValue();
        if (sValue instanceof IdentifierValue) {
            IdentifierValue iValue = (IdentifierValue) sValue;
            if (feedbackIdentifier.equals(iValue.identifierValue())) {
                return true;
            }
        }
    } else {
        List<Expression> childExpressions = expression.getExpressions();
        for (Expression childExpression : childExpressions) {
            if (findBaseValueInExpression(childExpression, feedbackIdentifier)) {
                return true;
            }
        }
    }
    return false;
}
Also used : SingleValue(uk.ac.ed.ph.jqtiplus.value.SingleValue) Expression(uk.ac.ed.ph.jqtiplus.node.expression.Expression) BaseValue(uk.ac.ed.ph.jqtiplus.node.expression.general.BaseValue) IdentifierValue(uk.ac.ed.ph.jqtiplus.value.IdentifierValue)

Example 14 with Expression

use of uk.ac.ed.ph.jqtiplus.node.expression.Expression in project openolat by klemens.

the class TestFeedbackBuilder method findFeedbackMatch.

private boolean findFeedbackMatch(Match match, boolean pass, ComplexReferenceIdentifier id) {
    Expression firstExpression = match.getExpressions().get(0);
    Expression secondExpression = match.getExpressions().get(1);
    if (findBaseValue(firstExpression, pass) && findVariable(secondExpression, id)) {
        return true;
    }
    if (findBaseValue(secondExpression, pass) && findVariable(firstExpression, id)) {
        return true;
    }
    return false;
}
Also used : Expression(uk.ac.ed.ph.jqtiplus.node.expression.Expression)

Example 15 with Expression

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

the class TestFeedbackBuilder method findFeedbackMatch.

private boolean findFeedbackMatch(OutcomeRule outcomeRule, boolean pass, ComplexReferenceIdentifier id) {
    if (outcomeRule instanceof OutcomeCondition) {
        OutcomeCondition outcomeCondition = (OutcomeCondition) outcomeRule;
        OutcomeIf outcomeIf = outcomeCondition.getOutcomeIf();
        if (outcomeIf != null && outcomeIf.getExpressions().size() == 1) {
            Expression mustBeAnd = outcomeIf.getExpressions().get(0);
            if (mustBeAnd instanceof And && mustBeAnd.getExpressions().size() == 1) {
                Expression mustBeMatch = mustBeAnd.getExpressions().get(0);
                if (mustBeMatch instanceof Match && mustBeMatch.getExpressions().size() == 2) {
                    return findFeedbackMatch((Match) mustBeMatch, pass, id);
                }
            }
        }
    }
    return false;
}
Also used : Expression(uk.ac.ed.ph.jqtiplus.node.expression.Expression) OutcomeIf(uk.ac.ed.ph.jqtiplus.node.test.outcome.processing.OutcomeIf) And(uk.ac.ed.ph.jqtiplus.node.expression.operator.And) OutcomeCondition(uk.ac.ed.ph.jqtiplus.node.test.outcome.processing.OutcomeCondition) Match(uk.ac.ed.ph.jqtiplus.node.expression.operator.Match)

Aggregations

Expression (uk.ac.ed.ph.jqtiplus.node.expression.Expression)22 BaseValue (uk.ac.ed.ph.jqtiplus.node.expression.general.BaseValue)8 And (uk.ac.ed.ph.jqtiplus.node.expression.operator.And)8 ResponseIf (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseIf)8 ResponseCondition (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseCondition)6 SetOutcomeValue (uk.ac.ed.ph.jqtiplus.node.item.response.processing.SetOutcomeValue)6 ComplexReferenceIdentifier (uk.ac.ed.ph.jqtiplus.types.ComplexReferenceIdentifier)6 SingleValue (uk.ac.ed.ph.jqtiplus.value.SingleValue)6 AssessmentItemFactory.findBaseValueInExpression (org.olat.ims.qti21.model.xml.AssessmentItemFactory.findBaseValueInExpression)4 Variable (uk.ac.ed.ph.jqtiplus.node.expression.general.Variable)4 ResponseRule (uk.ac.ed.ph.jqtiplus.node.item.response.processing.ResponseRule)4 FloatValue (uk.ac.ed.ph.jqtiplus.value.FloatValue)4 IdentifierValue (uk.ac.ed.ph.jqtiplus.value.IdentifierValue)4 ArrayList (java.util.ArrayList)2 Correct (uk.ac.ed.ph.jqtiplus.node.expression.general.Correct)2 Equal (uk.ac.ed.ph.jqtiplus.node.expression.operator.Equal)2 Match (uk.ac.ed.ph.jqtiplus.node.expression.operator.Match)2 CorrectResponse (uk.ac.ed.ph.jqtiplus.node.item.CorrectResponse)2 ResponseDeclaration (uk.ac.ed.ph.jqtiplus.node.item.response.declaration.ResponseDeclaration)2 TemplateDeclaration (uk.ac.ed.ph.jqtiplus.node.item.template.declaration.TemplateDeclaration)2