Search in sources :

Example 1 with GenericQtiNode

use of org.olat.ims.qti.editor.tree.GenericQtiNode in project OpenOLAT by OpenOLAT.

the class QTIEditorMainController method doMove.

private void doMove(TreePosition tp) {
    // user chose a position to insert a new node
    GenericQtiNode parentTargetNode = (GenericQtiNode) tp.getParentTreeNode();
    int targetPos = tp.getChildpos();
    GenericQtiNode selectedNode = (GenericQtiNode) menuTree.getSelectedNode();
    int selectedPos = selectedNode.getPosition();
    GenericQtiNode parentSelectedNode = (GenericQtiNode) selectedNode.getParent();
    if (parentTargetNode == parentSelectedNode) {
        // if we're on the same subnode
        if (targetPos > selectedNode.getPosition()) {
            // if we're moving after our current position
            targetPos--;
        // decrease insert pos since we're going to be removed from the
        // parent before re-insert
        }
    }
    // insert into menutree (insert on GenericNode do a remove from parent)
    parentTargetNode.insert(selectedNode, targetPos);
    // insert into model (remove from parent needed prior to insert)
    QTIObject subject = parentSelectedNode.removeQTIObjectAt(selectedPos);
    parentTargetNode.insertQTIObjectAt(subject, targetPos);
    qtiPackage.serializeQTIDocument();
    parentSelectedNode.childNodeChanges();
    parentTargetNode.childNodeChanges();
}
Also used : QTIObject(org.olat.ims.qti.editor.beecom.objects.QTIObject) GenericQtiNode(org.olat.ims.qti.editor.tree.GenericQtiNode)

Example 2 with GenericQtiNode

use of org.olat.ims.qti.editor.tree.GenericQtiNode in project OpenOLAT by OpenOLAT.

the class QTIEditorMainController method event.

