Skip to content

Commit 1cb5e54

Browse files
authored
Fix/jira base url not updated (#27)
* do not cache the jiraBaseUrl Otherwise a change of the base url requires a restart of the plugin * remove by lazy from insight sdk implementation * remove "by lazy" from insight sdk operators * unify component access for JiraSdk implementation * extract getSpecificAttributesOfIssueType this functionality is not available through the common interface
1 parent 3c654dd commit 1cb5e54

18 files changed

+196
-106
lines changed

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightAttachmentOperator.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* #%L
33
* kotlin-insight-client-sdk
44
* %%
5-
* Copyright (C) 2022 - 2023 linked-planet GmbH
5+
* Copyright (C) 2022 - 2024 linked-planet GmbH
66
* %%
77
* Licensed under the Apache License, Version 2.0 (the "License");
88
* you may not use this file except in compliance with the License.
@@ -21,7 +21,6 @@ package com.linkedplanet.kotlininsightclient.sdk
2121

2222
import arrow.core.Either
2323
import arrow.core.raise.either
24-
import com.atlassian.jira.component.ComponentAccessor.getOSGiComponentInstanceOfType
2524
import com.linkedplanet.kotlininsightclient.api.error.InsightClientError
2625
import com.linkedplanet.kotlininsightclient.api.interfaces.InsightAttachmentOperator
2726
import com.linkedplanet.kotlininsightclient.api.model.AttachmentId
@@ -30,6 +29,7 @@ import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId
3029
import com.linkedplanet.kotlininsightclient.sdk.services.ReverseEngineeredAttachmentUrlResolver
3130
import com.linkedplanet.kotlininsightclient.sdk.services.ReverseEngineeredFileManager
3231
import com.linkedplanet.kotlininsightclient.sdk.util.catchAsInsightClientError
32+
import com.linkedplanet.kotlininsightclient.sdk.util.getOSGiComponent
3333
import com.linkedplanet.kotlininsightclient.sdk.util.toISOString
3434
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectFacade
3535
import com.riadalabs.jira.plugins.insight.services.model.AttachmentBean
@@ -49,10 +49,10 @@ import kotlin.io.path.createTempFile
4949

5050
object SdkInsightAttachmentOperator : InsightAttachmentOperator {
5151

52-
private val objectFacade by lazy { getOSGiComponentInstanceOfType(ObjectFacade::class.java) }
52+
private val objectFacade: ObjectFacade by getOSGiComponent()
5353

54-
private val fileManager by lazy { ReverseEngineeredFileManager() }
55-
private val attachmentUrlResolver by lazy { ReverseEngineeredAttachmentUrlResolver() }
54+
private val fileManager = ReverseEngineeredFileManager()
55+
private val attachmentUrlResolver = ReverseEngineeredAttachmentUrlResolver()
5656

5757
override suspend fun getAttachments(objectId: InsightObjectId): Either<InsightClientError, List<InsightAttachment>> =
5858
catchAsInsightClientError {

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightHistoryOperator.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* #%L
33
* kotlin-insight-client-api
44
* %%
5-
* Copyright (C) 2022 - 2023 linked-planet GmbH
5+
* Copyright (C) 2022 - 2024 linked-planet GmbH
66
* %%
77
* Licensed under the Apache License, Version 2.0 (the "License");
88
* you may not use this file except in compliance with the License.
@@ -20,21 +20,21 @@
2020
package com.linkedplanet.kotlininsightclient.sdk
2121

2222
import arrow.core.Either
23-
import com.atlassian.jira.component.ComponentAccessor
2423
import com.linkedplanet.kotlininsightclient.api.error.InsightClientError
2524
import com.linkedplanet.kotlininsightclient.api.interfaces.InsightHistoryOperator
2625
import com.linkedplanet.kotlininsightclient.api.model.Actor
2726
import com.linkedplanet.kotlininsightclient.api.model.InsightHistory
2827
import com.linkedplanet.kotlininsightclient.api.model.InsightHistoryItem
2928
import com.linkedplanet.kotlininsightclient.api.model.InsightObjectId
3029
import com.linkedplanet.kotlininsightclient.sdk.util.catchAsInsightClientError
30+
import com.linkedplanet.kotlininsightclient.sdk.util.getOSGiComponent
3131
import com.linkedplanet.kotlininsightclient.sdk.util.toISOString
3232
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectFacade
3333
import com.riadalabs.jira.plugins.insight.services.model.ObjectHistoryBean
3434

3535
object SdkInsightHistoryOperator : InsightHistoryOperator {
3636

37-
private val objectFacade by lazy { ComponentAccessor.getOSGiComponentInstanceOfType(ObjectFacade::class.java) }
37+
private val objectFacade: ObjectFacade by getOSGiComponent()
3838

3939
override suspend fun getHistory(objectId: InsightObjectId): Either<InsightClientError, InsightHistory> =
4040
catchAsInsightClientError {

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* #%L
33
* kotlin-insight-client-sdk
44
* %%
5-
* Copyright (C) 2022 - 2023 linked-planet GmbH
5+
* Copyright (C) 2022 - 2024 linked-planet GmbH
66
* %%
77
* Licensed under the Apache License, Version 2.0 (the "License");
88
* you may not use this file except in compliance with the License.
@@ -26,7 +26,6 @@ import arrow.core.raise.either
2626
import arrow.core.right
2727
import com.atlassian.jira.bc.project.ProjectService
2828
import com.atlassian.jira.component.ComponentAccessor
29-
import com.atlassian.jira.component.ComponentAccessor.getOSGiComponentInstanceOfType
3029
import com.atlassian.jira.config.properties.ApplicationProperties
3130
import com.atlassian.jira.user.util.UserManager
3231
import com.linkedplanet.kotlinatlassianclientcore.common.api.StatusAttribute
@@ -55,6 +54,7 @@ import com.linkedplanet.kotlininsightclient.sdk.SdkInsightObjectTypeOperator.typ
5554
import com.linkedplanet.kotlininsightclient.sdk.services.ReverseEngineeredDateTimeFormatterInJira
5655
import com.linkedplanet.kotlininsightclient.sdk.services.ReverseEngineeredVersionAssembler
5756
import com.linkedplanet.kotlininsightclient.sdk.util.catchAsInsightClientError
57+
import com.linkedplanet.kotlininsightclient.sdk.util.getOSGiComponent
5858
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ConfigureFacade
5959
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.IQLFacade
6060
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectFacade
@@ -80,15 +80,15 @@ object SdkInsightObjectOperator : InsightObjectOperator {
8080

8181
override var RESULTS_PER_PAGE: Int = 25
8282

83-
private val objectFacade by lazy { getOSGiComponentInstanceOfType(ObjectFacade::class.java) }
84-
private val objectTypeFacade by lazy { getOSGiComponentInstanceOfType(ObjectTypeFacade::class.java) }
85-
private val configureFacade by lazy { getOSGiComponentInstanceOfType(ConfigureFacade::class.java) }
86-
private val userManager by lazy { getOSGiComponentInstanceOfType(UserManager::class.java) }
87-
private val objectTypeAttributeFacade by lazy { getOSGiComponentInstanceOfType(ObjectTypeAttributeFacade::class.java) }
88-
private val iqlFacade by lazy { getOSGiComponentInstanceOfType(IQLFacade::class.java) }
89-
private val objectAttributeBeanFactory by lazy { getOSGiComponentInstanceOfType(ObjectAttributeBeanFactory::class.java) }
90-
private val baseUrl by lazy { getOSGiComponentInstanceOfType(ApplicationProperties::class.java).getString("jira.baseurl")!! }
91-
private val projectService by lazy { getOSGiComponentInstanceOfType(ProjectService::class.java) }
83+
private val objectFacade : ObjectFacade by getOSGiComponent()
84+
private val objectTypeFacade: ObjectTypeFacade by getOSGiComponent()
85+
private val configureFacade: ConfigureFacade by getOSGiComponent()
86+
private val userManager: UserManager by getOSGiComponent()
87+
private val objectTypeAttributeFacade: ObjectTypeAttributeFacade by getOSGiComponent()
88+
private val iqlFacade: IQLFacade by getOSGiComponent()
89+
private val objectAttributeBeanFactory: ObjectAttributeBeanFactory by getOSGiComponent()
90+
private val applicationProperties: ApplicationProperties by getOSGiComponent()
91+
private val projectService: ProjectService by getOSGiComponent()
9292

9393
private val versionAssembler = ReverseEngineeredVersionAssembler()
9494
private val dateTimeFormatter = ReverseEngineeredDateTimeFormatterInJira()
@@ -98,6 +98,7 @@ object SdkInsightObjectOperator : InsightObjectOperator {
9898
private val zoneId: ZoneId = ZoneId.of("Z")
9999

100100
private fun user() = jiraAuthenticationContext.loggedInUser
101+
private fun baseUrl() = applicationProperties.jiraBaseUrl
101102

102103
override suspend fun <T> getObjectById(
103104
id: InsightObjectId,
@@ -366,7 +367,7 @@ object SdkInsightObjectOperator : InsightObjectOperator {
366367
attributes
367368
.singleOrNull { it.schema?.name == "Link" }
368369
?.toString()
369-
?: "${baseUrl}/secure/insight/assets/${objectBean.objectKey}"
370+
?: "${baseUrl()}/secure/insight/assets/${objectBean.objectKey}"
370371

371372
InsightObject(
372373
InsightObjectTypeId(objectBean.objectTypeId),
@@ -414,7 +415,7 @@ object SdkInsightObjectOperator : InsightObjectOperator {
414415
val groups = objectAttributeBean.objectAttributeValueBeans.mapNotNull { attribute ->
415416
JiraGroup(
416417
attribute.textValue,
417-
"$baseUrl/download/resources/com.riadalabs.jira.plugins.insight/images/${"group-logo.jpg"}"
418+
"${baseUrl()}/download/resources/com.riadalabs.jira.plugins.insight/images/${"group-logo.jpg"}"
418419
)
419420
}
420421
InsightAttribute.Group(attributeId, groups, schema)
@@ -435,8 +436,8 @@ object SdkInsightObjectOperator : InsightObjectOperator {
435436
val projects = objectAttributeBean.objectAttributeValueBeans
436437
.mapNotNull { projectService.getProjectById(user(), it.integerValue.toLong()).project }
437438
.map {
438-
val url = "$baseUrl/browse/${it.key}"
439-
val avatarUrl = "$baseUrl/secure/projectavatar?pid=${it.id}"
439+
val url = "${baseUrl()}/browse/${it.key}"
440+
val avatarUrl = "${baseUrl()}/secure/projectavatar?pid=${it.id}"
440441
JiraProject(it.id, it.key, it.name, url, avatarUrl)
441442
}
442443

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectTypeOperator.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* #%L
33
* kotlin-insight-client-api
44
* %%
5-
* Copyright (C) 2022 - 2023 linked-planet GmbH
5+
* Copyright (C) 2022 - 2024 linked-planet GmbH
66
* %%
77
* Licensed under the Apache License, Version 2.0 (the "License");
88
* you may not use this file except in compliance with the License.
@@ -20,7 +20,6 @@
2020
package com.linkedplanet.kotlininsightclient.sdk
2121

2222
import arrow.core.Either
23-
import com.atlassian.jira.component.ComponentAccessor.getOSGiComponentInstanceOfType
2423
import com.linkedplanet.kotlininsightclient.api.error.InsightClientError
2524
import com.linkedplanet.kotlininsightclient.api.interfaces.InsightObjectTypeOperator
2625
import com.linkedplanet.kotlininsightclient.api.model.InsightAttributeId
@@ -30,15 +29,16 @@ import com.linkedplanet.kotlininsightclient.api.model.ObjectTypeSchema
3029
import com.linkedplanet.kotlininsightclient.api.model.ObjectTypeSchemaAttribute
3130
import com.linkedplanet.kotlininsightclient.api.model.ReferenceKind
3231
import com.linkedplanet.kotlininsightclient.sdk.util.catchAsInsightClientError
32+
import com.linkedplanet.kotlininsightclient.sdk.util.getOSGiComponent
3333
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectTypeAttributeFacade
3434
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectTypeFacade
3535
import com.riadalabs.jira.plugins.insight.services.model.ObjectTypeAttributeBean
3636
import com.riadalabs.jira.plugins.insight.services.model.ObjectTypeBean
3737

3838
object SdkInsightObjectTypeOperator : InsightObjectTypeOperator {
3939

40-
private val objectTypeFacade by lazy { getOSGiComponentInstanceOfType(ObjectTypeFacade::class.java) }
41-
private val objectTypeAttributeFacade by lazy { getOSGiComponentInstanceOfType(ObjectTypeAttributeFacade::class.java) }
40+
private val objectTypeFacade: ObjectTypeFacade by getOSGiComponent()
41+
private val objectTypeAttributeFacade: ObjectTypeAttributeFacade by getOSGiComponent()
4242

4343
override suspend fun getObjectType(objectTypeId: InsightObjectTypeId): Either<InsightClientError, ObjectTypeSchema> =
4444
catchAsInsightClientError {

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightSchemaOperator.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* #%L
33
* kotlin-insight-client-api
44
* %%
5-
* Copyright (C) 2022 - 2023 linked-planet GmbH
5+
* Copyright (C) 2022 - 2024 linked-planet GmbH
66
* %%
77
* Licensed under the Apache License, Version 2.0 (the "License");
88
* you may not use this file except in compliance with the License.
@@ -20,22 +20,22 @@
2020
package com.linkedplanet.kotlininsightclient.sdk
2121

2222
import arrow.core.Either
23-
import com.atlassian.jira.component.ComponentAccessor
2423
import com.linkedplanet.kotlininsightclient.api.error.InsightClientError
2524
import com.linkedplanet.kotlininsightclient.api.interfaces.InsightSchemaOperator
2625
import com.linkedplanet.kotlininsightclient.api.model.InsightSchema
2726
import com.linkedplanet.kotlininsightclient.api.model.InsightSchemaId
2827
import com.linkedplanet.kotlininsightclient.sdk.util.catchAsInsightClientError
28+
import com.linkedplanet.kotlininsightclient.sdk.util.getOSGiComponent
2929
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectFacade
3030
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectSchemaFacade
3131
import com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectTypeFacade
3232
import com.riadalabs.jira.plugins.insight.services.model.ObjectSchemaBean
3333

3434
object SdkInsightSchemaOperator : InsightSchemaOperator {
3535

36-
private val objectSchemaFacade by lazy { ComponentAccessor.getOSGiComponentInstanceOfType(ObjectSchemaFacade::class.java) }
37-
private val objectTypeFacade by lazy { ComponentAccessor.getOSGiComponentInstanceOfType(ObjectTypeFacade::class.java) }
38-
private val objectFacade by lazy { ComponentAccessor.getOSGiComponentInstanceOfType(ObjectFacade::class.java) }
36+
private val objectSchemaFacade: ObjectSchemaFacade by getOSGiComponent()
37+
private val objectTypeFacade: ObjectTypeFacade by getOSGiComponent()
38+
private val objectFacade: ObjectFacade by getOSGiComponent()
3939

4040
override suspend fun getSchemas(): Either<InsightClientError, List<InsightSchema>> =
4141
catchAsInsightClientError {

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/services/ReverseEngineeredAttachmentUrlResolver.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
*/
2020
package com.linkedplanet.kotlininsightclient.sdk.services
2121

22-
import com.atlassian.jira.component.ComponentAccessor.getComponent
2322
import com.atlassian.jira.config.properties.ApplicationProperties
23+
import com.linkedplanet.kotlininsightclient.sdk.util.getComponent
2424

2525
import com.riadalabs.jira.plugins.insight.services.model.AttachmentBean
2626
import java.util.regex.Pattern
@@ -32,17 +32,15 @@ import java.util.regex.Pattern
3232
*/
3333
internal class ReverseEngineeredAttachmentUrlResolver {
3434

35-
private val applicationProperties by lazy { getComponent(ApplicationProperties::class.java) }
35+
private val applicationProperties: ApplicationProperties by getComponent()
3636

3737
private val pattern = Pattern.compile(".*/(\\d+)/?")
3838
private val INSIGHT_REST_BASE_URL = "/rest/insight/1.0"
3939

40-
private fun getInsightBaseUrl(): String {
41-
return applicationProperties.getString("jira.baseurl")!!
42-
}
40+
private fun baseUrl(): String = applicationProperties.jiraBaseUrl
4341

4442
private fun getInsightRestBaseUrl(): String {
45-
val insightBaseUrl = getInsightBaseUrl()
43+
val insightBaseUrl = baseUrl()
4644
return insightBaseUrl + INSIGHT_REST_BASE_URL
4745
}
4846

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/services/ReverseEngineeredDateTimeFormatter.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,22 @@
1919
*/
2020
package com.linkedplanet.kotlininsightclient.sdk.services
2121

22-
import com.atlassian.jira.component.ComponentAccessor
23-
import com.atlassian.jira.component.ComponentAccessor.getComponent
2422
import com.atlassian.jira.datetime.DateTimeFormatter
2523
import com.atlassian.jira.datetime.DateTimeFormatterFactory
2624
import com.atlassian.jira.datetime.DateTimeStyle
25+
import com.atlassian.jira.security.JiraAuthenticationContext
26+
import com.linkedplanet.kotlininsightclient.sdk.util.getComponent
2727
import java.util.*
2828

2929
/**
3030
* Thin layer around Jira DateTime parsing. Kotlin version of
3131
* com.riadalabs.jira.plugins.insight.common.tools.InsightDateTimeFormatterInJira
3232
*/
33+
@Suppress("unused") // because it is a utility class
3334
internal class ReverseEngineeredDateTimeFormatterInJira {
3435

35-
private val formatterFactory by lazy { getComponent(DateTimeFormatterFactory::class.java) }
36-
private val jiraAuthenticationContext by lazy { ComponentAccessor.getJiraAuthenticationContext() }
36+
private val formatterFactory: DateTimeFormatterFactory by getComponent()
37+
private val jiraAuthenticationContext: JiraAuthenticationContext by getComponent()
3738
private fun loggedInUser() = jiraAuthenticationContext.loggedInUser
3839

3940
fun parseToDate(date: String?): Date? =

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/services/ReverseEngineeredFileManager.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
*/
2020
package com.linkedplanet.kotlininsightclient.sdk.services
2121

22-
import com.atlassian.jira.component.ComponentAccessor.getComponent
2322
import com.atlassian.jira.config.util.AttachmentPathManager
2423
import com.atlassian.jira.issue.AttachmentManager
24+
import com.linkedplanet.kotlininsightclient.sdk.util.getComponent
2525
import java.io.File
2626
import java.io.FileInputStream
2727
import java.io.FileNotFoundException
@@ -35,8 +35,8 @@ import java.io.InputStream
3535
*/
3636
internal class ReverseEngineeredFileManager{
3737

38-
private val attachmentManager by lazy { getComponent(AttachmentManager::class.java) }
39-
private val attachmentPathManager by lazy { getComponent(AttachmentPathManager::class.java) }
38+
private val attachmentManager: AttachmentManager by getComponent()
39+
private val attachmentPathManager: AttachmentPathManager by getComponent()
4040

4141
@Throws(FileNotFoundException::class)
4242
fun getObjectAttachmentContent(objectId: Int, attachmentFileName: String): InputStream {

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/services/ReverseEngineeredVersionAssembler.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,23 @@ package com.linkedplanet.kotlininsightclient.sdk.services
2222
import com.atlassian.jira.bc.project.ProjectService
2323
import com.atlassian.jira.bc.project.version.VersionService
2424
import com.atlassian.jira.component.ComponentAccessor
25-
import com.atlassian.jira.component.ComponentAccessor.getOSGiComponentInstanceOfType
2625
import com.atlassian.jira.config.properties.ApplicationProperties
2726
import com.linkedplanet.kotlinatlassianclientcore.common.api.ProjectVersion
2827
import com.atlassian.jira.project.version.Version
28+
import com.linkedplanet.kotlininsightclient.sdk.util.getComponent
29+
import com.linkedplanet.kotlininsightclient.sdk.util.getOSGiComponent
2930

3031
/**
3132
* Kotlin Version of com.riadalabs.jira.plugins.insight.channel.web.api.rest.services.version.VersionAssemblerInJira
3233
*/
3334
class ReverseEngineeredVersionAssembler {
3435

35-
private val projectService by lazy { getOSGiComponentInstanceOfType(ProjectService::class.java) }
36-
private val versionService by lazy { getOSGiComponentInstanceOfType(VersionService::class.java) }
37-
private val baseUrl = getOSGiComponentInstanceOfType(ApplicationProperties::class.java).getString("jira.baseurl")!!
36+
private val projectService: ProjectService by getOSGiComponent()
37+
private val versionService: VersionService by getOSGiComponent()
38+
private val applicationProperties: ApplicationProperties by getComponent()
3839
private val jiraAuthenticationContext = ComponentAccessor.getJiraAuthenticationContext()
3940
private fun user() = jiraAuthenticationContext.loggedInUser
41+
private fun baseUrl(): String = applicationProperties.jiraBaseUrl
4042

4143
fun assembleVersion(id: Long): ProjectVersion {
4244
val version: Version = versionService.getVersionById(user(), id).version
@@ -45,15 +47,15 @@ class ReverseEngineeredVersionAssembler {
4547
return ProjectVersion(
4648
id = id.toInt(),
4749
name = version.name,
48-
avatarUrl = "$baseUrl/download/resources/com.riadalabs.jira.plugins.insight/images/version-logo.png",
49-
url = "$baseUrl/browse/${project?.key ?: -1}/fixforversion/${id}/?selectedTab=com.riadalabs.jira.plugins.insight:rlabs-version-summary-panel"
50+
avatarUrl = "${baseUrl()}/download/resources/com.riadalabs.jira.plugins.insight/images/version-logo.png",
51+
url = "${baseUrl()}/browse/${project?.key ?: -1}/fixforversion/${id}/?selectedTab=com.riadalabs.jira.plugins.insight:rlabs-version-summary-panel"
5052
)
5153
}
5254

5355
private fun createEmptyVersion(id: Long) = ProjectVersion(
5456
id = id.toInt(),
5557
name = "Unknown",
56-
avatarUrl = "$baseUrl/download/resources/com.riadalabs.jira.plugins.insight/images/version-logo.png",
58+
avatarUrl = "${baseUrl()}/download/resources/com.riadalabs.jira.plugins.insight/images/version-logo.png",
5759
url = "javascript:void(0);" // returns undefined when called
5860
)
5961
}

0 commit comments

Comments
 (0)