use of org.olat.modules.qpool.model.QuestionItemImpl in project OpenOLAT by OpenOLAT.
the class QTI21EditorController method updateQuestionItem.
private void updateQuestionItem(UserRequest ureq, AssessmentItem assessmentItem) {
if (questionItem instanceof QuestionItemImpl) {
String title = assessmentItem.getTitle();
QuestionItemImpl itemImpl = (QuestionItemImpl) questionItem;
itemImpl.setTitle(title);
qpoolService.updateItem(itemImpl);
fireEvent(ureq, new QItemEdited(questionItem));
}
}
use of org.olat.modules.qpool.model.QuestionItemImpl in project openolat by klemens.
the class QTI12EditorController method updateQuestionItem.
private void updateQuestionItem(UserRequest ureq, Item assessmentItem) {
if (qitem instanceof QuestionItemImpl && assessmentItem != null) {
String title = assessmentItem.getTitle();
QuestionItemImpl itemImpl = (QuestionItemImpl) qitem;
itemImpl.setTitle(title);
qpoolService.updateItem(itemImpl);
fireEvent(ureq, new QItemEdited(qitem));
}
}
use of org.olat.modules.qpool.model.QuestionItemImpl in project openolat by klemens.
the class QTI21EditorController method updateQuestionItem.
private void updateQuestionItem(UserRequest ureq, AssessmentItem assessmentItem) {
if (questionItem instanceof QuestionItemImpl) {
String title = assessmentItem.getTitle();
QuestionItemImpl itemImpl = (QuestionItemImpl) questionItem;
itemImpl.setTitle(title);
qpoolService.updateItem(itemImpl);
fireEvent(ureq, new QItemEdited(questionItem));
}
}
use of org.olat.modules.qpool.model.QuestionItemImpl in project openolat by klemens.
the class QTI21ImportProcessor method processItem.
protected QuestionItemImpl processItem(AssessmentItem assessmentItem, String comment, String originalItemFilename, String editor, String editorVersion, String dir, AssessmentItemMetadata metadata) {
// filename
String filename;
String ident = assessmentItem.getIdentifier();
if (originalItemFilename != null) {
filename = originalItemFilename;
} else if (StringHelper.containsNonWhitespace(ident)) {
filename = StringHelper.transformDisplayNameToFileSystemName(ident) + ".xml";
} else {
filename = "item.xml";
}
// title
String title = assessmentItem.getTitle();
if (!StringHelper.containsNonWhitespace(title)) {
title = assessmentItem.getLabel();
}
if (!StringHelper.containsNonWhitespace(title)) {
title = ident;
}
QuestionItemImpl poolItem = questionItemDao.create(title, QTI21Constants.QTI_21_FORMAT, dir, filename);
// description
poolItem.setDescription(comment);
// language from default
poolItem.setLanguage(defaultLocale.getLanguage());
// question type first
if (StringHelper.containsNonWhitespace(editor)) {
poolItem.setEditor(editor);
poolItem.setEditorVersion(editorVersion);
}
// if question type not found, can be overridden by the metadatas
processItemMetadata(poolItem, metadata);
if (poolItem.getType() == null) {
QItemType defType = convertType(assessmentItem);
poolItem.setType(defType);
}
questionItemDao.persist(owner, poolItem);
createLicense(poolItem, metadata);
return poolItem;
}
use of org.olat.modules.qpool.model.QuestionItemImpl in project openolat by klemens.
the class QTI21QPoolServiceProvider method importAssessmentItemRef.
/**
* Very important, the ManifestMetadataBuilder will be changed, it need to be a clone
*
* @param owner The future owner of the question
* @param assessmentItem The assessment item to convert
* @param itemFile The file where the assessment item is saved
* @param clonedMetadataBuilder The metadata builder need to be a clone!
* @param fUnzippedDirRoot The directory of the assessment item or the assessment test.
* @param defaultLocale The locale used by some translation
* @return
*/
public QuestionItem importAssessmentItemRef(Identity owner, AssessmentItem assessmentItem, File itemFile, ManifestMetadataBuilder clonedMetadataBuilder, Locale defaultLocale) {
QTI21ImportProcessor processor = new QTI21ImportProcessor(owner, defaultLocale);
AssessmentItemMetadata metadata = new AssessmentItemMetadata(clonedMetadataBuilder);
String editor = null;
String editorVersion = null;
if (StringHelper.containsNonWhitespace(assessmentItem.getToolName())) {
editor = assessmentItem.getToolName();
}
if (StringHelper.containsNonWhitespace(assessmentItem.getToolVersion())) {
editorVersion = assessmentItem.getToolVersion();
}
String originalItemFilename = itemFile.getName();
QuestionItemImpl qitem = processor.processItem(assessmentItem, null, originalItemFilename, editor, editorVersion, metadata);
// storage
File itemStorage = qpoolFileStorage.getDirectory(qitem.getDirectory());
FileUtils.copyDirContentsToDir(itemFile, itemStorage, false, "QTI21 import item xml in pool");
// create manifest
ManifestBuilder manifest = ManifestBuilder.createAssessmentItemBuilder();
ResourceType resource = manifest.appendAssessmentItem(UUID.randomUUID().toString(), originalItemFilename);
ManifestMetadataBuilder exportedMetadataBuilder = manifest.getMetadataBuilder(resource, true);
exportedMetadataBuilder.setMetadata(clonedMetadataBuilder.getMetadata());
manifest.write(new File(itemStorage, "imsmanifest.xml"));
// process material
File materialDirRoot = itemFile.getParentFile();
List<String> materials = ImportExportHelper.getMaterials(assessmentItem);
for (String material : materials) {
if (material.indexOf("://") < 0) {
// material can be an external URL
try {
File materialFile = new File(materialDirRoot, material);
if (materialFile.isFile() && materialFile.exists()) {
File itemMaterialFile = new File(itemStorage, material);
if (!itemMaterialFile.getParentFile().exists()) {
itemMaterialFile.getParentFile().mkdirs();
}
Files.copy(materialFile.toPath(), itemMaterialFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
} catch (IOException e) {
log.error("", e);
}
}
}
return qitem;
}
Aggregations