Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: Use OntologyIri in ontology requests #3481

Merged
merged 49 commits into from
Feb 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
73d03e7
inline OntologyTriplestoreHelpers trait
seakayone Jan 21, 2025
a881072
inline OntologyCacheHelpers trait
seakayone Jan 21, 2025
b98ca11
replace with ZIO.unit
seakayone Jan 21, 2025
f60c558
Replace cacheUpdatedOntology(SmartIri,ReadOntologyV2) with refreshing…
seakayone Jan 21, 2025
1b7f98e
replace OntologyCache.deleteOntology with refreshing from DB
seakayone Jan 21, 2025
0d786d0
replace OntologyCache.cacheUpdatedOntologyWithClass with refreshing f…
seakayone Jan 21, 2025
43598d7
replace OntologyCache.cacheUpdatedOntologyWithClass with refreshing f…
seakayone Jan 21, 2025
7fb2a43
cleanup
seakayone Jan 22, 2025
b0e6416
improve logging
seakayone Jan 22, 2025
68cc849
cleanup
seakayone Jan 22, 2025
09256f5
simplify
seakayone Jan 22, 2025
728c5cc
Merge branch 'main' into fix/ontology-cache
seakayone Jan 22, 2025
08e90f7
fixup! simplify
seakayone Jan 22, 2025
78050e1
fmt
seakayone Jan 22, 2025
4f0cee9
Merge branch 'main' into fix/ontology-cache
seakayone Jan 23, 2025
9dded3e
Merge branch 'main' into fix/ontology-cache
seakayone Jan 24, 2025
d3346a4
Merge branch 'main' into fix/ontology-cache
seakayone Jan 27, 2025
2d9e189
Merge branch 'main' into fix/ontology-cache
seakayone Jan 27, 2025
cdef837
Merge branch 'main' into fix/ontology-cache
seakayone Jan 27, 2025
43782b5
Merge branch 'main' into fix/ontology-cache
seakayone Jan 27, 2025
0d158bd
Merge branch 'main' into fix/ontology-cache
seakayone Jan 28, 2025
c4686c6
Merge branch 'main' into fix/ontology-cache
seakayone Jan 28, 2025
9600f67
Merge branch 'main' into fix/ontology-cache
seakayone Jan 28, 2025
5ea5f1a
fmt
seakayone Jan 28, 2025
085f8a0
rm unused
seakayone Jan 28, 2025
251a9d1
rename KnoraIri.toInternalIri
seakayone Jan 28, 2025
2bc3ae6
align smartIri methods on KnoraIri and make final
seakayone Jan 28, 2025
4fcdf50
use OntologyIri in can delete and delete ontology requests
seakayone Jan 28, 2025
41d1c32
move ontology name internal/external conversion to OntologyName
seakayone Jan 28, 2025
104a603
move isBuiltIn and isInternal into OntologyName
seakayone Jan 28, 2025
21bc801
remove redundant parenthesis
seakayone Jan 28, 2025
632748b
Replace with ZIO.none
seakayone Jan 28, 2025
6da4f6a
fixup! remove redundant parenthesis
seakayone Jan 28, 2025
647d310
Use OntologyIri in OntologyEntitiesGetRequestV2
seakayone Jan 28, 2025
93e34e8
allow generic ontologyIri on derefencing and getting
seakayone Jan 28, 2025
8a7f19b
error message
seakayone Jan 28, 2025
0564aad
use OntologyIri in ChangeOntologyMetadataRequestV2
seakayone Jan 28, 2025
532e329
scaladoc
seakayone Jan 28, 2025
653d6ba
prevent internal ontologies to be served
seakayone Jan 29, 2025
8982371
fix dereferencing
seakayone Jan 29, 2025
3b1f9ab
Merge branch 'main' into refactor/use-ontologyIri
seakayone Jan 29, 2025
60fea61
use OntologyIri in DeleteOntologyComment
seakayone Jan 29, 2025
ab815b7
fix test
seakayone Jan 29, 2025
22c24d5
Merge branch 'main' into refactor/use-ontologyIri
seakayone Jan 30, 2025
ecb99ec
Merge branch 'main' into refactor/use-ontologyIri
seakayone Jan 31, 2025
fb1d0bd
Merge branch 'main' into refactor/use-ontologyIri
seakayone Feb 3, 2025
c3bdf01
Merge branch 'main' into refactor/use-ontologyIri
seakayone Feb 3, 2025
bd5bf38
Merge branch 'main' into refactor/use-ontologyIri
seakayone Feb 3, 2025
f5be794
Merge branch 'main' into refactor/use-ontologyIri
seakayone Feb 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import org.knora.webapi.messages.v2.responder.valuemessages.IntegerValueContentV
import org.knora.webapi.routing.UnsafeZioRun
import org.knora.webapi.sharedtestdata.SharedTestDataADM
import org.knora.webapi.slice.admin.domain.model.KnoraProject.ProjectIri
import org.knora.webapi.slice.common.KnoraIris.OntologyIri
import org.knora.webapi.slice.ontology.domain.model.Cardinality.*
import org.knora.webapi.slice.ontology.repo.service.OntologyCache
import org.knora.webapi.store.triplestore.api.TriplestoreService
Expand Down Expand Up @@ -220,7 +221,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {
val newLabel = "The modified foo ontology"

appActor ! ChangeOntologyMetadataRequestV2(
ontologyIri = fooIri.get.toSmartIri.toOntologySchema(ApiV2Complex),
ontologyIri = OntologyIri.unsafeFrom(fooIri.get.toSmartIri.toComplexSchema),
label = Some(newLabel),
lastModificationDate = fooLastModDate,
apiRequestID = UUID.randomUUID,
Expand All @@ -243,7 +244,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {
val aComment = "a comment"

appActor ! ChangeOntologyMetadataRequestV2(
ontologyIri = fooIri.get.toSmartIri.toOntologySchema(ApiV2Complex),
ontologyIri = OntologyIri.unsafeFrom(fooIri.get.toSmartIri.toComplexSchema),
comment = Some(aComment),
lastModificationDate = fooLastModDate,
apiRequestID = UUID.randomUUID,
Expand All @@ -267,7 +268,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {
val aComment = "a changed comment"

appActor ! ChangeOntologyMetadataRequestV2(
ontologyIri = fooIri.get.toSmartIri.toOntologySchema(ApiV2Complex),
ontologyIri = OntologyIri.unsafeFrom(fooIri.get.toSmartIri.toComplexSchema),
label = Some(aLabel),
comment = Some(aComment),
lastModificationDate = fooLastModDate,
Expand All @@ -292,7 +293,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {
val newLabel = "a label changed again"

appActor ! ChangeOntologyMetadataRequestV2(
ontologyIri = fooIri.get.toSmartIri.toOntologySchema(ApiV2Complex),
ontologyIri = OntologyIri.unsafeFrom(fooIri.get.toSmartIri.toComplexSchema),
label = Some(newLabel),
lastModificationDate = fooLastModDate,
apiRequestID = UUID.randomUUID,
Expand All @@ -314,7 +315,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {

"delete the comment from 'foo'" in {
appActor ! DeleteOntologyCommentRequestV2(
ontologyIri = fooIri.get.toSmartIri.toOntologySchema(ApiV2Complex),
ontologyIri = OntologyIri.unsafeFrom(fooIri.get.toSmartIri.toComplexSchema),
lastModificationDate = fooLastModDate,
apiRequestID = UUID.randomUUID,
requestingUser = imagesUser,
Expand Down Expand Up @@ -375,7 +376,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {
val newComment = "a new comment"

appActor ! ChangeOntologyMetadataRequestV2(
ontologyIri = barIri.get.toSmartIri.toOntologySchema(ApiV2Complex),
ontologyIri = OntologyIri.unsafeFrom(barIri.get.toSmartIri.toComplexSchema),
comment = Some(newComment),
lastModificationDate = barLastModDate,
apiRequestID = UUID.randomUUID,
Expand Down Expand Up @@ -410,7 +411,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {

"not delete an ontology that doesn't exist" in {
appActor ! DeleteOntologyRequestV2(
ontologyIri = "http://0.0.0.0:3333/ontology/1234/nonexistent/v2".toSmartIri,
ontologyIri = OntologyIri.unsafeFrom("http://0.0.0.0:3333/ontology/1234/nonexistent/v2".toSmartIri),
lastModificationDate = fooLastModDate,
apiRequestID = UUID.randomUUID,
requestingUser = imagesUser,
Expand All @@ -423,7 +424,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {

"not allow a user to delete an ontology if they are not a sysadmin or an admin in the ontology's project" in {
appActor ! DeleteOntologyRequestV2(
ontologyIri = fooIri.get.toSmartIri.toOntologySchema(ApiV2Complex),
ontologyIri = OntologyIri.unsafeFrom(fooIri.get.toSmartIri.toComplexSchema),
lastModificationDate = fooLastModDate,
apiRequestID = UUID.randomUUID,
requestingUser = SharedTestDataADM.imagesUser02,
Expand All @@ -436,7 +437,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {

"delete the 'foo' ontology" in {
appActor ! DeleteOntologyRequestV2(
ontologyIri = fooIri.get.toSmartIri.toOntologySchema(ApiV2Complex),
ontologyIri = OntologyIri.unsafeFrom(fooIri.get.toSmartIri.toComplexSchema),
lastModificationDate = fooLastModDate,
apiRequestID = UUID.randomUUID,
requestingUser = imagesUser,
Expand Down Expand Up @@ -474,7 +475,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {
.get

appActor ! DeleteOntologyRequestV2(
ontologyIri = AnythingOntologyIri,
ontologyIri = OntologyIri.unsafeFrom(AnythingOntologyIri),
lastModificationDate = anythingLastModDate,
apiRequestID = UUID.randomUUID,
requestingUser = anythingAdminUser,
Expand Down Expand Up @@ -2719,7 +2720,7 @@ class OntologyResponderV2Spec extends CoreSpec with ImplicitSender {
val newLabel = "The modified anything ontology"

appActor ! ChangeOntologyMetadataRequestV2(
ontologyIri = AnythingOntologyIri,
ontologyIri = OntologyIri.unsafeFrom(AnythingOntologyIri),
label = Some(newLabel),
lastModificationDate = anythingLastModDate,
apiRequestID = UUID.randomUUID,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,7 @@ object StringFormatter {
StringFormatter.getGeneralInstance
}

def isKnoraOntologyIri(iri: SmartIri): Boolean =
iri.isKnoraApiV2DefinitionIri && OntologyConstants.InternalOntologyLabels.contains(iri.getOntologyName.value)
def isKnoraOntologyIri(iri: SmartIri): Boolean = iri.isKnoraApiV2DefinitionIri && iri.getOntologyName.isInternal

def makeValueIri(resourceIri: IRI, uuid: UUID): IRI =
s"$resourceIri/values/${UuidUtil.base64Encode(uuid)}"
Expand Down Expand Up @@ -1084,7 +1083,7 @@ class StringFormatter private (

private def externalToInternalEntityIri: SmartIri = {
// Construct the string representation of this IRI in the target schema.
val ontologyName = externalToInternalOntologyName(getOntologyName)
val ontologyName = getOntologyName.asInternal
val entityName = getEntityName
val ontologyIri =
OntologyIri.makeNew(ontologyName, iriInfo.sharedOntology, iriInfo.projectCode.map(Shortcode.unsafeFrom), self)
Expand Down Expand Up @@ -1119,7 +1118,7 @@ class StringFormatter private (
iriStr = convertedEntityIriStr,
creationFun = { () =>
val convertedSmartIriInfo = iriInfo.copy(
ontologyName = Some(internalToExternalOntologyName(getOntologyName).value),
ontologyName = Some(getOntologyName.asExternal.value),
ontologySchema = Some(targetSchema),
)

Expand All @@ -1136,9 +1135,7 @@ class StringFormatter private (
val versionSegment = getVersionSegment(targetSchema)

val convertedIriStr: IRI = if (isKnoraBuiltInDefinitionIri) {
OntologyConstants.KnoraApi.ApiOntologyStart + internalToExternalOntologyName(
ontologyName,
).value + versionSegment
OntologyConstants.KnoraApi.ApiOntologyStart + ontologyName.asExternal.value + versionSegment
} else if (isKnoraSharedDefinitionIri) {
val externalOntologyIri = new StringBuilder(OntologyConstants.KnoraApi.ApiOntologyStart).append("shared/")

Expand Down Expand Up @@ -1172,7 +1169,7 @@ class StringFormatter private (
iriStr = convertedIriStr,
creationFun = { () =>
val convertedSmartIriInfo = iriInfo.copy(
ontologyName = Some(internalToExternalOntologyName(getOntologyName).value),
ontologyName = Some(getOntologyName.asExternal.value),
ontologySchema = Some(targetSchema),
)

Expand All @@ -1187,7 +1184,7 @@ class StringFormatter private (
private lazy val asInternalOntologyIri: SmartIri = {
val convertedIriStr = OntologyIri
.makeNew(
externalToInternalOntologyName(getOntologyName),
getOntologyName.asInternal,
iriInfo.sharedOntology,
iriInfo.projectCode.map(Shortcode.unsafeFrom),
self,
Expand All @@ -1198,7 +1195,7 @@ class StringFormatter private (
iriStr = convertedIriStr,
creationFun = { () =>
val convertedSmartIriInfo = iriInfo.copy(
ontologyName = Some(externalToInternalOntologyName(getOntologyName).value),
ontologyName = Some(getOntologyName.asInternal.value),
ontologySchema = Some(InternalSchema),
)

Expand Down Expand Up @@ -1427,34 +1424,6 @@ class StringFormatter private (
private def isBuiltInOntologyName(ontologyName: String): Boolean =
OntologyConstants.BuiltInOntologyLabels.contains(ontologyName)

/**
* Converts an internal ontology name to an external ontology name. This only affects `knora-base`, whose
* external equivalent is `knora-api.`
*
* @param ontologyName an internal ontology name.
* @return the corresponding external ontology name.
*/
private def internalToExternalOntologyName(ontologyName: OntologyName): OntologyName =
if (ontologyName.value == OntologyConstants.KnoraBase.KnoraBaseOntologyLabel) {
OntologyName.unsafeFrom(OntologyConstants.KnoraApi.KnoraApiOntologyLabel)
} else {
ontologyName
}

/**
* Converts an external ontology name to an internal ontology name. This only affects `knora-api`, whose
* internal equivalent is `knora-base.`
*
* @param ontologyName an external ontology name.
* @return the corresponding internal ontology name.
*/
private def externalToInternalOntologyName(ontologyName: OntologyName): OntologyName =
if (ontologyName.value == OntologyConstants.KnoraApi.KnoraApiOntologyLabel) {
OntologyName.unsafeFrom(OntologyConstants.KnoraBase.KnoraBaseOntologyLabel)
} else {
ontologyName
}

/**
* Determines whether a URL path refers to a built-in API v2 ontology (simple or complex).
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*/

package org.knora.webapi.messages.v2.responder.ontologymessages

import com.typesafe.scalalogging.Logger
import org.apache.commons.lang3.builder.HashCodeBuilder
import org.apache.pekko
Expand Down Expand Up @@ -51,6 +50,7 @@ import org.knora.webapi.messages.v2.responder.ontologymessages.OwlCardinality.Ow
import org.knora.webapi.messages.v2.responder.standoffmessages.StandoffDataTypeClasses
import org.knora.webapi.slice.admin.domain.model.KnoraProject.ProjectIri
import org.knora.webapi.slice.admin.domain.model.User
import org.knora.webapi.slice.common.KnoraIris.OntologyIri
import org.knora.webapi.slice.ontology.domain.model.Cardinality

/**
Expand Down Expand Up @@ -86,7 +86,7 @@ case class CreateOntologyRequestV2(
* @param requestingUser the user making the request.
*/
case class CanDeleteOntologyRequestV2(
ontologyIri: SmartIri,
ontologyIri: OntologyIri,
requestingUser: User,
) extends OntologiesResponderRequestV2

Expand All @@ -99,7 +99,7 @@ case class CanDeleteOntologyRequestV2(
* @param requestingUser the user making the request.
*/
case class DeleteOntologyRequestV2(
ontologyIri: SmartIri,
ontologyIri: OntologyIri,
lastModificationDate: Instant,
apiRequestID: UUID,
requestingUser: User,
Expand Down Expand Up @@ -957,7 +957,7 @@ object ChangeGuiOrderRequestV2 {
* @param requestingUser the user making the request.
*/
case class ChangeOntologyMetadataRequestV2(
ontologyIri: SmartIri,
ontologyIri: OntologyIri,
label: Option[String] = None,
comment: Option[String] = None,
lastModificationDate: Instant,
Expand All @@ -974,7 +974,7 @@ case class ChangeOntologyMetadataRequestV2(
* @param requestingUser the user making the request.
*/
case class DeleteOntologyCommentRequestV2(
ontologyIri: SmartIri,
ontologyIri: OntologyIri,
lastModificationDate: Instant,
apiRequestID: UUID,
requestingUser: User,
Expand Down Expand Up @@ -1119,7 +1119,7 @@ case class OntologyMetadataGetByIriRequestV2(ontologyIris: Set[SmartIri] = Set.e
* @param allLanguages true if information in all available languages should be returned.
* @param requestingUser the user making the request.
*/
case class OntologyEntitiesGetRequestV2(ontologyIri: SmartIri, allLanguages: Boolean, requestingUser: User)
case class OntologyEntitiesGetRequestV2(ontologyIri: OntologyIri, allLanguages: Boolean, requestingUser: User)
extends OntologiesResponderRequestV2

/**
Expand Down
Loading