Skip to content

Commit d1b92a2

Browse files
committed
feat: add dedicated conferencing provider enums for create and update operations
- Add CreateEventAutoConferencingProvider enum for autocreate conferencing in event creation - Add CreateEventManualConferencingProvider enum for manual conferencing in event creation - Add UpdateEventAutoConferencingProvider enum for autocreate conferencing in event updates - Add UpdateEventManualConferencingProvider enum for manual conferencing in event updates - Separate enums for create vs update operations to enable independent evolution of supported providers - Add backward compatibility methods to maintain compatibility with original ConferencingProvider enum - Add comprehensive test coverage for all new enums, API operations, and backward compatibility - Maintain full compatibility with existing Event model using original ConferencingProvider This architecture allows create and update operations to support different conferencing providers in the future without breaking changes, as each operation now has its own dedicated enum set.
1 parent 603dc64 commit d1b92a2

File tree

9 files changed

+590
-17
lines changed

9 files changed

+590
-17
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# Nylas Java SDK Changelog
22

3+
## [Unreleased]
4+
5+
### Added
6+
* `CreateEventAutoConferencingProvider` enum for autocreate conferencing providers in event creation
7+
* `CreateEventManualConferencingProvider` enum for manual conferencing providers in event creation and updates
8+
* Comprehensive test coverage for new conferencing provider enums
9+
10+
### Changed
11+
* Updated `CreateEventRequest.Conferencing` to use specific provider enums for autocreate and manual conferencing
12+
* Updated `UpdateEventRequest.Conferencing` to use specific provider enums for autocreate and manual conferencing
13+
314
## [2.12.0]
415

516
### Added