/**
 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
 */
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
    if (source == deleteDialog) {
        // event from delete dialog
        if (DialogBoxUIFactory.isYesEvent(event)) {
            // yes, delete
            GenericQtiNode clickedNode = (GenericQtiNode) deleteDialog.getUserObject();
            doDelete(clickedNode);
            event(ureq, menuTree, new Event(MenuTree.COMMAND_TREENODE_CLICKED));
            // ask user to confirm referenced media removal
            if (deletableMediaFiles != null && deletableMediaFiles.size() > 0) {
                String msg = translate("delete.item.media", deletableMediaFiles.toString());
                deleteMediaDialog = activateYesNoDialog(ureq, null, msg, deleteMediaDialog);
            }
            updateWarning();
        }
        // cleanup controller
        removeAsListenerAndDispose(deleteDialog);
        deleteDialog = null;
    } else if (source == deleteMediaDialog) {
        // event from deleteMediaDialog
        if (DialogBoxUIFactory.isYesEvent(event)) {
            // yes, delete
            qtiPackage.removeMediaFiles(deletableMediaFiles);
            deleteMediaDialog = null;
            deletableMediaFiles = null;
        }
    } else if (event instanceof NodeBeforeChangeEvent) {
        NodeBeforeChangeEvent nce = (NodeBeforeChangeEvent) event;
        // active node changed some data
        String activeQtiNodeId = menuTree.getSelectedNodeId();
        GenericQtiNode activeQtiNode = menuTreeModel.getQtiNode(activeQtiNodeId);
        // force rerendering for ajax mode
        menuTree.setDirty(true);
        /*
			 * mementos are only created in restricted mode
			 */
        if (isRestrictedEdit()) {
            String key = nce.getSectionIdent() + "/" + nce.getItemIdent() + "/" + nce.getQuestionIdent() + "/" + nce.getResponseIdent();
            if (!history.containsKey(key)) {
                Memento memento = activeQtiNode.createMemento();
                history.put(key, memento);
                qtiPackage.serializeChangelog(history);
            }
        }
        /*
			 * generate a Memento, store it for further use
			 */
        if (nce.hasNewTitle) {
            // update the treemodel to reflect the change of the underlying qti node
            activeQtiNode.setMenuTitleAndAlt(nce.getNewTitle());
            main.contextPut("qtititle", menuTreeModel.getQtiRootNode().getAltText());
        }
    } else if (source == proceedRestricedEditDialog) {
        // restricted edit warning
        if (DialogBoxUIFactory.isYesEvent(event)) {
            // remove dialog and continue with real content
            columnLayoutCtr.setCol3(mainPanel);
            columnLayoutCtr.hideCol1(false);
            columnLayoutCtr.hideCol2(false);
            removeAsListenerAndDispose(proceedRestricedEditDialog);
            proceedRestricedEditDialog = null;
        } else {
            // remove lock as user is not interested in restricted edit
            // and quick editor
            removeLocksAndExit(ureq);
        }
    } else if (source == cfc) {
        // dispose the content only controller we live in
        // remove modal dialog and cleanup exit process
        // modal dialog must be removed before fire DONE event
        // within the saveAndExit() call, otherwise the wrong
        // gui stack is popped see also OLAT-3056
        cmcExit.deactivate();
        removeAsListenerAndDispose(cmcExit);
        cmcExit = null;
        if (event == Event.CANCELLED_EVENT) {
        // nothing to do, back to editor
        } else {
            QTIChangeLogMessage clm = new QTIChangeLogMessage(changeLog, chngMsgFrom.hasInformLearners());
            qtiPackage.commitChangelog(clm);
            StringBuilder traceMsg = new StringBuilder(chngMsgFrom.hasInformLearners() ? "Visible for ALL \n" : "Visible for GROUP only \n");
            logAudit(traceMsg.append(changeLog).toString(), null);
            // save, remove locks and tmp files
            saveAndExit(ureq);
        }
        removeAsListenerAndDispose(cfc);
        cfc = null;
    } else if (source == chngMsgFrom) {
        if (event == Event.DONE_EVENT) {
            // the changemessage is created and user is willing to send it
            String userMsg = chngMsgFrom.getUserMsg();
            changeLog = changeEmail.getBodyText();
            if (StringHelper.containsNonWhitespace(userMsg)) {
                changeEmail.setBodyText("<p>" + userMsg + "</p>\n<pre>" + changeLog + "</pre>");
            }
            // else nothing was added!
            changeEmail.setSubject("Change log for " + startedWithTitle);
            cfc = new ContactFormController(ureq, getWindowControl(), true, false, false, changeEmail);
            listenTo(cfc);
            exitPanel.setContent(cfc.getInitialComponent());
            return;
        } else {
            // cancel button was pressed
            // just go back to the editor - remove modal dialog
            cmcExit.deactivate();
        }
    } else if (source == selectQItemCtrl) {
        cmc.deactivate();
        cleanUp();
        if (event instanceof QItemViewEvent) {
            QItemViewEvent e = (QItemViewEvent) event;
            List<QuestionItemView> items = e.getItemList();
            doSelectInsertionPoint(ureq, CMD_TOOLS_ADD_QPOOL, items);
        }
    } else if (source == importTableWizard) {
        ItemsPackage importPackage = (ItemsPackage) importTableWizard.getRunContext().get("importPackage");
        getWindowControl().pop();
        cleanUp();
        if (event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
            doSelectInsertionPoint(ureq, CMD_TOOLS_ADD_QPOOL, importPackage);
        }
    } else if (createConvertedTestController == source) {
        cmc.deactivate();
        if (event == Event.DONE_EVENT) {
            showInfo("test.converted");
            RepositoryEntry convertedEntry = createConvertedTestController.getAddedEntry();
            String businessPath = "[RepositoryEntry:" + convertedEntry.getKey() + "]";
            NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
        }
        cleanUp();
    } else if (source == insertCtrl) {
        // catch insert operations
        cmc.deactivate();
        if (event == Event.DONE_EVENT) {
            TreePosition tp = insertCtrl.getInsertPosition();
            if (tp != null) {
                doInsert(ureq, tp, insertCtrl.getUserObject());
                updateWarning();
            }
        }
        cleanUp();
    } else if (source == moveCtrl) {
        cmc.deactivate();
        if (Event.DONE_EVENT == event) {
            TreePosition tp = moveCtrl.getInsertPosition();
            if (tp != null) {
                doMove(tp);
                // force rerendering for ajax mode
                menuTree.setDirty(true);
                updateWarning();
            }
        }
        cleanUp();
    } else if (source == copyCtrl) {
        cmc.deactivate();
        if (Event.DONE_EVENT == event) {
            TreePosition tp = copyCtrl.getInsertPosition();
            if (tp != null) {
                doCopy(ureq, tp);
                updateWarning();
            }
        }
        cleanUp();
    }
}
Also used : GenericQtiNode(org.olat.ims.qti.editor.tree.GenericQtiNode) RepositoryEntry(org.olat.repository.RepositoryEntry) ItemsPackage(org.olat.ims.qti.questionimport.ItemsPackage) TreePosition(org.olat.core.gui.components.tree.TreePosition) Memento(org.olat.core.util.memento.Memento) QTIChangeLogMessage(org.olat.ims.qti.QTIChangeLogMessage) ContactFormController(org.olat.modules.co.ContactFormController) QItemViewEvent(org.olat.modules.qpool.ui.events.QItemViewEvent) Event(org.olat.core.gui.control.Event) QItemViewEvent(org.olat.modules.qpool.ui.events.QItemViewEvent) QuestionItemView(org.olat.modules.qpool.QuestionItemView)

