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;
}
}
}
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;
}
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;
}
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;
}
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;
}
Aggregations