use of org.olat.ims.qti.editor.tree.ItemNode in project openolat by klemens.
the class QTIStatisticResourceResult method buildQTICourseNodeSubTree.
private void buildQTICourseNodeSubTree(QTIDocument qtiDoc, GenericTreeNode rootNode) {
for (Section section : qtiDoc.getAssessment().getSections()) {
GenericTreeNode sectionNode = new SectionNode(section, null);
sectionNode.setUserObject(section);
rootNode.addChild(sectionNode);
for (Item item : section.getItems()) {
GenericTreeNode itemNode = new ItemNode(item);
itemNode.setIdent(Long.toString(CodeHelper.getForeverUniqueID()));
if (sectionNode.getDelegate() == null) {
sectionNode.setDelegate(itemNode);
}
itemNode.setUserObject(item);
sectionNode.addChild(itemNode);
}
}
}
use of org.olat.ims.qti.editor.tree.ItemNode in project openolat by klemens.
the class QTIEditorMainController method doConvertItemToQtiNode.
private GenericQtiNode doConvertItemToQtiNode(QuestionItemView qitemv) {
VFSContainer editorContainer = qtiPackage.getBaseDir();
Item theItem = qtiQpoolServiceProvider.exportToQTIEditor(qitemv, editorContainer);
GenericQtiNode node = new ItemNode(theItem, qtiPackage);
return node;
}
use of org.olat.ims.qti.editor.tree.ItemNode in project openolat by klemens.
the class QTIEditorMainController method createChangeMessage.
/**
* helper method to create the change log message
*
* @return
*/
private String createChangeMessage() {
// FIXME:pb:break down into smaller pieces
final StringBuilder result = new StringBuilder();
if (isRestrictedEdit()) {
Visitor v = new Visitor() {
/*
* a history key is built as follows
* sectionkey+"/"+itemkey+"/"+questionkey+"/"+responsekey
*/
String sectionKey = null;
Map<String, String> itemMap = new HashMap<>();
public void visit(INode node) {
if (node instanceof AssessmentNode) {
AssessmentNode an = (AssessmentNode) node;
String key = "null/null/null/null";
if (history.containsKey(key)) {
// some assessment top level data changed
Memento mem = history.get(key);
result.append("---+ Changes in test " + formatVariable(startedWithTitle) + ":");
result.append(an.createChangeMessage(mem));
}
} else if (node instanceof SectionNode) {
SectionNode sn = (SectionNode) node;
String tmpKey = ((Section) sn.getUnderlyingQTIObject()).getIdent();
String key = tmpKey + "/null/null/null";
if (history.containsKey(key)) {
// some section only data changed
Memento mem = history.get(key);
result.append("\n---++ Section " + formatVariable(sn.getAltText()) + " changes:");
result.append(sn.createChangeMessage(mem));
}
} else if (node instanceof ItemNode) {
ItemNode in = (ItemNode) node;
SectionNode sn = (SectionNode) in.getParent();
String parentSectkey = ((Section) ((SectionNode) in.getParent()).getUnderlyingQTIObject()).getIdent();
Item item = (Item) in.getUnderlyingQTIObject();
Question question = item.getQuestion();
String itemKey = item.getIdent();
String prefixKey = "null/" + itemKey;
String questionIdent = question != null ? question.getQuestion().getId() : "null";
String key = prefixKey + "/" + questionIdent + "/null";
StringBuilder changeMessage = new StringBuilder();
boolean hasChanges = false;
if (!itemMap.containsKey(itemKey)) {
Memento questMem = null;
Memento respMem = null;
if (history.containsKey(key)) {
// question changed!
questMem = history.get(key);
hasChanges = true;
}
// if(!hasChanges){
// check if a response changed
// new prefix for responses
prefixKey += "/null/";
// list contains org.olat.ims.qti.editor.beecom.objects.Response
List<Response> responses = question != null ? question.getResponses() : null;
if (responses != null && responses.size() > 0) {
// check for changes in each response
for (Iterator<Response> iter = responses.iterator(); iter.hasNext(); ) {
Response resp = iter.next();
if (history.containsKey(prefixKey + resp.getIdent())) {
// this response changed!
Memento tmpMem = history.get(prefixKey + resp.getIdent());
if (respMem != null) {
respMem = respMem.getTimestamp() > tmpMem.getTimestamp() ? tmpMem : respMem;
} else {
hasChanges = true;
respMem = tmpMem;
}
}
}
}
// output message
if (hasChanges) {
Memento mem = null;
if (questMem != null && respMem != null) {
// use the earlier memento
mem = questMem.getTimestamp() > respMem.getTimestamp() ? respMem : questMem;
} else if (questMem != null) {
mem = questMem;
} else if (respMem != null) {
mem = respMem;
}
changeMessage.append(in.createChangeMessage(mem));
itemMap.put(itemKey, itemKey);
if (!parentSectkey.equals(sectionKey)) {
// either this item belongs to a new section or no section
// is active
result.append("\n---++ Section " + formatVariable(sn.getAltText()) + " changes:");
result.append("\n").append(changeMessage);
sectionKey = parentSectkey;
} else {
result.append("\n").append(changeMessage);
}
}
}
}
}
private String formatVariable(String var) {
if (StringHelper.containsNonWhitespace(var)) {
return var;
}
return "[no entry]";
}
};
TreeVisitor tv = new TreeVisitor(v, menuTreeModel.getRootNode(), false);
tv.visitAll();
}
/*
*
*/
return result.toString();
}
use of org.olat.ims.qti.editor.tree.ItemNode in project openolat by klemens.
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();
}
use of org.olat.ims.qti.editor.tree.ItemNode in project OpenOLAT by OpenOLAT.
the class QTIStatisticResourceResult method buildQTICourseNodeSubTree.
private void buildQTICourseNodeSubTree(QTIDocument qtiDoc, GenericTreeNode rootNode) {
for (Section section : qtiDoc.getAssessment().getSections()) {
GenericTreeNode sectionNode = new SectionNode(section, null);
sectionNode.setUserObject(section);
rootNode.addChild(sectionNode);
for (Item item : section.getItems()) {
GenericTreeNode itemNode = new ItemNode(item);
itemNode.setIdent(Long.toString(CodeHelper.getForeverUniqueID()));
if (sectionNode.getDelegate() == null) {
sectionNode.setDelegate(itemNode);
}
itemNode.setUserObject(item);
sectionNode.addChild(itemNode);
}
}
}
Aggregations