Example 3 with GenericQtiNode

use of org.olat.ims.qti.editor.tree.GenericQtiNode in project OpenOLAT by OpenOLAT.

the class QTIEditorMainController method doExportQItem.

private void doExportQItem() {
    GenericQtiNode selectedNode = menuTreeModel.getQtiNode(menuTree.getSelectedNodeId());
    if (selectedNode instanceof ItemNode) {
        ItemNode itemNode = (ItemNode) selectedNode;
        QTIObject qtiObject = itemNode.getUnderlyingQTIObject();
        if (qtiObject instanceof Item) {
            ItemAndMetadata item = new ItemAndMetadata((Item) qtiObject);
            VFSContainer editorContainer = qtiPackage.getBaseDir();
            qtiQpoolServiceProvider.importBeecomItem(getIdentity(), item, editorContainer, getLocale());
            showInfo("export.qpool.successful", "1");
        }
    } else if (selectedNode instanceof SectionNode) {
        SectionNode sectionNode = (SectionNode) selectedNode;
        QTIObject qtiObject = sectionNode.getUnderlyingQTIObject();
        if (qtiObject instanceof Section) {
            int count = doExportSection((Section) qtiObject);
            showInfo("export.qpool.successful", Integer.toString(count));
        }
    } else if (selectedNode instanceof AssessmentNode) {
        AssessmentNode assessmentNode = (AssessmentNode) selectedNode;
        QTIObject qtiObject = assessmentNode.getUnderlyingQTIObject();
        if (qtiObject instanceof Assessment) {
            int count = doExportAssessment((Assessment) qtiObject);
            showInfo("export.qpool.successful", Integer.toString(count));
        }
    }
}
Also used : Item(org.olat.ims.qti.editor.beecom.objects.Item) ItemNode(org.olat.ims.qti.editor.tree.ItemNode) QTIObject(org.olat.ims.qti.editor.beecom.objects.QTIObject) AssessmentNode(org.olat.ims.qti.editor.tree.AssessmentNode) GenericQtiNode(org.olat.ims.qti.editor.tree.GenericQtiNode) VFSContainer(org.olat.core.util.vfs.VFSContainer) Assessment(org.olat.ims.qti.editor.beecom.objects.Assessment) ItemAndMetadata(org.olat.ims.qti.questionimport.ItemAndMetadata) SectionNode(org.olat.ims.qti.editor.tree.SectionNode) Section(org.olat.ims.qti.editor.beecom.objects.Section)

Example 4 with GenericQtiNode

