From 3a7892f9c65330f1e4c2639b60e08f289c2ffdb8 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 13 Jun 2024 16:03:27 -0400 Subject: [PATCH] Generate Valid Scripture Burritos (#1153) * Add metadata to make burrito export valid Changed Derived to Source: I incorrectly assumed that Source referred to a Source text, however this is meant as the mutable original (not software modified) burrito. Derived requires a list of operations performed which modified it. Added a name to Language Added a currentScope to the AudioFlavor Added values to Identification Added an object to Primary for auth * Update ScriptureBurritoUtils.kt Slug for current scope needs to be uppercase --- .../burrito/ScriptureBurritoUtils.kt | 25 +++++++++++++++---- ...IdAuthorityProvider.kt => AuthProvider.kt} | 10 +++++++- .../jvm/workbookapp/di/modules/AuthModule.kt | 4 +-- .../burrito/auth/WacsIdAuthority.kt | 21 +++++++++++++--- 4 files changed, 49 insertions(+), 11 deletions(-) rename common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/auth/{IdAuthorityProvider.kt => AuthProvider.kt} (50%) diff --git a/common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/ScriptureBurritoUtils.kt b/common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/ScriptureBurritoUtils.kt index ca3ae80350..811cf89022 100644 --- a/common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/ScriptureBurritoUtils.kt +++ b/common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/ScriptureBurritoUtils.kt @@ -18,9 +18,12 @@ import org.bibletranslationtools.scriptureburrito.LocalizedNamesSchema import org.bibletranslationtools.scriptureburrito.LocalizedText import org.bibletranslationtools.scriptureburrito.MetaVersionSchema import org.bibletranslationtools.scriptureburrito.MetadataSchema +import org.bibletranslationtools.scriptureburrito.PrimaryIdentification import org.bibletranslationtools.scriptureburrito.ScopeSchema import org.bibletranslationtools.scriptureburrito.ShortStatement import org.bibletranslationtools.scriptureburrito.SoftwareAndUserInfoSchema +import org.bibletranslationtools.scriptureburrito.SourceMetaSchema +import org.bibletranslationtools.scriptureburrito.SourceMetadataSchema import org.bibletranslationtools.scriptureburrito.TypeSchema import org.bibletranslationtools.scriptureburrito.flavor.FlavorType import org.bibletranslationtools.scriptureburrito.flavor.scripture.audio.AudioFlavorSchema @@ -31,6 +34,7 @@ import org.bibletranslationtools.scriptureburrito.flavor.scripture.audio.Perform import org.wycliffeassociates.otter.common.data.IAppInfo import org.wycliffeassociates.otter.common.data.workbook.Workbook import org.wycliffeassociates.otter.common.domain.resourcecontainer.RcConstants +import org.wycliffeassociates.otter.common.domain.resourcecontainer.burrito.auth.AuthProvider import org.wycliffeassociates.otter.common.domain.resourcecontainer.burrito.auth.IdAuthorityProvider import org.wycliffeassociates.otter.common.persistence.IDirectoryProvider import org.wycliffeassociates.resourcecontainer.ResourceContainer @@ -47,7 +51,7 @@ import javax.inject.Inject typealias ChapterNumber = Int class ScriptureBurritoUtils @Inject constructor( - private val idAuthorityProvider: IdAuthorityProvider, + private val idAuthorityProvider: AuthProvider, private val appInfo: IAppInfo, directoryProvider: IDirectoryProvider ) { @@ -88,9 +92,9 @@ class ScriptureBurritoUtils @Inject constructor( val language = workbook.target.language val langCode = language.slug - return DerivedMetadataSchema( + return SourceMetadataSchema( Format.SCRIPTURE_BURRITO, - DerivedMetaSchema( + SourceMetaSchema( dateCreated = Date.from(Instant.now()), version = MetaVersionSchema._1_0_0, defaultLocale = rc.manifest.dublinCore.language.identifier, @@ -100,7 +104,7 @@ class ScriptureBurritoUtils @Inject constructor( } ), idAuthorityProvider.createIdAuthority(), - IdentificationSchema(), + idAuthorityProvider.createIdentification(), confidential = false, copyright = CopyrightSchema().apply { this.shortStatements = mutableListOf(ShortStatement(rc.manifest.dublinCore.rights, langCode)) @@ -115,11 +119,22 @@ class ScriptureBurritoUtils @Inject constructor( formats ).apply { name = "audioTranslation" + currentScope = ScopeSchema().apply { + this[workbook.target.slug.uppercase(Locale.US)] = takes.keys.map { "$it" }.toMutableList() + } } } ), languages = Languages().apply { - add(LanguageSchema(tag = language.slug)) + add( + LanguageSchema( + tag = language.slug, + name = hashMapOf( + language.slug to language.name, + "en" to language.anglicizedName + ) + ) + ) }, localizedNames = buildLocalizedNames(rc), ingredients = buildIngredients(rc, workbook, takes) diff --git a/common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/auth/IdAuthorityProvider.kt b/common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/auth/AuthProvider.kt similarity index 50% rename from common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/auth/IdAuthorityProvider.kt rename to common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/auth/AuthProvider.kt index b607603014..6c985d44b0 100644 --- a/common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/auth/IdAuthorityProvider.kt +++ b/common/src/main/kotlin/org/wycliffeassociates/otter/common/domain/resourcecontainer/burrito/auth/AuthProvider.kt @@ -1,7 +1,15 @@ package org.wycliffeassociates.otter.common.domain.resourcecontainer.burrito.auth import org.bibletranslationtools.scriptureburrito.IdAuthoritiesSchema +import org.bibletranslationtools.scriptureburrito.IdentificationSchema interface IdAuthorityProvider { fun createIdAuthority(): IdAuthoritiesSchema -} \ No newline at end of file + +} + +interface IdentificationProvider { + fun createIdentification(): IdentificationSchema +} + +interface AuthProvider: IdAuthorityProvider, IdentificationProvider \ No newline at end of file diff --git a/jvm/workbookapp/src/main/kotlin/org/wycliffeassociates/otter/jvm/workbookapp/di/modules/AuthModule.kt b/jvm/workbookapp/src/main/kotlin/org/wycliffeassociates/otter/jvm/workbookapp/di/modules/AuthModule.kt index 588dc50fc5..889b509105 100644 --- a/jvm/workbookapp/src/main/kotlin/org/wycliffeassociates/otter/jvm/workbookapp/di/modules/AuthModule.kt +++ b/jvm/workbookapp/src/main/kotlin/org/wycliffeassociates/otter/jvm/workbookapp/di/modules/AuthModule.kt @@ -2,11 +2,11 @@ package org.wycliffeassociates.otter.jvm.workbookapp.di.modules import dagger.Module import dagger.Provides -import org.wycliffeassociates.otter.common.domain.resourcecontainer.burrito.auth.IdAuthorityProvider +import org.wycliffeassociates.otter.common.domain.resourcecontainer.burrito.auth.AuthProvider import org.wycliffeassociates.otter.jvm.workbookapp.domain.resourcecontainer.burrito.auth.WacsIdAuthority @Module class AuthModule { @Provides - fun providesWacsAuth(): IdAuthorityProvider = WacsIdAuthority() + fun providesWacsAuth(): AuthProvider = WacsIdAuthority() } diff --git a/jvm/workbookapp/src/main/kotlin/org/wycliffeassociates/otter/jvm/workbookapp/domain/resourcecontainer/burrito/auth/WacsIdAuthority.kt b/jvm/workbookapp/src/main/kotlin/org/wycliffeassociates/otter/jvm/workbookapp/domain/resourcecontainer/burrito/auth/WacsIdAuthority.kt index 029c4ee00d..2bc02536c9 100644 --- a/jvm/workbookapp/src/main/kotlin/org/wycliffeassociates/otter/jvm/workbookapp/domain/resourcecontainer/burrito/auth/WacsIdAuthority.kt +++ b/jvm/workbookapp/src/main/kotlin/org/wycliffeassociates/otter/jvm/workbookapp/domain/resourcecontainer/burrito/auth/WacsIdAuthority.kt @@ -1,17 +1,32 @@ package org.wycliffeassociates.otter.jvm.workbookapp.domain.resourcecontainer.burrito.auth +import com.fasterxml.jackson.databind.node.JsonNodeFactory +import com.fasterxml.jackson.databind.node.ObjectNode import org.bibletranslationtools.scriptureburrito.IdAuthoritiesSchema import org.bibletranslationtools.scriptureburrito.IdAuthority -import org.wycliffeassociates.otter.common.domain.resourcecontainer.burrito.auth.IdAuthorityProvider +import org.bibletranslationtools.scriptureburrito.IdentificationSchema +import org.bibletranslationtools.scriptureburrito.PrimaryIdentification +import org.wycliffeassociates.otter.common.domain.resourcecontainer.burrito.auth.AuthProvider import javax.inject.Inject -class WacsIdAuthority @Inject constructor(): IdAuthorityProvider { +class WacsIdAuthority @Inject constructor(): + AuthProvider +{ override fun createIdAuthority(): IdAuthoritiesSchema { val authority = IdAuthoritiesSchema() val wacs = IdAuthority() - wacs.name = hashMapOf("en" to "Wycliffe Associates Content Service ") + wacs.name = hashMapOf("en" to "Wycliffe Associates Content Service") wacs.id = "https://content.bibletranslationtools.org/" authority["wacs"] = wacs return authority } + + override fun createIdentification(): IdentificationSchema { + return IdentificationSchema().apply { + primary = PrimaryIdentification().apply { + this["id"] = ObjectNode(JsonNodeFactory.instance) + } + name = hashMapOf("en" to "Wycliffe Associates Content Service") + } + } } \ No newline at end of file