@@ -22,34 +22,37 @@ package com.linkedplanet.kotlinjiraclient.sdk
2222import arrow.core.Either
2323import arrow.core.raise.either
2424import arrow.core.left
25+ import com.atlassian.jira.bc.project.ProjectService
26+ import com.atlassian.jira.bc.projectroles.ProjectRoleService
2527import com.atlassian.jira.bc.user.search.DefaultAssigneeService
2628import com.atlassian.jira.component.ComponentAccessor
2729import com.atlassian.jira.permission.ProjectPermissions
2830import com.atlassian.jira.project.Project
2931import com.atlassian.jira.security.roles.ProjectRoleActors
30- import com.atlassian.jira.security.roles.ProjectRoleManager
3132import com.atlassian.jira.user.ApplicationUser
3233import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError
3334import com.linkedplanet.kotlinjiraclient.api.interfaces.JiraUserOperator
3435import com.linkedplanet.kotlinatlassianclientcore.common.api.JiraUser
35- import com.linkedplanet.kotlinjiraclient.sdk.util.catchJiraClientError
36+ import com.linkedplanet.kotlinjiraclient.sdk.util.eitherAndCatch
37+ import com.linkedplanet.kotlinjiraclient.sdk.util.toEither
38+ import com.linkedplanet.kotlinjiraclient.sdk.util.withErrorCollection
3639
3740object SdkJiraUserOperator : JiraUserOperator {
3841
39- private val projectManager by lazy { ComponentAccessor .getProjectManager() }
40- private val permissionManager by lazy { ComponentAccessor .getPermissionManager() }
41- private val userUtil by lazy { ComponentAccessor .getUserUtil() }
42- private val jiraAuthenticationContext by lazy { ComponentAccessor .getJiraAuthenticationContext() }
43- private val projectRoleManager by lazy { ComponentAccessor .getComponent( ProjectRoleManager :: class .java) }
44- private val avatarService by lazy { ComponentAccessor .getAvatarService() }
45- private val defaultAssigneeService by lazy { ComponentAccessor .getComponent( DefaultAssigneeService :: class .java) }
42+ private val projectService = ComponentAccessor .getComponent( ProjectService :: class .java)
43+ private val permissionManager = ComponentAccessor .getPermissionManager()
44+ private val userUtil = ComponentAccessor .getUserUtil()
45+ private val projectRoleService = ComponentAccessor .getComponent( ProjectRoleService :: class .java)
46+ private val avatarService = ComponentAccessor .getAvatarService()
47+ private val defaultAssigneeService = ComponentAccessor .getComponent( DefaultAssigneeService :: class .java)
48+ private val jiraAuthenticationContext = ComponentAccessor .getJiraAuthenticationContext()
4649
47- private fun loggedInUser () = jiraAuthenticationContext.loggedInUser
50+ private fun user () = jiraAuthenticationContext.loggedInUser
4851
4952 override suspend fun getAssignableUsersByProjectKey (projectKey : String ): Either <JiraClientError , List <JiraUser >> =
50- Either .catchJiraClientError {
53+ eitherAndCatch {
5154 val project =
52- projectManager.getProjectByCurrentKey( projectKey)
55+ projectService.getProjectByKey(user(), projectKey).toEither().bind().project
5356 ? : return createProjectNotFoundError(projectKey).left()
5457 val users = defaultAssigneeService.findAssignableUsers(" " , project)
5558 users.map { it.toJiraUser() }
@@ -76,12 +79,14 @@ object SdkJiraUserOperator : JiraUserOperator {
7679 private fun filteredProjectUsers (
7780 projectKey : String ,
7881 predicate : (Project , ApplicationUser ) -> Boolean
79- ): Either <JiraClientError , List <JiraUser >> = Either .catchJiraClientError {
80- val project =
81- projectManager.getProjectByCurrentKey(projectKey) ? : return createProjectNotFoundError(projectKey).left()
82+ ): Either <JiraClientError , List <JiraUser >> = eitherAndCatch {
83+ val project = projectService.getProjectByKey(user(), projectKey).toEither().bind().project
84+ ? : return createProjectNotFoundError(projectKey).left()
8285
83- projectRoleManager.projectRoles
84- .map { projectRole -> projectRoleManager.getProjectRoleActors(projectRole, project) }
86+ withErrorCollection { projectRoleService.getProjectRoles(it) }.bind()
87+ .map { projectRole ->
88+ withErrorCollection { projectRoleService.getProjectRoleActors(projectRole, project, it) }.bind()
89+ }
8590 .flatMap(ProjectRoleActors ::getUsers)
8691 .filter { predicate(project, it) }
8792 .map { it.toJiraUser() }
@@ -100,7 +105,7 @@ object SdkJiraUserOperator : JiraUserOperator {
100105 }
101106
102107 private fun ApplicationUser.toJiraUser (): JiraUser {
103- val avatarUrl = avatarService.getAvatarURL(loggedInUser (), this ).toASCIIString()
108+ val avatarUrl = avatarService.getAvatarURL(user (), this ).toASCIIString()
104109 return JiraUser (key, name, emailAddress, avatarUrl, displayName)
105110 }
106111}
0 commit comments