use of org.olat.ims.qti.editor.tree.GenericQtiNode in project OpenOLAT by OpenOLAT.

the class QTIEditorMainController method doInsert.

private void doInsert(UserRequest ureq, TreePosition tp, Object toInsert) {
    // new node
    GenericQtiNode parentTargetNode = (GenericQtiNode) tp.getParentTreeNode();
    if (toInsert instanceof GenericQtiNode) {
        doInsert(parentTargetNode, (GenericQtiNode) toInsert, tp.getChildpos());
    } else if (toInsert instanceof QuestionItemView) {
        QuestionItemView item = (QuestionItemView) toInsert;
        GenericQtiNode insertNode = doConvertItemToQtiNode(item);
        doInsert(parentTargetNode, insertNode, tp.getChildpos());
    } else if (toInsert instanceof Collection) {
        int position = tp.getChildpos();
        @SuppressWarnings("unchecked") Collection<QuestionItemView> items = (Collection<QuestionItemView>) toInsert;
        for (QuestionItemView item : items) {
            GenericQtiNode insertNode = doConvertItemToQtiNode(item);
            doInsert(parentTargetNode, insertNode, position++);
        }
    } else if (toInsert instanceof ItemsPackage) {
        ItemsPackage itemsToImport = (ItemsPackage) toInsert;
        List<ItemAndMetadata> items = itemsToImport.getItems();
        int pos = tp.getChildpos();
        for (ItemAndMetadata item : items) {
            GenericQtiNode insertNode = new ItemNode(item.getItem(), qtiPackage);
            doInsert(parentTargetNode, insertNode, pos++);
        }
    }
    event(ureq, menuTree, new Event(MenuTree.COMMAND_TREENODE_CLICKED));
    qtiPackage.serializeQTIDocument();
    updateWarning();
}
Also used : ItemNode(org.olat.ims.qti.editor.tree.ItemNode) GenericQtiNode(org.olat.ims.qti.editor.tree.GenericQtiNode) Collection(java.util.Collection) QItemViewEvent(org.olat.modules.qpool.ui.events.QItemViewEvent) Event(org.olat.core.gui.control.Event) ArrayList(java.util.ArrayList) ContactList(org.olat.core.util.mail.ContactList) List(java.util.List) ItemAndMetadata(org.olat.ims.qti.questionimport.ItemAndMetadata) QuestionItemView(org.olat.modules.qpool.QuestionItemView) ItemsPackage(org.olat.ims.qti.questionimport.ItemsPackage)

Example 5 with GenericQtiNode

use of org.olat.ims.qti.editor.tree.GenericQtiNode in project OpenOLAT by OpenOLAT.

the class QTIEditorMainController method event.

/**
 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
 *      org.olat.core.gui.components.Component,
 *      org.olat.core.gui.control.Event)
 */
public void event(UserRequest ureq, Component source, Event event) {
    // 
    if (source == menuTree) {
        // catch menu tree clicks
        if (event.getCommand().equals(MenuTree.COMMAND_TREENODE_CLICKED)) {
            GenericQtiNode clickedNode;
            clickedNode = menuTreeModel.getQtiNode(menuTree.getSelectedNodeId());
            Component tabbedPane = clickedNode.createEditTabbedPane(ureq, getWindowControl(), getTranslator(), this);
            if (tabbedPane != null) {
                main.put("tabbedPane", tabbedPane);
            } else {
                VelocityContainer itemNotEditable = createVelocityContainer("tab_itemAlien");
                main.put("tabbedPane", itemNotEditable);
                return;
            }
            // only available in full edit mode
            if (clickedNode instanceof AssessmentNode) {
                deleteLink.setEnabled(false);
                moveLink.setEnabled(false);
                copyLink.setEnabled(false);
                stackedPanel.setDirty(true);
            } else {
                deleteLink.setEnabled(true && !restrictedEdit);
                moveLink.setEnabled(true && !restrictedEdit);
                if (clickedNode instanceof ItemNode) {
                    copyLink.setEnabled(true && !restrictedEdit);
                } else {
                    copyLink.setEnabled(false);
                }
                stackedPanel.setDirty(true);
            }
        }
    } else if (source == exitVC) {
        if (CMD_EXIT_SAVE.equals(event.getCommand())) {
            if (isRestrictedEdit() && history.size() > 0) {
                // changes were recorded
                // start work flow:
                // -sending an e-mail to everybody being a stake holder of this qti
                // resource
                // -email with change message
                // -after sending email successfully -> saveNexit is called.
                chngMsgFormVC = createVelocityContainer("changeMsgForm");
                // FIXME:pb:a Bitte diesen Velocity container entfernen und statt
                // dessen den
                // ContentOnlyController verwenden. Es ist äusserst wichtig dass das
                // Layout nie selber gemacht
                // wird sondern immer die Layout controller verwendet werden, d.h. den
                // ContentOnlyController oder
                // den MenuAndToolController. Dort kann das Tool übrigens auch null
                // sein wenn man nur ein Menü braucht.
                // TODO:pb:a extend ContentOnlyController to work also if menu and
                // tool are null, hence only content is desired
                String userN = UserManager.getInstance().getUserDisplayEmail(ureq.getIdentity(), ureq.getLocale());
                String lastN = ureq.getIdentity().getUser().getProperty(UserConstants.LASTNAME, ureq.getLocale());
                String firstN = ureq.getIdentity().getUser().getProperty(UserConstants.FIRSTNAME, ureq.getLocale());
                String changeMsg = "Changed by: " + firstN + " " + lastN + " [" + userN + "]\n";
                changeMsg += createChangeMessage();
                changeEmail.setBodyText(changeMsg);
                chngMsgFormVC.contextPut("chngMsg", changeEmail.getBodyText());
                removeAsListenerAndDispose(chngMsgFrom);
                chngMsgFrom = new ChangeMessageForm(ureq, getWindowControl());
                listenTo(chngMsgFrom);
                chngMsgFormVC.put("chngMsgForm", chngMsgFrom.getInitialComponent());
                exitPanel.setContent(chngMsgFormVC);
                return;
            } else {
                // remove modal dialog and proceed with exit process
                cmcExit.deactivate();
                removeAsListenerAndDispose(cmcExit);
                cmcExit = null;
                // remove lock, clean tmp dir, fire done event to close editor
                saveAndExit(ureq);
            }
        } else if (CMD_EXIT_DISCARD.equals(event.getCommand())) {
            // remove modal dialog and proceed with exit process
            cmcExit.deactivate();
            removeAsListenerAndDispose(cmcExit);
            cmcExit = null;
            // cleanup, so package does not get resumed
            qtiPackage.cleanupTmpPackageDir();
            // remove lock
            removeLocksAndExit(ureq);
        } else if (CMD_EXIT_CANCEL.equals(event.getCommand())) {
            // remove modal dialog and go back to edit mode
            cmcExit.deactivate();
            removeAsListenerAndDispose(cmcExit);
            cmcExit = null;
        }
    } else if (source == notEditableButton) {
        // close editor
        fireEvent(ureq, Event.DONE_EVENT);
    } else if (closeLink == source) {
        // exitVC hook:
        // save package back to repository
        exitVC = createVelocityContainer("exitDialog");
        exitPanel = new Panel("exitPanel");
        exitPanel.setContent(exitVC);
        cmcExit = new CloseableModalController(getWindowControl(), translate("editor.preview.close"), exitPanel, true, translate("exit.header"));
        cmcExit.activate();
        listenTo(cmcExit);
        return;
    } else if (previewLink == source) {
        // preview
        previewController = CoreSpringFactory.getImpl(IQManager.class).createIQDisplayController(new QTIEditorResolver(qtiPackage), qtiPackage.getQTIDocument().isSurvey() ? AssessmentInstance.QMD_ENTRY_TYPE_SURVEY : AssessmentInstance.QMD_ENTRY_TYPE_SELF, new IQPreviewSecurityCallback(), ureq, getWindowControl());
        if (previewController.isReady()) {
            // in case previewController was unable to initialize, a message was
            // set by displayController
            // this is the case if no more attempts or security check was
            // unsuccessfull
            previewController.addControllerListener(this);
            cmcPrieview = new CloseableModalController(getWindowControl(), translate("editor.preview.close"), previewController.getInitialComponent());
            cmcPrieview.activate();
            listenTo(cmcPrieview);
        } else {
            getWindowControl().setWarning(translate("error.preview"));
        }
    } else if (deleteLink == source) {
        // multi return in Firefox
        if (deleteDialog != null)
            return;
        GenericQtiNode clickedNode = menuTreeModel.getQtiNode(menuTree.getSelectedNodeId());
        String msg = "";
        if (clickedNode instanceof SectionNode) {
            if (QTIEditHelper.countSections(qtiPackage.getQTIDocument().getAssessment()) == 1) {
                // At least one section
                getWindowControl().setError(translate("error.atleastonesection"));
                return;
            }
            msg = translate("delete.section", clickedNode.getTitle());
        } else if (clickedNode instanceof ItemNode) {
            if (((SectionNode) clickedNode.getParent()).getChildCount() == 1) {
                // At least one item
                getWindowControl().setError(translate("error.atleastoneitem"));
                return;
            }
            msg = translate("delete.item", clickedNode.getTitle());
        }
        deleteDialog = activateYesNoDialog(ureq, null, msg, deleteDialog);
        deleteDialog.setUserObject(clickedNode);
        return;
    } else if (moveLink == source) {
        // cannot move the last item
        GenericQtiNode clickedNode = menuTreeModel.getQtiNode(menuTree.getSelectedNodeId());
        if (clickedNode instanceof ItemNode && ((SectionNode) clickedNode.getParent()).getChildCount() == 1) {
            getWindowControl().setError(translate("error.move.atleastoneitem"));
        } else {
            TreeNode selectedNode = menuTree.getSelectedNode();
            int type = (selectedNode instanceof SectionNode) ? InsertItemTreeModel.INSTANCE_ASSESSMENT : InsertItemTreeModel.INSTANCE_SECTION;
            InsertItemTreeModel treeModel = new InsertItemTreeModel(menuTreeModel, selectedNode, type);
            moveCtrl = new InsertNodeController(ureq, getWindowControl(), treeModel);
            listenTo(moveCtrl);
            cmc = new CloseableModalController(getWindowControl(), "close", moveCtrl.getInitialComponent(), true, translate("title.move"));
            cmc.activate();
            listenTo(cmc);
        }
    } else if (copyLink == source) {
        InsertItemTreeModel treeModel = new InsertItemTreeModel(menuTreeModel, menuTree.getSelectedNode(), InsertItemTreeModel.INSTANCE_SECTION);
        copyCtrl = new InsertNodeController(ureq, getWindowControl(), treeModel);
        listenTo(copyCtrl);
        cmc = new CloseableModalController(getWindowControl(), "close", copyCtrl.getInitialComponent(), true, translate("title.copy"));
        cmc.activate();
        listenTo(cmc);
    } else if (addPoolLink == source) {
        doSelectQItem(ureq);
    } else if (exportPoolLink == source) {
        doExportQItem();
    } else if (exportDocLink == source) {
        doExportDocx(ureq);
    } else if (convertQTI21Link == source) {
        doConvertToQTI21(ureq);
    } else if (importTableLink == source) {
        doImportTable(ureq);
    } else if (addSectionLink == source) {
        Section newSection = QTIEditHelper.createSection(getTranslator());
        Item newItem = QTIEditHelper.createSCItem(getTranslator());
        newSection.getItems().add(newItem);
        SectionNode scNode = new SectionNode(newSection, qtiPackage);
        ItemNode itemNode = new ItemNode(newItem, qtiPackage);
        scNode.addChild(itemNode);
        doSelectInsertionPoint(ureq, CMD_TOOLS_ADD_SECTION, scNode);
    } else if (addSCLink == source) {
        ItemNode insertObject = new ItemNode(QTIEditHelper.createSCItem(getTranslator()), qtiPackage);
        doSelectInsertionPoint(ureq, CMD_TOOLS_ADD_SINGLECHOICE, insertObject);
    } else if (addMCLink == source) {
        ItemNode insertObject = new ItemNode(QTIEditHelper.createMCItem(getTranslator()), qtiPackage);
        doSelectInsertionPoint(ureq, CMD_TOOLS_ADD_MULTIPLECHOICE, insertObject);
    } else if (addKPrimLink == source) {
        ItemNode insertObject = new ItemNode(QTIEditHelper.createKPRIMItem(getTranslator()), qtiPackage);
        doSelectInsertionPoint(ureq, CMD_TOOLS_ADD_KPRIM, insertObject);
    } else if (addFIBLink == source) {
        ItemNode insertObject = new ItemNode(QTIEditHelper.createFIBItem(getTranslator()), qtiPackage);
        doSelectInsertionPoint(ureq, CMD_TOOLS_ADD_FIB, insertObject);
    } else if (addEssayLink == source) {
        ItemNode insertObject = new ItemNode(QTIEditHelper.createEssayItem(getTranslator()), qtiPackage);
        doSelectInsertionPoint(ureq, CMD_TOOLS_ADD_FREETEXT, insertObject);
    }
}
Also used : AssessmentNode(org.olat.ims.qti.editor.tree.AssessmentNode) CloseableModalController(org.olat.core.gui.control.generic.closablewrapper.CloseableModalController) GenericQtiNode(org.olat.ims.qti.editor.tree.GenericQtiNode) QTIEditorResolver(org.olat.ims.qti.process.QTIEditorResolver) SectionNode(org.olat.ims.qti.editor.tree.SectionNode) Section(org.olat.ims.qti.editor.beecom.objects.Section) IQPreviewSecurityCallback(org.olat.modules.iq.IQPreviewSecurityCallback) VelocityContainer(org.olat.core.gui.components.velocity.VelocityContainer) TooledStackedPanel(org.olat.core.gui.components.stack.TooledStackedPanel) Panel(org.olat.core.gui.components.panel.Panel) Item(org.olat.ims.qti.editor.beecom.objects.Item) ItemNode(org.olat.ims.qti.editor.tree.ItemNode) InsertItemTreeModel(org.olat.ims.qti.editor.tree.InsertItemTreeModel) TreeNode(org.olat.core.gui.components.tree.TreeNode) Component(org.olat.core.gui.components.Component) JSAndCSSComponent(org.olat.core.gui.components.htmlheader.jscss.JSAndCSSComponent)

