Search in sources :

Example 91 with INode

use of org.olat.core.util.nodes.INode in project openolat by klemens.

the class EditorMainController method dropNodeAsChild.

private void dropNodeAsChild(UserRequest ureq, ICourse course, String droppedNodeId, String targetNodeId, boolean asChild, boolean atTheEnd) {
    // setDirty when moving
    menuTree.setDirty(true);
    CourseNode droppedNode = cetm.getCourseNode(droppedNodeId);
    int position;
    CourseEditorTreeNode insertParent;
    if (asChild) {
        insertParent = cetm.getCourseEditorNodeById(targetNodeId);
        position = atTheEnd ? -1 : 0;
    } else {
        CourseEditorTreeNode selectedNode = cetm.getCourseEditorNodeById(targetNodeId);
        if (selectedNode.getParent() == null) {
            // root node
            insertParent = selectedNode;
            position = 0;
        } else {
            insertParent = course.getEditorTreeModel().getCourseEditorNodeById(selectedNode.getParent().getIdent());
            position = 0;
            for (position = insertParent.getChildCount(); position-- > 0; ) {
                if (insertParent.getChildAt(position).getIdent().equals(selectedNode.getIdent())) {
                    position++;
                    break;
                }
            }
        }
    }
    CourseEditorTreeNode moveFrom = course.getEditorTreeModel().getCourseEditorNodeById(droppedNode.getIdent());
    // check if an ancestor is not dropped on a child
    if (course.getEditorTreeModel().checkIfIsChild(insertParent, moveFrom)) {
        showError("movecopynode.error.overlap");
        fireEvent(ureq, Event.CANCELLED_EVENT);
        return;
    }
    // don't generate red screen for that. If the position is too high -> add the node at the end
    if (position >= insertParent.getChildCount()) {
        position = -1;
    }
    try {
        if (position >= 0) {
            insertParent.insert(moveFrom, position);
        } else {
            insertParent.addChild(moveFrom);
        }
    } catch (IndexOutOfBoundsException e) {
        logError("", e);
        // reattach the node as security, if not, the node is lost
        insertParent.addChild(moveFrom);
    }
    moveFrom.setDirty(true);
    // mark subtree as dirty
    TreeVisitor tv = new TreeVisitor(new Visitor() {

        public void visit(INode node) {
            CourseEditorTreeNode cetn = (CourseEditorTreeNode) node;
            cetn.setDirty(true);
        }
    }, moveFrom, true);
    tv.visitAll();
    CourseFactory.saveCourseEditorTreeModel(course.getResourceableId());
    showInfo("movecopynode.info.condmoved");
    ThreadLocalUserActivityLogger.log(CourseLoggingAction.COURSE_EDITOR_NODE_MOVED, getClass());
    euce.getCourseEditorEnv().validateCourse();
    StatusDescription[] courseStatus = euce.getCourseEditorEnv().getCourseStatus();
    updateCourseStatusMessages(ureq.getLocale(), courseStatus);
}
Also used : TreeVisitor(org.olat.core.util.tree.TreeVisitor) INode(org.olat.core.util.nodes.INode) TreeVisitor(org.olat.core.util.tree.TreeVisitor) Visitor(org.olat.core.util.tree.Visitor) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode) CourseNode(org.olat.course.nodes.CourseNode)

Example 92 with INode

use of org.olat.core.util.nodes.INode in project openolat by klemens.

the class EditorMainController method doCreateAlternateBuildingBlock.

/**
 * The following operation are done:
 * <ul>
 * 	<li>create a new instance of the replacement type
 * 	<li>add the new element below the original element
 * 	<li>copy the element title, description and the generic configuration options
 * 	<li>copy the access, visibility and scoring rules (easy and expert)
 * 	<li>optionally copy some other configuration if this is possible at all
 * 	<li>move all child elements from the original to the replacement element
 * 	<li>mark the original element as deleted
 * </ul>
 *
 * @param chosenNode
 * @param selectAlternative
 */
private void doCreateAlternateBuildingBlock(UserRequest ureq, ICourse course, CourseNode chosenNode, String selectAlternative) {
    if (!StringHelper.containsNonWhitespace(selectAlternative))
        return;
    // create the alternative node
    CourseNodeConfiguration newConfig = CourseNodeFactory.getInstance().getCourseNodeConfiguration(selectAlternative);
    CourseNode newNode = newConfig.getInstance();
    // copy configurations
    chosenNode.copyConfigurationTo(newNode, course);
    // insert the node
    CourseEditorTreeNode cetn = (CourseEditorTreeNode) cetm.getNodeById(chosenNode.getIdent());
    CourseEditorTreeNode parentNode = (CourseEditorTreeNode) cetn.getParent();
    int position = cetn.getPosition() + 1;
    CourseEditorTreeNode newCetn = course.getEditorTreeModel().insertCourseNodeAt(newNode, parentNode.getCourseNode(), position);
    doInsert(ureq, newNode);
    // copy the children
    while (cetn.getChildCount() > 0) {
        CourseEditorTreeNode childNode = (CourseEditorTreeNode) cetn.getChildAt(0);
        newCetn.addChild(childNode);
    }
    // set all dirty
    TreeVisitor tv = new TreeVisitor(new Visitor() {

        public void visit(INode node) {
            ((CourseEditorTreeNode) node).setDirty(true);
        }
    }, newCetn, true);
    tv.visitAll();
    // mark as deleted
    doDelete(course, chosenNode.getIdent());
    // save
    CourseFactory.saveCourseEditorTreeModel(course.getResourceableId());
}
Also used : TreeVisitor(org.olat.core.util.tree.TreeVisitor) INode(org.olat.core.util.nodes.INode) TreeVisitor(org.olat.core.util.tree.TreeVisitor) Visitor(org.olat.core.util.tree.Visitor) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode) CourseNodeConfiguration(org.olat.course.nodes.CourseNodeConfiguration) CourseNode(org.olat.course.nodes.CourseNode)

