Search in sources :

Example 66 with Event

use of org.olat.core.gui.control.Event in project openolat by klemens.

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 67 with Event

use of org.olat.core.gui.control.Event in project openolat by klemens.

the class QTIEditorMainController method doCopy.

private void doCopy(UserRequest ureq, TreePosition tp) {
    // user chose a position to insert the node to be copied
    int targetPos = tp.getChildpos();
    ItemNode selectedNode = (ItemNode) menuTree.getSelectedNode();
    // only items are moveable
    // use XStream instead of ObjectCloner
    // Item qtiItem =
    // (Item)xstream.fromXML(xstream.toXML(selectedNode.getUnderlyingQTIObject()));
    Item toClone = (Item) selectedNode.getUnderlyingQTIObject();
    Item qtiItem = (Item) XStreamHelper.xstreamClone(toClone);
    // copy flow label class too, olat-2791
    Question orgQuestion = toClone.getQuestion();
    if (orgQuestion instanceof ChoiceQuestion) {
        String flowLabelClass = ((ChoiceQuestion) orgQuestion).getFlowLabelClass();
        Question copyQuestion = qtiItem.getQuestion();
        if (copyQuestion instanceof ChoiceQuestion) {
            ((ChoiceQuestion) copyQuestion).setFlowLabelClass(flowLabelClass);
        } else {
            throw new AssertException("Could not copy flow-label-class, wrong type of copy question , must be 'ChoiceQuestion' but is " + copyQuestion);
        }
    }
    String editorIdentPrefix = "";
    if (qtiItem.getIdent().startsWith(ItemParser.ITEM_PREFIX_SCQ))
        editorIdentPrefix = ItemParser.ITEM_PREFIX_SCQ;
    else if (qtiItem.getIdent().startsWith(ItemParser.ITEM_PREFIX_MCQ))
        editorIdentPrefix = ItemParser.ITEM_PREFIX_MCQ;
    else if (qtiItem.getIdent().startsWith(ItemParser.ITEM_PREFIX_KPRIM))
        editorIdentPrefix = ItemParser.ITEM_PREFIX_KPRIM;
    else if (qtiItem.getIdent().startsWith(ItemParser.ITEM_PREFIX_FIB))
        editorIdentPrefix = ItemParser.ITEM_PREFIX_FIB;
    else if (qtiItem.getIdent().startsWith(ItemParser.ITEM_PREFIX_ESSAY))
        editorIdentPrefix = ItemParser.ITEM_PREFIX_ESSAY;
    // set new ident... this is all it needs for our engine to recognise it
    // as a new item.
    qtiItem.setIdent(editorIdentPrefix + CodeHelper.getForeverUniqueID());
    // insert into menutree (insert on GenericNode do a remove from parent)
    GenericQtiNode parentTargetNode = (GenericQtiNode) tp.getParentTreeNode();
    GenericQtiNode newNode = new ItemNode(qtiItem, qtiPackage);
    parentTargetNode.insert(newNode, targetPos);
    // insert into model
    parentTargetNode.insertQTIObjectAt(qtiItem, targetPos);
    // activate copied node
    menuTree.setSelectedNodeId(newNode.getIdent());
    event(ureq, menuTree, new Event(MenuTree.COMMAND_TREENODE_CLICKED));
    qtiPackage.serializeQTIDocument();
    parentTargetNode.childNodeChanges();
}
Also used : Item(org.olat.ims.qti.editor.beecom.objects.Item) ItemNode(org.olat.ims.qti.editor.tree.ItemNode) AssertException(org.olat.core.logging.AssertException) GenericQtiNode(org.olat.ims.qti.editor.tree.GenericQtiNode) QItemViewEvent(org.olat.modules.qpool.ui.events.QItemViewEvent) Event(org.olat.core.gui.control.Event) ChoiceQuestion(org.olat.ims.qti.editor.beecom.objects.ChoiceQuestion) Question(org.olat.ims.qti.editor.beecom.objects.Question) ChoiceQuestion(org.olat.ims.qti.editor.beecom.objects.ChoiceQuestion)

Example 68 with Event

use of org.olat.core.gui.control.Event in project openolat by klemens.

the class CorrectionAssessmentItemListController method formInnerEvent.

