FinishedSprintState.kt

package nl.marc.devops.board.sprint_states

import nl.marc.devops.accounts.User
import nl.marc.devops.board.BacklogItem
import nl.marc.devops.board.DateRange
import nl.marc.devops.board.Sprint

class FinishedSprintState(
    sprint: Sprint,
    override val backlogItems: Set<BacklogItem>,
    scrumMaster: User?,
    name: String?,
    dateRange: DateRange?
) : SprintState(sprint) {
    override var scrumMaster: User? = scrumMaster
        set(_) = throw IllegalStateException("Can't change scrum master when sprint is finished")

    override var name: String? = name
        set(_) = throw IllegalStateException("Can't change sprint name when sprint is finished")

    override var dateRange: DateRange? = dateRange
        set(_) = throw IllegalStateException("Can't change sprint start and end when sprint is finished")

    override fun onPipelineCompleted() {
        sprint.state = CompletedSprintState(sprint, backlogItems, scrumMaster, name, dateRange)
    }

    override fun onDocumentAttached() {
        sprint.state = CompletedSprintState(sprint, backlogItems, scrumMaster, name, dateRange)
    }
}