Aggregations

GenericQtiNode (org.olat.ims.qti.editor.tree.GenericQtiNode)16 Item (org.olat.ims.qti.editor.beecom.objects.Item)10 ItemNode (org.olat.ims.qti.editor.tree.ItemNode)10 Event (org.olat.core.gui.control.Event)6 QItemViewEvent (org.olat.modules.qpool.ui.events.QItemViewEvent)6 VFSContainer (org.olat.core.util.vfs.VFSContainer)4 QTIObject (org.olat.ims.qti.editor.beecom.objects.QTIObject)4 Section (org.olat.ims.qti.editor.beecom.objects.Section)4 AssessmentNode (org.olat.ims.qti.editor.tree.AssessmentNode)4 SectionNode (org.olat.ims.qti.editor.tree.SectionNode)4 ItemAndMetadata (org.olat.ims.qti.questionimport.ItemAndMetadata)4 ItemsPackage (org.olat.ims.qti.questionimport.ItemsPackage)4 QuestionItemView (org.olat.modules.qpool.QuestionItemView)4 ArrayList (java.util.ArrayList)2 Collection (java.util.Collection)2 List (java.util.List)2 Component (org.olat.core.gui.components.Component)2 JSAndCSSComponent (org.olat.core.gui.components.htmlheader.jscss.JSAndCSSComponent)2 Panel (org.olat.core.gui.components.panel.Panel)2 TooledStackedPanel (org.olat.core.gui.components.stack.TooledStackedPanel)2