@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
    if (tableEl == source) {
        if (event instanceof SelectionEvent) {
            SelectionEvent se = (SelectionEvent) event;
            String cmd = se.getCommand();
            CorrectionAssessmentItemRow row = tableModel.getObject(se.getIndex());
            if ("select".equals(cmd)) {
                // accept all
                doSelect(ureq, row, r -> true);
            } else if ("answered".equals(cmd)) {
                // accept all
                doSelect(ureq, row, new ResponsedPredicate(row, true));
            } else if ("notAnswered".equals(cmd)) {
                // accept all
                doSelect(ureq, row, new ResponsedPredicate(row, false));
            } else if ("autoCorrected".equals(cmd)) {
                doSelect(ureq, row, entry -> !row.isManualCorrection() && entry.getManualScore() == null);
            } else if ("corrected".equals(cmd)) {
                doSelect(ureq, row, entry -> entry.getManualScore() != null);
            } else if ("notCorrected".equals(cmd)) {
                doSelect(ureq, row, entry -> row.isManualCorrection() && entry.getManualScore() == null);
            } else if ("toReview".equals(cmd)) {
                doSelect(ureq, row, AssessmentItemListEntry::isToReview);
            }
        }
    } else if (saveTestsButton == source) {
        doConfirmSaveTests(ureq);
    } else if (source instanceof FormLink) {
        FormLink link = (FormLink) source;
        if ("tools".equals(link.getCmd())) {
            doOpenTools(ureq, (CorrectionAssessmentItemRow) link.getUserObject(), link);
        }
    }
    super.formInnerEvent(ureq, source, event);
}
Also used : FlexiTableElement(org.olat.core.gui.components.form.flexible.elements.FlexiTableElement) Util(org.olat.core.util.Util) AssessmentItemSession(org.olat.ims.qti21.AssessmentItemSession) ItemSessionKey(org.olat.ims.qti21.ui.assessment.model.ItemSessionKey) DefaultFlexiColumnModel(org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel) Autowired(org.springframework.beans.factory.annotation.Autowired) AssessmentItemCorrection(org.olat.ims.qti21.ui.assessment.model.AssessmentItemCorrection) OLATResourceable(org.olat.core.id.OLATResourceable) BigDecimal(java.math.BigDecimal) OresHelper(org.olat.core.util.resource.OresHelper) Map(java.util.Map) VelocityContainer(org.olat.core.gui.components.velocity.VelocityContainer) QuestionTypeFlexiCellRenderer(org.olat.ims.qti21.ui.assessment.components.QuestionTypeFlexiCellRenderer) QTI21Module(org.olat.ims.qti21.QTI21Module) FlexiTableColumnModel(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel) CloseableModalController(org.olat.core.gui.control.generic.closablewrapper.CloseableModalController) ManifestMetadataBuilder(org.olat.ims.qti21.model.xml.ManifestMetadataBuilder) Translator(org.olat.core.gui.translator.Translator) Predicate(java.util.function.Predicate) WindowControl(org.olat.core.gui.control.WindowControl) PopEvent(org.olat.core.gui.components.stack.PopEvent) Component(org.olat.core.gui.components.Component) LinkFactory(org.olat.core.gui.components.link.LinkFactory) AssessmentEntryStatus(org.olat.modules.assessment.model.AssessmentEntryStatus) QTI21Service(org.olat.ims.qti21.QTI21Service) SelectionEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent) BasicController(org.olat.core.gui.control.controller.BasicController) CorrectionAssessmentItemRow(org.olat.ims.qti21.ui.assessment.model.CorrectionAssessmentItemRow) List(java.util.List) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink) CorrectedFlexiCellRenderer(org.olat.ims.qti21.ui.assessment.components.CorrectedFlexiCellRenderer) Identity(org.olat.core.id.Identity) AssessmentTestComposerController(org.olat.ims.qti21.ui.editor.AssessmentTestComposerController) CloseableCalloutWindowController(org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController) TestPlanNode(uk.ac.ed.ph.jqtiplus.state.TestPlanNode) SelectAssessmentItemEvent(org.olat.ims.qti21.ui.assessment.event.SelectAssessmentItemEvent) TooledStackedPanel(org.olat.core.gui.components.stack.TooledStackedPanel) FormEvent(org.olat.core.gui.components.form.flexible.impl.FormEvent) ToReviewFlexiCellRenderer(org.olat.ims.qti21.ui.assessment.components.ToReviewFlexiCellRenderer) ResolvedAssessmentItem(uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentItem) HashMap(java.util.HashMap) ItemSessionState(uk.ac.ed.ph.jqtiplus.state.ItemSessionState) FormItem(org.olat.core.gui.components.form.flexible.FormItem) ResolvedAssessmentTest(uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentTest) ArrayList(java.util.ArrayList) AssessmentTest(uk.ac.ed.ph.jqtiplus.node.test.AssessmentTest) Event(org.olat.core.gui.control.Event) FormBasicController(org.olat.core.gui.components.form.flexible.impl.FormBasicController) FormItemContainer(org.olat.core.gui.components.form.flexible.FormItemContainer) AssessmentItem(uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem) FlexiTableDataModelFactory(org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory) AssessmentTestSession(org.olat.ims.qti21.AssessmentTestSession) CorrectionWorkflow(org.olat.ims.qti21.QTI21Module.CorrectionWorkflow) AssessmentItemListEntry(org.olat.ims.qti21.ui.assessment.model.AssessmentItemListEntry) TestSessionState(uk.ac.ed.ph.jqtiplus.state.TestSessionState) Link(org.olat.core.gui.components.link.Link) AssessmentItemRef(uk.ac.ed.ph.jqtiplus.node.test.AssessmentItemRef) TestPlanNodeKey(uk.ac.ed.ph.jqtiplus.state.TestPlanNodeKey) CompleteAssessmentTestSessionEvent(org.olat.modules.assessment.ui.event.CompleteAssessmentTestSessionEvent) ItemCols(org.olat.ims.qti21.ui.assessment.CorrectionAssessmentItemTableModel.ItemCols) AutoCorrectedFlexiCellRenderer(org.olat.ims.qti21.ui.assessment.components.AutoCorrectedFlexiCellRenderer) Controller(org.olat.core.gui.control.Controller) UserManager(org.olat.user.UserManager) NotCorrectedFlexiCellRenderer(org.olat.ims.qti21.ui.assessment.components.NotCorrectedFlexiCellRenderer) LockResult(org.olat.core.util.coordinate.LockResult) UserRequest(org.olat.core.gui.UserRequest) CoordinatorManager(org.olat.core.util.coordinate.CoordinatorManager) CorrectionAssessmentItemRow(org.olat.ims.qti21.ui.assessment.model.CorrectionAssessmentItemRow) AssessmentItemListEntry(org.olat.ims.qti21.ui.assessment.model.AssessmentItemListEntry) SelectionEvent(org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent) FormLink(org.olat.core.gui.components.form.flexible.elements.FormLink)

