Search in sources :

Example 6 with ResourceType

use of org.olat.imscp.xml.manifest.ResourceType in project OpenOLAT by OpenOLAT.

the class QTI21ImportProcessor method process.

public List<QuestionItem> process(File file) {
    // export zip file
    List<QuestionItem> items = new ArrayList<>();
    try (FileSystem fs = FileSystems.newFileSystem(file.toPath(), null)) {
        Path fPath = fs.getPath("/");
        if (fPath != null) {
            ImsManifestVisitor visitor = new ImsManifestVisitor();
            Files.walkFileTree(fPath, visitor);
            List<Path> imsmanifests = visitor.getImsmanifestFiles();
            for (Path imsmanifest : imsmanifests) {
                InputStream in = Files.newInputStream(imsmanifest);
                ManifestBuilder manifestBuilder = ManifestBuilder.read(new ShieldInputStream(in));
                List<ResourceType> resources = manifestBuilder.getResourceList();
                for (ResourceType resource : resources) {
                    ManifestMetadataBuilder metadataBuilder = manifestBuilder.getMetadataBuilder(resource, true);
                    QuestionItem qitem = processResource(resource, imsmanifest, metadataBuilder);
                    if (qitem != null) {
                        items.add(qitem);
                    }
                }
            }
        }
    } catch (IOException e) {
        log.error("", e);
    }
    return items;
}
Also used : Path(java.nio.file.Path) ManifestBuilder(org.olat.ims.qti21.model.xml.ManifestBuilder) ShieldInputStream(org.olat.core.util.io.ShieldInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) ResourceType(org.olat.imscp.xml.manifest.ResourceType) IOException(java.io.IOException) ShieldInputStream(org.olat.core.util.io.ShieldInputStream) ManifestMetadataBuilder(org.olat.ims.qti21.model.xml.ManifestMetadataBuilder) FileSystem(java.nio.file.FileSystem) QuestionItem(org.olat.modules.qpool.QuestionItem)

Example 7 with ResourceType

use of org.olat.imscp.xml.manifest.ResourceType in project OpenOLAT by OpenOLAT.

the class ManifestBuilder method appendAssessmentItem.

public ResourceType appendAssessmentItem(String itemId, String itemFileName) {
    ResourceType itemResourceType = cpObjectFactory.createResourceType();
    itemResourceType.setIdentifier(itemId);
    itemResourceType.setType("imsqti_item_xmlv2p1");
    itemResourceType.setHref(itemFileName);
    getResourceList().add(itemResourceType);
    appendFile(itemResourceType, itemFileName);
    return itemResourceType;
}
Also used : ResourceType(org.olat.imscp.xml.manifest.ResourceType)

Example 8 with ResourceType

use of org.olat.imscp.xml.manifest.ResourceType in project OpenOLAT by OpenOLAT.

the class ManifestBuilder method getResourceBuilderByHref.

public ManifestMetadataBuilder getResourceBuilderByHref(String href) {
    ResourceType resourceType = getResourceTypeByHref(href);
    MetadataType metadata = getMetadata(resourceType);
    return metadata == null ? null : new ManifestMetadataBuilder(metadata);
}
Also used : ManifestMetadataType(org.olat.imscp.xml.manifest.ManifestMetadataType) MetadataType(org.olat.imscp.xml.manifest.MetadataType) ResourceType(org.olat.imscp.xml.manifest.ResourceType)

Example 9 with ResourceType

use of org.olat.imscp.xml.manifest.ResourceType 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;
}
Also used : ManifestBuilder(org.olat.ims.qti21.model.xml.ManifestBuilder) QuestionItemImpl(org.olat.modules.qpool.model.QuestionItemImpl) ResolvedAssessmentItem(uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentItem) AssessmentItem(uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem) ResourceType(org.olat.imscp.xml.manifest.ResourceType) HotspotAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.HotspotAssessmentItemBuilder) UploadAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.UploadAssessmentItemBuilder) FIBAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder) SingleChoiceAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.SingleChoiceAssessmentItemBuilder) HottextAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.HottextAssessmentItemBuilder) DrawingAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.DrawingAssessmentItemBuilder) EssayAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.EssayAssessmentItemBuilder) MatchAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.MatchAssessmentItemBuilder) AssessmentItemBuilder(org.olat.ims.qti21.model.xml.AssessmentItemBuilder) KPrimAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.KPrimAssessmentItemBuilder) MultipleChoiceAssessmentItemBuilder(org.olat.ims.qti21.model.xml.interactions.MultipleChoiceAssessmentItemBuilder) File(java.io.File) ManifestMetadataBuilder(org.olat.ims.qti21.model.xml.ManifestMetadataBuilder)

Example 10 with ResourceType

use of org.olat.imscp.xml.manifest.ResourceType in project OpenOLAT by OpenOLAT.

the class QTI21QPoolServiceProvider method importRepositoryEntry.

public List<QuestionItem> importRepositoryEntry(Identity owner, RepositoryEntry repositoryEntry, Locale defaultLocale) {
    FileResourceManager frm = FileResourceManager.getInstance();
    File unzippedDirRoot = frm.unzipFileResource(repositoryEntry.getOlatResource());
    ResolvedAssessmentTest resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(unzippedDirRoot, false, true);
    ManifestBuilder clonedManifestBuilder = ManifestBuilder.read(new File(unzippedDirRoot, "imsmanifest.xml"));
    List<AssessmentItemRef> itemRefs = resolvedAssessmentTest.getAssessmentItemRefs();
    List<QuestionItem> importedItems = new ArrayList<>(itemRefs.size());
    for (AssessmentItemRef itemRef : itemRefs) {
        ResolvedAssessmentItem resolvedAssessmentItem = resolvedAssessmentTest.getResolvedAssessmentItem(itemRef);
        RootNodeLookup<AssessmentItem> rootNode = resolvedAssessmentItem.getItemLookup();
        URI itemUri = rootNode.getSystemId();
        File itemFile = new File(itemUri);
        String relativePathToManifest = unzippedDirRoot.toPath().relativize(itemFile.toPath()).toString();
        AssessmentItem assessmentItem = resolvedAssessmentItem.getRootNodeLookup().extractIfSuccessful();
        ResourceType resource = clonedManifestBuilder.getResourceTypeByHref(relativePathToManifest);
        ManifestMetadataBuilder metadata = clonedManifestBuilder.getMetadataBuilder(resource, true);
        QuestionItem qitem = importAssessmentItemRef(owner, assessmentItem, itemFile, metadata, defaultLocale);
        importedItems.add(qitem);
    }
    return importedItems;
}
Also used : ManifestBuilder(org.olat.ims.qti21.model.xml.ManifestBuilder) ArrayList(java.util.ArrayList) ResolvedAssessmentItem(uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentItem) AssessmentItem(uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem) ResourceType(org.olat.imscp.xml.manifest.ResourceType) ResolvedAssessmentTest(uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentTest) URI(java.net.URI) ManifestMetadataBuilder(org.olat.ims.qti21.model.xml.ManifestMetadataBuilder) FileResourceManager(org.olat.fileresource.FileResourceManager) ResolvedAssessmentItem(uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentItem) AssessmentItemRef(uk.ac.ed.ph.jqtiplus.node.test.AssessmentItemRef) File(java.io.File) QuestionItem(org.olat.modules.qpool.QuestionItem)

Aggregations

ResourceType (org.olat.imscp.xml.manifest.ResourceType)28 File (java.io.File)14 ManifestMetadataBuilder (org.olat.ims.qti21.model.xml.ManifestMetadataBuilder)14 ManifestBuilder (org.olat.ims.qti21.model.xml.ManifestBuilder)12 AssessmentItem (uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem)10 ResolvedAssessmentItem (uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentItem)10 IOException (java.io.IOException)6 URI (java.net.URI)6 ManifestMetadataType (org.olat.imscp.xml.manifest.ManifestMetadataType)6 QuestionItemImpl (org.olat.modules.qpool.model.QuestionItemImpl)6 Path (java.nio.file.Path)4 ArrayList (java.util.ArrayList)4 AssessmentItemMetadata (org.olat.ims.qti21.model.xml.AssessmentItemMetadata)4 QuestionItem (org.olat.modules.qpool.QuestionItem)4 AssessmentItemRef (uk.ac.ed.ph.jqtiplus.node.test.AssessmentItemRef)4 MetadataType (org.olat.imscp.xml.manifest.MetadataType)3 InputStream (java.io.InputStream)2 FileSystem (java.nio.file.FileSystem)2 HashMap (java.util.HashMap)2 ShieldInputStream (org.olat.core.util.io.ShieldInputStream)2