From 0bec01e55ad2713b0fd0fcc0aa2941921965e93b Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 31 Aug 2023 17:17:16 +0200 Subject: [PATCH 01/16] ZITIS-887 improve error messages --- .../api/error/InsightClientError.kt | 16 +++++++--------- .../api/error/JiraClientError.kt | 4 ++-- .../http/util/JiraClientErrorExtension.kt | 2 +- .../kotlinjiraclient/sdk/util/EitherExtension.kt | 6 +++++- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt index 4a26fa8d..29a947dd 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt @@ -44,19 +44,17 @@ import io.swagger.v3.oas.annotations.media.Schema @Suppress("unused") sealed class InsightClientError( val error: String, - val message: String + val message: String, + val stacktrace: String = "" ) { - val stacktrace: String = Exception(message).stackTraceToString() companion object { private const val internalErrorString = "Jira/Insight hat ein internes Problem festgestellt" - fun fromException(e: Exception): InsightClientError = - ExceptionInsightClientError(e.message ?: internalErrorString, e.stackTraceToString()) fun fromException(e: Throwable): InsightClientError = - ExceptionInsightClientError(e.message ?: "Interner Fehler", e.stackTraceToString()) + ExceptionInsightClientError("Insight-Fehler", e.message ?: internalErrorString, e.stackTraceToString()) fun internalError(message: String): Either = - InternalInsightClientError("Interner Fehler", message).asEither() + InternalInsightClientError("Interner Insight-Fehler", message).asEither() } } @@ -65,15 +63,15 @@ fun InsightClientError.asEither(): Either = Either.Le class InvalidArgumentInsightClientError(message: String) : InsightClientError("Unerwarteter Parameter", message) class InternalInsightClientError(error: String, message: String) : InsightClientError(error, message) -class ExceptionInsightClientError(error: String, message: String) : InsightClientError(error, message) +class ExceptionInsightClientError(error: String, message: String, stacktrace: String) : InsightClientError(error, message, stacktrace) class AuthenticationError(message: String) : InsightClientError("Authentifizierung fehlgeschlagen", message) class ObjectNotFoundError(val objectId: InsightObjectId): - InsightClientError("Objekt nicht gefunden", "Das Objekt mit der InsightObjectId=$objectId wurde nicht gefunden.") + InsightClientError("Insight Objekt nicht gefunden", "Das Objekt mit der InsightObjectId=$objectId wurde nicht gefunden.") class ObjectTypeNotFoundError(val rootObjectTypeId: InsightObjectTypeId) : - InsightClientError("Objekttyp unbekannt", "Der Objekttyp mit der angegebenen InsightObjectTypeId=$rootObjectTypeId wurde nicht gefunden.") + InsightClientError("Insight Objekttyp unbekannt", "Der Objekttyp mit der angegebenen InsightObjectTypeId=$rootObjectTypeId wurde nicht gefunden.") class OtherNotFoundError(message: String) : InsightClientError("Nicht gefunden.", message) diff --git a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/error/JiraClientError.kt b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/error/JiraClientError.kt index a9f5d97f..0b0d3fcd 100644 --- a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/error/JiraClientError.kt +++ b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/error/JiraClientError.kt @@ -22,9 +22,9 @@ package com.linkedplanet.kotlinjiraclient.api.error @Suppress("unused") open class JiraClientError( val error: String, - val message: String + val message: String, + val stacktrace: String = "" ) { - val stacktrace: String = Exception(message).stackTraceToString() companion object } diff --git a/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/util/JiraClientErrorExtension.kt b/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/util/JiraClientErrorExtension.kt index 0e78fe93..ef1ad337 100644 --- a/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/util/JiraClientErrorExtension.kt +++ b/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/util/JiraClientErrorExtension.kt @@ -23,4 +23,4 @@ import com.linkedplanet.kotlinhttpclient.error.HttpDomainError import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError fun JiraClientError.Companion.fromHttpDomainError(e: HttpDomainError): JiraClientError = - JiraClientError(e.error, e.message) + JiraClientError(e.error, e.message, "HttpStatusCode-${e.statusCode}") diff --git a/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/util/EitherExtension.kt b/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/util/EitherExtension.kt index 9ce43bc9..4ed03140 100644 --- a/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/util/EitherExtension.kt +++ b/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/util/EitherExtension.kt @@ -27,5 +27,9 @@ inline fun Either.Companion.catchJiraClientError( message: String? = null, f: () -> B ): Either = catch(f).mapLeft { - JiraClientError(error ?: it.message.toString(), message ?: it.stackTraceToString()) + JiraClientError( + error = error ?: "Jira-Fehler", + message = message ?: it.message ?: "-", + stacktrace = it.stackTraceToString() + ) } From c4325df78389fdfae5f171dd5cecb1a526ba911e Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Wed, 6 Sep 2023 11:57:08 +0200 Subject: [PATCH 02/16] ZITIS-845 add core-common module --- kotlin-atlassian-client-core-common/pom.xml | 15 +++++++++++++++ .../kotlin-insight-client-api/pom.xml | 5 +++++ kotlin-jira-client/kotlin-jira-client-api/pom.xml | 5 +++++ pom.xml | 1 + 4 files changed, 26 insertions(+) create mode 100644 kotlin-atlassian-client-core-common/pom.xml diff --git a/kotlin-atlassian-client-core-common/pom.xml b/kotlin-atlassian-client-core-common/pom.xml new file mode 100644 index 00000000..b9e8a48c --- /dev/null +++ b/kotlin-atlassian-client-core-common/pom.xml @@ -0,0 +1,15 @@ + + + 4.0.0 + + com.linked-planet.client + kotlin-atlassian-client + 0.12.10-SNAPSHOT + + + kotlin-atlassian-client-core-common + kotlin-atlassian-client-core-common + + \ No newline at end of file diff --git a/kotlin-insight-client/kotlin-insight-client-api/pom.xml b/kotlin-insight-client/kotlin-insight-client-api/pom.xml index a10a5729..59b85409 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/pom.xml +++ b/kotlin-insight-client/kotlin-insight-client-api/pom.xml @@ -34,5 +34,10 @@ 2.2.2-atlassian-1 provided + + com.linked-planet.client + kotlin-atlassian-client-core-common + ${project.version} + diff --git a/kotlin-jira-client/kotlin-jira-client-api/pom.xml b/kotlin-jira-client/kotlin-jira-client-api/pom.xml index 6284b9de..fbac589a 100644 --- a/kotlin-jira-client/kotlin-jira-client-api/pom.xml +++ b/kotlin-jira-client/kotlin-jira-client-api/pom.xml @@ -19,5 +19,10 @@ gson 2.10.1 + + com.linked-planet.client + kotlin-atlassian-client-core-common + ${project.version} + diff --git a/pom.xml b/pom.xml index 260231e8..fa5f2937 100644 --- a/pom.xml +++ b/pom.xml @@ -15,6 +15,7 @@ kotlin-http-client kotlin-jira-client kotlin-insight-client + kotlin-atlassian-client-core-common From bf9500b2ac0587930fbb28be8f8eab7d7a4308de Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Wed, 6 Sep 2023 13:49:45 +0200 Subject: [PATCH 03/16] ZITIS-845 add common error superclass --- .../common/error/AtlassianClientError.kt | 34 +++++++++++++++++++ .../api/error/InsightClientError.kt | 9 ++--- .../api/error/JiraClientError.kt | 10 +++--- 3 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt new file mode 100644 index 00000000..47fc19f2 --- /dev/null +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt @@ -0,0 +1,34 @@ +/*- + * #%L + * kotlin-jira-client-api + * %% + * Copyright (C) 2022 - 2023 linked-planet GmbH + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ +@file:Suppress("CanBeParameter", "unused") // we want clients to access the additional information + +package com.linkedplanet.kotlinatlassianclientcore.common.error + +import arrow.core.Either + +open class AtlassianClientError( + val error: String, + val message: String, + val stacktrace: String = "" +) { + companion object +} + +fun ERROR.asEither(): Either = Either.Left(this) diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt index 29a947dd..e7b242d4 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt @@ -22,6 +22,7 @@ package com.linkedplanet.kotlininsightclient.api.error import arrow.core.Either +import com.linkedplanet.kotlinatlassianclientcore.common.error.AtlassianClientError import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId import com.linkedplanet.kotlininsightclient.api.model.InsightObjectTypeId @@ -43,10 +44,10 @@ import io.swagger.v3.oas.annotations.media.Schema @Suppress("unused") sealed class InsightClientError( - val error: String, - val message: String, - val stacktrace: String = "" -) { + error: String, + message: String, + stacktrace: String = "" +) : AtlassianClientError(error, message, stacktrace) { companion object { private const val internalErrorString = "Jira/Insight hat ein internes Problem festgestellt" diff --git a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/error/JiraClientError.kt b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/error/JiraClientError.kt index 0b0d3fcd..6cc4b676 100644 --- a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/error/JiraClientError.kt +++ b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/error/JiraClientError.kt @@ -19,12 +19,14 @@ */ package com.linkedplanet.kotlinjiraclient.api.error +import com.linkedplanet.kotlinatlassianclientcore.common.error.AtlassianClientError + @Suppress("unused") open class JiraClientError( - val error: String, - val message: String, - val stacktrace: String = "" -) { + error: String, + message: String, + stacktrace: String = "" +) : AtlassianClientError(error, message, stacktrace) { companion object } From f1ba4cbd8265f941fe5885a2f9e98279aa41492e Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 14:03:35 +0200 Subject: [PATCH 04/16] ZITIS-845 provide asEither for AtlassianClientError --- .../kotlininsightclient/api/error/InsightClientError.kt | 2 +- .../api/impl/AbstractNameMappedRepository.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt index e7b242d4..3342b2fa 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/error/InsightClientError.kt @@ -23,6 +23,7 @@ package com.linkedplanet.kotlininsightclient.api.error import arrow.core.Either import com.linkedplanet.kotlinatlassianclientcore.common.error.AtlassianClientError +import com.linkedplanet.kotlinatlassianclientcore.common.error.asEither import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId import com.linkedplanet.kotlininsightclient.api.model.InsightObjectTypeId @@ -59,7 +60,6 @@ sealed class InsightClientError( } } -fun InsightClientError.asEither(): Either = Either.Left(this) class InvalidArgumentInsightClientError(message: String) : InsightClientError("Unerwarteter Parameter", message) diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/impl/AbstractNameMappedRepository.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/impl/AbstractNameMappedRepository.kt index 186d28fe..dc6fe5a7 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/impl/AbstractNameMappedRepository.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/impl/AbstractNameMappedRepository.kt @@ -23,9 +23,9 @@ import arrow.core.Either import arrow.core.computations.either import arrow.core.right import arrow.core.sequenceEither +import com.linkedplanet.kotlinatlassianclientcore.common.error.asEither import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.error.InvalidArgumentInsightClientError -import com.linkedplanet.kotlininsightclient.api.error.asEither import com.linkedplanet.kotlininsightclient.api.interfaces.InsightObjectTypeOperator import com.linkedplanet.kotlininsightclient.api.interfaces.InsightSchemaOperator import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute.Companion.toReferences @@ -169,7 +169,7 @@ abstract class AbstractNameMappedRepository( is InsightAttribute.Select -> attribute.values// List else -> InvalidArgumentInsightClientError( "kType.classifier ${kType.classifier} is not supported." - ).asEither( + ).asEither( ).bind() } } From 9bed4abf73a6d24ac06e3c901490c1d8290f09d0 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 15:40:59 +0200 Subject: [PATCH 05/16] ZITIS-845 add validation to core-common --- kotlin-atlassian-client-core-common/pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kotlin-atlassian-client-core-common/pom.xml b/kotlin-atlassian-client-core-common/pom.xml index b9e8a48c..c58dc23b 100644 --- a/kotlin-atlassian-client-core-common/pom.xml +++ b/kotlin-atlassian-client-core-common/pom.xml @@ -12,4 +12,13 @@ kotlin-atlassian-client-core-common kotlin-atlassian-client-core-common + + + javax.validation + validation-api + 2.0.1.Final + provided + + + \ No newline at end of file From 9e9f37c041f96c5e8da135fb91976e85e89c1075 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 15:41:40 +0200 Subject: [PATCH 06/16] ZITIS-845 refactor to avoid warning --- .../api/model/InsightObjectExtensions.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt index b6da6e6d..19c83ca5 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt @@ -153,9 +153,10 @@ fun InsightObject.getSingleReferenceValue(id: InsightAttributeId): InsightRefere ?.referencedObjects ?.firstOrNull() ?.let { + val objectType = it.objectType!! InsightReference( - it.objectType!!.id, - it.objectType!!.name, + objectType.id, + objectType.name, it.id, it.objectKey, it.label @@ -167,9 +168,10 @@ fun InsightObject.getMultiReferenceValue(id: InsightAttributeId): List Date: Thu, 7 Sep 2023 15:49:36 +0200 Subject: [PATCH 07/16] ZITIS-845 use common asEither --- .../kotlininsightclient/http/HttpInsightAttachmentOperator.kt | 4 ++-- .../kotlininsightclient/http/HttpInsightObjectTypeOperator.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightAttachmentOperator.kt b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightAttachmentOperator.kt index 6da6d2f7..aac40fd3 100644 --- a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightAttachmentOperator.kt +++ b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightAttachmentOperator.kt @@ -22,9 +22,9 @@ package com.linkedplanet.kotlininsightclient.http import arrow.core.Either import arrow.core.computations.either import com.google.gson.reflect.TypeToken +import com.linkedplanet.kotlinatlassianclientcore.common.error.asEither import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.error.OtherNotFoundError -import com.linkedplanet.kotlininsightclient.api.error.asEither import com.linkedplanet.kotlininsightclient.api.interfaces.InsightAttachmentOperator import com.linkedplanet.kotlininsightclient.api.model.AttachmentId import com.linkedplanet.kotlininsightclient.api.model.InsightAttachment @@ -85,7 +85,7 @@ class HttpInsightAttachmentOperator(private val context: HttpInsightClientContex ?: OtherNotFoundError( "Attachment with Filename ($filename) for " + "object (id=$objectId) was created but could not be retrieved." - ).asEither().bind() + ).asEither().bind() } override suspend fun deleteAttachment(attachmentId: AttachmentId): Either = diff --git a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectTypeOperator.kt b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectTypeOperator.kt index 6cb04987..2693f23b 100644 --- a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectTypeOperator.kt +++ b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectTypeOperator.kt @@ -22,9 +22,9 @@ package com.linkedplanet.kotlininsightclient.http import arrow.core.Either import arrow.core.computations.either import com.google.gson.reflect.TypeToken +import com.linkedplanet.kotlinatlassianclientcore.common.error.asEither import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.error.ObjectTypeNotFoundError -import com.linkedplanet.kotlininsightclient.api.error.asEither import com.linkedplanet.kotlininsightclient.api.interfaces.InsightObjectTypeOperator import com.linkedplanet.kotlininsightclient.api.model.InsightAttributeId import com.linkedplanet.kotlininsightclient.api.model.InsightObjectTypeId @@ -68,7 +68,7 @@ class HttpInsightObjectTypeOperator(private val context: HttpInsightClientContex ?.let { rootObject -> listOf(rootObject).plus(findObjectTypeChildren(allObjectTypes, rootObjectTypeId)) } - ?: ObjectTypeNotFoundError(rootObjectTypeId).asEither>().bind() + ?: ObjectTypeNotFoundError(rootObjectTypeId).asEither>().bind() } override suspend fun getObjectTypesBySchema(schemaId: InsightSchemaId): Either> = From 7349690d9d0045de9187c0000b5bc2b7da6b39c8 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 15:50:32 +0200 Subject: [PATCH 08/16] ZITIS-845 use AtlassianUser instead of InsightUser --- .../common/api/AtlassianUser.kt | 10 ++++++++++ .../api/model/InsightObjectExtensions.kt | 3 ++- .../kotlininsightclient/api/model/Model.kt | 14 ++++---------- .../http/HttpInsightObjectOperator.kt | 3 ++- .../model/InsightObjectRestApiResponseObjects.kt | 7 ++++--- .../sdk/SdkInsightObjectOperator.kt | 12 +++++++----- .../InsightObjectOperatorTest.kt | 8 ++++---- 7 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt new file mode 100644 index 00000000..33139265 --- /dev/null +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt @@ -0,0 +1,10 @@ +package com.linkedplanet.kotlinatlassianclientcore.common.api + +import javax.validation.constraints.NotNull +data class AtlassianUser( + @field:NotNull val displayName: String, + @field:NotNull val name: String, + @field:NotNull val emailAddress: String, + @field:NotNull val key: String, + @field:NotNull val avatarUrl: String? = null +) \ No newline at end of file diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt index 19c83ca5..3297fb36 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt @@ -21,6 +21,7 @@ package com.linkedplanet.kotlininsightclient.api.model +import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser import java.time.LocalDate import java.time.ZonedDateTime @@ -141,7 +142,7 @@ fun InsightObject.getDateTimeValue(id: InsightAttributeId): ZonedDateTime? = //region ObjectAttributeValue.User -fun InsightObject.getUserList(id: InsightAttributeId): List = +fun InsightObject.getUserList(id: InsightAttributeId): List = getAttributeAs(id)?.users ?: emptyList() // endregion user diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt index d3d1a9e1..3b523db5 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt @@ -19,6 +19,7 @@ */ package com.linkedplanet.kotlininsightclient.api.model +import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser import io.swagger.v3.oas.annotations.media.Schema import java.time.LocalDate import java.time.LocalTime @@ -253,7 +254,7 @@ sealed class InsightAttribute( data class User( @get:JvmName("getAttributeId") @field:NotNull override val attributeId: InsightAttributeId, - @field:NotNull val users: List, + @field:NotNull val users: List, override val schema: ObjectTypeSchemaAttribute? ) : InsightAttribute(attributeId, schema, AttributeTypeEnum.User){ override fun toString() = users.joinToString(",") { it.key } @@ -356,10 +357,10 @@ sealed class InsightAttribute( infix fun InsightAttributeId.toUrlValues(values: List) = Url(this, values = values, schema = null) - infix fun InsightAttributeId.toUser(user: InsightUser?) = + infix fun InsightAttributeId.toUser(user: AtlassianUser?) = User(this, listOfNotNull(user), schema = null) - infix fun InsightAttributeId.toUsers(users: List) = + infix fun InsightAttributeId.toUsers(users: List) = User(this, users, schema = null) infix fun InsightAttributeId.toReference(referencedObjectId: InsightObjectId?) = @@ -682,13 +683,6 @@ data class InsightSchema( ) // endregion InsightSchemaOperator -data class InsightUser( - @field:NotNull val displayName: String, - @field:NotNull val name: String, - @field:NotNull val emailAddress: String, - @field:NotNull val key: String -) - data class ReferencedObject( @get:JvmName("getId") @field:NotNull val id: InsightObjectId, diff --git a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt index ea11f715..436991f4 100644 --- a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt +++ b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt @@ -24,6 +24,7 @@ import arrow.core.computations.either import arrow.core.flatten import arrow.core.rightIfNotNull import com.google.gson.JsonParser +import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser import com.linkedplanet.kotlinhttpclient.api.http.GSON import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.error.InsightClientError.Companion.internalError @@ -307,7 +308,7 @@ class HttpInsightObjectOperator(private val context: HttpInsightClientContext) : } InsightObjectAttributeType.USER -> { val users = apiAttribute.objectAttributeValues.mapNotNull { av: ObjectAttributeValueApiResponse -> - av.user?.run { InsightUser(displayName, name, emailAddress ?: "", key) } + av.user?.run { AtlassianUser(displayName, name, emailAddress ?: "", key) } } InsightAttribute.User(attributeId, users, schema) } diff --git a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/model/InsightObjectRestApiResponseObjects.kt b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/model/InsightObjectRestApiResponseObjects.kt index 33032ee3..f178ab62 100644 --- a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/model/InsightObjectRestApiResponseObjects.kt +++ b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/model/InsightObjectRestApiResponseObjects.kt @@ -71,14 +71,15 @@ internal data class ObjectAttributeValueApiResponse( var value: Any?, var displayValue: Any?, var referencedObject: ReferencedObjectApiResponse?, - var user: InsightUserApiResponse? + var user: AtlassianUserApiResponse? ) -internal data class InsightUserApiResponse( +internal data class AtlassianUserApiResponse( val displayName: String, val name: String, val emailAddress: String?, - val key: String + val key: String, + val avatarUrl: String? ) internal data class ReferencedObjectApiResponse( diff --git a/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt b/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt index 65a43b34..569d708b 100644 --- a/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt +++ b/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt @@ -25,9 +25,11 @@ import arrow.core.flatMap import arrow.core.left import arrow.core.right import arrow.core.rightIfNotNull +import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.component.ComponentAccessor.getOSGiComponentInstanceOfType import com.atlassian.jira.config.properties.ApplicationProperties import com.atlassian.jira.user.util.UserManager +import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.error.InsightClientError.Companion.internalError import com.linkedplanet.kotlininsightclient.api.error.ObjectNotFoundError @@ -41,7 +43,6 @@ import com.linkedplanet.kotlininsightclient.api.model.InsightObject import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId import com.linkedplanet.kotlininsightclient.api.model.InsightObjectPage import com.linkedplanet.kotlininsightclient.api.model.InsightObjectTypeId -import com.linkedplanet.kotlininsightclient.api.model.InsightUser import com.linkedplanet.kotlininsightclient.api.model.ObjectTypeSchemaAttribute import com.linkedplanet.kotlininsightclient.api.model.ReferencedObject import com.linkedplanet.kotlininsightclient.api.model.ReferencedObjectType @@ -369,7 +370,7 @@ object SdkInsightObjectOperator : InsightObjectOperator { } Type.USER -> { val users = objectAttributeBean.objectAttributeValueBeans.mapNotNull { attribute -> - loadInsightUserByKey(attribute.textValue).bind() + loadAtlassianUserByKey(attribute.textValue).bind() } InsightAttribute.User(attributeId, users, schema) } @@ -446,11 +447,12 @@ object SdkInsightObjectOperator : InsightObjectOperator { ) } } - - private fun loadInsightUserByKey(userKey: String): Either = + private val avatarService by lazy { ComponentAccessor.getAvatarService() } + private fun loadAtlassianUserByKey(userKey: String): Either = catchAsInsightClientError { userManager.getUserByKey(userKey)?.run { - InsightUser(displayName, name, emailAddress, key) + val avatarUrl = avatarService.getAvatarURL(this, this).toASCIIString() + AtlassianUser(displayName, name, emailAddress, key, avatarUrl) } } diff --git a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt index 4c87f171..535aa12b 100644 --- a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt +++ b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt @@ -37,7 +37,7 @@ import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute.Companion import com.linkedplanet.kotlininsightclient.api.model.InsightObject import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId import com.linkedplanet.kotlininsightclient.api.model.InsightObjectTypeId -import com.linkedplanet.kotlininsightclient.api.model.InsightUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser import com.linkedplanet.kotlininsightclient.api.model.ObjectTypeSchemaAttribute import com.linkedplanet.kotlininsightclient.api.model.addSelectValue import com.linkedplanet.kotlininsightclient.api.model.getAttributeAs @@ -652,7 +652,7 @@ interface InsightObjectOperatorTest { @Test fun testUserCrud() = runBlocking { - suspend fun getUserAttributes(objectId: InsightObjectId): Pair?, List> { + suspend fun getUserAttributes(objectId: InsightObjectId): Pair?, List> { val insightObject = insightObjectOperator.getObjectById(objectId, ::identity).orFail()!! val attrUser = insightObject.getAttributeAs(UserTestUser.attributeId)?.users val attrUsers = insightObject.getUserList(UserTestUsers.attributeId) @@ -661,8 +661,8 @@ interface InsightObjectOperatorTest { val objectName = "createdByUnitTest" autoClean(clean = { deleteObjectByName(InsightObjectType.User.id, objectName).orFail() }) { - val user1 = InsightUser("", "", "", "JIRAUSER10100") - val user2 = InsightUser("", "", "", "JIRAUSER10101") + val user1 = AtlassianUser("", "", "", "JIRAUSER10100") + val user2 = AtlassianUser("", "", "", "JIRAUSER10101") val objectId = insightObjectOperator.createInsightObject( InsightObjectType.User.id, UserTestName.attributeId toValue objectName, From 560ccf2573833526f1ba6c4dbe9d68d0899f8826 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 15:52:55 +0200 Subject: [PATCH 09/16] ZITIS-845 reorder AtlassianUser attributers to match JiraUser --- .../kotlinatlassianclientcore/common/api/AtlassianUser.kt | 7 ++++--- .../kotlininsightclient/http/HttpInsightObjectOperator.kt | 3 +-- .../kotlininsightclient/sdk/SdkInsightObjectOperator.kt | 2 +- .../kotlininsightclient/InsightObjectOperatorTest.kt | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt index 33139265..39f30523 100644 --- a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt @@ -1,10 +1,11 @@ package com.linkedplanet.kotlinatlassianclientcore.common.api import javax.validation.constraints.NotNull + data class AtlassianUser( - @field:NotNull val displayName: String, + @field:NotNull val key: String, @field:NotNull val name: String, @field:NotNull val emailAddress: String, - @field:NotNull val key: String, - @field:NotNull val avatarUrl: String? = null + @field:NotNull val avatarUrl: String? = null, + @field:NotNull val displayName: String ) \ No newline at end of file diff --git a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt index 436991f4..7ea1d656 100644 --- a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt +++ b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt @@ -48,7 +48,6 @@ import com.linkedplanet.kotlininsightclient.http.util.toInsightClientError import java.time.LocalDate import java.time.LocalTime import java.time.ZonedDateTime -import java.util.* class HttpInsightObjectOperator(private val context: HttpInsightClientContext) : InsightObjectOperator { @@ -308,7 +307,7 @@ class HttpInsightObjectOperator(private val context: HttpInsightClientContext) : } InsightObjectAttributeType.USER -> { val users = apiAttribute.objectAttributeValues.mapNotNull { av: ObjectAttributeValueApiResponse -> - av.user?.run { AtlassianUser(displayName, name, emailAddress ?: "", key) } + av.user?.run { AtlassianUser(key, name, emailAddress ?: "", displayName = displayName) } } InsightAttribute.User(attributeId, users, schema) } diff --git a/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt b/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt index 569d708b..b7355cb0 100644 --- a/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt +++ b/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt @@ -452,7 +452,7 @@ object SdkInsightObjectOperator : InsightObjectOperator { catchAsInsightClientError { userManager.getUserByKey(userKey)?.run { val avatarUrl = avatarService.getAvatarURL(this, this).toASCIIString() - AtlassianUser(displayName, name, emailAddress, key, avatarUrl) + AtlassianUser(key, name, emailAddress, avatarUrl, displayName) } } diff --git a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt index 535aa12b..71f9690e 100644 --- a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt +++ b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt @@ -661,8 +661,8 @@ interface InsightObjectOperatorTest { val objectName = "createdByUnitTest" autoClean(clean = { deleteObjectByName(InsightObjectType.User.id, objectName).orFail() }) { - val user1 = AtlassianUser("", "", "", "JIRAUSER10100") - val user2 = AtlassianUser("", "", "", "JIRAUSER10101") + val user1 = AtlassianUser("JIRAUSER10100", "", "", displayName = "") + val user2 = AtlassianUser("JIRAUSER10101", "", "", displayName = "") val objectId = insightObjectOperator.createInsightObject( InsightObjectType.User.id, UserTestName.attributeId toValue objectName, From aa32beeb2932cebf62df3a5fe452538c8c0a8b9d Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 15:53:56 +0200 Subject: [PATCH 10/16] ZITIS-845 rename AtlassianUser to JiraUser --- .../common/api/{AtlassianUser.kt => JiraUser.kt} | 2 +- .../api/model/InsightObjectExtensions.kt | 4 ++-- .../linkedplanet/kotlininsightclient/api/model/Model.kt | 8 ++++---- .../kotlininsightclient/http/HttpInsightObjectOperator.kt | 4 ++-- .../kotlininsightclient/sdk/SdkInsightObjectOperator.kt | 6 +++--- .../kotlininsightclient/InsightObjectOperatorTest.kt | 8 ++++---- 6 files changed, 16 insertions(+), 16 deletions(-) rename kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/{AtlassianUser.kt => JiraUser.kt} (92%) diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/JiraUser.kt similarity index 92% rename from kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt rename to kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/JiraUser.kt index 39f30523..31cad158 100644 --- a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/AtlassianUser.kt +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/JiraUser.kt @@ -2,7 +2,7 @@ package com.linkedplanet.kotlinatlassianclientcore.common.api import javax.validation.constraints.NotNull -data class AtlassianUser( +data class JiraUser( @field:NotNull val key: String, @field:NotNull val name: String, @field:NotNull val emailAddress: String, diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt index 3297fb36..6bd38e9b 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/InsightObjectExtensions.kt @@ -21,7 +21,7 @@ package com.linkedplanet.kotlininsightclient.api.model -import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import java.time.LocalDate import java.time.ZonedDateTime @@ -142,7 +142,7 @@ fun InsightObject.getDateTimeValue(id: InsightAttributeId): ZonedDateTime? = //region ObjectAttributeValue.User -fun InsightObject.getUserList(id: InsightAttributeId): List = +fun InsightObject.getUserList(id: InsightAttributeId): List = getAttributeAs(id)?.users ?: emptyList() // endregion user diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt index 3b523db5..9e162080 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt @@ -19,7 +19,7 @@ */ package com.linkedplanet.kotlininsightclient.api.model -import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import io.swagger.v3.oas.annotations.media.Schema import java.time.LocalDate import java.time.LocalTime @@ -254,7 +254,7 @@ sealed class InsightAttribute( data class User( @get:JvmName("getAttributeId") @field:NotNull override val attributeId: InsightAttributeId, - @field:NotNull val users: List, + @field:NotNull val users: List, override val schema: ObjectTypeSchemaAttribute? ) : InsightAttribute(attributeId, schema, AttributeTypeEnum.User){ override fun toString() = users.joinToString(",") { it.key } @@ -357,10 +357,10 @@ sealed class InsightAttribute( infix fun InsightAttributeId.toUrlValues(values: List) = Url(this, values = values, schema = null) - infix fun InsightAttributeId.toUser(user: AtlassianUser?) = + infix fun InsightAttributeId.toUser(user: JiraUser?) = User(this, listOfNotNull(user), schema = null) - infix fun InsightAttributeId.toUsers(users: List) = + infix fun InsightAttributeId.toUsers(users: List) = User(this, users, schema = null) infix fun InsightAttributeId.toReference(referencedObjectId: InsightObjectId?) = diff --git a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt index 7ea1d656..282cf4cb 100644 --- a/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt +++ b/kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt @@ -24,7 +24,7 @@ import arrow.core.computations.either import arrow.core.flatten import arrow.core.rightIfNotNull import com.google.gson.JsonParser -import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import com.linkedplanet.kotlinhttpclient.api.http.GSON import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.error.InsightClientError.Companion.internalError @@ -307,7 +307,7 @@ class HttpInsightObjectOperator(private val context: HttpInsightClientContext) : } InsightObjectAttributeType.USER -> { val users = apiAttribute.objectAttributeValues.mapNotNull { av: ObjectAttributeValueApiResponse -> - av.user?.run { AtlassianUser(key, name, emailAddress ?: "", displayName = displayName) } + av.user?.run { JiraUser(key, name, emailAddress ?: "", displayName = displayName) } } InsightAttribute.User(attributeId, users, schema) } diff --git a/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt b/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt index b7355cb0..93999164 100644 --- a/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt +++ b/kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt @@ -29,7 +29,7 @@ import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.component.ComponentAccessor.getOSGiComponentInstanceOfType import com.atlassian.jira.config.properties.ApplicationProperties import com.atlassian.jira.user.util.UserManager -import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.error.InsightClientError.Companion.internalError import com.linkedplanet.kotlininsightclient.api.error.ObjectNotFoundError @@ -448,11 +448,11 @@ object SdkInsightObjectOperator : InsightObjectOperator { } } private val avatarService by lazy { ComponentAccessor.getAvatarService() } - private fun loadAtlassianUserByKey(userKey: String): Either = + private fun loadAtlassianUserByKey(userKey: String): Either = catchAsInsightClientError { userManager.getUserByKey(userKey)?.run { val avatarUrl = avatarService.getAvatarURL(this, this).toASCIIString() - AtlassianUser(key, name, emailAddress, avatarUrl, displayName) + JiraUser(key, name, emailAddress, avatarUrl, displayName) } } diff --git a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt index 71f9690e..a34cd60a 100644 --- a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt +++ b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/InsightObjectOperatorTest.kt @@ -37,7 +37,7 @@ import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute.Companion import com.linkedplanet.kotlininsightclient.api.model.InsightObject import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId import com.linkedplanet.kotlininsightclient.api.model.InsightObjectTypeId -import com.linkedplanet.kotlinatlassianclientcore.common.api.AtlassianUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import com.linkedplanet.kotlininsightclient.api.model.ObjectTypeSchemaAttribute import com.linkedplanet.kotlininsightclient.api.model.addSelectValue import com.linkedplanet.kotlininsightclient.api.model.getAttributeAs @@ -652,7 +652,7 @@ interface InsightObjectOperatorTest { @Test fun testUserCrud() = runBlocking { - suspend fun getUserAttributes(objectId: InsightObjectId): Pair?, List> { + suspend fun getUserAttributes(objectId: InsightObjectId): Pair?, List> { val insightObject = insightObjectOperator.getObjectById(objectId, ::identity).orFail()!! val attrUser = insightObject.getAttributeAs(UserTestUser.attributeId)?.users val attrUsers = insightObject.getUserList(UserTestUsers.attributeId) @@ -661,8 +661,8 @@ interface InsightObjectOperatorTest { val objectName = "createdByUnitTest" autoClean(clean = { deleteObjectByName(InsightObjectType.User.id, objectName).orFail() }) { - val user1 = AtlassianUser("JIRAUSER10100", "", "", displayName = "") - val user2 = AtlassianUser("JIRAUSER10101", "", "", displayName = "") + val user1 = JiraUser("JIRAUSER10100", "", "", displayName = "") + val user2 = JiraUser("JIRAUSER10101", "", "", displayName = "") val objectId = insightObjectOperator.createInsightObject( InsightObjectType.User.id, UserTestName.attributeId toValue objectName, From 61d277cc1d6c44ae7d59c818765ff3f79d438937 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 15:56:53 +0200 Subject: [PATCH 11/16] ZITIS-845 use JiraUser from core-common for kotlin-jira-client --- .../kotlinjiraclient/api/interfaces/JiraUserOperator.kt | 2 +- .../com/linkedplanet/kotlinjiraclient/api/model/Model.kt | 8 -------- .../kotlinjiraclient/http/HttpJiraUserOperator.kt | 2 +- .../linkedplanet/kotlinjiraclient/http/model/HttpModel.kt | 1 + .../kotlinjiraclient/sdk/SdkJiraUserOperator.kt | 2 +- .../kotlinjiraclient/util/JiraUserTestHelper.kt | 2 +- 6 files changed, 5 insertions(+), 12 deletions(-) diff --git a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/interfaces/JiraUserOperator.kt b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/interfaces/JiraUserOperator.kt index e0971b46..c44e7098 100644 --- a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/interfaces/JiraUserOperator.kt +++ b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/interfaces/JiraUserOperator.kt @@ -20,8 +20,8 @@ package com.linkedplanet.kotlinjiraclient.api.interfaces import arrow.core.Either +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError -import com.linkedplanet.kotlinjiraclient.api.model.JiraUser /** * Manages Jira users. diff --git a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt index d8d10838..0d4a2d03 100644 --- a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt +++ b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt @@ -27,14 +27,6 @@ data class Page ( val pageSize: Int ) -data class JiraUser( - val key: String, - val name: String, - val emailAddress: String, - var avatarUrl: String?, - val displayName: String -) - data class JiraStatus( val id: String, val name: String, diff --git a/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/HttpJiraUserOperator.kt b/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/HttpJiraUserOperator.kt index 9c24edb7..5eeacaf2 100644 --- a/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/HttpJiraUserOperator.kt +++ b/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/HttpJiraUserOperator.kt @@ -27,7 +27,7 @@ import com.google.gson.reflect.TypeToken import com.linkedplanet.kotlinhttpclient.api.http.* import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError import com.linkedplanet.kotlinjiraclient.api.interfaces.JiraUserOperator -import com.linkedplanet.kotlinjiraclient.api.model.JiraUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import com.linkedplanet.kotlinjiraclient.http.model.* import com.linkedplanet.kotlinjiraclient.http.util.fromHttpDomainError diff --git a/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/model/HttpModel.kt b/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/model/HttpModel.kt index c2e500c0..88559b8d 100644 --- a/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/model/HttpModel.kt +++ b/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/model/HttpModel.kt @@ -19,6 +19,7 @@ */ package com.linkedplanet.kotlinjiraclient.http.model +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import com.linkedplanet.kotlinhttpclient.api.http.HttpPage import com.linkedplanet.kotlinjiraclient.api.model.* diff --git a/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraUserOperator.kt b/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraUserOperator.kt index 23763723..083ec387 100644 --- a/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraUserOperator.kt +++ b/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraUserOperator.kt @@ -31,7 +31,7 @@ import com.atlassian.jira.security.roles.ProjectRoleManager import com.atlassian.jira.user.ApplicationUser import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError import com.linkedplanet.kotlinjiraclient.api.interfaces.JiraUserOperator -import com.linkedplanet.kotlinjiraclient.api.model.JiraUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import com.linkedplanet.kotlinjiraclient.sdk.util.catchJiraClientError object SdkJiraUserOperator : JiraUserOperator { diff --git a/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/util/JiraUserTestHelper.kt b/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/util/JiraUserTestHelper.kt index e58d68c2..af18c931 100644 --- a/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/util/JiraUserTestHelper.kt +++ b/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/util/JiraUserTestHelper.kt @@ -19,7 +19,7 @@ */ package com.linkedplanet.kotlinjiraclient.util -import com.linkedplanet.kotlinjiraclient.api.model.JiraUser +import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.CoreMatchers.notNullValue import org.hamcrest.MatcherAssert.assertThat From 600a9ff2ec6976c79f71d522d58bc51c7eac1518 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 16:21:48 +0200 Subject: [PATCH 12/16] ZITIS-845 use Page object from common-core --- .../kotlinatlassianclientcore/common/api/Page.kt | 11 +++++++++++ .../api/impl/AbstractInsightObjectRepository.kt | 2 +- .../api/interfaces/InsightObjectRepository.kt | 2 +- .../kotlininsightclient/api/model/Model.kt | 8 -------- .../repositories/CompanyTestRepositoryManualImpl.kt | 2 +- .../repositories/CountryTestRepositoryManualImpl.kt | 2 +- .../api/interfaces/JiraIssueOperator.kt | 2 +- .../linkedplanet/kotlinjiraclient/api/model/Model.kt | 8 -------- .../kotlinjiraclient/http/HttpJiraIssueOperator.kt | 2 +- .../kotlinjiraclient/sdk/SdkJiraIssueOperator.kt | 5 +++-- .../kotlinjiraclient/JiraIssueOperatorTest.kt | 2 +- 11 files changed, 21 insertions(+), 25 deletions(-) create mode 100644 kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/Page.kt diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/Page.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/Page.kt new file mode 100644 index 00000000..d8738d63 --- /dev/null +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/Page.kt @@ -0,0 +1,11 @@ +package com.linkedplanet.kotlinatlassianclientcore.common.api + +import javax.validation.constraints.NotNull + +data class Page ( + @field:NotNull val items: List, + @field:NotNull val totalItems: Int, + @field:NotNull val totalPages: Int, + @field:NotNull val currentPageIndex: Int, + @field:NotNull val pageSize: Int +) \ No newline at end of file diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/impl/AbstractInsightObjectRepository.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/impl/AbstractInsightObjectRepository.kt index 7c8aaf6c..c6e1356c 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/impl/AbstractInsightObjectRepository.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/impl/AbstractInsightObjectRepository.kt @@ -22,6 +22,7 @@ package com.linkedplanet.kotlininsightclient.api.impl import arrow.core.Either import arrow.core.computations.either import arrow.core.rightIfNotNull +import com.linkedplanet.kotlinatlassianclientcore.common.api.Page import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.error.OtherNotFoundError import com.linkedplanet.kotlininsightclient.api.interfaces.InsightObjectRepository @@ -30,7 +31,6 @@ import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute import com.linkedplanet.kotlininsightclient.api.model.InsightObject import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId import com.linkedplanet.kotlininsightclient.api.model.InsightObjectTypeId -import com.linkedplanet.kotlininsightclient.api.model.Page import kotlin.math.ceil abstract class AbstractInsightObjectRepository : InsightObjectRepository { diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/interfaces/InsightObjectRepository.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/interfaces/InsightObjectRepository.kt index 6df71294..0acee03a 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/interfaces/InsightObjectRepository.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/interfaces/InsightObjectRepository.kt @@ -22,7 +22,7 @@ package com.linkedplanet.kotlininsightclient.api.interfaces import arrow.core.Either import com.linkedplanet.kotlininsightclient.api.error.InsightClientError import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId -import com.linkedplanet.kotlininsightclient.api.model.Page +import com.linkedplanet.kotlinatlassianclientcore.common.api.Page /** * Generic Interface to CRUD one type of domain object, like a customer, to Insight. diff --git a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt index 9e162080..70ae8eba 100644 --- a/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt +++ b/kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt @@ -55,14 +55,6 @@ data class InsightObjectPage( @field:NotNull val objects: List = emptyList(), ) -data class Page ( - @field:NotNull val items: List, - @field:NotNull val totalItems: Int, - @field:NotNull val totalPages: Int, - @field:NotNull val currentPageIndex: Int, - @field:NotNull val pageSize: Int -) - fun InsightObjectPage.plus(insightObjectPage: InsightObjectPage): InsightObjectPage = InsightObjectPage( this.totalFilterCount + insightObjectPage.totalFilterCount, diff --git a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/repositories/CompanyTestRepositoryManualImpl.kt b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/repositories/CompanyTestRepositoryManualImpl.kt index d4b70e8a..e9c07e45 100644 --- a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/repositories/CompanyTestRepositoryManualImpl.kt +++ b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/repositories/CompanyTestRepositoryManualImpl.kt @@ -33,7 +33,7 @@ import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute.Companion import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute.Companion.toValue import com.linkedplanet.kotlininsightclient.api.model.InsightObject import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId -import com.linkedplanet.kotlininsightclient.api.model.Page +import com.linkedplanet.kotlinatlassianclientcore.common.api.Page import com.linkedplanet.kotlininsightclient.api.model.getSingleReferenceValue import com.linkedplanet.kotlininsightclient.api.model.getStringValue import kotlin.math.ceil diff --git a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/repositories/CountryTestRepositoryManualImpl.kt b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/repositories/CountryTestRepositoryManualImpl.kt index b465fa10..626b3f4a 100644 --- a/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/repositories/CountryTestRepositoryManualImpl.kt +++ b/kotlin-insight-client/kotlin-insight-client-test-base/src/main/kotlin/com/linkedplanet/kotlininsightclient/repositories/CountryTestRepositoryManualImpl.kt @@ -32,7 +32,7 @@ import com.linkedplanet.kotlininsightclient.api.interfaces.InsightObjectOperator import com.linkedplanet.kotlininsightclient.api.model.InsightAttribute.Companion.toValue import com.linkedplanet.kotlininsightclient.api.model.InsightObject import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId -import com.linkedplanet.kotlininsightclient.api.model.Page +import com.linkedplanet.kotlinatlassianclientcore.common.api.Page import com.linkedplanet.kotlininsightclient.api.model.getStringValue import kotlin.math.ceil diff --git a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/interfaces/JiraIssueOperator.kt b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/interfaces/JiraIssueOperator.kt index 6a88c7c2..ed7aa423 100644 --- a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/interfaces/JiraIssueOperator.kt +++ b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/interfaces/JiraIssueOperator.kt @@ -21,9 +21,9 @@ package com.linkedplanet.kotlinjiraclient.api.interfaces import arrow.core.Either import com.google.gson.JsonObject +import com.linkedplanet.kotlinatlassianclientcore.common.api.Page import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError import com.linkedplanet.kotlinjiraclient.api.model.JiraIssue -import com.linkedplanet.kotlinjiraclient.api.model.Page /** * Provides methods for working with Jira issues, including retrieving issues by JQL query, issue type, or key; creating and updating issues; and deleting issues. diff --git a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt index 0d4a2d03..0c0b9d66 100644 --- a/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt +++ b/kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt @@ -19,14 +19,6 @@ */ package com.linkedplanet.kotlinjiraclient.api.model -data class Page ( - val items: List, - val totalItems: Int, - val totalPages: Int, - val currentPageIndex: Int, - val pageSize: Int -) - data class JiraStatus( val id: String, val name: String, diff --git a/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/HttpJiraIssueOperator.kt b/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/HttpJiraIssueOperator.kt index 15e9fce2..33eae360 100644 --- a/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/HttpJiraIssueOperator.kt +++ b/kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/HttpJiraIssueOperator.kt @@ -27,7 +27,7 @@ import com.linkedplanet.kotlinhttpclient.api.http.* import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError import com.linkedplanet.kotlinjiraclient.api.interfaces.JiraIssueOperator import com.linkedplanet.kotlinjiraclient.api.model.JiraIssue -import com.linkedplanet.kotlinjiraclient.api.model.Page +import com.linkedplanet.kotlinatlassianclientcore.common.api.Page import com.linkedplanet.kotlinjiraclient.http.field.HttpJiraField import com.linkedplanet.kotlinjiraclient.http.model.HttpMappingField import com.linkedplanet.kotlinjiraclient.http.util.fromHttpDomainError diff --git a/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraIssueOperator.kt b/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraIssueOperator.kt index 7afb73ed..9098aee9 100644 --- a/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraIssueOperator.kt +++ b/kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraIssueOperator.kt @@ -32,7 +32,8 @@ import com.google.gson.JsonObject import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError import com.linkedplanet.kotlinjiraclient.api.interfaces.JiraIssueOperator import com.linkedplanet.kotlinjiraclient.api.model.JiraIssue -import com.linkedplanet.kotlinjiraclient.api.model.Page +import com.linkedplanet.kotlinatlassianclientcore.common.api.Page +import com.linkedplanet.kotlinatlassianclientcore.common.error.asEither import com.linkedplanet.kotlinjiraclient.sdk.field.SdkJiraField import com.linkedplanet.kotlinjiraclient.sdk.util.IssueJsonConverter import com.linkedplanet.kotlinjiraclient.sdk.util.catchJiraClientError @@ -108,7 +109,7 @@ object SdkJiraIssueOperator : JiraIssueOperator { ): Either = either { val potentiallyMultipleIssues = getIssuesByJQLPaginated(jql, 0, 1, parser).bind() if (potentiallyMultipleIssues.totalItems < 1) { - JiraClientError("Issue not found", "No issue was found.").left().bind() + JiraClientError("Issue not found", "No issue was found.").asEither().bind() } potentiallyMultipleIssues.items.first() } diff --git a/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/JiraIssueOperatorTest.kt b/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/JiraIssueOperatorTest.kt index f4da4cab..af4d5b0a 100644 --- a/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/JiraIssueOperatorTest.kt +++ b/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/JiraIssueOperatorTest.kt @@ -20,7 +20,7 @@ package com.linkedplanet.kotlinjiraclient import arrow.core.* -import com.linkedplanet.kotlinjiraclient.api.model.Page +import com.linkedplanet.kotlinatlassianclientcore.common.api.Page import com.linkedplanet.kotlinjiraclient.util.* import java.time.ZoneOffset import java.time.ZonedDateTime From c6aec17ca7465bde51e395e1928b060b2e24a880 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 16:28:23 +0200 Subject: [PATCH 13/16] ZITIS-845 add license headers --- .../common/api/JiraUser.kt | 19 +++++++++++++++++++ .../common/api/Page.kt | 19 +++++++++++++++++++ .../common/error/AtlassianClientError.kt | 2 +- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/JiraUser.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/JiraUser.kt index 31cad158..e9c1b1bb 100644 --- a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/JiraUser.kt +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/JiraUser.kt @@ -1,3 +1,22 @@ +/*- + * #%L + * kotlin-atlassian-client-core-common + * %% + * Copyright (C) 2022 - 2023 linked-planet GmbH + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ package com.linkedplanet.kotlinatlassianclientcore.common.api import javax.validation.constraints.NotNull diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/Page.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/Page.kt index d8738d63..3942d49a 100644 --- a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/Page.kt +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/api/Page.kt @@ -1,3 +1,22 @@ +/*- + * #%L + * kotlin-atlassian-client-core-common + * %% + * Copyright (C) 2022 - 2023 linked-planet GmbH + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ package com.linkedplanet.kotlinatlassianclientcore.common.api import javax.validation.constraints.NotNull diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt index 47fc19f2..0e9befc8 100644 --- a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt @@ -1,6 +1,6 @@ /*- * #%L - * kotlin-jira-client-api + * kotlin-atlassian-client-core-common * %% * Copyright (C) 2022 - 2023 linked-planet GmbH * %% From 212691f5833f3bb91c95b7e0d15ff41eb77d45e5 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 17:25:50 +0200 Subject: [PATCH 14/16] ZITIS-845 add annotations for potential serialization --- .../common/error/AtlassianClientError.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt index 0e9befc8..573d5919 100644 --- a/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt +++ b/kotlin-atlassian-client-core-common/src/main/kotlin/com/linkedplanet/kotlinatlassianclientcore/common/error/AtlassianClientError.kt @@ -22,11 +22,12 @@ package com.linkedplanet.kotlinatlassianclientcore.common.error import arrow.core.Either +import javax.validation.constraints.NotNull open class AtlassianClientError( - val error: String, - val message: String, - val stacktrace: String = "" + @field:NotNull val error: String, + @field:NotNull val message: String, + @field:NotNull val stacktrace: String = "" ) { companion object } From e6a4cdcecf463644d6ba70ba739d00326fb6e93c Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Thu, 7 Sep 2023 17:26:24 +0200 Subject: [PATCH 15/16] ZITIS-845 get rid of DomainError --- .../error/{DomainError.kt => HttpDomainError.kt} | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) rename kotlin-http-client/kotlin-http-client-api/src/main/kotlin/com/linkedplanet/kotlinhttpclient/error/{DomainError.kt => HttpDomainError.kt} (59%) diff --git a/kotlin-http-client/kotlin-http-client-api/src/main/kotlin/com/linkedplanet/kotlinhttpclient/error/DomainError.kt b/kotlin-http-client/kotlin-http-client-api/src/main/kotlin/com/linkedplanet/kotlinhttpclient/error/HttpDomainError.kt similarity index 59% rename from kotlin-http-client/kotlin-http-client-api/src/main/kotlin/com/linkedplanet/kotlinhttpclient/error/DomainError.kt rename to kotlin-http-client/kotlin-http-client-api/src/main/kotlin/com/linkedplanet/kotlinhttpclient/error/HttpDomainError.kt index be82b53f..634ba0ae 100644 --- a/kotlin-http-client/kotlin-http-client-api/src/main/kotlin/com/linkedplanet/kotlinhttpclient/error/DomainError.kt +++ b/kotlin-http-client/kotlin-http-client-api/src/main/kotlin/com/linkedplanet/kotlinhttpclient/error/HttpDomainError.kt @@ -19,17 +19,4 @@ */ package com.linkedplanet.kotlinhttpclient.error -import com.linkedplanet.kotlinhttpclient.api.http.GSON - -data class DomainErrorObject( - val error: String, - val message: String -) - -open class DomainError(val error: String, val message: String) { - fun toJson(): String = - GSON.toJson(DomainErrorObject(error, message)) -} - -class HttpDomainError(val statusCode: Int, error: String, message: String) : DomainError(error, message) -class ResponseError(message: String) : DomainError("Schnittstellen-Fehler", message) +class HttpDomainError(val statusCode: Int, val error: String, val message: String) From a40241b016e84726e74e3241c58311af25d33442 Mon Sep 17 00:00:00 2001 From: Heiko Guckes Date: Fri, 8 Sep 2023 16:09:18 +0200 Subject: [PATCH 16/16] ZITIS-845 remove unusued code --- .../kotlinjiraclient/util/AssertionExtensions.kt | 8 -------- 1 file changed, 8 deletions(-) diff --git a/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/util/AssertionExtensions.kt b/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/util/AssertionExtensions.kt index bef43720..b872fd64 100644 --- a/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/util/AssertionExtensions.kt +++ b/kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/util/AssertionExtensions.kt @@ -20,17 +20,9 @@ package com.linkedplanet.kotlinjiraclient.util import arrow.core.Either -import com.linkedplanet.kotlinhttpclient.error.DomainError import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError import org.junit.Assert.fail -internal fun Either.rightAsserted(): R { - this.mapLeft { - fail("Unexpected DomainError: ${it.error} - ${it.message}") - } - return this.orNull()!! -} - internal fun Either.rightAssertedJiraClientError(): R { this.mapLeft {