From 79393a27b82e6bc0e4bf8db82fd2c3356a46cad6 Mon Sep 17 00:00:00 2001 From: Manuel Prinz Date: Tue, 10 Dec 2024 15:29:24 +0000 Subject: [PATCH] Split common module into several smaller modules (!1135) --- common/datatypes/build.gradle.kts | 22 ++++++++ .../main/kotlin/org/orkg/common/Extensions.kt | 53 ------------------- .../main/kotlin/org/orkg/common/RealNumber.kt | 0 .../org/orkg/common/RealNumberUnitTest.kt | 0 common/functional/build.gradle.kts | 3 ++ .../src/main/kotlin/org/orkg/common/Either.kt | 0 common/identifiers/build.gradle.kts | 3 ++ .../kotlin/org/orkg/common/ContributorId.kt | 0 .../kotlin/org/orkg/common/ObservatoryId.kt | 0 .../kotlin/org/orkg/common/OrganizationId.kt | 0 .../main/kotlin/org/orkg/common/ThingId.kt | 0 common/pagination/build.gradle.kts | 26 +++++++++ .../kotlin/org/orkg/common/PageRequests.kt | 0 .../kotlin/org/orkg/common/PageDocTest.kt | 0 common/serialization/build.gradle.kts | 4 +- common/{ => spring-webmvc}/build.gradle.kts | 8 +-- .../org/orkg/common/MediaTypeCapabilities.kt | 0 .../common/MediaTypeCapabilitiesResolver.kt} | 27 ++-------- .../org/orkg/common/MediaTypeCapability.kt | 0 .../common/MediaTypeCapabilityRegistry.kt | 0 .../main/kotlin/org/orkg/common/Security.kt | 0 .../kotlin/org/orkg/common/WebExtensions.kt | 27 ++++++++++ .../annotations/SpringSecurityAnnotations.kt | 0 .../PagedSerializationConfiguration.kt | 8 +++ .../configuration/WebMvcConfiguration.kt | 18 +++++++ .../common/exceptions/ExceptionHandler.kt | 0 .../org/orkg/common/exceptions/Exceptions.kt | 0 .../orkg/common/MediaTypeCapabilitiesTest.kt | 0 .../common/MediaTypeCapabilityRegistryTest.kt | 0 .../exceptions/ExceptionHandlerUnitTest.kt | 0 .../orkg/common/testing/fixtures/Constants.kt | 0 .../testing/fixtures/TestBodyPublisher.kt | 0 .../org/orkg/common/TimeEqualsContractTest.kt | 27 ---------- common/string-utils/build.gradle.kts | 17 ++++++ .../org/orkg/common/StringExtensions.kt | 30 +++++++++++ .../kotlin/org/orkg/common/StringReader.kt | 0 .../test/kotlin/org/orkg/common/MD5Test.kt | 0 .../build.gradle.kts | 2 +- .../build.gradle.kts | 6 +-- .../build.gradle.kts | 3 +- .../build.gradle.kts | 3 +- .../community-core-model/build.gradle.kts | 7 ++- .../build.gradle.kts | 2 +- .../community-core-services/build.gradle.kts | 3 +- .../build.gradle.kts | 2 +- .../community-ports-input/build.gradle.kts | 2 +- .../community-ports-output/build.gradle.kts | 4 +- .../build.gradle.kts | 9 ++-- .../build.gradle.kts | 8 +-- .../build.gradle.kts | 2 +- .../build.gradle.kts | 4 +- .../content-types-core-model/build.gradle.kts | 7 ++- .../build.gradle.kts | 5 +- .../build.gradle.kts | 6 ++- .../build.gradle.kts | 5 +- .../build.gradle.kts | 3 +- .../build.gradle.kts | 2 +- .../curation-ports-output/build.gradle.kts | 2 +- .../data-export-adapters/build.gradle.kts | 3 +- data-export/data-export-core/build.gradle.kts | 3 +- .../data-export-ports-input/build.gradle.kts | 2 +- .../build.gradle.kts | 3 +- .../build.gradle.kts | 2 +- .../discussions-core-model/build.gradle.kts | 3 +- .../build.gradle.kts | 2 +- .../discussions-ports-input/build.gradle.kts | 2 +- .../discussions-ports-output/build.gradle.kts | 4 +- .../antora/modules/ROOT/pages/reference.adoc | 1 + .../pages/reference/development/pitfalls.adoc | 24 +++++++++ documentation/build.gradle.kts | 3 +- .../build.gradle.kts | 4 +- .../build.gradle.kts | 3 +- .../build.gradle.kts | 7 ++- .../graph-adapter-output-web/build.gradle.kts | 2 +- graph/graph-core-model/build.gradle.kts | 7 ++- graph/graph-core-services/build.gradle.kts | 4 +- graph/graph-ports-input/build.gradle.kts | 2 +- graph/graph-ports-output/build.gradle.kts | 4 +- .../build.gradle.kts | 5 +- .../build.gradle.kts | 2 +- licenses/licenses-core-model/build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- .../media-storage-core-model/build.gradle.kts | 5 +- .../build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- .../profiling-adapter-output/build.gradle.kts | 2 +- rest-api-server/build.gradle.kts | 9 ++-- settings.gradle.kts | 6 +++ .../build.gradle.kts | 2 +- .../statistics-core-model/build.gradle.kts | 2 +- .../statistics-ports-output/build.gradle.kts | 2 +- testing/spring/build.gradle.kts | 2 +- widget/build.gradle.kts | 3 +- 95 files changed, 309 insertions(+), 188 deletions(-) create mode 100644 common/datatypes/build.gradle.kts rename common/{ => datatypes}/src/main/kotlin/org/orkg/common/Extensions.kt (82%) rename common/{ => datatypes}/src/main/kotlin/org/orkg/common/RealNumber.kt (100%) rename common/{ => datatypes}/src/test/kotlin/org/orkg/common/RealNumberUnitTest.kt (100%) create mode 100644 common/functional/build.gradle.kts rename common/{ => functional}/src/main/kotlin/org/orkg/common/Either.kt (100%) create mode 100644 common/identifiers/build.gradle.kts rename common/{ => identifiers}/src/main/kotlin/org/orkg/common/ContributorId.kt (100%) rename common/{ => identifiers}/src/main/kotlin/org/orkg/common/ObservatoryId.kt (100%) rename common/{ => identifiers}/src/main/kotlin/org/orkg/common/OrganizationId.kt (100%) rename common/{ => identifiers}/src/main/kotlin/org/orkg/common/ThingId.kt (100%) create mode 100644 common/pagination/build.gradle.kts rename common/{ => pagination}/src/main/kotlin/org/orkg/common/PageRequests.kt (100%) rename common/{ => pagination}/src/test/kotlin/org/orkg/common/PageDocTest.kt (100%) rename common/{ => spring-webmvc}/build.gradle.kts (89%) rename common/{ => spring-webmvc}/src/main/kotlin/org/orkg/common/MediaTypeCapabilities.kt (100%) rename common/{src/main/kotlin/org/orkg/common/configuration/WebMvcConfiguration.kt => spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapabilitiesResolver.kt} (72%) rename common/{ => spring-webmvc}/src/main/kotlin/org/orkg/common/MediaTypeCapability.kt (100%) rename common/{ => spring-webmvc}/src/main/kotlin/org/orkg/common/MediaTypeCapabilityRegistry.kt (100%) rename common/{ => spring-webmvc}/src/main/kotlin/org/orkg/common/Security.kt (100%) create mode 100644 common/spring-webmvc/src/main/kotlin/org/orkg/common/WebExtensions.kt rename common/{ => spring-webmvc}/src/main/kotlin/org/orkg/common/annotations/SpringSecurityAnnotations.kt (100%) create mode 100644 common/spring-webmvc/src/main/kotlin/org/orkg/common/configuration/PagedSerializationConfiguration.kt create mode 100644 common/spring-webmvc/src/main/kotlin/org/orkg/common/configuration/WebMvcConfiguration.kt rename common/{ => spring-webmvc}/src/main/kotlin/org/orkg/common/exceptions/ExceptionHandler.kt (100%) rename common/{ => spring-webmvc}/src/main/kotlin/org/orkg/common/exceptions/Exceptions.kt (100%) rename common/{ => spring-webmvc}/src/test/kotlin/org/orkg/common/MediaTypeCapabilitiesTest.kt (100%) rename common/{ => spring-webmvc}/src/test/kotlin/org/orkg/common/MediaTypeCapabilityRegistryTest.kt (100%) rename common/{ => spring-webmvc}/src/test/kotlin/org/orkg/common/exceptions/ExceptionHandlerUnitTest.kt (100%) rename common/{ => spring-webmvc}/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/Constants.kt (100%) rename common/{ => spring-webmvc}/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/TestBodyPublisher.kt (100%) delete mode 100644 common/src/test/kotlin/org/orkg/common/TimeEqualsContractTest.kt create mode 100644 common/string-utils/build.gradle.kts create mode 100644 common/string-utils/src/main/kotlin/org/orkg/common/StringExtensions.kt rename common/{ => string-utils}/src/main/kotlin/org/orkg/common/StringReader.kt (100%) rename common/{ => string-utils}/src/test/kotlin/org/orkg/common/MD5Test.kt (100%) create mode 100644 documentation/antora/modules/ROOT/pages/reference/development/pitfalls.adoc diff --git a/common/datatypes/build.gradle.kts b/common/datatypes/build.gradle.kts new file mode 100644 index 000000000..1f4bffab6 --- /dev/null +++ b/common/datatypes/build.gradle.kts @@ -0,0 +1,22 @@ +// JVM Test Suite is still incubating, but expected to be stable soon, so disabling the warning. +@file:Suppress("UnstableApiUsage") + +plugins { + id("org.orkg.gradle.kotlin-library") +} + +dependencies { + api("org.eclipse.rdf4j:rdf4j-common-io") // for RFC 3987 compliant IRIs + implementation(project(":common:string-utils")) +} + +testing { + suites { + val test by getting(JvmTestSuite::class) { + dependencies { + implementation("io.kotest:kotest-assertions-shared") + implementation("org.junit.jupiter:junit-jupiter-params") + } + } + } +} diff --git a/common/src/main/kotlin/org/orkg/common/Extensions.kt b/common/datatypes/src/main/kotlin/org/orkg/common/Extensions.kt similarity index 82% rename from common/src/main/kotlin/org/orkg/common/Extensions.kt rename to common/datatypes/src/main/kotlin/org/orkg/common/Extensions.kt index 73ccb01ef..b2c615166 100644 --- a/common/src/main/kotlin/org/orkg/common/Extensions.kt +++ b/common/datatypes/src/main/kotlin/org/orkg/common/Extensions.kt @@ -1,12 +1,5 @@ package org.orkg.common -import java.io.IOException -import java.math.BigInteger -import java.net.http.HttpClient -import java.net.http.HttpRequest -import java.net.http.HttpResponse -import java.security.MessageDigest -import java.time.Duration import java.time.MonthDay import java.time.YearMonth import java.time.chrono.IsoChronology @@ -18,29 +11,6 @@ import java.time.temporal.ChronoField import java.util.* import java.util.regex.Pattern import org.eclipse.rdf4j.common.net.ParsedIRI -import org.orkg.common.exceptions.ServiceUnavailable -import org.springframework.http.CacheControl -import org.springframework.http.HttpStatus -import org.springframework.http.ResponseEntity - -fun String.toSnakeCase(): String = - if (this.isEmpty()) this else StringBuilder().also { - this.forEach { c -> - when (c) { - in 'A'..'Z' -> { - it.append("_") - it.append(c.lowercase()) - } - - else -> { - it.append(c) - } - } - } - }.toString() - -fun T.withCacheControl(duration: Duration): ResponseEntity = - ResponseEntity.ok().cacheControl(CacheControl.maxAge(duration)).body(this) /** * Checks whether the given string is a [RFC 3987](https://www.ietf.org/rfc/rfc3987.txt) compliant IRI. @@ -284,19 +254,6 @@ fun String.isValidDateTimeStamp(): Boolean { return true } -fun HttpClient.send(httpRequest: HttpRequest, serviceName: String, successCallback: (String) -> T): T? { - try { - val response = send(httpRequest, HttpResponse.BodyHandlers.ofString()) - return when (response.statusCode()) { - HttpStatus.OK.value() -> successCallback(response.body()) - HttpStatus.NOT_FOUND.value() -> null - else -> throw ServiceUnavailable.create(serviceName, response.statusCode(), response.body()) - } - } catch (e: IOException) { - throw ServiceUnavailable.create(serviceName, e) - } -} - fun mutableSetOfNotNull(vararg elements: T?): MutableSet { val result = mutableSetOf() elements.forEach { @@ -319,13 +276,3 @@ fun String.isValidBoolean(): Boolean = "true", "1", "false", "0" -> true else -> false } - -/** - * Calculate the MD5 of a string. - * - * @return The MD5 in hexadecimal, zero-prefixed to 32 characters. - */ -val String.md5: String - get() = BigInteger(1, MessageDigest.getInstance("MD5").digest(this.toByteArray())) - .toString(16) - .padStart(32, '0') diff --git a/common/src/main/kotlin/org/orkg/common/RealNumber.kt b/common/datatypes/src/main/kotlin/org/orkg/common/RealNumber.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/RealNumber.kt rename to common/datatypes/src/main/kotlin/org/orkg/common/RealNumber.kt diff --git a/common/src/test/kotlin/org/orkg/common/RealNumberUnitTest.kt b/common/datatypes/src/test/kotlin/org/orkg/common/RealNumberUnitTest.kt similarity index 100% rename from common/src/test/kotlin/org/orkg/common/RealNumberUnitTest.kt rename to common/datatypes/src/test/kotlin/org/orkg/common/RealNumberUnitTest.kt diff --git a/common/functional/build.gradle.kts b/common/functional/build.gradle.kts new file mode 100644 index 000000000..cd7838dac --- /dev/null +++ b/common/functional/build.gradle.kts @@ -0,0 +1,3 @@ +plugins { + id("org.orkg.gradle.kotlin-library") +} diff --git a/common/src/main/kotlin/org/orkg/common/Either.kt b/common/functional/src/main/kotlin/org/orkg/common/Either.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/Either.kt rename to common/functional/src/main/kotlin/org/orkg/common/Either.kt diff --git a/common/identifiers/build.gradle.kts b/common/identifiers/build.gradle.kts new file mode 100644 index 000000000..cd7838dac --- /dev/null +++ b/common/identifiers/build.gradle.kts @@ -0,0 +1,3 @@ +plugins { + id("org.orkg.gradle.kotlin-library") +} diff --git a/common/src/main/kotlin/org/orkg/common/ContributorId.kt b/common/identifiers/src/main/kotlin/org/orkg/common/ContributorId.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/ContributorId.kt rename to common/identifiers/src/main/kotlin/org/orkg/common/ContributorId.kt diff --git a/common/src/main/kotlin/org/orkg/common/ObservatoryId.kt b/common/identifiers/src/main/kotlin/org/orkg/common/ObservatoryId.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/ObservatoryId.kt rename to common/identifiers/src/main/kotlin/org/orkg/common/ObservatoryId.kt diff --git a/common/src/main/kotlin/org/orkg/common/OrganizationId.kt b/common/identifiers/src/main/kotlin/org/orkg/common/OrganizationId.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/OrganizationId.kt rename to common/identifiers/src/main/kotlin/org/orkg/common/OrganizationId.kt diff --git a/common/src/main/kotlin/org/orkg/common/ThingId.kt b/common/identifiers/src/main/kotlin/org/orkg/common/ThingId.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/ThingId.kt rename to common/identifiers/src/main/kotlin/org/orkg/common/ThingId.kt diff --git a/common/pagination/build.gradle.kts b/common/pagination/build.gradle.kts new file mode 100644 index 000000000..25025853d --- /dev/null +++ b/common/pagination/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + id("org.orkg.gradle.input-adapter-spring-web") // for RestDocs configuration + id("org.orkg.gradle.kotlin-library") +} + +dependencies { + api("org.springframework.data:spring-data-commons") +} + +testing { + suites { + val test by getting(JvmTestSuite::class) { + dependencies { + implementation(testFixtures(project(":testing:spring"))) + implementation("org.junit.jupiter:junit-jupiter-api") + implementation("org.springframework.boot:spring-boot-test") + implementation("org.springframework.boot:spring-boot-test-autoconfigure") + implementation("org.springframework.restdocs:spring-restdocs-core") + implementation("org.springframework:spring-test") + implementation("org.springframework:spring-web") + implementation("org.springframework.restdocs:spring-restdocs-mockmvc") + runtimeOnly("com.jayway.jsonpath:json-path") + } + } + } +} diff --git a/common/src/main/kotlin/org/orkg/common/PageRequests.kt b/common/pagination/src/main/kotlin/org/orkg/common/PageRequests.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/PageRequests.kt rename to common/pagination/src/main/kotlin/org/orkg/common/PageRequests.kt diff --git a/common/src/test/kotlin/org/orkg/common/PageDocTest.kt b/common/pagination/src/test/kotlin/org/orkg/common/PageDocTest.kt similarity index 100% rename from common/src/test/kotlin/org/orkg/common/PageDocTest.kt rename to common/pagination/src/test/kotlin/org/orkg/common/PageDocTest.kt diff --git a/common/serialization/build.gradle.kts b/common/serialization/build.gradle.kts index b11321217..aab4b4082 100644 --- a/common/serialization/build.gradle.kts +++ b/common/serialization/build.gradle.kts @@ -3,8 +3,8 @@ plugins { } dependencies { - api(project(":common")) - + api(project(":common:identifiers")) + implementation(project(":common:spring-webmvc")) api("com.fasterxml.jackson.core:jackson-core") api("jakarta.validation:jakarta.validation-api") api("org.eclipse.rdf4j:rdf4j-common-io") diff --git a/common/build.gradle.kts b/common/spring-webmvc/build.gradle.kts similarity index 89% rename from common/build.gradle.kts rename to common/spring-webmvc/build.gradle.kts index 2ef601020..8277a4cd1 100644 --- a/common/build.gradle.kts +++ b/common/spring-webmvc/build.gradle.kts @@ -7,6 +7,8 @@ plugins { } dependencies { + api(project(":common:identifiers")) + implementation(project(":common:string-utils")) api("org.neo4j.driver:neo4j-java-driver") api("org.springframework.data:spring-data-commons") api("org.springframework.security:spring-security-core") // for AccessDeniedException, UserDetails @@ -14,7 +16,6 @@ dependencies { api("org.springframework:spring-core") api("org.springframework:spring-web") api("org.springframework:spring-webmvc") - api("org.eclipse.rdf4j:rdf4j-common-io") // for RFC 3987 compliant IRIs implementation("com.fasterxml.jackson.core:jackson-core") implementation("org.apache.tomcat.embed:tomcat-embed-core") // for HttpServletRequest implementation("org.slf4j:jcl-over-slf4j") // for org.apache.commons.logging.LogFactory in ResponseEntityExceptionHandler @@ -26,20 +27,15 @@ testing { suites { val test by getting(JvmTestSuite::class) { dependencies { - implementation(project(":common")) implementation(project(":common:serialization")) - implementation(testFixtures(project(":testing:spring"))) - implementation("io.kotest:kotest-assertions-shared") implementation("org.hamcrest:hamcrest") implementation("org.junit.jupiter:junit-jupiter-api") - implementation("org.junit.jupiter:junit-jupiter-params") implementation("org.springframework.boot:spring-boot-test") implementation("org.springframework.boot:spring-boot-test-autoconfigure") implementation("org.springframework.restdocs:spring-restdocs-core") implementation("org.springframework:spring-test") - implementation("org.assertj:assertj-core") implementation("org.springframework.restdocs:spring-restdocs-mockmvc") runtimeOnly("com.jayway.jsonpath:json-path") compileOnly("eu.michael-simons.neo4j:neo4j-migrations-spring-boot-starter") diff --git a/common/src/main/kotlin/org/orkg/common/MediaTypeCapabilities.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapabilities.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/MediaTypeCapabilities.kt rename to common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapabilities.kt diff --git a/common/src/main/kotlin/org/orkg/common/configuration/WebMvcConfiguration.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapabilitiesResolver.kt similarity index 72% rename from common/src/main/kotlin/org/orkg/common/configuration/WebMvcConfiguration.kt rename to common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapabilitiesResolver.kt index e820ccdb9..d22659a6f 100644 --- a/common/src/main/kotlin/org/orkg/common/configuration/WebMvcConfiguration.kt +++ b/common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapabilitiesResolver.kt @@ -1,13 +1,7 @@ -package org.orkg.common.configuration +package org.orkg.common -import org.orkg.common.MediaTypeCapabilities -import org.orkg.common.MediaTypeCapabilityRegistry -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Import import org.springframework.core.MethodParameter import org.springframework.core.annotation.AnnotatedElementUtils -import org.springframework.data.web.config.EnableSpringDataWebSupport -import org.springframework.data.web.config.EnableSpringDataWebSupport.PageSerializationMode.DIRECT import org.springframework.http.MediaType import org.springframework.util.MimeTypeUtils import org.springframework.web.accept.ContentNegotiationManager @@ -16,21 +10,6 @@ import org.springframework.web.bind.support.WebDataBinderFactory import org.springframework.web.context.request.NativeWebRequest import org.springframework.web.method.support.HandlerMethodArgumentResolver import org.springframework.web.method.support.ModelAndViewContainer -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer - -@Configuration -@EnableSpringDataWebSupport(pageSerializationMode = DIRECT) -class PagedSerializationConfiguration - -@Configuration -@Import(MediaTypeCapabilityRegistry::class) -class WebMvcConfiguration( - private val mediaTypeCapabilityRegistry: MediaTypeCapabilityRegistry, -) : WebMvcConfigurer { - override fun addArgumentResolvers(resolvers: MutableList) { - resolvers.add(MediaTypeCapabilitiesResolver(mediaTypeCapabilityRegistry)) - } -} class MediaTypeCapabilitiesResolver( private val mediaTypeCapabilityRegistry: MediaTypeCapabilityRegistry, @@ -67,8 +46,8 @@ class MediaTypeCapabilitiesResolver( } MimeTypeUtils.sortBySpecificity(mediaTypesToUse) return mediaTypesToUse.firstOrNull { it.isConcrete } - ?.let { MediaTypeCapabilities.parse(it, mediaTypeCapabilityRegistry.getSupportedCapabilities(it)) } - ?: MediaTypeCapabilities.EMPTY + ?.let { MediaTypeCapabilities.Companion.parse(it, mediaTypeCapabilityRegistry.getSupportedCapabilities(it)) } + ?: MediaTypeCapabilities.Companion.EMPTY } private fun getMostSpecificMediaType(acceptType: MediaType, produceType: MediaType): MediaType { diff --git a/common/src/main/kotlin/org/orkg/common/MediaTypeCapability.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapability.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/MediaTypeCapability.kt rename to common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapability.kt diff --git a/common/src/main/kotlin/org/orkg/common/MediaTypeCapabilityRegistry.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapabilityRegistry.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/MediaTypeCapabilityRegistry.kt rename to common/spring-webmvc/src/main/kotlin/org/orkg/common/MediaTypeCapabilityRegistry.kt diff --git a/common/src/main/kotlin/org/orkg/common/Security.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/Security.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/Security.kt rename to common/spring-webmvc/src/main/kotlin/org/orkg/common/Security.kt diff --git a/common/spring-webmvc/src/main/kotlin/org/orkg/common/WebExtensions.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/WebExtensions.kt new file mode 100644 index 000000000..15201beb9 --- /dev/null +++ b/common/spring-webmvc/src/main/kotlin/org/orkg/common/WebExtensions.kt @@ -0,0 +1,27 @@ +package org.orkg.common + +import java.io.IOException +import java.net.http.HttpClient +import java.net.http.HttpRequest +import java.net.http.HttpResponse +import java.time.Duration +import org.orkg.common.exceptions.ServiceUnavailable +import org.springframework.http.CacheControl +import org.springframework.http.HttpStatus +import org.springframework.http.ResponseEntity + +fun T.withCacheControl(duration: Duration): ResponseEntity = + ResponseEntity.ok().cacheControl(CacheControl.maxAge(duration)).body(this) + +fun HttpClient.send(httpRequest: HttpRequest, serviceName: String, successCallback: (String) -> T): T? { + try { + val response = send(httpRequest, HttpResponse.BodyHandlers.ofString()) + return when (response.statusCode()) { + HttpStatus.OK.value() -> successCallback(response.body()) + HttpStatus.NOT_FOUND.value() -> null + else -> throw ServiceUnavailable.create(serviceName, response.statusCode(), response.body()) + } + } catch (e: IOException) { + throw ServiceUnavailable.create(serviceName, e) + } +} diff --git a/common/src/main/kotlin/org/orkg/common/annotations/SpringSecurityAnnotations.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/annotations/SpringSecurityAnnotations.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/annotations/SpringSecurityAnnotations.kt rename to common/spring-webmvc/src/main/kotlin/org/orkg/common/annotations/SpringSecurityAnnotations.kt diff --git a/common/spring-webmvc/src/main/kotlin/org/orkg/common/configuration/PagedSerializationConfiguration.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/configuration/PagedSerializationConfiguration.kt new file mode 100644 index 000000000..1117179db --- /dev/null +++ b/common/spring-webmvc/src/main/kotlin/org/orkg/common/configuration/PagedSerializationConfiguration.kt @@ -0,0 +1,8 @@ +package org.orkg.common.configuration + +import org.springframework.context.annotation.Configuration +import org.springframework.data.web.config.EnableSpringDataWebSupport + +@Configuration +@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.DIRECT) +class PagedSerializationConfiguration diff --git a/common/spring-webmvc/src/main/kotlin/org/orkg/common/configuration/WebMvcConfiguration.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/configuration/WebMvcConfiguration.kt new file mode 100644 index 000000000..520f8cfb5 --- /dev/null +++ b/common/spring-webmvc/src/main/kotlin/org/orkg/common/configuration/WebMvcConfiguration.kt @@ -0,0 +1,18 @@ +package org.orkg.common.configuration + +import org.orkg.common.MediaTypeCapabilitiesResolver +import org.orkg.common.MediaTypeCapabilityRegistry +import org.springframework.context.annotation.Configuration +import org.springframework.context.annotation.Import +import org.springframework.web.method.support.HandlerMethodArgumentResolver +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer + +@Configuration +@Import(MediaTypeCapabilityRegistry::class) +class WebMvcConfiguration( + private val mediaTypeCapabilityRegistry: MediaTypeCapabilityRegistry, +) : WebMvcConfigurer { + override fun addArgumentResolvers(resolvers: MutableList) { + resolvers.add(MediaTypeCapabilitiesResolver(mediaTypeCapabilityRegistry)) + } +} diff --git a/common/src/main/kotlin/org/orkg/common/exceptions/ExceptionHandler.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/exceptions/ExceptionHandler.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/exceptions/ExceptionHandler.kt rename to common/spring-webmvc/src/main/kotlin/org/orkg/common/exceptions/ExceptionHandler.kt diff --git a/common/src/main/kotlin/org/orkg/common/exceptions/Exceptions.kt b/common/spring-webmvc/src/main/kotlin/org/orkg/common/exceptions/Exceptions.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/exceptions/Exceptions.kt rename to common/spring-webmvc/src/main/kotlin/org/orkg/common/exceptions/Exceptions.kt diff --git a/common/src/test/kotlin/org/orkg/common/MediaTypeCapabilitiesTest.kt b/common/spring-webmvc/src/test/kotlin/org/orkg/common/MediaTypeCapabilitiesTest.kt similarity index 100% rename from common/src/test/kotlin/org/orkg/common/MediaTypeCapabilitiesTest.kt rename to common/spring-webmvc/src/test/kotlin/org/orkg/common/MediaTypeCapabilitiesTest.kt diff --git a/common/src/test/kotlin/org/orkg/common/MediaTypeCapabilityRegistryTest.kt b/common/spring-webmvc/src/test/kotlin/org/orkg/common/MediaTypeCapabilityRegistryTest.kt similarity index 100% rename from common/src/test/kotlin/org/orkg/common/MediaTypeCapabilityRegistryTest.kt rename to common/spring-webmvc/src/test/kotlin/org/orkg/common/MediaTypeCapabilityRegistryTest.kt diff --git a/common/src/test/kotlin/org/orkg/common/exceptions/ExceptionHandlerUnitTest.kt b/common/spring-webmvc/src/test/kotlin/org/orkg/common/exceptions/ExceptionHandlerUnitTest.kt similarity index 100% rename from common/src/test/kotlin/org/orkg/common/exceptions/ExceptionHandlerUnitTest.kt rename to common/spring-webmvc/src/test/kotlin/org/orkg/common/exceptions/ExceptionHandlerUnitTest.kt diff --git a/common/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/Constants.kt b/common/spring-webmvc/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/Constants.kt similarity index 100% rename from common/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/Constants.kt rename to common/spring-webmvc/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/Constants.kt diff --git a/common/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/TestBodyPublisher.kt b/common/spring-webmvc/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/TestBodyPublisher.kt similarity index 100% rename from common/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/TestBodyPublisher.kt rename to common/spring-webmvc/src/testFixtures/kotlin/org/orkg/common/testing/fixtures/TestBodyPublisher.kt diff --git a/common/src/test/kotlin/org/orkg/common/TimeEqualsContractTest.kt b/common/src/test/kotlin/org/orkg/common/TimeEqualsContractTest.kt deleted file mode 100644 index d25a4472a..000000000 --- a/common/src/test/kotlin/org/orkg/common/TimeEqualsContractTest.kt +++ /dev/null @@ -1,27 +0,0 @@ -package org.orkg.common - -import java.time.OffsetDateTime -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Test - -/** - * This class is a demonstrator / reminder on comparing date and time classes. - * - * The example values were taken from a failing pipeline test. - * Postgres only stores date and time values (even with offset) in UTC, so a query will always return UTC values. - * The values are correct, but connect be compared directly to the original value using equals(). - */ -internal class TimeEqualsContractTest { - private val withOffset = OffsetDateTime.parse("2023-11-30T09:25:14.049+01:00") - private val withZulu = OffsetDateTime.parse("2023-11-30T08:25:14.049Z") - - @Test - fun shouldNotBeEqualWhenComparedWithEquals() { - assertThat(withOffset == withZulu).isFalse() - } - - @Test - fun shouldBeEqualWhenComparedWithIsEqual() { - assertThat(withOffset.isEqual(withZulu)).isTrue() - } -} diff --git a/common/string-utils/build.gradle.kts b/common/string-utils/build.gradle.kts new file mode 100644 index 000000000..7c568d886 --- /dev/null +++ b/common/string-utils/build.gradle.kts @@ -0,0 +1,17 @@ +// JVM Test Suite is still incubating, but expected to be stable soon, so disabling the warning. +@file:Suppress("UnstableApiUsage") + +plugins { + id("org.orkg.gradle.kotlin-library") +} + +testing { + suites { + val test by getting(JvmTestSuite::class) { + dependencies { + implementation("org.junit.jupiter:junit-jupiter-api") + implementation("org.assertj:assertj-core") + } + } + } +} diff --git a/common/string-utils/src/main/kotlin/org/orkg/common/StringExtensions.kt b/common/string-utils/src/main/kotlin/org/orkg/common/StringExtensions.kt new file mode 100644 index 000000000..8fa48c14d --- /dev/null +++ b/common/string-utils/src/main/kotlin/org/orkg/common/StringExtensions.kt @@ -0,0 +1,30 @@ +package org.orkg.common + +import java.math.BigInteger +import java.security.MessageDigest + +fun String.toSnakeCase(): String = + if (this.isEmpty()) this else StringBuilder().also { + this.forEach { c -> + when (c) { + in 'A'..'Z' -> { + it.append("_") + it.append(c.lowercase()) + } + + else -> { + it.append(c) + } + } + } + }.toString() + +/** + * Calculate the MD5 of a string. + * + * @return The MD5 in hexadecimal, zero-prefixed to 32 characters. + */ +val String.md5: String + get() = BigInteger(1, MessageDigest.getInstance("MD5").digest(this.toByteArray())) + .toString(16) + .padStart(32, '0') diff --git a/common/src/main/kotlin/org/orkg/common/StringReader.kt b/common/string-utils/src/main/kotlin/org/orkg/common/StringReader.kt similarity index 100% rename from common/src/main/kotlin/org/orkg/common/StringReader.kt rename to common/string-utils/src/main/kotlin/org/orkg/common/StringReader.kt diff --git a/common/src/test/kotlin/org/orkg/common/MD5Test.kt b/common/string-utils/src/test/kotlin/org/orkg/common/MD5Test.kt similarity index 100% rename from common/src/test/kotlin/org/orkg/common/MD5Test.kt rename to common/string-utils/src/test/kotlin/org/orkg/common/MD5Test.kt diff --git a/community/community-adapter-input-keycloak/build.gradle.kts b/community/community-adapter-input-keycloak/build.gradle.kts index f35993fcc..0a955261d 100644 --- a/community/community-adapter-input-keycloak/build.gradle.kts +++ b/community/community-adapter-input-keycloak/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { api("com.fasterxml.jackson.core:jackson-databind") api("org.keycloak:keycloak-admin-client") api(project(":community:community-ports-output")) - implementation(project(":common")) + implementation(project(":common:identifiers")) implementation(project(":community:community-core-model")) implementation("org.springframework:spring-web") implementation("com.fasterxml.jackson.core:jackson-core") diff --git a/community/community-adapter-input-rest-spring-mvc-legacy/build.gradle.kts b/community/community-adapter-input-rest-spring-mvc-legacy/build.gradle.kts index 7a96fbfe9..6950a7093 100644 --- a/community/community-adapter-input-rest-spring-mvc-legacy/build.gradle.kts +++ b/community/community-adapter-input-rest-spring-mvc-legacy/build.gradle.kts @@ -1,6 +1,3 @@ -// JVM Test Suite is still incubating, but expected to be stable soon, so disabling the warning. -@file:Suppress("UnstableApiUsage") - plugins { id("org.orkg.gradle.input-adapter-spring-web") id("org.orkg.gradle.kotlin-library") @@ -10,7 +7,8 @@ dependencies { api("com.fasterxml.jackson.core:jackson-annotations") api("org.springframework:spring-web") api("jakarta.validation:jakarta.validation-api") - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) api(project(":community:community-core-model")) api(project(":community:community-ports-input-legacy")) } diff --git a/community/community-adapter-input-rest-spring-mvc/build.gradle.kts b/community/community-adapter-input-rest-spring-mvc/build.gradle.kts index 42408a6b5..4ca34e276 100644 --- a/community/community-adapter-input-rest-spring-mvc/build.gradle.kts +++ b/community/community-adapter-input-rest-spring-mvc/build.gradle.kts @@ -49,7 +49,8 @@ dependencies { api("org.springframework:spring-web") api("jakarta.validation:jakarta.validation-api") api("com.fasterxml.jackson.core:jackson-databind") - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) api(project(":community:community-core-model")) api(project(":community:community-ports-input")) api(project(":community:community-ports-output")) // uses repository directly diff --git a/community/community-adapter-output-spring-data-jpa/build.gradle.kts b/community/community-adapter-output-spring-data-jpa/build.gradle.kts index 0fcfb25dc..312400c67 100644 --- a/community/community-adapter-output-spring-data-jpa/build.gradle.kts +++ b/community/community-adapter-output-spring-data-jpa/build.gradle.kts @@ -13,7 +13,8 @@ dependencies { api("org.springframework.data:spring-data-jpa") api("org.springframework:spring-context") api("org.springframework:spring-tx") - api(project(":common")) + implementation(project(":common:string-utils")) + api(project(":common:identifiers")) api(project(":community:community-core-model")) api(project(":community:community-ports-output")) api(project(":eventbus")) diff --git a/community/community-core-model/build.gradle.kts b/community/community-core-model/build.gradle.kts index 523dc69e7..c84b03740 100644 --- a/community/community-core-model/build.gradle.kts +++ b/community/community-core-model/build.gradle.kts @@ -8,12 +8,15 @@ plugins { dependencies { api("com.fasterxml.jackson.core:jackson-annotations") api("org.springframework:spring-web") - api(project(":common")) + implementation(project(":common:datatypes")) + implementation(project(":common:string-utils")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) api(project(":media-storage:media-storage-core-model")) implementation(project(":graph:graph-core-model")) runtimeOnly("com.fasterxml.jackson.core:jackson-databind") - testFixturesApi(project(":common")) + testFixturesApi(project(":common:identifiers")) testFixturesApi(project(":media-storage:media-storage-core-model")) testFixturesImplementation(project(":graph:graph-core-model")) testFixturesImplementation(testFixtures(project(":testing:spring"))) diff --git a/community/community-core-services-legacy/build.gradle.kts b/community/community-core-services-legacy/build.gradle.kts index aef3729a9..46dc7703c 100644 --- a/community/community-core-services-legacy/build.gradle.kts +++ b/community/community-core-services-legacy/build.gradle.kts @@ -4,7 +4,7 @@ plugins { dependencies { api("org.springframework:spring-context") - api(project(":common")) + api(project(":common:identifiers")) api(project(":community:community-core-model")) api(project(":community:community-ports-input")) api(project(":community:community-ports-input-legacy")) diff --git a/community/community-core-services/build.gradle.kts b/community/community-core-services/build.gradle.kts index f45306680..6fc4dc2fc 100644 --- a/community/community-core-services/build.gradle.kts +++ b/community/community-core-services/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework:spring-context") api("org.springframework:spring-tx") - api(project(":common")) + api(project(":common:identifiers")) api(project(":community:community-core-model")) api(project(":community:community-ports-input")) api(project(":community:community-ports-output")) @@ -25,6 +25,7 @@ testing { suites { val test by getting(JvmTestSuite::class) { dependencies { + implementation(project(":common:pagination")) implementation(testFixtures(project(":graph:graph-core-model"))) implementation(testFixtures(project(":community:community-core-model"))) implementation(testFixtures(project(":media-storage:media-storage-core-model"))) diff --git a/community/community-ports-input-legacy/build.gradle.kts b/community/community-ports-input-legacy/build.gradle.kts index a01355f67..98a19f2f1 100644 --- a/community/community-ports-input-legacy/build.gradle.kts +++ b/community/community-ports-input-legacy/build.gradle.kts @@ -3,6 +3,6 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:identifiers")) api(project(":community:community-core-model")) } diff --git a/community/community-ports-input/build.gradle.kts b/community/community-ports-input/build.gradle.kts index 24f0c80a0..757458213 100644 --- a/community/community-ports-input/build.gradle.kts +++ b/community/community-ports-input/build.gradle.kts @@ -8,7 +8,7 @@ plugins { dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework:spring-core") - api(project(":common")) + api(project(":common:identifiers")) api(project(":community:community-core-model")) api(project(":media-storage:media-storage-core-model")) implementation(project(":graph:graph-core-model")) diff --git a/community/community-ports-output/build.gradle.kts b/community/community-ports-output/build.gradle.kts index 61181b744..721186678 100644 --- a/community/community-ports-output/build.gradle.kts +++ b/community/community-ports-output/build.gradle.kts @@ -7,7 +7,7 @@ plugins { dependencies { api("org.springframework.data:spring-data-commons") - api(project(":common")) + api(project(":common:identifiers")) api(project(":community:community-core-model")) testFixturesApi("org.junit.jupiter:junit-jupiter-api") testFixturesApi(project(":community:community-ports-output")) @@ -17,7 +17,7 @@ dependencies { testFixturesImplementation("org.springframework.data:spring-data-commons") testFixturesImplementation("io.kotest:kotest-assertions-core") testFixturesImplementation("io.kotest:kotest-runner-junit5") - testFixturesImplementation(project(":common")) + testFixturesImplementation(project(":common:identifiers")) testFixturesImplementation(project(":community:community-core-model")) testFixturesImplementation(project(":media-storage:media-storage-core-model")) testFixturesImplementation(testFixtures(project(":community:community-core-model"))) diff --git a/content-types/content-types-adapter-input-rest-spring-mvc/build.gradle.kts b/content-types/content-types-adapter-input-rest-spring-mvc/build.gradle.kts index 0d9c60441..229f74930 100644 --- a/content-types/content-types-adapter-input-rest-spring-mvc/build.gradle.kts +++ b/content-types/content-types-adapter-input-rest-spring-mvc/build.gradle.kts @@ -17,7 +17,8 @@ dependencies { api("org.springframework:spring-web") api("com.fasterxml.jackson.core:jackson-databind") api("jakarta.validation:jakarta.validation-api") - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) api(project(":community:community-core-model")) api(project(":community:community-ports-input")) api(project(":content-types:content-types-core-model")) @@ -31,8 +32,10 @@ dependencies { implementation("org.slf4j:slf4j-api") implementation("dev.forkhandles:values4k") implementation(project(":common:serialization")) - - testFixturesImplementation(project(":common")) + api(project(":common:datatypes")) + implementation(project(":common:functional")) + testFixturesImplementation(project(":common:datatypes")) + testFixturesImplementation(project(":common:identifiers")) testFixturesImplementation(project(":graph:graph-core-model")) } diff --git a/content-types/content-types-adapter-output-simcomp/build.gradle.kts b/content-types/content-types-adapter-output-simcomp/build.gradle.kts index 77df27fd9..1b5fc9c3a 100644 --- a/content-types/content-types-adapter-output-simcomp/build.gradle.kts +++ b/content-types/content-types-adapter-output-simcomp/build.gradle.kts @@ -13,7 +13,9 @@ dependencies { api("org.springframework:spring-beans") api("org.springframework:spring-context") api("com.fasterxml.jackson.core:jackson-databind") - api(project(":common")) + api(project(":common:identifiers")) + implementation(project(":common:datatypes")) + api(project(":common:spring-webmvc")) api(project(":content-types:content-types-core-model")) api(project(":content-types:content-types-ports-output")) api(project(":graph:graph-adapter-input-rest-spring-mvc")) @@ -22,7 +24,7 @@ dependencies { api(project(":feature-flags:feature-flags-ports")) implementation("org.eclipse.rdf4j:rdf4j-common-io") implementation("org.springframework:spring-web") - testFixturesApi(project(":common")) + testFixturesApi(project(":common:identifiers")) testFixturesApi("com.fasterxml.jackson.core:jackson-databind") testFixturesApi("org.springframework:spring-context") } @@ -44,7 +46,7 @@ testing { implementation("io.kotest:kotest-assertions-core") implementation(project(":common:serialization")) implementation(project(":content-types:content-types-adapter-output-simcomp")) - implementation(testFixtures(project(":common"))) + implementation(testFixtures(project(":common:spring-webmvc"))) implementation(testFixtures(project(":content-types:content-types-core-model"))) implementation(testFixtures(project(":graph:graph-core-model"))) } diff --git a/content-types/content-types-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts b/content-types/content-types-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts index 17e924031..5e342a2a5 100644 --- a/content-types/content-types-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts +++ b/content-types/content-types-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework.data:spring-data-neo4j") api("org.springframework:spring-context") - api(project(":common")) + api(project(":common:identifiers")) api(project(":content-types:content-types-core-model")) api(project(":content-types:content-types-ports-output")) api(project(":graph:graph-adapter-output-spring-data-neo4j-sdn6")) diff --git a/content-types/content-types-adapter-output-web/build.gradle.kts b/content-types/content-types-adapter-output-web/build.gradle.kts index 5ef074b2a..511b2199b 100644 --- a/content-types/content-types-adapter-output-web/build.gradle.kts +++ b/content-types/content-types-adapter-output-web/build.gradle.kts @@ -13,7 +13,7 @@ dependencies { api(project(":content-types:content-types-ports-output")) implementation("org.springframework:spring-web") implementation("dev.forkhandles:values4k") - implementation(project(":common")) + implementation(project(":common:spring-webmvc")) } testing { @@ -30,7 +30,7 @@ testing { implementation("org.junit.jupiter:junit-jupiter-api") implementation("io.kotest:kotest-assertions-core") implementation("io.kotest:kotest-runner-junit5") - implementation(testFixtures(project(":common"))) + implementation(testFixtures(project(":common:spring-webmvc"))) implementation(testFixtures(project(":content-types:content-types-ports-output"))) } } diff --git a/content-types/content-types-core-model/build.gradle.kts b/content-types/content-types-core-model/build.gradle.kts index c2d10e07b..2f1b9dd5f 100644 --- a/content-types/content-types-core-model/build.gradle.kts +++ b/content-types/content-types-core-model/build.gradle.kts @@ -14,11 +14,14 @@ dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework:spring-context") api("dev.forkhandles:values4k") - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:datatypes")) + api(project(":common:spring-webmvc")) api(project(":graph:graph-core-model")) api("org.springframework:spring-web") - testFixturesApi(project(":common")) + testFixturesApi(project(":common:identifiers")) + testFixturesImplementation(project(":common:datatypes")) testFixturesApi(project(":graph:graph-core-model")) testFixturesApi("dev.forkhandles:fabrikate4k") testFixturesImplementation("org.eclipse.rdf4j:rdf4j-common-io") diff --git a/content-types/content-types-core-services/build.gradle.kts b/content-types/content-types-core-services/build.gradle.kts index 11b2211ef..5d956539b 100644 --- a/content-types/content-types-core-services/build.gradle.kts +++ b/content-types/content-types-core-services/build.gradle.kts @@ -10,7 +10,10 @@ dependencies { api("org.springframework:spring-context") api("org.springframework:spring-tx") api("org.jbibtex:jbibtex") - api(project(":common")) + api(project(":common:functional")) + implementation(project(":common:pagination")) + implementation(project(":common:datatypes")) + api(project(":common:identifiers")) api(project(":community:community-core-model")) api(project(":community:community-ports-input")) // used in LegacyPaperService api(project(":community:community-ports-output")) diff --git a/content-types/content-types-ports-input/build.gradle.kts b/content-types/content-types-ports-input/build.gradle.kts index e21ecae18..4b74ead26 100644 --- a/content-types/content-types-ports-input/build.gradle.kts +++ b/content-types/content-types-ports-input/build.gradle.kts @@ -5,13 +5,15 @@ plugins { dependencies { api("org.eclipse.rdf4j:rdf4j-common-io") api("org.springframework.data:spring-data-commons") - api(project(":common")) + api(project(":common:functional")) + api(project(":common:identifiers")) + api(project(":common:datatypes")) api(project(":community:community-core-model")) api(project(":content-types:content-types-core-model")) api(project(":graph:graph-core-model")) api(project(":graph:graph-ports-input")) - testFixturesApi(project(":common")) + testFixturesApi(project(":common:identifiers")) testFixturesApi(project(":content-types:content-types-core-model")) testFixturesApi(project(":content-types:content-types-ports-input")) testFixturesImplementation("dev.forkhandles:values4k") diff --git a/content-types/content-types-ports-output/build.gradle.kts b/content-types/content-types-ports-output/build.gradle.kts index cf17db45d..411a310d1 100644 --- a/content-types/content-types-ports-output/build.gradle.kts +++ b/content-types/content-types-ports-output/build.gradle.kts @@ -4,7 +4,7 @@ plugins { dependencies { api("org.springframework.data:spring-data-commons") - api(project(":common")) + api(project(":common:identifiers")) api(project(":content-types:content-types-core-model")) api(project(":graph:graph-core-model")) @@ -17,7 +17,8 @@ dependencies { testFixturesImplementation("dev.forkhandles:fabrikate4k") testFixturesImplementation("io.kotest:kotest-assertions-core") testFixturesImplementation("io.kotest:kotest-runner-junit5") - testFixturesImplementation(project(":common")) + testFixturesImplementation(project(":common:pagination")) + testFixturesImplementation(project(":common:identifiers")) testFixturesImplementation(project(":content-types:content-types-core-model")) testFixturesImplementation(project(":graph:graph-core-model")) testFixturesImplementation(testFixtures(project(":content-types:content-types-core-model"))) diff --git a/curation/curation-adapter-input-rest-spring-mvc/build.gradle.kts b/curation/curation-adapter-input-rest-spring-mvc/build.gradle.kts index 793bd1227..24fea2d2d 100644 --- a/curation/curation-adapter-input-rest-spring-mvc/build.gradle.kts +++ b/curation/curation-adapter-input-rest-spring-mvc/build.gradle.kts @@ -16,7 +16,8 @@ testing { implementation("org.springframework.boot:spring-boot-test-autoconfigure") implementation("org.springframework:spring-test") implementation("com.ninja-squad:springmockk") - implementation(project(":common")) + implementation(project(":common:identifiers")) + implementation(project(":common:spring-webmvc")) implementation(project(":common:serialization")) implementation(testFixtures(project(":graph:graph-core-model"))) implementation(testFixtures(project(":testing:spring"))) diff --git a/curation/curation-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts b/curation/curation-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts index cceb7d452..024a1a2f2 100644 --- a/curation/curation-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts +++ b/curation/curation-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework.data:spring-data-neo4j") api("org.springframework:spring-context") - api(project(":common")) + api(project(":common:identifiers")) api(project(":curation:curation-ports-output")) api(project(":graph:graph-adapter-output-spring-data-neo4j-sdn6")) api(project(":graph:graph-core-model")) diff --git a/curation/curation-ports-output/build.gradle.kts b/curation/curation-ports-output/build.gradle.kts index 19f4f1cda..792460eaf 100644 --- a/curation/curation-ports-output/build.gradle.kts +++ b/curation/curation-ports-output/build.gradle.kts @@ -15,7 +15,7 @@ dependencies { testFixturesImplementation("dev.forkhandles:fabrikate4k") testFixturesImplementation("io.kotest:kotest-runner-junit5") testFixturesImplementation("io.kotest:kotest-assertions-core") - testFixturesImplementation(project(":common")) + testFixturesImplementation(project(":common:identifiers")) testFixturesImplementation(project(":graph:graph-core-model")) testFixturesImplementation(testFixtures(project(":graph:graph-core-model"))) } diff --git a/data-export/data-export-adapters/build.gradle.kts b/data-export/data-export-adapters/build.gradle.kts index f3886b2d3..cd98d8320 100644 --- a/data-export/data-export-adapters/build.gradle.kts +++ b/data-export/data-export-adapters/build.gradle.kts @@ -33,7 +33,8 @@ dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework:spring-context") api("org.springframework:spring-web") - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) api(project(":data-export:data-export-ports-input")) api(project(":feature-flags:feature-flags-ports")) api(project(":graph:graph-adapter-input-rest-spring-mvc")) // for representation adapters, TODO: break dependency diff --git a/data-export/data-export-core/build.gradle.kts b/data-export/data-export-core/build.gradle.kts index 6cf889997..8af7f0881 100644 --- a/data-export/data-export-core/build.gradle.kts +++ b/data-export/data-export-core/build.gradle.kts @@ -9,7 +9,8 @@ dependencies { api("org.springframework:spring-beans") api("org.springframework:spring-context") api("com.fasterxml.jackson.core:jackson-databind") - api(project(":common")) + implementation(project(":common:pagination")) + api(project(":common:identifiers")) api(project(":content-types:content-types-ports-input")) api(project(":content-types:content-types-ports-output")) api(project(":data-export:data-export-ports-input")) diff --git a/data-export/data-export-ports-input/build.gradle.kts b/data-export/data-export-ports-input/build.gradle.kts index aa934de8e..65f577f81 100644 --- a/data-export/data-export-ports-input/build.gradle.kts +++ b/data-export/data-export-ports-input/build.gradle.kts @@ -4,5 +4,5 @@ plugins { dependencies { api("org.eclipse.rdf4j:rdf4j-model-api") - api(project(":common")) + api(project(":common:identifiers")) } diff --git a/discussions/discussions-adapter-input-rest-spring-mvc/build.gradle.kts b/discussions/discussions-adapter-input-rest-spring-mvc/build.gradle.kts index 2157e40aa..90c4e6031 100644 --- a/discussions/discussions-adapter-input-rest-spring-mvc/build.gradle.kts +++ b/discussions/discussions-adapter-input-rest-spring-mvc/build.gradle.kts @@ -38,7 +38,8 @@ dependencies { api("org.springframework:spring-context") api("org.springframework:spring-web") api("com.fasterxml.jackson.core:jackson-databind") - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) api(project(":discussions:discussions-core-model")) api(project(":discussions:discussions-ports-input")) } diff --git a/discussions/discussions-adapter-output-spring-data-jpa/build.gradle.kts b/discussions/discussions-adapter-output-spring-data-jpa/build.gradle.kts index 3d27e64a5..237efdcf7 100644 --- a/discussions/discussions-adapter-output-spring-data-jpa/build.gradle.kts +++ b/discussions/discussions-adapter-output-spring-data-jpa/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework.data:spring-data-jpa") api("org.springframework:spring-context") - api(project(":common")) + api(project(":common:identifiers")) api(project(":discussions:discussions-core-model")) api(project(":discussions:discussions-ports-output")) implementation("jakarta.validation:jakarta.validation-api") diff --git a/discussions/discussions-core-model/build.gradle.kts b/discussions/discussions-core-model/build.gradle.kts index 802f0a267..11dffed28 100644 --- a/discussions/discussions-core-model/build.gradle.kts +++ b/discussions/discussions-core-model/build.gradle.kts @@ -3,6 +3,7 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) implementation("org.springframework:spring-web") } diff --git a/discussions/discussions-core-services/build.gradle.kts b/discussions/discussions-core-services/build.gradle.kts index 6c769f24e..edd739dff 100644 --- a/discussions/discussions-core-services/build.gradle.kts +++ b/discussions/discussions-core-services/build.gradle.kts @@ -5,7 +5,7 @@ plugins { dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework:spring-context") - api(project(":common")) + api(project(":common:identifiers")) api(project(":community:community-ports-output")) api(project(":discussions:discussions-core-model")) api(project(":discussions:discussions-ports-input")) diff --git a/discussions/discussions-ports-input/build.gradle.kts b/discussions/discussions-ports-input/build.gradle.kts index 72b0a0d38..47eac5ed1 100644 --- a/discussions/discussions-ports-input/build.gradle.kts +++ b/discussions/discussions-ports-input/build.gradle.kts @@ -4,6 +4,6 @@ plugins { dependencies { api("org.springframework.data:spring-data-commons") - api(project(":common")) + api(project(":common:identifiers")) api(project(":discussions:discussions-core-model")) } diff --git a/discussions/discussions-ports-output/build.gradle.kts b/discussions/discussions-ports-output/build.gradle.kts index 455e1cf5e..44c1b4edb 100644 --- a/discussions/discussions-ports-output/build.gradle.kts +++ b/discussions/discussions-ports-output/build.gradle.kts @@ -5,11 +5,11 @@ plugins { dependencies { api("org.springframework.data:spring-data-commons") - api(project(":common")) + api(project(":common:identifiers")) api(project(":discussions:discussions-core-model")) testFixturesApi("io.kotest:kotest-runner-junit5") - testFixturesImplementation(project(":common")) + testFixturesImplementation(project(":common:identifiers")) testFixturesImplementation(project(":discussions:discussions-core-model")) testFixturesImplementation("org.springframework.data:spring-data-commons") testFixturesApi("org.junit.jupiter:junit-jupiter-api") diff --git a/documentation/antora/modules/ROOT/pages/reference.adoc b/documentation/antora/modules/ROOT/pages/reference.adoc index df44e2438..d8e9dd353 100644 --- a/documentation/antora/modules/ROOT/pages/reference.adoc +++ b/documentation/antora/modules/ROOT/pages/reference.adoc @@ -6,6 +6,7 @@ * xref:reference/development/code-organization.adoc[] * xref:reference/development/testing.adoc[] * xref:reference/development/monitoring.adoc[] +* xref:reference/development/pitfalls.adoc[] == Model diff --git a/documentation/antora/modules/ROOT/pages/reference/development/pitfalls.adoc b/documentation/antora/modules/ROOT/pages/reference/development/pitfalls.adoc new file mode 100644 index 000000000..6925ef945 --- /dev/null +++ b/documentation/antora/modules/ROOT/pages/reference/development/pitfalls.adoc @@ -0,0 +1,24 @@ += Pitfalls + +This section covers pitfalls that developers might fall into when starting to work on the codebase. + +== Comparing `OffsetDateTime` + +When comparing timestamps, care needs to be taken, especially with timestamps that contain an offset. +Two timestamps representing the same instant can be expressed in a way where they differ in their representations, so calling `equals()` will produce `false`. +In certain cases, we would like to know if the timestamps represents the same instant, so `isEqual()` needs to be used. + +This is illustrated in the example below: + +[source,kotlin] +---- +// These two timestamps refer to the same instant +val withOffset = OffsetDateTime.parse("2023-11-30T09:25:14.049+01:00") +val withZulu = OffsetDateTime.parse("2023-11-30T08:25:14.049Z") + +// The two timestamps are not equal by equals(): +require(withOffset != withZulu) + +// They are equal by isEquals(), because it compares the instants +require(withOffset.isEqual(withZulu)) +---- diff --git a/documentation/build.gradle.kts b/documentation/build.gradle.kts index eeae0b6be..dbd9c3489 100644 --- a/documentation/build.gradle.kts +++ b/documentation/build.gradle.kts @@ -16,7 +16,8 @@ val restdocs: Configuration by configurations.creating { dependencies { asciidoctor("org.springframework.restdocs:spring-restdocs-asciidoctor:2.0.7.RELEASE") - restdocs(project(withSnippets(":common"))) + restdocs(project(withSnippets(":common:pagination"))) + restdocs(project(withSnippets(":common:spring-webmvc"))) restdocs(project(withSnippets(":rest-api-server"))) restdocs(project(withSnippets(":graph:graph-adapter-input-rest-spring-mvc"))) restdocs(project(withSnippets(":data-export:data-export-adapters"))) diff --git a/graph/graph-adapter-input-rest-spring-mvc/build.gradle.kts b/graph/graph-adapter-input-rest-spring-mvc/build.gradle.kts index 8364795d1..26bb45f93 100644 --- a/graph/graph-adapter-input-rest-spring-mvc/build.gradle.kts +++ b/graph/graph-adapter-input-rest-spring-mvc/build.gradle.kts @@ -16,7 +16,9 @@ dependencies { api("org.springframework:spring-web") api("com.fasterxml.jackson.core:jackson-databind") api("jakarta.validation:jakarta.validation-api") - api(project(":common")) + implementation(project(":common:pagination")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) api(project(":community:community-ports-input")) api(project(":content-types:content-types-core-model")) api(project(":feature-flags:feature-flags-ports")) diff --git a/graph/graph-adapter-output-in-memory/build.gradle.kts b/graph/graph-adapter-output-in-memory/build.gradle.kts index 17053c674..68f6d1ba0 100644 --- a/graph/graph-adapter-output-in-memory/build.gradle.kts +++ b/graph/graph-adapter-output-in-memory/build.gradle.kts @@ -8,10 +8,11 @@ plugins { dependencies { api("org.springframework.data:spring-data-commons") - api(project(":common")) + api(project(":common:identifiers")) api(project(":graph:graph-core-model")) api(project(":graph:graph-ports-output")) implementation("org.eclipse.rdf4j:rdf4j-common-io") + implementation(project(":common:spring-webmvc")) } testing { diff --git a/graph/graph-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts b/graph/graph-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts index 89145b4b8..0e5256c27 100644 --- a/graph/graph-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts +++ b/graph/graph-adapter-output-spring-data-neo4j-sdn6/build.gradle.kts @@ -8,9 +8,12 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:identifiers")) api(project(":graph:graph-core-model")) api(project(":graph:graph-ports-output")) + implementation(project(":common:datatypes")) + implementation(project(":common:spring-webmvc")) + implementation(project(":common:string-utils")) api("org.neo4j.driver:neo4j-java-driver") api("org.neo4j:neo4j-cypher-dsl") @@ -25,7 +28,7 @@ dependencies { implementation(project(":common:neo4j-dsl")) implementation("org.apache.lucene:lucene-queryparser") - testFixturesApi(project(":common")) + testFixturesApi(project(":common:identifiers")) testApi("io.kotest:kotest-framework-api") } diff --git a/graph/graph-adapter-output-web/build.gradle.kts b/graph/graph-adapter-output-web/build.gradle.kts index 2c17cca30..870875002 100644 --- a/graph/graph-adapter-output-web/build.gradle.kts +++ b/graph/graph-adapter-output-web/build.gradle.kts @@ -15,7 +15,7 @@ dependencies { api(project(":graph:graph-core-model")) implementation("org.springframework:spring-web") implementation("org.springframework.data:spring-data-commons") - implementation(project(":common")) + implementation(project(":common:spring-webmvc")) runtimeOnly("com.fasterxml.jackson.core:jackson-core") } diff --git a/graph/graph-core-model/build.gradle.kts b/graph/graph-core-model/build.gradle.kts index 47e5ef329..434d1e113 100644 --- a/graph/graph-core-model/build.gradle.kts +++ b/graph/graph-core-model/build.gradle.kts @@ -8,12 +8,15 @@ dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework:spring-web") api("dev.forkhandles:values4k") - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) + implementation(project(":common:datatypes")) + implementation(project(":common:string-utils")) testFixturesApi("org.eclipse.rdf4j:rdf4j-common-io") testFixturesApi("org.springframework.restdocs:spring-restdocs-core") testFixturesApi("dev.forkhandles:fabrikate4k") - testFixturesApi(project(":common")) + testFixturesApi(project(":common:identifiers")) testFixturesImplementation(testFixtures(project(":testing:spring"))) testFixturesRuntimeOnly("org.springframework:spring-core") } diff --git a/graph/graph-core-services/build.gradle.kts b/graph/graph-core-services/build.gradle.kts index 4bf303d52..8c38a1886 100644 --- a/graph/graph-core-services/build.gradle.kts +++ b/graph/graph-core-services/build.gradle.kts @@ -6,12 +6,14 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:identifiers")) api(project(":community:community-ports-input")) api(project(":community:community-ports-output")) api(project(":graph:graph-core-model")) api(project(":graph:graph-ports-input")) api(project(":graph:graph-ports-output")) + implementation(project(":common:pagination")) + implementation(project(":common:datatypes")) api("org.eclipse.rdf4j:rdf4j-common-io") api("org.springframework.data:spring-data-commons") diff --git a/graph/graph-ports-input/build.gradle.kts b/graph/graph-ports-input/build.gradle.kts index a91e864a8..5d5a2d5fb 100644 --- a/graph/graph-ports-input/build.gradle.kts +++ b/graph/graph-ports-input/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:identifiers")) api(project(":graph:graph-core-model")) api("org.eclipse.rdf4j:rdf4j-common-io") diff --git a/graph/graph-ports-output/build.gradle.kts b/graph/graph-ports-output/build.gradle.kts index 363e59ec3..2f5df2138 100644 --- a/graph/graph-ports-output/build.gradle.kts +++ b/graph/graph-ports-output/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:identifiers")) api(project(":content-types:content-types-core-model")) api(project(":graph:graph-core-model")) @@ -18,7 +18,7 @@ dependencies { testFixturesImplementation("org.springframework.data:spring-data-commons") testFixturesImplementation("dev.forkhandles:fabrikate4k") testFixturesImplementation("io.kotest:kotest-assertions-core") - testFixturesImplementation(project(":common")) + testFixturesImplementation(project(":common:identifiers")) testFixturesImplementation(project(":graph:graph-core-model")) testFixturesImplementation(testFixtures(project(":graph:graph-core-model"))) testFixturesImplementation(testFixtures(project(":testing:spring"))) // for fixedClock diff --git a/identity-management/idm-adapter-input-rest-spring-security-legacy/build.gradle.kts b/identity-management/idm-adapter-input-rest-spring-security-legacy/build.gradle.kts index cea1abc38..88937dee3 100644 --- a/identity-management/idm-adapter-input-rest-spring-security-legacy/build.gradle.kts +++ b/identity-management/idm-adapter-input-rest-spring-security-legacy/build.gradle.kts @@ -9,7 +9,7 @@ testing { suites { val test by getting(JvmTestSuite::class) { dependencies { - implementation(testFixtures(project(":common"))) + implementation(testFixtures(project(":common:spring-webmvc"))) implementation(testFixtures(project(":testing:spring"))) runtimeOnly("org.springframework.boot:spring-boot-starter-test") implementation("io.kotest:kotest-assertions-api") @@ -35,7 +35,8 @@ dependencies { api("org.springframework:spring-beans") api("org.springframework:spring-web") api("com.fasterxml.jackson.core:jackson-databind") - api(project(":common")) // for exceptions + api(project(":common:identifiers")) + implementation(project(":common:spring-webmvc")) api(project(":community:community-core-model")) api(project(":community:community-ports-output")) implementation("org.springframework.security:spring-security-core") diff --git a/licenses/licenses-adapter-input-rest-spring-mvc/build.gradle.kts b/licenses/licenses-adapter-input-rest-spring-mvc/build.gradle.kts index 85c296e9a..79b5bfcac 100644 --- a/licenses/licenses-adapter-input-rest-spring-mvc/build.gradle.kts +++ b/licenses/licenses-adapter-input-rest-spring-mvc/build.gradle.kts @@ -16,7 +16,7 @@ testing { implementation("org.springframework:spring-test") implementation("com.ninja-squad:springmockk") implementation("org.springframework.restdocs:spring-restdocs-mockmvc") - implementation(project(":common")) + implementation(project(":common:spring-webmvc")) implementation(testFixtures(project(":testing:spring"))) } } diff --git a/licenses/licenses-core-model/build.gradle.kts b/licenses/licenses-core-model/build.gradle.kts index 802f0a267..1f618f098 100644 --- a/licenses/licenses-core-model/build.gradle.kts +++ b/licenses/licenses-core-model/build.gradle.kts @@ -3,6 +3,6 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:spring-webmvc")) implementation("org.springframework:spring-web") } diff --git a/media-storage/media-storage-adapter-input-serialization/build.gradle.kts b/media-storage/media-storage-adapter-input-serialization/build.gradle.kts index 45c30ef19..5f7077dbc 100644 --- a/media-storage/media-storage-adapter-input-serialization/build.gradle.kts +++ b/media-storage/media-storage-adapter-input-serialization/build.gradle.kts @@ -7,5 +7,5 @@ dependencies { api("org.springframework:spring-context") api("com.fasterxml.jackson.core:jackson-databind") api(project(":media-storage:media-storage-core-model")) - implementation(project(":common")) // for exception + implementation(project(":common:spring-webmvc")) } diff --git a/media-storage/media-storage-adapter-output-spring-data-jpa/build.gradle.kts b/media-storage/media-storage-adapter-output-spring-data-jpa/build.gradle.kts index d35034ee1..4847980bd 100644 --- a/media-storage/media-storage-adapter-output-spring-data-jpa/build.gradle.kts +++ b/media-storage/media-storage-adapter-output-spring-data-jpa/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api(project(":media-storage:media-storage-ports-output")) implementation("org.springframework:spring-core") implementation("jakarta.validation:jakarta.validation-api") - implementation(project(":common")) + implementation(project(":common:identifiers")) } testing { diff --git a/media-storage/media-storage-core-model/build.gradle.kts b/media-storage/media-storage-core-model/build.gradle.kts index 19e9c42bb..2a5648bea 100644 --- a/media-storage/media-storage-core-model/build.gradle.kts +++ b/media-storage/media-storage-core-model/build.gradle.kts @@ -3,11 +3,12 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:identifiers")) + api(project(":common:spring-webmvc")) api("org.springframework:spring-core") implementation("org.springframework:spring-web") - testFixturesApi(project(":common")) + testFixturesApi(project(":common:identifiers")) testFixturesApi(project(":community:community-ports-input")) testFixturesImplementation("org.springframework:spring-core") testFixturesImplementation(testFixtures(project(":testing:spring"))) // for fixedClock diff --git a/media-storage/media-storage-core-services/build.gradle.kts b/media-storage/media-storage-core-services/build.gradle.kts index 79623d03f..53b2d9760 100644 --- a/media-storage/media-storage-core-services/build.gradle.kts +++ b/media-storage/media-storage-core-services/build.gradle.kts @@ -7,7 +7,7 @@ dependencies { api(project(":media-storage:media-storage-core-model")) api(project(":media-storage:media-storage-ports-input")) api(project(":media-storage:media-storage-ports-output")) - implementation(project(":common")) + implementation(project(":common:identifiers")) implementation("org.springframework:spring-core") } diff --git a/media-storage/media-storage-ports-input/build.gradle.kts b/media-storage/media-storage-ports-input/build.gradle.kts index 5fff98160..63e986fdb 100644 --- a/media-storage/media-storage-ports-input/build.gradle.kts +++ b/media-storage/media-storage-ports-input/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:identifiers")) api(project(":media-storage:media-storage-core-model")) api("org.springframework:spring-core") } diff --git a/media-storage/media-storage-ports-output/build.gradle.kts b/media-storage/media-storage-ports-output/build.gradle.kts index 3b046b41d..f77a1b34e 100644 --- a/media-storage/media-storage-ports-output/build.gradle.kts +++ b/media-storage/media-storage-ports-output/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { testFixturesImplementation("io.kotest:kotest-assertions-shared") testFixturesImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core") testFixturesImplementation("io.kotest:kotest-runner-junit5") - testFixturesImplementation(project(":common")) + testFixturesImplementation(project(":common:identifiers")) testFixturesImplementation(project(":media-storage:media-storage-core-model")) testFixturesImplementation(testFixtures(project(":media-storage:media-storage-core-model"))) testFixturesImplementation("org.springframework:spring-core") diff --git a/profiling/profiling-adapter-output/build.gradle.kts b/profiling/profiling-adapter-output/build.gradle.kts index 1ec8c3e2c..8eb06d235 100644 --- a/profiling/profiling-adapter-output/build.gradle.kts +++ b/profiling/profiling-adapter-output/build.gradle.kts @@ -5,7 +5,7 @@ plugins { dependencies { api("org.springframework.data:spring-data-commons") api("org.springframework:spring-context") - api(project(":common")) + api(project(":common:identifiers")) api(project(":community:community-adapter-output-spring-data-jpa")) api(project(":community:community-ports-output")) api(project(":content-types:content-types-core-model")) diff --git a/rest-api-server/build.gradle.kts b/rest-api-server/build.gradle.kts index 0f161746f..819c97907 100644 --- a/rest-api-server/build.gradle.kts +++ b/rest-api-server/build.gradle.kts @@ -20,7 +20,7 @@ testing { suites { val test by getting(JvmTestSuite::class) { dependencies { - implementation(testFixtures(project(":common"))) + implementation(testFixtures(project(":common:spring-webmvc"))) implementation(testFixtures(project(":testing:spring"))) implementation("io.kotest:kotest-assertions-api") @@ -40,6 +40,7 @@ testing { testType.set(TestSuiteType.INTEGRATION_TEST) dependencies { implementation(project()) + implementation(project(":common:pagination")) implementation(project(":graph:graph-core-services")) implementation(project(":graph:graph-ports-output")) implementation(testFixtures(project(":graph:graph-adapter-input-rest-spring-mvc"))) @@ -94,7 +95,8 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib") // "downgrade" from api() // This project is essentially a "configuration" project in Spring's sense, so we depend on all components: - implementation(project(":common")) + implementation(project(":common:pagination")) + implementation(project(":common:identifiers")) runtimeOnly(project(":common:serialization")) runtimeOnly(project(":community:community-adapter-input-keycloak")) @@ -234,7 +236,7 @@ dependencies { "integrationTestRuntimeOnly"("io.kotest.extensions:kotest-extensions-spring") "integrationTestRuntimeOnly"("io.kotest.extensions:kotest-extensions-testcontainers") "integrationTestRuntimeOnly"("io.kotest:kotest-framework-datatest") - "integrationTestApi"(project(":common")) + "integrationTestApi"(project(":common:identifiers")) "integrationTestApi"(project(":community:community-core-model")) "integrationTestApi"(project(":community:community-ports-input")) "integrationTestApi"(project(":graph:graph-core-model")) @@ -244,6 +246,7 @@ dependencies { "integrationTestApi"("org.eclipse.rdf4j:rdf4j-common-io") "integrationTestApi"("org.springframework:spring-context") "integrationTestApi"("com.fasterxml.jackson.core:jackson-databind") + "integrationTestImplementation"(project(":common:datatypes")) "integrationTestImplementation"("org.junit.jupiter:junit-jupiter-api") "integrationTestImplementation"("org.junit.jupiter:junit-jupiter-params") "integrationTestImplementation"("org.springframework.boot:spring-boot-test") diff --git a/settings.gradle.kts b/settings.gradle.kts index c0cefa82b..99548e182 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,6 +13,12 @@ include( "common", "common:serialization", "common:neo4j-dsl", + "common:spring-webmvc", + "common:identifiers", + "common:pagination", + "common:string-utils", + "common:datatypes", + "common:functional", ) include( "migrations:liquibase", diff --git a/statistics/statistics-adapter-input-rest-spring-mvc/build.gradle.kts b/statistics/statistics-adapter-input-rest-spring-mvc/build.gradle.kts index b868be42b..b1d96c5ed 100644 --- a/statistics/statistics-adapter-input-rest-spring-mvc/build.gradle.kts +++ b/statistics/statistics-adapter-input-rest-spring-mvc/build.gradle.kts @@ -21,7 +21,7 @@ testing { implementation("org.springframework:spring-test") implementation("com.ninja-squad:springmockk") implementation("org.springframework.restdocs:spring-restdocs-mockmvc") - implementation(project(":common")) + implementation(project(":common:spring-webmvc")) implementation(project(":common:serialization")) implementation(testFixtures(project(":statistics:statistics-core-model"))) implementation(testFixtures(project(":testing:spring"))) diff --git a/statistics/statistics-core-model/build.gradle.kts b/statistics/statistics-core-model/build.gradle.kts index a3ceae994..36f2221f6 100644 --- a/statistics/statistics-core-model/build.gradle.kts +++ b/statistics/statistics-core-model/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } dependencies { - api(project(":common")) + api(project(":common:spring-webmvc")) implementation("org.springframework:spring-web") } diff --git a/statistics/statistics-ports-output/build.gradle.kts b/statistics/statistics-ports-output/build.gradle.kts index 303dbebdf..ef4f2fd78 100644 --- a/statistics/statistics-ports-output/build.gradle.kts +++ b/statistics/statistics-ports-output/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { testFixturesImplementation("io.kotest:kotest-assertions-shared") testFixturesImplementation("dev.forkhandles:fabrikate4k") testFixturesImplementation("io.kotest:kotest-runner-junit5") - testFixturesImplementation(project(":common")) + testFixturesImplementation(project(":common:identifiers")) testFixturesImplementation(project(":graph:graph-core-model")) testFixturesImplementation(testFixtures(project(":graph:graph-core-model"))) } diff --git a/testing/spring/build.gradle.kts b/testing/spring/build.gradle.kts index 0f6f8e773..77f2ac03a 100644 --- a/testing/spring/build.gradle.kts +++ b/testing/spring/build.gradle.kts @@ -27,7 +27,7 @@ dependencies { testFixturesApi("org.testcontainers:junit-jupiter") testFixturesApi("org.testcontainers:neo4j") testFixturesApi("org.testcontainers:postgresql") - testFixturesApi(project(":common")) + testFixturesApi(project(":common:spring-webmvc")) testFixturesImplementation("com.epages:restdocs-api-spec-mockmvc") testFixturesImplementation("org.hamcrest:hamcrest") testFixturesImplementation("org.springframework.security:spring-security-crypto") diff --git a/widget/build.gradle.kts b/widget/build.gradle.kts index 6652e9f8c..ee9f29ae7 100644 --- a/widget/build.gradle.kts +++ b/widget/build.gradle.kts @@ -8,7 +8,8 @@ dependencies { api("com.fasterxml.jackson.core:jackson-annotations") api("org.springframework:spring-context") api("org.springframework:spring-web") - api(project(":common")) + api(project(":common:identifiers")) + implementation(project(":common:spring-webmvc")) api(project(":graph:graph-ports-input")) implementation(project(":graph:graph-core-model")) }