} else {
getWindowControl().setWarning(translate("error.preview"));
}
} else if (cmd.equals(CMD_TOOLS_CHANGE_DELETE)) { // prepare delete
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 (cmd.equals(CMD_TOOLS_CHANGE_MOVE)) {
//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"));
return;
}
TreeNode selectedNode = menuTree.getSelectedNode();
moveTree = new SelectionTree("moveTree", getTranslator());
moveTree.setFormButtonKey("submit");
insertTreeModel = new InsertItemTreeModel(menuTreeModel,
(selectedNode instanceof SectionNode) ? InsertItemTreeModel.INSTANCE_ASSESSMENT : InsertItemTreeModel.INSTANCE_SECTION);
moveTree.setTreeModel(insertTreeModel);
moveTree.addListener(this);
cmc = new CloseableModalController(getWindowControl(),translate("close"), moveTree, true, translate("title.move"));
cmc.activate();
listenTo(cmc);
} else if (cmd.equals(CMD_TOOLS_CHANGE_COPY)) {
copyTree = new SelectionTree("copyTree", getTranslator());
copyTree.setFormButtonKey("submit");
insertTreeModel = new InsertItemTreeModel(menuTreeModel, InsertItemTreeModel.INSTANCE_SECTION);
copyTree.setTreeModel(insertTreeModel);
copyTree.addListener(this);
cmc = new CloseableModalController(getWindowControl(), translate("close"), copyTree, true, translate("title.copy"));
cmc.activate();
listenTo(cmc);
} else if (cmd.startsWith(CMD_TOOLS_ADD_PREFIX)) { // add new object
// fetch new object
if (cmd.equals(CMD_TOOLS_ADD_SECTION)) {
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);
insertObject = scNode;
} else if (cmd.equals(CMD_TOOLS_ADD_SINGLECHOICE)) insertObject = new ItemNode(QTIEditHelper.createSCItem(getTranslator()), qtiPackage);
else if (cmd.equals(CMD_TOOLS_ADD_MULTIPLECHOICE)) insertObject = new ItemNode(QTIEditHelper.createMCItem(getTranslator()), qtiPackage);
else if (cmd.equals(CMD_TOOLS_ADD_KPRIM)) insertObject = new ItemNode(QTIEditHelper.createKPRIMItem(getTranslator()), qtiPackage);
else if (cmd.equals(CMD_TOOLS_ADD_FIB)) insertObject = new ItemNode(QTIEditHelper.createFIBItem(getTranslator()), qtiPackage);
else if (cmd.equals(CMD_TOOLS_ADD_FREETEXT)) insertObject = new ItemNode(QTIEditHelper.createEssayItem(getTranslator()), qtiPackage);
// prepare insert tree
insertTree = new SelectionTree("insertTree", getTranslator());
insertTree.setFormButtonKey("submit");
if (cmd.equals(CMD_TOOLS_ADD_SECTION)) insertTreeModel = new InsertItemTreeModel(menuTreeModel,
InsertItemTreeModel.INSTANCE_ASSESSMENT);
else insertTreeModel = new InsertItemTreeModel(menuTreeModel, InsertItemTreeModel.INSTANCE_SECTION);
insertTree.setTreeModel(insertTreeModel);
insertTree.addListener(this);
cmc = new CloseableModalController(getWindowControl(), translate("close"), insertTree, true, translate("title.add") );
cmc.activate();
listenTo(cmc);
}
} else if (source == deleteDialog) { // event from delete dialog
if (DialogBoxUIFactory.isYesEvent(event)) { // yes, delete
GenericQtiNode clickedNode = (GenericQtiNode) deleteDialog.getUserObject();
//check if any media to delete as well
if(clickedNode.getUnderlyingQTIObject() instanceof Item) {
Item selectedItem = (Item)clickedNode.getUnderlyingQTIObject();
deletableMediaFiles = QTIEditHelper.getDeletableMedia(qtiPackage.getQTIDocument(), selectedItem);
}
// remove from underlying model
((GenericQtiNode) clickedNode.getParent()).removeQTIObjectAt(clickedNode.getPosition());
// remove from tree model
clickedNode.removeFromParent();
qtiPackage.serializeQTIDocument();
menuTree.setSelectedNodeId(clickedNode.getParent().getIdent());
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);
}
}
// 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);
menuTree.setDirty(true); //force rerendering for ajax mode
/*
* 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 (event == DialogController.EVENT_FIRSTBUTTON) {