Example 93 with INode

use of org.olat.core.util.nodes.INode in project openolat by klemens.

the class MoveCopySubtreeController method doInsert.

private void doInsert(UserRequest ureq, TreePosition tp) {
    ICourse course = CourseFactory.getCourseEditSession(ores.getResourceableId());
    int insertPos = tp.getChildpos();
    CourseNode selectedNode = getCourseNode(tp.getParentTreeNode());
    CourseEditorTreeNode insertParent = course.getEditorTreeModel().getCourseEditorNodeById(selectedNode.getIdent());
    // check if insert position is within the to-be-copied tree
    if (course.getEditorTreeModel().checkIfIsChild(insertParent, moveCopyFrom)) {
        showError("movecopynode.error.overlap");
        fireEvent(ureq, Event.CANCELLED_EVENT);
    } else if (copy) {
        // do a copy
        // copy subtree and save model
        recursiveCopy(moveCopyFrom, insertParent, insertPos, true, CourseFactory.getCourseEditSession(ores.getResourceableId()));
        CourseFactory.saveCourseEditorTreeModel(course.getResourceableId());
        ThreadLocalUserActivityLogger.log(CourseLoggingAction.COURSE_EDITOR_NODE_COPIED, getClass());
        fireEvent(ureq, Event.DONE_EVENT);
    } else {
        // move only
        if (insertParent.getIdent().equals(moveCopyFrom.getParent().getIdent())) {
            // same parent, adjust insertPos
            if (insertPos > moveCopyFrom.getPosition())
                insertPos--;
        }
        insertParent.insert(moveCopyFrom, insertPos);
        moveCopyFrom.setDirty(true);
        // mark subtree as dirty
        TreeVisitor tv = new TreeVisitor(new Visitor() {

            @Override
            public void visit(INode node) {
                CourseEditorTreeNode cetn = (CourseEditorTreeNode) node;
                cetn.setDirty(true);
            }
        }, moveCopyFrom, true);
        tv.visitAll();
        CourseFactory.saveCourseEditorTreeModel(course.getResourceableId());
        showInfo("movecopynode.info.condmoved");
        ThreadLocalUserActivityLogger.log(CourseLoggingAction.COURSE_EDITOR_NODE_MOVED, getClass());
        fireEvent(ureq, Event.DONE_EVENT);
    }
}
Also used : TreeVisitor(org.olat.core.util.tree.TreeVisitor) INode(org.olat.core.util.nodes.INode) TreeVisitor(org.olat.core.util.tree.TreeVisitor) Visitor(org.olat.core.util.tree.Visitor) CourseEditorTreeNode(org.olat.course.tree.CourseEditorTreeNode) ICourse(org.olat.course.ICourse) CourseNode(org.olat.course.nodes.CourseNode)

Example 94 with INode

use of org.olat.core.util.nodes.INode in project openolat by klemens.

the class QuickPublishController method visitPublishModel.

private static void visitPublishModel(TreeNode node, INodeFilter filter, Collection<String> nodeToPublish) {
    int numOfChildren = node.getChildCount();
    for (int i = 0; i < numOfChildren; i++) {
        INode child = node.getChildAt(i);
        if (child instanceof TreeNode && filter.isVisible(child)) {
            nodeToPublish.add(child.getIdent());
            visitPublishModel((TreeNode) child, filter, nodeToPublish);
        }
    }
}
Also used : INode(org.olat.core.util.nodes.INode) TreeNode(org.olat.core.gui.components.tree.TreeNode)

Example 95 with INode

use of org.olat.core.util.nodes.INode in project openolat by klemens.

the class MenuTree method handleDeselect.

private void handleDeselect(String nodeId) {
    TreeNode node = treeModel.getNodeById(nodeId);
    INode parentNode = node.getParent();
    if (parentNode != null) {
        setSelectedNodeId(parentNode.getIdent());
    } else {
        clearSelection();
    }
}
Also used : INode(org.olat.core.util.nodes.INode)

Aggregations

INode (org.olat.core.util.nodes.INode)106 Visitor (org.olat.core.util.tree.Visitor)44 CourseNode (org.olat.course.nodes.CourseNode)44 ICourse (org.olat.course.ICourse)40 TreeVisitor (org.olat.core.util.tree.TreeVisitor)30 ArrayList (java.util.ArrayList)28 Identity (org.olat.core.id.Identity)26 CourseEditorTreeNode (org.olat.course.tree.CourseEditorTreeNode)24 TreeNode (org.olat.core.gui.components.tree.TreeNode)18 RepositoryEntry (org.olat.repository.RepositoryEntry)18 Test (org.junit.Test)16 BCCourseNode (org.olat.course.nodes.BCCourseNode)14 CourseTreeVisitor (org.olat.course.run.userview.CourseTreeVisitor)14 VisibleTreeFilter (org.olat.course.run.userview.VisibleTreeFilter)14 GenericTreeNode (org.olat.core.gui.components.tree.GenericTreeNode)12 IdentityEnvironment (org.olat.core.id.IdentityEnvironment)12 CourseEditorTreeModel (org.olat.course.tree.CourseEditorTreeModel)12 HashMap (java.util.HashMap)10 FOCourseNode (org.olat.course.nodes.FOCourseNode)10 GET (javax.ws.rs.GET)8