Search in sources :

Example 21 with AssessmentNodeData

use of org.olat.course.assessment.model.AssessmentNodeData in project openolat by klemens.

the class AssessmentHelper method getAssessmentNodeDataList.

public static int getAssessmentNodeDataList(int recursionLevel, CourseNode courseNode, ScoreAccounting scoreAccounting, UserCourseEnvironment userCourseEnv, boolean followUserVisibility, boolean discardEmptyNodes, boolean discardComments, List<AssessmentNodeData> data, AssessmentNodesLastModified lastModifications) {
    // 1) Get list of children data using recursion of this method
    AssessmentNodeData assessmentNodeData = new AssessmentNodeData(recursionLevel, courseNode);
    data.add(assessmentNodeData);
    int numOfChildren = 0;
    for (int i = 0; i < courseNode.getChildCount(); i++) {
        CourseNode child = (CourseNode) courseNode.getChildAt(i);
        numOfChildren += getAssessmentNodeDataList(recursionLevel + 1, child, scoreAccounting, userCourseEnv, followUserVisibility, discardEmptyNodes, discardComments, data, lastModifications);
    }
    // 2) Get data of this node only if
    // - it has any wrapped children  or
    // - it is of an assessable course node type
    boolean hasDisplayableValuesConfigured = false;
    boolean hasDisplayableUserValues = false;
    if (numOfChildren > 0 || courseNode instanceof AssessableCourseNode) {
        if (courseNode instanceof ProjectBrokerCourseNode) {
            // ProjectBroker : no assessment-tool in V1.0 , remove project broker completely form assessment-tool gui
            assessmentNodeData.setSelectable(false);
        } else if (courseNode instanceof AssessableCourseNode) {
            AssessableCourseNode assessableCourseNode = (AssessableCourseNode) courseNode;
            AssessmentEvaluation scoreEvaluation = scoreAccounting.evalCourseNode(assessableCourseNode);
            if (scoreEvaluation != null) {
                assessmentNodeData.setAssessmentStatus(scoreEvaluation.getAssessmentStatus());
                assessmentNodeData.setNumOfAssessmentDocs(scoreEvaluation.getNumOfAssessmentDocs());
            }
            assessmentNodeData.setUserVisibility(scoreEvaluation.getUserVisible());
            assessmentNodeData.setLastModified(scoreEvaluation.getLastModified());
            assessmentNodeData.setLastUserModified(scoreEvaluation.getLastUserModified());
            assessmentNodeData.setLastCoachModified(scoreEvaluation.getLastCoachModified());
            if (lastModifications != null) {
                lastModifications.addLastModified(scoreEvaluation.getLastModified());
                lastModifications.addLastUserModified(scoreEvaluation.getLastUserModified());
                lastModifications.addLastCoachModified(scoreEvaluation.getLastCoachModified());
            }
            if (!followUserVisibility || scoreEvaluation.getUserVisible() == null || scoreEvaluation.getUserVisible().booleanValue()) {
                // details
                if (assessableCourseNode.hasDetails()) {
                    hasDisplayableValuesConfigured = true;
                    String detailValue = assessableCourseNode.getDetailsListView(userCourseEnv);
                    if (detailValue == null) {
                        // ignore unset details in discardEmptyNodes mode
                        assessmentNodeData.setDetails(AssessmentHelper.DETAILS_NA_VALUE);
                    } else {
                        assessmentNodeData.setDetails(detailValue);
                        hasDisplayableUserValues = true;
                    }
                }
                // attempts
                if (assessableCourseNode.hasAttemptsConfigured()) {
                    hasDisplayableValuesConfigured = true;
                    Integer attemptsValue = scoreEvaluation.getAttempts();
                    if (attemptsValue != null) {
                        assessmentNodeData.setAttempts(attemptsValue);
                        if (attemptsValue.intValue() > 0) {
                            // ignore attempts = 0  in discardEmptyNodes mode
                            hasDisplayableUserValues = true;
                        }
                    }
                }
                // score
                if (assessableCourseNode.hasScoreConfigured()) {
                    hasDisplayableValuesConfigured = true;
                    Float score = scoreEvaluation.getScore();
                    if (score != null) {
                        assessmentNodeData.setRoundedScore(AssessmentHelper.getRoundedScore(score));
                        assessmentNodeData.setScore(score);
                        hasDisplayableUserValues = true;
                    }
                    if (!(assessableCourseNode instanceof STCourseNode)) {
                        assessmentNodeData.setMaxScore(assessableCourseNode.getMaxScoreConfiguration());
                        assessmentNodeData.setMinScore(assessableCourseNode.getMinScoreConfiguration());
                    }
                }
                // passed
                if (assessableCourseNode.hasPassedConfigured()) {
                    hasDisplayableValuesConfigured = true;
                    Boolean passed = scoreEvaluation.getPassed();
                    if (passed != null) {
                        assessmentNodeData.setPassed(passed);
                        hasDisplayableUserValues = true;
                    }
                }
            }
            // selection command available
            AssessableCourseNode acn = (AssessableCourseNode) courseNode;
            if (acn.isEditableConfigured()) {
                // Assessable course nodes are selectable
                assessmentNodeData.setSelectable(true);
            } else {
                // assessable nodes that do not have score or passed are not selectable
                // (e.g. a st node with no defined rule
                assessmentNodeData.setSelectable(false);
            }
            if (!hasDisplayableUserValues && assessableCourseNode.hasCommentConfigured() && !discardComments) {
                // comments are invisible in the table but if configured the node must be in the list
                // for the efficiency statement this can be ignored, this is the case when discardComments is true
                hasDisplayableValuesConfigured = true;
                if (assessableCourseNode.getUserUserComment(userCourseEnv) != null) {
                    hasDisplayableUserValues = true;
                }
            }
        } else {
            // Not assessable nodes are not selectable. (e.g. a node that
            // has an assessable child node but is itself not assessable)
            assessmentNodeData.setSelectable(false);
        }
    }
    // 3) Add data of this node to mast list if node assessable or children list has any data.
    // Do only add nodes when they have any assessable element, otherwhise discard (e.g. empty course,
    // structure nodes without scoring rules)! When the discardEmptyNodes flag is set then only
    // add this node when there is user data found for this node.
    boolean addNode = (numOfChildren > 0 || (discardEmptyNodes && hasDisplayableValuesConfigured && hasDisplayableUserValues) || (!discardEmptyNodes && hasDisplayableValuesConfigured));
    if (!addNode) {
        data.remove(assessmentNodeData);
        return 0;
    }
    // add itself
    return numOfChildren + 1;
}
Also used : AssessableCourseNode(org.olat.course.nodes.AssessableCourseNode) AssessmentEvaluation(org.olat.course.run.scoring.AssessmentEvaluation) STCourseNode(org.olat.course.nodes.STCourseNode) AssessableCourseNode(org.olat.course.nodes.AssessableCourseNode) CourseNode(org.olat.course.nodes.CourseNode) ProjectBrokerCourseNode(org.olat.course.nodes.ProjectBrokerCourseNode) STCourseNode(org.olat.course.nodes.STCourseNode) ScormCourseNode(org.olat.course.nodes.ScormCourseNode) AssessmentNodeData(org.olat.course.assessment.model.AssessmentNodeData) ProjectBrokerCourseNode(org.olat.course.nodes.ProjectBrokerCourseNode)