Aggregations

Event (org.olat.core.gui.control.Event)68 FormEvent (org.olat.core.gui.components.form.flexible.impl.FormEvent)14 WindowControl (org.olat.core.gui.control.WindowControl)12 ArrayList (java.util.ArrayList)10 UserRequest (org.olat.core.gui.UserRequest)10 Controller (org.olat.core.gui.control.Controller)10 Identity (org.olat.core.id.Identity)10 RepositoryEntry (org.olat.repository.RepositoryEntry)10 List (java.util.List)8 Link (org.olat.core.gui.components.link.Link)8 OLATResourceable (org.olat.core.id.OLATResourceable)8 ControllerEventListener (org.olat.core.gui.control.ControllerEventListener)6 GenericQtiNode (org.olat.ims.qti.editor.tree.GenericQtiNode)6 QItemViewEvent (org.olat.modules.qpool.ui.events.QItemViewEvent)6 Component (org.olat.core.gui.components.Component)5 TreeEvent (org.olat.core.gui.components.tree.TreeEvent)5 FormLink (org.olat.core.gui.components.form.flexible.elements.FormLink)4 PopEvent (org.olat.core.gui.components.stack.PopEvent)4 TableEvent (org.olat.core.gui.components.table.TableEvent)4 TableMultiSelectEvent (org.olat.core.gui.components.table.TableMultiSelectEvent)4