Skip to content

Commit

Permalink
Remove boilerplate from Grader class
Browse files Browse the repository at this point in the history
  • Loading branch information
ledoyen committed Sep 17, 2024
1 parent cc205ae commit 6478911
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/main/kotlin/com/github/lernejo/korekto/toolkit/GradingJob.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.github.lernejo.korekto.toolkit.launcher.GradingJobLauncher
import com.github.lernejo.korekto.toolkit.misc.*
import com.github.lernejo.korekto.toolkit.misc.HumanReadableDuration.toString
import com.github.lernejo.korekto.toolkit.misc.Processes.launch
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.io.Closeable
import java.nio.file.Path
Expand Down Expand Up @@ -174,6 +175,9 @@ fun interface GradingStep<T : GradingContext> {

interface Grader<T : GradingContext> : GradingStep<T>, Closeable {

private val logger: Logger
get() = LoggerFactory.getLogger(Grader::class.java)

fun name(): String

fun slugToRepoUrl(slug: String): String
Expand All @@ -184,6 +188,27 @@ interface Grader<T : GradingContext> : GradingStep<T>, Closeable {

fun gradingContext(configuration: GradingConfiguration): T = GradingContext(configuration) as T

override fun run(context: T) {
context.gradeDetails.parts.addAll(grade(context))
}

fun grade(context: T): Collection<GradePart> {
return graders().stream()
.map { g: PartGrader<T> -> applyPartGrader(context, g) }
.toList()
}

fun applyPartGrader(context: T, g: PartGrader<T>): GradePart {
val startTime = System.currentTimeMillis()
try {
return g.grade(context)
} finally {
logger.debug("{} in {}", g.name(), toString(System.currentTimeMillis() - startTime))
}
}

fun graders(): Collection<PartGrader<T>>

override fun close() {}

companion object {
Expand Down

0 comments on commit 6478911

Please sign in to comment.