Skip to content

Commit

Permalink
Merge main
Browse files Browse the repository at this point in the history
  • Loading branch information
alyssaruth committed Feb 20, 2024
2 parents 2923623 + df29294 commit 786cfe3
Show file tree
Hide file tree
Showing 20 changed files with 336 additions and 342 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Dartzee

[![Build Status](https://github.com/alyssaruth/Dartzee/workflows/CI/badge.svg)](https://github.com/alyssaruth/dartzee/actions)
![Coverage: 93.17%](https://img.shields.io/badge/coverage-93.17%25-brightgreen)
![Coverage: 93.18%](https://img.shields.io/badge/coverage-93.18%25-brightgreen)

All rights reserved

Expand Down
81 changes: 30 additions & 51 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import java.net.URI
import kotlinx.kover.api.KoverTaskExtension
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.net.URI

plugins {
kotlin("jvm") version "1.9.22"
Expand All @@ -19,6 +19,7 @@ repositories {
}

apply(plugin = "kotlin")

apply(plugin = "application")

detekt {
Expand All @@ -27,9 +28,7 @@ detekt {
config.setFrom("$projectDir/detekt-config.yml")
}

ktfmt {
kotlinLangStyle()
}
ktfmt { kotlinLangStyle() }

dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0")
Expand All @@ -54,13 +53,7 @@ dependencies {
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2")
}

kotlin {
sourceSets.all {
languageSettings {
languageVersion = "2.0"
}
}
}
kotlin { sourceSets.all { languageSettings { languageVersion = "2.0" } } }

project.setProperty("mainClassName", "dartzee.main.DartsMainKt")

Expand All @@ -86,65 +79,51 @@ compileTestKotlin.kotlinOptions {
}

task<JavaExec>("runDev") {
configure(closureOf<JavaExec> {
group = "run"
classpath = project.the<SourceSetContainer>()["main"].runtimeClasspath
args = listOf("devMode", "trueLaunch")
mainClass.set("dartzee.main.DartsMainKt")
})
}

kover {
filters {
classes {
excludes.add("dartzee.screen.TestWindow")
configure(
closureOf<JavaExec> {
group = "run"
classpath = project.the<SourceSetContainer>()["main"].runtimeClasspath
args = listOf("devMode", "trueLaunch")
mainClass.set("dartzee.main.DartsMainKt")
}
}
)
}

kover { filters { classes { excludes.add("dartzee.screen.TestWindow") } } }

task<Test>("unitTest") {
group = "verification"
useJUnitPlatform {
excludeTags = setOf("integration", "e2e")
}
useJUnitPlatform { excludeTags = setOf("integration", "e2e") }
}

task<Test>("updateScreenshots") {
group = "verification"
useJUnitPlatform {
includeTags = setOf("screenshot")
}
useJUnitPlatform { includeTags = setOf("screenshot") }

jvmArgs = listOf("-DupdateSnapshots=true")
}

task<Test>("integrationAndE2E") {
group = "verification"
useJUnitPlatform {
includeTags = setOf("integration", "e2e")
}
useJUnitPlatform { includeTags = setOf("integration", "e2e") }
}

tasks {
named<Test>("test") {
useJUnitPlatform()
}
}
tasks { named<Test>("test") { useJUnitPlatform() } }

tasks.withType<Test> {
minHeapSize = "1024m"
maxHeapSize = "1024m"

jvmArgs = listOf("-Dcom.sun.management.jmxremote",
"-Dcom.sun.management.jmxremote.port=9010",
"-Dcom.sun.management.jmxremote.authenticate=false",
"-Dcom.sun.management.jmxremote.ssl=false",
"-Djava.rmi.server.hostname=localhost",
"-DscreenshotOs=linux")
jvmArgs =
listOf(
"-Dcom.sun.management.jmxremote",
"-Dcom.sun.management.jmxremote.port=9010",
"-Dcom.sun.management.jmxremote.authenticate=false",
"-Dcom.sun.management.jmxremote.ssl=false",
"-Djava.rmi.server.hostname=localhost"
)

extensions.configure<KoverTaskExtension> {
isDisabled.set(name != "unitTest")
}
extensions.configure<KoverTaskExtension> { isDisabled.set(name != "unitTest") }

testLogging {
events = mutableSetOf(TestLogEvent.STARTED, TestLogEvent.FAILED)
Expand All @@ -153,12 +132,12 @@ tasks.withType<Test> {
}

tasks.withType<Jar> {
manifest {
attributes["Main-Class"] = "dartzee.main.DartsMainKt"
}
manifest { attributes["Main-Class"] = "dartzee.main.DartsMainKt" }

duplicatesStrategy = DuplicatesStrategy.EXCLUDE

dependsOn(configurations.runtimeClasspath)
from(configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) })
from(
configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
)
}
8 changes: 4 additions & 4 deletions src/main/kotlin/dartzee/reporting/IncludedPlayerParameters.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package dartzee.reporting
const val COMPARATOR_SCORE_UNSET = "is unset"

data class IncludedPlayerParameters(
var finishingPositions: List<Int> = listOf(),
var finalScoreComparator: String = "",
var finalScore: Int = -1
val finishingPositions: List<Int>,
val finalScoreComparator: String,
val finalScore: Int?
) {
fun generateExtraWhereSql(alias: String): String {
val sb = StringBuilder()
Expand All @@ -16,7 +16,7 @@ data class IncludedPlayerParameters(

if (finalScoreComparator.equals(COMPARATOR_SCORE_UNSET, ignoreCase = true)) {
sb.append(" AND $alias.FinalScore = -1")
} else if (finalScore > -1) {
} else if (finalScore != null) {
sb.append(" AND $alias.FinalScore $finalScoreComparator $finalScore")
sb.append(" AND $alias.FinalScore > -1")
}
Expand Down
64 changes: 21 additions & 43 deletions src/main/kotlin/dartzee/reporting/ReportParameters.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,73 +3,58 @@ package dartzee.reporting
import dartzee.core.util.DateStatics
import dartzee.core.util.getEndOfTimeSqlString
import dartzee.core.util.getSqlString
import dartzee.db.PlayerEntity
import dartzee.db.SyncAuditEntity
import dartzee.game.GameType
import dartzee.utils.InjectedThings.mainDatabase
import java.sql.Timestamp

class ReportParameters {
var gameType: GameType? = null
var gameParams = ""
var unfinishedOnly = false
var dtStartFrom: Timestamp? = null
var dtStartTo: Timestamp? = null
var dtFinishFrom: Timestamp? = null
var dtFinishTo: Timestamp? = null
var hmIncludedPlayerToParms = mapOf<PlayerEntity, IncludedPlayerParameters>()
var excludedPlayers: List<PlayerEntity> = ArrayList()
var excludeOnlyAi: Boolean = false
var partOfMatch = MatchFilter.BOTH
var pendingChanges: Boolean? = null

data class ReportParameters(val game: ReportParametersGame, val players: ReportParametersPlayers) {

fun getExtraWhereSql(): String {
val sb = StringBuilder()

if (gameType != null) {
sb.append(" AND g.GameType = '$gameType'")
if (game.gameType != null) {
sb.append(" AND g.GameType = '${game.gameType}'")
}

if (!gameParams.isEmpty()) {
sb.append(" AND g.GameParams = '$gameParams'")
if (game.gameParams.isNotEmpty()) {
sb.append(" AND g.GameParams = '${game.gameParams}'")
}

if (dtStartFrom != null) {
if (game.dtStartFrom != null) {
sb.append(" AND g.DtCreation >= '")
sb.append(dtStartFrom)
sb.append(game.dtStartFrom)
sb.append("'")
}

if (dtStartTo != null) {
if (game.dtStartTo != null) {
sb.append(" AND g.DtCreation <= '")
sb.append(dtStartTo)
sb.append(game.dtStartTo)
sb.append("'")
}

if (dtFinishFrom != null) {
if (game.dtFinishFrom != null) {
sb.append(" AND g.DtFinish >= '")
sb.append(dtFinishFrom)
sb.append(game.dtFinishFrom)
sb.append("'")
}

if (dtFinishTo != null) {
if (game.dtFinishTo != null) {
sb.append(" AND g.DtFinish <= '")
sb.append(dtFinishTo)
sb.append(game.dtFinishTo)
sb.append("'")
}

if (unfinishedOnly) {
if (game.unfinishedOnly) {
sb.append(" AND g.DtFinish = ")
sb.append(getEndOfTimeSqlString())
}

if (partOfMatch == MatchFilter.GAMES_ONLY) {
if (game.partOfMatch == MatchFilter.GAMES_ONLY) {
sb.append(" AND g.DartsMatchId = ''")
} else if (partOfMatch == MatchFilter.MATCHES_ONLY) {
} else if (game.partOfMatch == MatchFilter.MATCHES_ONLY) {
sb.append(" AND g.DartsMatchId <> ''")
}

pendingChanges?.let { pendingChanges ->
game.pendingChanges?.let { pendingChanges ->
val dtLastSynced =
SyncAuditEntity.getLastSyncData(mainDatabase)?.lastSynced
?: DateStatics.START_OF_TIME
Expand All @@ -80,7 +65,7 @@ class ReportParameters {
}
}

val it = hmIncludedPlayerToParms.entries.iterator()
val it = players.includedPlayers.entries.iterator()
while (it.hasNext()) {
val entry = it.next()
val player = entry.key
Expand All @@ -97,14 +82,14 @@ class ReportParameters {
sb.append(")")
}

for (player in excludedPlayers) {
for (player in players.excludedPlayers) {
sb.append(" AND NOT EXISTS (")
sb.append(" SELECT 1 FROM Participant z")
sb.append(" WHERE z.PlayerId = '${player.rowId}'")
sb.append(" AND z.GameId = g.RowId)")
}

if (excludeOnlyAi) {
if (players.excludeOnlyAi) {
sb.append(" AND EXISTS (")
sb.append(" SELECT 1 FROM Participant z, Player p")
sb.append(" WHERE z.PlayerId = p.RowId")
Expand All @@ -114,13 +99,6 @@ class ReportParameters {

return sb.toString()
}

override fun toString() =
"[$gameType, $gameParams, $dtStartFrom, $dtStartTo, $dtFinishFrom, $dtFinishTo]"

fun setEnforceMatch(matches: Boolean) {
partOfMatch = if (matches) MatchFilter.MATCHES_ONLY else MatchFilter.GAMES_ONLY
}
}

enum class MatchFilter {
Expand Down
16 changes: 16 additions & 0 deletions src/main/kotlin/dartzee/reporting/ReportParametersGame.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package dartzee.reporting

import dartzee.game.GameType
import java.sql.Timestamp

data class ReportParametersGame(
val gameType: GameType?,
val gameParams: String,
val dtStartFrom: Timestamp?,
val dtStartTo: Timestamp?,
val unfinishedOnly: Boolean,
val dtFinishFrom: Timestamp?,
val dtFinishTo: Timestamp?,
val partOfMatch: MatchFilter,
val pendingChanges: Boolean?
)
9 changes: 9 additions & 0 deletions src/main/kotlin/dartzee/reporting/ReportParametersPlayers.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dartzee.reporting

import dartzee.db.PlayerEntity

data class ReportParametersPlayers(
val includedPlayers: Map<PlayerEntity, IncludedPlayerParameters>,
val excludedPlayers: List<PlayerEntity>,
val excludeOnlyAi: Boolean,
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ import dartzee.game.GameType
import dartzee.utils.InjectedThings.mainDatabase
import java.sql.ResultSet
import java.sql.Timestamp
import javax.swing.JCheckBox

fun <T> grabIfSelected(checkbox: JCheckBox, getter: () -> T) =
if (checkbox.isSelected) getter() else null

/** Refactored from ReportingResultsScreen */
fun runReport(rp: ReportParameters?): List<ReportResultWrapper> {
rp ?: return listOf()
rp ?: return emptyList()

var sql = buildBasicSqlStatement()
sql += rp.getExtraWhereSql()
Expand Down
21 changes: 6 additions & 15 deletions src/main/kotlin/dartzee/screen/reporting/PlayerParametersPanel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import dartzee.db.MAX_PLAYERS
import dartzee.db.PlayerEntity
import dartzee.reporting.COMPARATOR_SCORE_UNSET
import dartzee.reporting.IncludedPlayerParameters
import dartzee.reporting.grabIfSelected
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JCheckBox
Expand Down Expand Up @@ -55,22 +56,12 @@ class PlayerParametersPanel : JPanel(), ActionListener {
}

fun generateParameters(): IncludedPlayerParameters {
val parms = IncludedPlayerParameters()
val finalScore = grabIfSelected(chckbxFinalScore) { spinner.value as Int }
val finalScoreComparator =
grabIfSelected(chckbxFinalScore) { comboBox.selectedItem as String }.orEmpty()
val finishingPosition = grabIfSelected(chckbxPosition) { getFinishingPositions() }.orEmpty()

if (chckbxFinalScore.isSelected) {
val finalScore = spinner.value as Int
val comparator = comboBox.selectedItem as String

parms.finalScore = finalScore
parms.finalScoreComparator = comparator
}

if (chckbxPosition.isSelected) {
val finishingPositions = getFinishingPositions()
parms.finishingPositions = finishingPositions
}

return parms
return IncludedPlayerParameters(finishingPosition, finalScoreComparator, finalScore)
}

private fun getFinishingPositions(): List<Int> {
Expand Down
Loading

0 comments on commit 786cfe3

Please sign in to comment.