From d8412c32f2ae7649c3704a83c28d191790906662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20R=C3=BCmpelein?= Date: Thu, 30 Apr 2020 16:30:16 +0200 Subject: [PATCH] Add more search types: - Classification - Status - Make some `order` params invisible for `all` params - Solved some order types --- .../rcdbquery/dataMappings/Classification.kt | 27 ++++++++++++++ .../pheerai/rcdbquery/dataMappings/Order.kt | 17 +++++---- .../de/pheerai/rcdbquery/dataMappings/Page.kt | 6 +-- .../dataMappings/RcdbParamOptionBuilder.kt | 35 +++++++++++++++++- .../rcdbquery/dataMappings/RelevantForAll.kt | 5 +++ .../rcdbquery/dataMappings/StartsWith.kt | 3 +- .../pheerai/rcdbquery/dataMappings/Status.kt | 37 +++++++++++++++++++ 7 files changed, 115 insertions(+), 15 deletions(-) create mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Classification.kt create mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RelevantForAll.kt create mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Status.kt diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Classification.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Classification.kt new file mode 100644 index 0000000..4f51cd9 --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Classification.kt @@ -0,0 +1,27 @@ +package de.pheerai.rcdbquery.dataMappings + +import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder + +enum class Classification( + override val prettyName: String, + override val fullName: String, + override val paramValue: Int + ) : RcdbParamOption { + ROLLERCOASTER("Roller Coaster", 277), + POWERED_COASTER("Powered Coaster", 278), + MOUNTAIN_COASTER("Mountain Coaster", 279) + ; + + constructor(name: String, paramValue: Int): this(name, name, paramValue) + + companion object { + const val staticParamName = "cs"; + } +} + +fun RcdbQueryParamsBuilder.classification(body: ClassificationBuilder.() -> ClassificationBuilder): RcdbQueryParamsBuilder { + val builder = ClassificationBuilder() + builder.body() + this[Classification.staticParamName] = builder.build() + return this +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Order.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Order.kt index cb691fa..c28ee50 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Order.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Order.kt @@ -6,11 +6,12 @@ import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder enum class Order( override val prettyName: String, override val fullName: String, - override val paramValue: Int -) : RcdbParamOption { + override val paramValue: Int, + override val relevantForAll: Boolean = false +) : RcdbParamOption, RelevantForAll { IMAGES("Images", "Amount of Images", 0), NAME("Name", "Name of the Coaster", 1), - ORIGINAL_NAME("Original Name", "Original name of the Coaster, in local charset", 2), + AKA("AKA", "Is/was also known as", 2, relevantForAll = false), LOCATION("Location", 3), PARK("Park", 4), OPENED("Opened", "Opening Date", 8), @@ -21,9 +22,9 @@ enum class Order( level = DeprecationLevel.WARNING, replaceWith = ReplaceWith("Order.STATE") ) - STATE_2("State", "Operational State (legacy)", 10), + STATE_2("State", "Operational State (legacy)", 10, relevantForAll = true), ENTERED("Entered", 12), - TYPE("Type", "Constrcution Type (Wood, Steel)", 13), + TYPE("Type", "Construction Type (Wood, Steel)", 13), DESIGN("Design", "Train Design (Sit-Down, Invert,...)", 14), CLASSIFICATION("Classification", "Coaster Classification (Coaster, Powered Coaster, Mountain Coaster)", 15), LAYOUT("Layout", 16), @@ -35,15 +36,15 @@ enum class Order( LENGTH("Length", 22), ANGLE("Angle", 23), INVERSIONS("Inversions", "Number of inversions", 24), - SERIAL_NO("Serial", "Serial number", 25), + SERIAL_NO("Serial", "Serial number", 25, relevantForAll = false), SCALE("Scale", "Thrill factor", 26), RIDE_TIME("Ride Time", 27), - STATE("State", "Operational state", 29), + STATUS("Status", "Operational state", 29), MANUFACTURER("Manufacturer", 30), CLOSING("Closing", "(Future) closign date for temporary installations", 31) ; - constructor(name: String, paramId: Int) : this(name, name, paramId) + constructor(name: String, paramId: Int, deprecated: Boolean = false) : this(name, name, paramId) companion object { const val staticParamName = "order" diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Page.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Page.kt index 13236e7..91b1202 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Page.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Page.kt @@ -3,10 +3,8 @@ package de.pheerai.rcdbquery.dataMappings import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder class Page(override val paramValue: Int) : RcdbParamOption { - override val fullName: String - get() = "The page to show" - override val prettyName: String - get() = "Page" + override val fullName = "The page to show" + override val prettyName = "Page" companion object { const val staticParamName = "page" diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOptionBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOptionBuilder.kt index 4018a0f..bd82f37 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOptionBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOptionBuilder.kt @@ -13,6 +13,10 @@ sealed class RcdbParamOptionBuilder> { paramList.addAll(items) return this } + protected open fun addAll(items: Collection): RcdbParamOptionBuilder { + paramList.addAll(items) + return this + } fun build() = paramList.toList() } @@ -41,6 +45,10 @@ class OrderBuilder : RcdbParamOptionBuilder() { super.addAll(items) return this } + override fun addAll(items: Collection): OrderBuilder { + super.addAll(items) + return this + } fun of(order: Order) = this.add(order) fun manufacturer() = this.add(Order.MANUFACTURER) @@ -65,7 +73,30 @@ class OrderBuilder : RcdbParamOptionBuilder() { fun serialNo() = this.add(Order.SERIAL_NO) fun scale() = this.add(Order.SCALE) fun rideTime() = this.add(Order.RIDE_TIME) - fun state() = this.add(Order.STATE) + fun state() = this.add(Order.STATUS) fun closing() = this.add(Order.CLOSING) - fun all() = this.addAll(Order.values()) + fun all() = this.addAll(Order.values().filterNot { it.relevantForAll }) +} + +class StatusBuilder : RcdbParamOptionBuilder() { + override fun add(param: Status): StatusBuilder { + super.add(param) + return this + } + + fun sbno() = this.add(Status.SBNO) + fun operating() = this.add(Status.OPERATING) + fun underConstruction() = this.add(Status.UNDER_CONSTRUCTION) + fun stored() = this.add(Status.STORED) +} + +class ClassificationBuilder : RcdbParamOptionBuilder() { + override fun add(param: Classification): ClassificationBuilder { + super.add(param) + return this + } + + fun rollerCoaster() = this.add(Classification.ROLLERCOASTER) + fun poweredCoaster() = this.add(Classification.POWERED_COASTER) + fun mountainCoaster() = this.add(Classification.MOUNTAIN_COASTER) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RelevantForAll.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RelevantForAll.kt new file mode 100644 index 0000000..55bee8a --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RelevantForAll.kt @@ -0,0 +1,5 @@ +package de.pheerai.rcdbquery.dataMappings + +interface RelevantForAll { + val relevantForAll: Boolean +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/StartsWith.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/StartsWith.kt index c0b42a1..3deb1b9 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/StartsWith.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/StartsWith.kt @@ -4,9 +4,10 @@ package de.pheerai.rcdbquery.dataMappings import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder -class StartsWith(override val paramValue: String): RcdbParamOption { +class StartsWith(override val paramValue: String) : RcdbParamOption { override val prettyName = "Starts with" override val fullName = "Name starting with term" + companion object { const val staticParamName = "nl" } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Status.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Status.kt new file mode 100644 index 0000000..db1135a --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Status.kt @@ -0,0 +1,37 @@ +package de.pheerai.rcdbquery.dataMappings + +import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder + +@Suppress("unused") +enum class Status( + override val prettyName: String, + override val fullName: String, + override val paramValue: Int +) : RcdbParamOption { + SBNO("SBNO", "Standing, but not operating", 311), + OPERATING("Operating", "In operation", 93), + UNDER_CONSTRUCTION("Under Construction", 310), + STORED("Stored", "In storage", 312) + ; + + constructor(name: String, paramId: Int) : this(name, name, paramId) + + companion object { + const val staticParamName = "st" + + fun of(input: String) = when(input) { + "SBNO" -> SBNO + "Operating" -> OPERATING + "Under Construction" -> UNDER_CONSTRUCTION + "In Storage" -> STORED + else -> null + } + } +} + +fun RcdbQueryParamsBuilder.status(body: StatusBuilder.() -> StatusBuilder): RcdbQueryParamsBuilder { + val builder = StatusBuilder() + builder.body() + this[Status.staticParamName] = builder.build() + return this +}