Skip to content

Commit a59b91c

Browse files
committed
add schema to JiraIssueTypeAttribute
1 parent cd4e4e2 commit a59b91c

File tree

4 files changed

+55
-6
lines changed
  • kotlin-jira-client
    • kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model
    • kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/model
    • kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk
    • kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient

4 files changed

+55
-6
lines changed

kotlin-jira-client/kotlin-jira-client-api/src/main/kotlin/com/linkedplanet/kotlinjiraclient/api/model/Model.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,16 @@ data class JiraIssueType(
4343

4444
data class JiraIssueTypeAttribute(
4545
val id: String,
46-
val name: String
46+
val name: String,
47+
val schema: JiraIssueTypeAttributeSchema
48+
)
49+
50+
data class JiraIssueTypeAttributeSchema(
51+
val type: String, // "date" see com.atlassian.jira.issue.fields.rest.json.JsonType
52+
val items: String?, // unclear what this is
53+
val system: String?, // only used if its a system field, e.g. "assignee"
54+
val custom: String?, // e.g. com.atlassian.jira.plugin.system.customfieldtypes:datepicker
55+
val customId: Long? // e.g. 10202
4756
)
4857

4958
data class JiraIssue(

kotlin-jira-client/kotlin-jira-client-http/src/main/kotlin/com/linkedplanet/kotlinjiraclient/http/model/HttpModel.kt

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,34 @@ fun List<HttpJiraIssueType>.toJiraIssueTypes(): List<JiraIssueType> =
9393
map { it.toJiraIssueType() }
9494

9595
data class HttpJiraIssueTypeAttribute(
96+
val required: Boolean,
97+
val schema: HttpJiraIssueTypeAttributeJsonSchema?,
9698
val name: String,
97-
val fieldId: String
99+
val fieldId: String,
100+
val hasDefaultValue: Boolean,
98101
) {
99102
fun toJiraIssueTypeAttribute() =
100-
JiraIssueTypeAttribute(fieldId, name)
103+
JiraIssueTypeAttribute(
104+
fieldId,
105+
name,
106+
JiraIssueTypeAttributeSchema(
107+
schema?.type ?: "Any",
108+
schema?.items,
109+
schema?.system,
110+
schema?.custom,
111+
schema?.customId,
112+
)
113+
)
101114
}
102115

116+
data class HttpJiraIssueTypeAttributeJsonSchema(
117+
val type: String, // "date" see com.atlassian.jira.issue.fields.rest.json.JsonType
118+
val items: String?, // unclear what this is
119+
val system: String?, // only used if its a system field, e.g. "assignee"
120+
val custom: String?, // e.g. com.atlassian.jira.plugin.system.customfieldtypes:datepicker
121+
val customId: Long? // e.g. 10202
122+
)
123+
103124
fun List<HttpJiraIssueTypeAttribute>.toJiraIssueTypeAttributes(): List<JiraIssueTypeAttribute> =
104125
map { it.toJiraIssueTypeAttribute() }
105126

kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraIssueTypeOperator.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,17 @@ import arrow.core.Either
2323
import com.atlassian.jira.bc.project.ProjectService
2424
import com.atlassian.jira.component.ComponentAccessor
2525
import com.atlassian.jira.config.IssueTypeService
26+
import com.atlassian.jira.issue.fields.rest.RestAwareField
27+
import com.atlassian.jira.issue.fields.screen.FieldScreenLayoutItem
28+
import com.atlassian.jira.issue.fields.screen.FieldScreenTab
2629
import com.atlassian.jira.issue.fields.screen.issuetype.IssueTypeScreenSchemeManager
2730
import com.atlassian.jira.issue.issuetype.IssueType
2831
import com.atlassian.jira.issue.operation.IssueOperations
2932
import com.linkedplanet.kotlinjiraclient.api.error.JiraClientError
3033
import com.linkedplanet.kotlinjiraclient.api.interfaces.JiraIssueTypeOperator
3134
import com.linkedplanet.kotlinjiraclient.api.model.JiraIssueType
3235
import com.linkedplanet.kotlinjiraclient.api.model.JiraIssueTypeAttribute
36+
import com.linkedplanet.kotlinjiraclient.api.model.JiraIssueTypeAttributeSchema
3337
import com.linkedplanet.kotlinjiraclient.sdk.util.eitherAndCatch
3438
import com.linkedplanet.kotlinjiraclient.sdk.util.toEither
3539
import javax.inject.Named
@@ -56,9 +60,21 @@ object SdkJiraIssueTypeOperator : JiraIssueTypeOperator {
5660
)
5761
val screenScheme = screenSchemes.getEffectiveFieldScreenScheme(issueType)
5862
val createScreen = screenScheme.getFieldScreen(IssueOperations.CREATE_ISSUE_OPERATION)
59-
val fields = createScreen.tabs.flatMap { screenTab ->
60-
screenTab.fieldScreenLayoutItems.map { layoutItem ->
61-
JiraIssueTypeAttribute(layoutItem.orderableField.id, layoutItem.orderableField.name)
63+
val fields = createScreen.tabs.flatMap { screenTab: FieldScreenTab ->
64+
screenTab.fieldScreenLayoutItems.map { layoutItem: FieldScreenLayoutItem ->
65+
val orderableField = layoutItem.orderableField
66+
val schema = (orderableField as? RestAwareField)?.jsonSchema
67+
JiraIssueTypeAttribute(
68+
id = orderableField.id,
69+
name = orderableField.name,
70+
schema = JiraIssueTypeAttributeSchema(
71+
schema?.type ?: "Any",
72+
schema?.items,
73+
schema?.system,
74+
schema?.custom,
75+
schema?.customId,
76+
)
77+
)
6278
}
6379
}
6480
fields

kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/JiraIssueTypeOperatorTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,8 @@ interface JiraIssueTypeOperatorTest<JiraFieldType> : BaseTestConfigProvider<Jira
6060
val attributeNames = attributes.map(JiraIssueTypeAttribute::name)
6161
assertThat(attributeNames.size, equalTo(attributes.size))
6262
assertThat(attributeNames, hasItems(*expectedAttributes))
63+
64+
assertThat(attributes.firstOrNull { it.name == "Reporter" }?.schema?.type, equalTo("user"))
65+
assertThat(attributes.firstOrNull { it.name == "Summary" }?.schema?.type, equalTo("string"))
6366
}
6467
}

0 commit comments

Comments
 (0)