Example 22 with AssessmentNodeData

use of org.olat.course.assessment.model.AssessmentNodeData in project openolat by klemens.

the class CourseQTIArchiveController method addQTINodesAndParentsToList.

/**
 * Recursive method that adds tasks nodes and all its parents to a list
 * @param recursionLevel
 * @param courseNode
 * @return A list of Object[indent, courseNode, selectable]
 */
private List<AssessmentNodeData> addQTINodesAndParentsToList(int recursionLevel, CourseNode courseNode) {
    // 1) Get list of children data using recursion of this method
    List<AssessmentNodeData> childrenData = new ArrayList<>();
    for (int i = 0; i < courseNode.getChildCount(); i++) {
        CourseNode child = (CourseNode) courseNode.getChildAt(i);
        List<AssessmentNodeData> childData = addQTINodesAndParentsToList((recursionLevel + 1), child);
        if (childData != null) {
            childrenData.addAll(childData);
        }
    }
    if (childrenData.size() > 0 || courseNode instanceof IQSURVCourseNode) {
        // Store node data in hash map. This hash map serves as data model for
        // the tasks overview table. Leave user data empty since not used in
        // this table. (use only node data)
        AssessmentNodeData nodeData = new AssessmentNodeData(recursionLevel, courseNode);
        if (courseNode instanceof IQSURVCourseNode) {
            nodeData.setSelectable(true);
        } else {
            nodeData.setSelectable(false);
        }
        List<AssessmentNodeData> nodeAndChildren = new ArrayList<>();
        nodeAndChildren.add(nodeData);
        nodeAndChildren.addAll(childrenData);
        return nodeAndChildren;
    }
    return null;
}
Also used : IQSURVCourseNode(org.olat.course.nodes.IQSURVCourseNode) ArrayList(java.util.ArrayList) IQSURVCourseNode(org.olat.course.nodes.IQSURVCourseNode) CourseNode(org.olat.course.nodes.CourseNode) AssessmentNodeData(org.olat.course.assessment.model.AssessmentNodeData)

Aggregations

AssessmentNodeData (org.olat.course.assessment.model.AssessmentNodeData)22 CourseNode (org.olat.course.nodes.CourseNode)14 ArrayList (java.util.ArrayList)8 AssessableCourseNode (org.olat.course.nodes.AssessableCourseNode)6 TACourseNode (org.olat.course.nodes.TACourseNode)6 SelectionEvent (org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent)4 ICourse (org.olat.course.ICourse)4 AssessmentNodesLastModified (org.olat.course.assessment.model.AssessmentNodesLastModified)4 ScoreAccounting (org.olat.course.run.scoring.ScoreAccounting)4 BigDecimal (java.math.BigDecimal)2 Date (java.util.Date)2 Map (java.util.Map)2 CustomRenderColumnDescriptor (org.olat.core.gui.components.table.CustomRenderColumnDescriptor)2 DefaultColumnDescriptor (org.olat.core.gui.components.table.DefaultColumnDescriptor)2 TableController (org.olat.core.gui.components.table.TableController)2 TableEvent (org.olat.core.gui.components.table.TableEvent)2 TableGuiConfiguration (org.olat.core.gui.components.table.TableGuiConfiguration)2 Identity (org.olat.core.id.Identity)2 AssessmentChangedEvent (org.olat.course.assessment.AssessmentChangedEvent)2 IndentedNodeRenderer (org.olat.course.assessment.IndentedNodeRenderer)2