Commit f99da3db authored by Thomas Bernhart's avatar Thomas Bernhart
Browse files

MEMO-669: Make sure the mimetype of the correct resource is returned

parent 8a81e9e0
...@@ -90,10 +90,8 @@ class Ingester( ...@@ -90,10 +90,8 @@ class Ingester(
it.second.let { path -> it.second.let { path ->
if (path != null) { if (path != null) {
sftpClient.open(File(path)).use { stream -> sftpClient.open(File(path)).use { stream ->
val binaryUri = "${it.first}/${Service.BINARY_FILE_URI_PATH}" val binaryUri = "$digitalInstantiationUrl/${Service.BINARY_FILE_URI_PATH}"
val mimeType = rdfHandler.getMimeType().first { mT -> val mimeType = rdfHandler.getMimeType(digitalInstantiationUrl)
mT.first == digitalInstantiationUrl
}.second
log.info("Ingesting binary $binaryUri with mime type $mimeType.") log.info("Ingesting binary $binaryUri with mime type $mimeType.")
transaction.createOrUpdateBinaryResource(URI(binaryUri), stream, mimeType) transaction.createOrUpdateBinaryResource(URI(binaryUri), stream, mimeType)
} }
......
...@@ -9,6 +9,7 @@ import org.apache.jena.rdf.model.impl.StatementImpl ...@@ -9,6 +9,7 @@ import org.apache.jena.rdf.model.impl.StatementImpl
import org.apache.jena.riot.Lang import org.apache.jena.riot.Lang
import org.apache.jena.riot.RDFDataMgr import org.apache.jena.riot.RDFDataMgr
import org.apache.log4j.LogManager import org.apache.log4j.LogManager
import org.memobase.exceptions.MissingMimeTypeException
import org.memobase.rdf.EBUCORE import org.memobase.rdf.EBUCORE
import org.memobase.rdf.RDF import org.memobase.rdf.RDF
import org.memobase.rdf.RICO import org.memobase.rdf.RICO
...@@ -109,11 +110,14 @@ class RdfHandler(data: String, private val externalBaseUrl: String) { ...@@ -109,11 +110,14 @@ class RdfHandler(data: String, private val externalBaseUrl: String) {
}.toList() }.toList()
} }
fun getMimeType(): List<Pair<String, String?>> { fun getMimeType(uri: String): String {
return model.listSubjectsWithProperty(RICO.type, Service.DIGITAL_OBJECT_TYPE).filterKeep { val mimeTypes = model.getResource(uri).listProperties(EBUCORE.hasMimeType).mapWith {
it.hasProperty(EBUCORE.hasMimeType) it.`object`.asLiteral().string
}.mapWith {
Pair(it.uri, it.getProperty(EBUCORE.hasMimeType).`object`.asLiteral().string)
}.toList() }.toList()
if (mimeTypes.size == 1) {
return mimeTypes[0]
} else {
throw MissingMimeTypeException("No MimeType found for resource $uri")
}
} }
} }
package org.memobase.exceptions
class MissingMimeTypeException(message: String) : Exception(message)
...@@ -127,7 +127,8 @@ class TestRdfHandler { ...@@ -127,7 +127,8 @@ class TestRdfHandler {
@Test @Test
fun `test mime type extraction for binaries`() { fun `test mime type extraction for binaries`() {
val rdfHandler = RdfHandler(readFile("input.nt"), "https://memobase.ch/") val rdfHandler = RdfHandler(readFile("input.nt"), "https://memobase.ch/")
assertThat(rdfHandler.getMimeType().first().second).isEqualTo("video/mpeg") val mimeType = rdfHandler.getMimeType("https://memobase.ch/instantiation/digital/AFZ-IB_Becker_Audiovisuals_63-1")
assertThat(mimeType).isEqualTo("video/mpeg")
} }
private val uris2 = listOf( private val uris2 = listOf(
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment