use of org.olat.ims.qti21.questionimport.AssessmentItemAndMetadata in project OpenOLAT by OpenOLAT.
the class QuestionListController method doOpenExcelImportQTI21.
private void doOpenExcelImportQTI21(UserRequest ureq) {
removeAsListenerAndDispose(excelImportWizard);
Step additionalStep = null;
if (getSource().askEditable()) {
additionalStep = new EditableStep(ureq);
}
final AssessmentItemsPackage importPackage = new AssessmentItemsPackage();
final ImportOptions options = new ImportOptions();
options.setShuffle(true);
Step start = new QImport_1_InputStep(ureq, importPackage, options, additionalStep);
StepRunnerCallback finish = new StepRunnerCallback() {
@Override
public Step execute(UserRequest uureq, WindowControl wControl, StepsRunContext runContext) {
QTI21QPoolServiceProvider spi = CoreSpringFactory.getImpl(QTI21QPoolServiceProvider.class);
List<AssessmentItemAndMetadata> items = importPackage.getItems();
List<QuestionItem> importItems = new ArrayList<>();
for (AssessmentItemAndMetadata item : items) {
QuestionItem importedItem = spi.importExcelItem(getIdentity(), item, getLocale());
if (importedItem != null) {
importItems.add(importedItem);
}
}
for (QuestionItem item : importItems) {
QuestionItemAuditLogBuilder builder = qpoolService.createAuditLogBuilder(getIdentity(), Action.CREATE_QUESTION_ITEM_BY_IMPORT);
builder.withAfter(item);
qpoolService.persist(builder.create());
}
boolean editable = true;
if (getSource().askEditable()) {
Object editableCtx = runContext.get("editable");
editable = (editableCtx instanceof Boolean) ? ((Boolean) editableCtx).booleanValue() : false;
}
qpoolService.index(importItems);
int postImported = getSource().postImport(importItems, editable);
if (postImported > 0) {
getItemsTable().reset();
}
return StepsMainRunController.DONE_MODIFIED;
}
};
excelImportWizard = new StepsMainRunController(ureq, getWindowControl(), start, finish, null, translate("import.excellike.21"), "o_sel_qpool_excel_import_wizard");
listenTo(excelImportWizard);
getWindowControl().pushAsModalDialog(excelImportWizard.getInitialComponent());
}
use of org.olat.ims.qti21.questionimport.AssessmentItemAndMetadata in project OpenOLAT by OpenOLAT.
the class QTI21QPoolServiceProvider method importExcelItem.
public QuestionItemImpl importExcelItem(Identity owner, AssessmentItemAndMetadata itemAndMetadata, Locale defaultLocale) {
QTI21ImportProcessor processor = new QTI21ImportProcessor(owner, defaultLocale);
String editor = itemAndMetadata.getEditor();
String editorVersion = itemAndMetadata.getEditorVersion();
AssessmentItemBuilder itemBuilder = itemAndMetadata.getItemBuilder();
itemBuilder.build();
AssessmentItem assessmentItem = itemBuilder.getAssessmentItem();
QuestionItemImpl qitem = processor.processItem(assessmentItem, null, null, editor, editorVersion, itemAndMetadata);
String originalItemFilename = qitem.getRootFilename();
File itemStorage = qpoolFileStorage.getDirectory(qitem.getDirectory());
File itemFile = new File(itemStorage, originalItemFilename);
qtiService.persistAssessmentObject(itemFile, assessmentItem);
// create manifest
ManifestBuilder manifest = ManifestBuilder.createAssessmentItemBuilder();
ResourceType resource = manifest.appendAssessmentItem(UUID.randomUUID().toString(), originalItemFilename);
ManifestMetadataBuilder metadataBuilder = manifest.getMetadataBuilder(resource, true);
itemAndMetadata.toBuilder(metadataBuilder, defaultLocale);
manifest.write(new File(itemStorage, "imsmanifest.xml"));
return qitem;
}
use of org.olat.ims.qti21.questionimport.AssessmentItemAndMetadata in project OpenOLAT by OpenOLAT.
the class CSVToAssessmentItemConverter method processType.
private void processType(String[] parts) {
if (currentItem != null) {
build();
items.add(currentItem);
currentItem = null;
}
if (parts.length > 1) {
String type = parts[1].toLowerCase();
AssessmentItemBuilder itemBuilder;
switch(type) {
case "fib":
{
FIBAssessmentItemBuilder fibItemBuilder = new FIBAssessmentItemBuilder("Gap text", EntryType.text, qtiSerializer);
itemBuilder = initFIBAssessmentItemBuilder(fibItemBuilder);
break;
}
case "mc":
{
MultipleChoiceAssessmentItemBuilder mcItemBuilder = new MultipleChoiceAssessmentItemBuilder("Multiple choice", "New answer", qtiSerializer);
itemBuilder = initMultipleChoiceAssessmentItemBuilder(mcItemBuilder);
break;
}
case "sc":
{
SingleChoiceAssessmentItemBuilder scItemBuilder = new SingleChoiceAssessmentItemBuilder("Single choice", "New answer", qtiSerializer);
itemBuilder = initSingleChoiceAssessmentItemBuilder(scItemBuilder);
break;
}
case "kprim":
{
kprimPosition = 0;
itemBuilder = new KPrimAssessmentItemBuilder("Kprim", "New answer", qtiSerializer);
break;
}
case "essay":
{
itemBuilder = new EssayAssessmentItemBuilder("Essay", qtiSerializer);
break;
}
case "matrix":
{
MatchAssessmentItemBuilder matchBuilder = new MatchAssessmentItemBuilder("Matrix", QTI21Constants.CSS_MATCH_MATRIX, qtiSerializer);
itemBuilder = initMatchAssessmentItemBuilder(matchBuilder);
break;
}
case "drag&drop":
{
MatchAssessmentItemBuilder matchBuilder = new MatchAssessmentItemBuilder("Matrix", QTI21Constants.CSS_MATCH_DRAG_AND_DROP, qtiSerializer);
itemBuilder = initMatchAssessmentItemBuilder(matchBuilder);
break;
}
case "truefalse":
{
Translator trans = Util.createPackageTranslator(AssessmentItemEditorController.class, locale);
MatchAssessmentItemBuilder matchBuilder = new MatchAssessmentItemBuilder("Matrix", QTI21Constants.CSS_MATCH_TRUE_FALSE, trans.translate("match.unanswered"), trans.translate("match.true"), trans.translate("match.false"), qtiSerializer);
itemBuilder = initMatchAssessmentItemBuilderForTrueFalse(matchBuilder);
break;
}
default:
{
itemBuilder = null;
}
}
if (itemBuilder != null) {
currentItem = new AssessmentItemAndMetadata(itemBuilder);
} else {
log.warn("Question type not supported: " + type);
currentItem = null;
}
}
}
use of org.olat.ims.qti21.questionimport.AssessmentItemAndMetadata in project openolat by klemens.
the class QTI21QPoolServiceProvider method importExcelItem.
public QuestionItemImpl importExcelItem(Identity owner, AssessmentItemAndMetadata itemAndMetadata, Locale defaultLocale) {
QTI21ImportProcessor processor = new QTI21ImportProcessor(owner, defaultLocale);
String editor = itemAndMetadata.getEditor();
String editorVersion = itemAndMetadata.getEditorVersion();
AssessmentItemBuilder itemBuilder = itemAndMetadata.getItemBuilder();
itemBuilder.build();
AssessmentItem assessmentItem = itemBuilder.getAssessmentItem();
QuestionItemImpl qitem = processor.processItem(assessmentItem, null, null, editor, editorVersion, itemAndMetadata);
String originalItemFilename = qitem.getRootFilename();
File itemStorage = qpoolFileStorage.getDirectory(qitem.getDirectory());
File itemFile = new File(itemStorage, originalItemFilename);
qtiService.persistAssessmentObject(itemFile, assessmentItem);
// create manifest
ManifestBuilder manifest = ManifestBuilder.createAssessmentItemBuilder();
ResourceType resource = manifest.appendAssessmentItem(UUID.randomUUID().toString(), originalItemFilename);
ManifestMetadataBuilder metadataBuilder = manifest.getMetadataBuilder(resource, true);
itemAndMetadata.toBuilder(metadataBuilder, defaultLocale);
manifest.write(new File(itemStorage, "imsmanifest.xml"));
return qitem;
}
use of org.olat.ims.qti21.questionimport.AssessmentItemAndMetadata in project openolat by klemens.
the class CSVToAssessmentItemConverter method processType.
private void processType(String[] parts) {
if (currentItem != null) {
build();
items.add(currentItem);
currentItem = null;
}
if (parts.length > 1) {
String type = parts[1].toLowerCase();
AssessmentItemBuilder itemBuilder;
switch(type) {
case "fib":
{
FIBAssessmentItemBuilder fibItemBuilder = new FIBAssessmentItemBuilder("Gap text", EntryType.text, qtiSerializer);
itemBuilder = initFIBAssessmentItemBuilder(fibItemBuilder);
break;
}
case "mc":
{
MultipleChoiceAssessmentItemBuilder mcItemBuilder = new MultipleChoiceAssessmentItemBuilder("Multiple choice", "New answer", qtiSerializer);
itemBuilder = initMultipleChoiceAssessmentItemBuilder(mcItemBuilder);
break;
}
case "sc":
{
SingleChoiceAssessmentItemBuilder scItemBuilder = new SingleChoiceAssessmentItemBuilder("Single choice", "New answer", qtiSerializer);
itemBuilder = initSingleChoiceAssessmentItemBuilder(scItemBuilder);
break;
}
case "kprim":
{
kprimPosition = 0;
itemBuilder = new KPrimAssessmentItemBuilder("Kprim", "New answer", qtiSerializer);
break;
}
case "essay":
{
itemBuilder = new EssayAssessmentItemBuilder("Essay", qtiSerializer);
break;
}
case "matrix":
{
MatchAssessmentItemBuilder matchBuilder = new MatchAssessmentItemBuilder("Matrix", QTI21Constants.CSS_MATCH_MATRIX, qtiSerializer);
itemBuilder = initMatchAssessmentItemBuilder(matchBuilder);
break;
}
case "drag&drop":
{
MatchAssessmentItemBuilder matchBuilder = new MatchAssessmentItemBuilder("Matrix", QTI21Constants.CSS_MATCH_DRAG_AND_DROP, qtiSerializer);
itemBuilder = initMatchAssessmentItemBuilder(matchBuilder);
break;
}
case "truefalse":
{
Translator trans = Util.createPackageTranslator(AssessmentItemEditorController.class, locale);
MatchAssessmentItemBuilder matchBuilder = new MatchAssessmentItemBuilder("Matrix", QTI21Constants.CSS_MATCH_TRUE_FALSE, trans.translate("match.unanswered"), trans.translate("match.true"), trans.translate("match.false"), qtiSerializer);
itemBuilder = initMatchAssessmentItemBuilderForTrueFalse(matchBuilder);
break;
}
default:
{
itemBuilder = null;
}
}
if (itemBuilder != null) {
currentItem = new AssessmentItemAndMetadata(itemBuilder);
} else {
log.warn("Question type not supported: " + type);
currentItem = null;
}
}
}
Aggregations