Skip to content

Commit f1d19ce

Browse files
committed
add discriminator property for compatibility with Gson
1 parent d2dd07f commit f1d19ce

File tree

1 file changed

+69
-42
lines changed
  • kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model

1 file changed

+69
-42
lines changed

kotlin-insight-client/kotlin-insight-client-api/src/main/kotlin/com/linkedplanet/kotlininsightclient/api/model/Model.kt

Lines changed: 69 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ data class InsightReference(
9595
* Holds the actual data value(s)
9696
*/
9797
@Schema(
98+
discriminatorProperty = "type", // improves compatibility with Gson serialization
9899
oneOf = [
99100
InsightAttribute.Text::class,
100101
InsightAttribute.Integer::class,
@@ -121,7 +122,8 @@ data class InsightReference(
121122
sealed class InsightAttribute(
122123
@get:JvmName("getAttributeId")
123124
@field:NotNull val attributeId: InsightAttributeId,
124-
val schema: ObjectTypeSchemaAttribute?
125+
val schema: ObjectTypeSchemaAttribute?,
126+
@field:NotNull val type: AttributeTypeEnum
125127
) {
126128
val isValueAttribute: Boolean by lazy {
127129
when (this) {
@@ -149,33 +151,33 @@ sealed class InsightAttribute(
149151
}
150152
}
151153

152-
class Text(attributeId: InsightAttributeId, val value: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
153-
class Integer(attributeId: InsightAttributeId,val value: Int?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
154-
class Bool(attributeId: InsightAttributeId,val value: Boolean?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
155-
class DoubleNumber(attributeId: InsightAttributeId,val value: Double?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
156-
class Date(attributeId: InsightAttributeId,val value: LocalDate?, val displayValue: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
154+
class Text(attributeId: InsightAttributeId, val value: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Text)
155+
class Integer(attributeId: InsightAttributeId,val value: Int?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Integer)
156+
class Bool(attributeId: InsightAttributeId,val value: Boolean?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Bool)
157+
class DoubleNumber(attributeId: InsightAttributeId,val value: Double?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.DoubleNumber)
158+
class Date(attributeId: InsightAttributeId,val value: LocalDate?, val displayValue: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Date)
157159
/**
158160
* Note that time is part of the Enum inside the SDK, but is not selectable through the Insight GUI
159161
*/
160-
class Time(attributeId: InsightAttributeId,val value: LocalTime?, val displayValue: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
161-
class DateTime(attributeId: InsightAttributeId,val value: ZonedDateTime?, val displayValue: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
162-
class Email(attributeId: InsightAttributeId,val value: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
163-
class Textarea(attributeId: InsightAttributeId,val value: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
164-
class Ipaddress(attributeId: InsightAttributeId,val value: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
162+
class Time(attributeId: InsightAttributeId,val value: LocalTime?, val displayValue: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Time)
163+
class DateTime(attributeId: InsightAttributeId,val value: ZonedDateTime?, val displayValue: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.DateTime)
164+
class Email(attributeId: InsightAttributeId,val value: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Email)
165+
class Textarea(attributeId: InsightAttributeId,val value: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum. Textarea)
166+
class Ipaddress(attributeId: InsightAttributeId,val value: String?, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Ipaddress)
165167

166168
// cardinality > 1
167-
class Url(attributeId: InsightAttributeId,val values: List<String>, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
168-
class Select(attributeId: InsightAttributeId,val values: List<String>, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
169+
class Url(attributeId: InsightAttributeId,val values: List<String>, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Url)
170+
class Select(attributeId: InsightAttributeId,val values: List<String>, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Select)
169171

170172
// non default types
171-
class Reference(attributeId: InsightAttributeId,@field:NotNull val referencedObjects: List<ReferencedObject>, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
172-
class User(attributeId: InsightAttributeId,@field:NotNull val users: List<InsightUser>, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
173-
class Confluence(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema) // A value that describes a page in Confluence
174-
class Group(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema) // The Insight Group type
175-
class Version(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema) // Value describing a version in Jira
176-
class Project(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?): InsightAttribute(attributeId, schema) // Value that represents a Jira project
177-
class Status(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema) // An Insight status type that can be associated with objects Cardinality:0-1
178-
class Unknown(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema)
173+
class Reference(attributeId: InsightAttributeId,@field:NotNull val referencedObjects: List<ReferencedObject>, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Reference)
174+
class User(attributeId: InsightAttributeId,@field:NotNull val users: List<InsightUser>, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.User)
175+
class Confluence(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Confluence) // A value that describes a page in Confluence
176+
class Group(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Group) // The Insight Group type
177+
class Version(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Version) // Value describing a version in Jira
178+
class Project(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?): InsightAttribute(attributeId, schema, AttributeTypeEnum.Project) // Value that represents a Jira project
179+
class Status(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Status) // An Insight status type that can be associated with objects Cardinality:0-1
180+
class Unknown(attributeId: InsightAttributeId, schema: ObjectTypeSchemaAttribute?) : InsightAttribute(attributeId, schema, AttributeTypeEnum.Unknown)
179181

180182
override fun toString(): String = when (this) {
181183
is Text -> value ?: ""
@@ -260,6 +262,29 @@ sealed class InsightAttribute(
260262

261263
}
262264

265+
enum class AttributeTypeEnum {
266+
Text,
267+
Integer,
268+
Bool,
269+
DoubleNumber,
270+
Select,
271+
Date,
272+
Time,
273+
DateTime,
274+
Url,
275+
Email,
276+
Textarea,
277+
Ipaddress,
278+
Reference,
279+
User,
280+
Confluence,
281+
Group,
282+
Version,
283+
Project,
284+
Status,
285+
Unknown,
286+
}
287+
263288
// region InsightObjectTypeOperator
264289
data class ObjectTypeSchema(
265290
@get:JvmName("getId")
@@ -271,6 +296,7 @@ data class ObjectTypeSchema(
271296
)
272297

273298
@Schema(
299+
discriminatorProperty = "type",
274300
oneOf = [
275301
ObjectTypeSchemaAttribute.TextSchema::class,
276302
ObjectTypeSchemaAttribute.IntegerSchema::class,
@@ -300,7 +326,8 @@ sealed class ObjectTypeSchemaAttribute(
300326
@field:NotNull val name: String, // attributeName
301327
@field:NotNull val minimumCardinality: Int,
302328
@field:NotNull val maximumCardinality: Int,
303-
@field:NotNull val includeChildObjectTypes: Boolean
329+
@field:NotNull val includeChildObjectTypes: Boolean,
330+
@field:NotNull val type: AttributeTypeEnum
304331
) {
305332

306333
val isValueAttribute: Boolean by lazy {
@@ -336,7 +363,7 @@ sealed class ObjectTypeSchemaAttribute(
336363
maximumCardinality: Int,
337364
includeChildObjectTypes: Boolean,
338365
@field:NotNull val options: List<String>,
339-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
366+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Select)
340367

341368
class ReferenceSchema(
342369
id: InsightAttributeId,
@@ -347,7 +374,7 @@ sealed class ObjectTypeSchemaAttribute(
347374
@get:JvmName("getReferenceObjectTypeId")
348375
@field:NotNull val referenceObjectTypeId: InsightObjectTypeId, // objectTypeId of the referenced object
349376
@field:NotNull val referenceKind: ReferenceKind
350-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
377+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Reference)
351378

352379
class UnknownSchema(
353380
id: InsightAttributeId,
@@ -356,7 +383,7 @@ sealed class ObjectTypeSchemaAttribute(
356383
maximumCardinality: Int,
357384
includeChildObjectTypes: Boolean,
358385
@field:NotNull val debugDescription: String
359-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
386+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Unknown)
360387

361388
// region types having just the superclass attributes
362389
class TextSchema(
@@ -365,120 +392,120 @@ sealed class ObjectTypeSchemaAttribute(
365392
minimumCardinality: Int,
366393
maximumCardinality: Int,
367394
includeChildObjectTypes: Boolean,
368-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
395+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Text)
369396
class IntegerSchema(
370397
id: InsightAttributeId,
371398
name: String,
372399
minimumCardinality: Int,
373400
maximumCardinality: Int,
374401
includeChildObjectTypes: Boolean,
375-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
402+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Integer)
376403
class BoolSchema(
377404
id: InsightAttributeId,
378405
name: String,
379406
minimumCardinality: Int,
380407
maximumCardinality: Int,
381408
includeChildObjectTypes: Boolean,
382-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
409+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Bool)
383410
class DoubleNumberSchema(
384411
id: InsightAttributeId,
385412
name: String,
386413
minimumCardinality: Int,
387414
maximumCardinality: Int,
388415
includeChildObjectTypes: Boolean,
389-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
416+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.DoubleNumber)
390417
class DateSchema(
391418
id: InsightAttributeId,
392419
name: String,
393420
minimumCardinality: Int,
394421
maximumCardinality: Int,
395422
includeChildObjectTypes: Boolean,
396-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
423+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Date)
397424
class TimeSchema(
398425
id: InsightAttributeId,
399426
name: String,
400427
minimumCardinality: Int,
401428
maximumCardinality: Int,
402429
includeChildObjectTypes: Boolean,
403-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
430+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Time)
404431
class DateTimeSchema(
405432
id: InsightAttributeId,
406433
name: String,
407434
minimumCardinality: Int,
408435
maximumCardinality: Int,
409436
includeChildObjectTypes: Boolean,
410-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
437+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.DateTime)
411438
class UrlSchema(
412439
id: InsightAttributeId,
413440
name: String,
414441
minimumCardinality: Int,
415442
maximumCardinality: Int,
416443
includeChildObjectTypes: Boolean,
417-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
444+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Url)
418445
class EmailSchema(
419446
id: InsightAttributeId,
420447
name: String,
421448
minimumCardinality: Int,
422449
maximumCardinality: Int,
423450
includeChildObjectTypes: Boolean,
424-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
451+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Email)
425452
class TextareaSchema(
426453
id: InsightAttributeId,
427454
name: String,
428455
minimumCardinality: Int,
429456
maximumCardinality: Int,
430457
includeChildObjectTypes: Boolean,
431-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
458+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Textarea)
432459
class IpaddressSchema(
433460
id: InsightAttributeId,
434461
name: String,
435462
minimumCardinality: Int,
436463
maximumCardinality: Int,
437464
includeChildObjectTypes: Boolean,
438-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
465+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Ipaddress)
439466

440467
class UserSchema(
441468
id: InsightAttributeId,
442469
name: String,
443470
minimumCardinality: Int,
444471
maximumCardinality: Int,
445472
includeChildObjectTypes: Boolean,
446-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
473+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.User)
447474
class ConfluenceSchema(
448475
id: InsightAttributeId,
449476
name: String,
450477
minimumCardinality: Int,
451478
maximumCardinality: Int,
452479
includeChildObjectTypes: Boolean,
453-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
480+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Confluence)
454481
class GroupSchema(
455482
id: InsightAttributeId,
456483
name: String,
457484
minimumCardinality: Int,
458485
maximumCardinality: Int,
459486
includeChildObjectTypes: Boolean,
460-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
487+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Group)
461488
class VersionSchema(
462489
id: InsightAttributeId,
463490
name: String,
464491
minimumCardinality: Int,
465492
maximumCardinality: Int,
466493
includeChildObjectTypes: Boolean,
467-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
494+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Version)
468495
class ProjectSchema(
469496
id: InsightAttributeId,
470497
name: String,
471498
minimumCardinality: Int,
472499
maximumCardinality: Int,
473500
includeChildObjectTypes: Boolean,
474-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
501+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Project)
475502
class StatusSchema(
476503
id: InsightAttributeId,
477504
name: String,
478505
minimumCardinality: Int,
479506
maximumCardinality: Int,
480507
includeChildObjectTypes: Boolean,
481-
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes)
508+
) : ObjectTypeSchemaAttribute(id, name, minimumCardinality, maximumCardinality, includeChildObjectTypes, AttributeTypeEnum.Status)
482509

483510
// endregion types having just the superclass attributes
484511
}

0 commit comments

Comments
 (0)