SprintState.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

abstract class SprintState(protected val sprint: Sprint) {
    abstract var scrumMaster: User?

    abstract var name: String?

    abstract var dateRange: DateRange?

    abstract val backlogItems: Set<BacklogItem>

    open fun addTask(backlogItem: BacklogItem) {
        throw IllegalStateException("Can't add tasks to running sprints")
    }

    open fun startSprint() {
        throw IllegalStateException("Can't start a sprint that was already started")
    }

    open fun markFinished() {
        throw IllegalStateException("Sprint should be running to cancel it")
    }

    open fun onPipelineCompleted() {
        throw IllegalStateException("Can't complete pipeline in this state")
    }

    open fun onDocumentAttached() {
        throw IllegalStateException("Can't add documents in this state")
    }
}