src/main/kotlin/com/nylas/models/ConferencingProvider.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,20 @@ import com.squareup.moshi.Json
66
* Enum for the different conferencing providers.
77
*/
88
enum class ConferencingProvider {
9-
@Json(name = "Zoom Meeting")
10-
ZOOM_MEETING,
11-
129
@Json(name = "Google Meet")
1310
GOOGLE_MEET,
1411

12+
@Json(name = "GoToMeeting")
13+
GOTOMEETING,
14+
1515
@Json(name = "Microsoft Teams")
1616
MICROSOFT_TEAMS,
1717

1818
@Json(name = "WebEx")
1919
WEBEX,
2020

21-
@Json(name = "GoToMeeting")
22-
GOTOMEETING,
23-
24-
@Json(name = "skypeForConsumer")
25-
SKYPE_FOR_CONSUMER,
21+
@Json(name = "Zoom Meeting")
22+
ZOOM_MEETING,
2623

2724
@Json(name = "unknown")
2825
UNKNOWN,
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.nylas.models
2+
3+
import com.squareup.moshi.Json
4+
5+
/**
6+
* Enum for the different conferencing providers that can be used to auto-create a meeting.
7+
*/
8+
enum class CreateEventAutoConferencingProvider {
9+
@Json(name = "Google Meet")
10+
GOOGLE_MEET,
11+
12+
@Json(name = "Zoom Meeting")
13+
ZOOM_MEETING,
14+
15+
@Json(name = "Microsoft Teams")
16+
MICROSOFT_TEAMS,
17+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.nylas.models
2+
3+
import com.squareup.moshi.Json
4+
5+
/**
6+
* Enum for the different conferencing providers that can be used to manually create a meeting.
7+
*/
8+
enum class CreateEventManualConferencingProvider {
9+
@Json(name = "Google Meet")
10+
GOOGLE_MEET,
11+
12+
@Json(name = "Zoom Meeting")
13+
ZOOM_MEETING,
14+
15+
@Json(name = "Microsoft Teams")
16+
MICROSOFT_TEAMS,
17+
18+
@Json(name = "Teams for Business")
19+
TEAMS_FOR_BUSINESS,
20+
21+
@Json(name = "Skype for Business")
22+
SKYPE_FOR_BUSINESS,
23+
24+
@Json(name = "Skype for Consumer")
25+
SKYPE_FOR_CONSUMER,
26+
}

src/main/kotlin/com/nylas/models/CreateEventRequest.kt

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,14 +321,41 @@ data class CreateEventRequest(
321321
* The conferencing provider.
322322
*/
323323
@Json(name = "provider")
324-
val provider: ConferencingProvider,
324+
val provider: CreateEventAutoConferencingProvider,
325325
/**
326326
* Empty dict to indicate an intention to autocreate a video link.
327327
* Additional provider settings may be included in autocreate.settings, but Nylas does not validate these.
328328
*/
329329
@Json(name = "autocreate")
330330
val autocreate: Map<String, Any> = emptyMap(),
331-
) : Conferencing()
331+
) : Conferencing() {
332+
companion object {
333+
/**
334+
* Create an Autocreate conferencing object using the original ConferencingProvider enum.
335+
* @param provider The conferencing provider from the original enum
336+
* @param autocreate Empty dict to indicate an intention to autocreate a video link
337+
* @return Autocreate object with converted provider
338+
* @deprecated Use CreateEventAutoConferencingProvider instead. This method will be removed in a future version.
339+
*/
340+
@Deprecated(
341+
message = "Use CreateEventAutoConferencingProvider instead of ConferencingProvider",
342+
replaceWith = ReplaceWith("Autocreate(CreateEventAutoConferencingProvider.fromConferencingProvider(provider), autocreate)"),
343+
)
344+
@JvmStatic
345+
fun fromConferencingProvider(
346+
provider: ConferencingProvider,
347+
autocreate: Map<String, Any> = emptyMap(),
348+
): Autocreate {
349+
val newProvider = when (provider) {
350+
ConferencingProvider.GOOGLE_MEET -> CreateEventAutoConferencingProvider.GOOGLE_MEET
351+
ConferencingProvider.ZOOM_MEETING -> CreateEventAutoConferencingProvider.ZOOM_MEETING
352+
ConferencingProvider.MICROSOFT_TEAMS -> CreateEventAutoConferencingProvider.MICROSOFT_TEAMS
353+
else -> throw IllegalArgumentException("Provider $provider is not supported for autocreate conferencing. Use CreateEventAutoConferencingProvider instead.")
354+
}
355+
return Autocreate(newProvider, autocreate)
356+
}
357+
}
358+
}
332359

333360
/**
334361
* Class representation of a conferencing details object
@@ -338,13 +365,42 @@ data class CreateEventRequest(
338365
* The conferencing provider.
339366
*/
340367
@Json(name = "provider")
341-
val provider: ConferencingProvider,
368+
val provider: CreateEventManualConferencingProvider,
342369
/**
343370
* The conferencing details
344371
*/
345372
@Json(name = "details")
346373
val details: Config,
347374
) : Conferencing() {
375+
companion object {
376+
/**
377+
* Create a Details conferencing object using the original ConferencingProvider enum.
378+
* @param provider The conferencing provider from the original enum
379+
* @param details The conferencing details config
380+
* @return Details object with converted provider
381+
* @deprecated Use CreateEventManualConferencingProvider instead. This method will be removed in a future version.
382+
*/
383+
@Deprecated(
384+
message = "Use CreateEventManualConferencingProvider instead of ConferencingProvider",
385+
replaceWith = ReplaceWith("Details(CreateEventManualConferencingProvider.fromConferencingProvider(provider), details)"),
386+
)
387+
@JvmStatic
388+
fun fromConferencingProvider(
389+
provider: ConferencingProvider,
390+
details: Config,
391+
): Details {
392+
val newProvider = when (provider) {
393+
ConferencingProvider.GOOGLE_MEET -> CreateEventManualConferencingProvider.GOOGLE_MEET
394+
ConferencingProvider.ZOOM_MEETING -> CreateEventManualConferencingProvider.ZOOM_MEETING
395+
ConferencingProvider.MICROSOFT_TEAMS -> CreateEventManualConferencingProvider.MICROSOFT_TEAMS
396+
ConferencingProvider.GOTOMEETING -> throw IllegalArgumentException("GoToMeeting is not supported in CreateEventManualConferencingProvider. Use the new enum directly.")
397+
ConferencingProvider.WEBEX -> throw IllegalArgumentException("WebEx is not supported in CreateEventManualConferencingProvider. Use the new enum directly.")
398+
ConferencingProvider.UNKNOWN -> throw IllegalArgumentException("Unknown provider is not supported for event creation. Use CreateEventManualConferencingProvider instead.")
399+
}
400+
return Details(newProvider, details)
401+
}
402+
}
403+
348404
/**
349405
* Class representation of a conferencing details config object
350406
* @property meetingCode The conferencing meeting code. Used for Zoom.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.nylas.models
2+
3+
import com.squareup.moshi.Json
4+
5+
/**
6+
* Enum for the different conferencing providers that can be used to auto-create a meeting when updating events.
7+
*/
8+
enum class UpdateEventAutoConferencingProvider {
9+
@Json(name = "Google Meet")
10+
GOOGLE_MEET,
11+
12+
@Json(name = "Zoom Meeting")
13+
ZOOM_MEETING,
14+
15+
@Json(name = "Microsoft Teams")
16+
MICROSOFT_TEAMS,
17+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.nylas.models
2+
3+
import com.squareup.moshi.Json
4+
5+
/**
6+
* Enum for the different conferencing providers that can be used to manually create a meeting when updating events.
7+
*/
8+
enum class UpdateEventManualConferencingProvider {
9+
@Json(name = "Google Meet")
10+
GOOGLE_MEET,
11+
12+
@Json(name = "Zoom Meeting")
13+
ZOOM_MEETING,
14+
15+
@Json(name = "Microsoft Teams")
16+
MICROSOFT_TEAMS,
17+
18+
@Json(name = "Teams for Business")
19+
TEAMS_FOR_BUSINESS,
20+
21+
@Json(name = "Skype for Business")
22+
SKYPE_FOR_BUSINESS,
23+
24+
@Json(name = "Skype for Consumer")
25+
SKYPE_FOR_CONSUMER,
26+
}

src/main/kotlin/com/nylas/models/UpdateEventRequest.kt

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -354,27 +354,54 @@ data class UpdateEventRequest(
354354
* The conferencing provider.
355355
*/
356356
@Json(name = "provider")
357-
val provider: ConferencingProvider? = null,
357+
val provider: UpdateEventAutoConferencingProvider? = null,
358358
/**
359359
* Empty dict to indicate an intention to autocreate a video link.
360360
* Additional provider settings may be included in autocreate.settings, but Nylas does not validate these.
361361
*/
362362
@Json(name = "autocreate")
363363
val autocreate: Map<String, Any>? = null,
364364
) : Conferencing() {
365+
companion object {
366+
/**
367+
* Create an Autocreate conferencing object using the original ConferencingProvider enum.
368+
* @param provider The conferencing provider from the original enum
369+
* @param autocreate Empty dict to indicate an intention to autocreate a video link
370+
* @return Autocreate object with converted provider
371+
* @deprecated Use UpdateEventAutoConferencingProvider instead. This method will be removed in a future version.
372+
*/
373+
@Deprecated(
374+
message = "Use UpdateEventAutoConferencingProvider instead of ConferencingProvider",
375+
replaceWith = ReplaceWith("Autocreate(UpdateEventAutoConferencingProvider.fromConferencingProvider(provider), autocreate)"),
376+
)
377+
@JvmStatic
378+
fun fromConferencingProvider(
379+
provider: ConferencingProvider,
380+
autocreate: Map<String, Any>? = null,
381+
): Autocreate {
382+
val newProvider = when (provider) {
383+
ConferencingProvider.GOOGLE_MEET -> UpdateEventAutoConferencingProvider.GOOGLE_MEET
384+
ConferencingProvider.ZOOM_MEETING -> UpdateEventAutoConferencingProvider.ZOOM_MEETING
385+
ConferencingProvider.MICROSOFT_TEAMS -> UpdateEventAutoConferencingProvider.MICROSOFT_TEAMS
386+
else -> throw IllegalArgumentException("Provider $provider is not supported for autocreate conferencing. Use UpdateEventAutoConferencingProvider instead.")
387+
}
388+
return Autocreate(newProvider, autocreate)
389+
}
390+
}
391+
365392
/**
366393
* Builder for [Autocreate].
367394
*/
368395
class Builder {
369-
private var provider: ConferencingProvider? = null
396+
private var provider: UpdateEventAutoConferencingProvider? = null
370397
private var autocreate: Map<String, Any>? = null
371398

372399
/**
373400
* Set the conferencing provider.
374401
* @param provider The conferencing provider.
375402
* @return The builder.
376403
*/
377-
fun provider(provider: ConferencingProvider) = apply { this.provider = provider }
404+
fun provider(provider: UpdateEventAutoConferencingProvider) = apply { this.provider = provider }
378405

379406
/**
380407
* Set the autocreate settings.
@@ -400,13 +427,42 @@ data class UpdateEventRequest(
400427
* The conferencing provider.
401428
*/
402429
@Json(name = "provider")
403-
val provider: ConferencingProvider? = null,
430+
val provider: UpdateEventManualConferencingProvider? = null,
404431
/**
405432
* The conferencing details
406433
*/
407434
@Json(name = "details")
408435
val details: Config? = null,
409436
) : Conferencing() {
437+
companion object {
438+
/**
439+
* Create a Details conferencing object using the original ConferencingProvider enum.
440+
* @param provider The conferencing provider from the original enum
441+
* @param details The conferencing details config
442+
* @return Details object with converted provider
443+
* @deprecated Use UpdateEventManualConferencingProvider instead. This method will be removed in a future version.
444+
*/
445+
@Deprecated(
446+
message = "Use UpdateEventManualConferencingProvider instead of ConferencingProvider",
447+
replaceWith = ReplaceWith("Details(UpdateEventManualConferencingProvider.fromConferencingProvider(provider), details)"),
448+
)
449+
@JvmStatic
450+
fun fromConferencingProvider(
451+
provider: ConferencingProvider,
452+
details: Config? = null,
453+
): Details {
454+
val newProvider = when (provider) {
455+
ConferencingProvider.GOOGLE_MEET -> UpdateEventManualConferencingProvider.GOOGLE_MEET
456+
ConferencingProvider.ZOOM_MEETING -> UpdateEventManualConferencingProvider.ZOOM_MEETING
457+
ConferencingProvider.MICROSOFT_TEAMS -> UpdateEventManualConferencingProvider.MICROSOFT_TEAMS
458+
ConferencingProvider.GOTOMEETING -> throw IllegalArgumentException("GoToMeeting is not supported in UpdateEventManualConferencingProvider. Use the new enum directly.")
459+
ConferencingProvider.WEBEX -> throw IllegalArgumentException("WebEx is not supported in UpdateEventManualConferencingProvider. Use the new enum directly.")
460+
ConferencingProvider.UNKNOWN -> throw IllegalArgumentException("Unknown provider is not supported for event updates. Use UpdateEventManualConferencingProvider instead.")
461+
}
462+
return Details(newProvider, details)
463+
}
464+
}
465+
410466
/**
411467
* Class representation of a conferencing details config object
412468
* @property meetingCode The conferencing meeting code. Used for Zoom.
@@ -474,15 +530,15 @@ data class UpdateEventRequest(
474530
* Builder for [Details].
475531
*/
476532
class Builder {
477-
private var provider: ConferencingProvider? = null
533+
private var provider: UpdateEventManualConferencingProvider? = null
478534
private var details: Config? = null
479535

480536
/**
481537
* Set the conferencing provider.
482538
* @param provider The conferencing provider.
483539
* @return The builder.
484540
*/
485-
fun provider(provider: ConferencingProvider) = apply { this.provider = provider }
541+
fun provider(provider: UpdateEventManualConferencingProvider) = apply { this.provider = provider }
486542

487543
/**
488544
* Set the conferencing details.

0 commit comments

Comments
 (0)