diff --git a/app/src/main/java/ch/opentransportdata/presentation/tir/result/TripResultViewModel.kt b/app/src/main/java/ch/opentransportdata/presentation/tir/result/TripResultViewModel.kt index e530ca5..612ae31 100644 --- a/app/src/main/java/ch/opentransportdata/presentation/tir/result/TripResultViewModel.kt +++ b/app/src/main/java/ch/opentransportdata/presentation/tir/result/TripResultViewModel.kt @@ -196,7 +196,7 @@ class TripResultViewModel( useRealtimeData = RealtimeData.EXPLANATORY, walkSpeed = state.value.walkingSpeed, transferLimit = if (state.value.isDirectConnection) 0 else null, - optimisationMethod = if (state.value.isFewerTransfers) OptimisationMethod.MIN_CHANGES.serializedName() else null, + optimisationMethod = if (state.value.isFewerTransfers) OptimisationMethod.MIN_CHANGES else null, bikeTransport = state.value.isBikeTransport, ), trip = trip, @@ -272,7 +272,7 @@ class TripResultViewModel( ModeAndModeOfOperationFilter( exclude = false, ptMode = emptyList(), - railSubmode = vehicleOption.vehicleType + railSubmode = RailSubmode.fromSerializedName(vehicleOption.vehicleType) ) } .toMutableList() @@ -305,7 +305,7 @@ class TripResultViewModel( useRealtimeData = RealtimeData.EXPLANATORY, walkSpeed = state.value.walkingSpeed, transferLimit = if (state.value.isDirectConnection) 0 else null, - optimisationMethod = if (state.value.isFewerTransfers) OptimisationMethod.MIN_CHANGES.serializedName() else null, + optimisationMethod = if (state.value.isFewerTransfers) OptimisationMethod.MIN_CHANGES else null, bikeTransport = state.value.isBikeTransport, ), individualTransportOption = IndividualTransportOptionDto( diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/OjpSdk.kt b/sdk/src/main/java/ch/opentransportdata/ojp/OjpSdk.kt index 9ad0df0..1281cb9 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/OjpSdk.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/OjpSdk.kt @@ -92,6 +92,7 @@ class OjpSdk( * @param time The time the trip should start/end * @param isSearchForDepartureTime weather to search for trips that arrive at [time] or leave at [time]. Set to true if searching for trips that leave at [time]. * @param params The params to get further information on each trip + * @param individualTransportOption Optional individual transport option for the trip request * * @return [TripDeliveryDto] object with related trip information */ @@ -152,6 +153,19 @@ class OjpSdk( return OjpKoinContext.koinApp.koin.get().invoke(stream) } + /** + * Updates the trip data for a given trip by re-requesting it with the same parameters + * + * @param languageCode The [LanguageCode] for the desired results, default is [LanguageCode.DE] + * @param origin The origin where the trip starts + * @param destination The destination where the trip ends + * @param via The via station which the trip should cover + * @param params The params to get further information on each trip + * @param trip The existing [TripDto] that should be updated + * @param individualTransportOption Optional individual transport option for the trip request + * + * @return [TripDeliveryDto] with the updated trip information + */ suspend fun updateTripData( languageCode: LanguageCode = LanguageCode.DE, origin: PlaceReferenceDto, diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/ItModeAndModeOfOperationDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/ItModeAndModeOfOperationDto.kt index 7bcd8f6..41691cd 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/ItModeAndModeOfOperationDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/ItModeAndModeOfOperationDto.kt @@ -13,9 +13,9 @@ import nl.adaptivity.xmlutil.serialization.XmlSerialName data class ItModeAndModeOfOperationDto( @XmlElement(true) @XmlSerialName("PersonalMode", OJP_NAME_SPACE, "") - val personalMode: String?, + val personalMode: String? = null, @XmlElement(true) @XmlSerialName("PersonalModeOfOperation", OJP_NAME_SPACE, "") - val personalModeOfOperation: String?, + val personalModeOfOperation: String? = null, ) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/PlaceContextDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/PlaceContextDto.kt index 2ff125e..2e0140f 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/PlaceContextDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/PlaceContextDto.kt @@ -23,5 +23,5 @@ internal data class PlaceContextDto( @XmlElement(true) @XmlSerialName("IndividualTransportOption", OJP_NAME_SPACE, "") - val individualTransportOption: IndividualTransportOptionDto?, + val individualTransportOption: IndividualTransportOptionDto? = null, ) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripParamsDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripParamsDto.kt index 9e8fda7..8577e35 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripParamsDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripParamsDto.kt @@ -55,17 +55,17 @@ internal data class TripParamsDto( @XmlElement(true) @XmlSerialName("WalkSpeed", OJP_NAME_SPACE, "") - val walkSpeed: Int?, + val walkSpeed: Int? = null, @XmlElement(true) @XmlSerialName("TransferLimit", OJP_NAME_SPACE, "") - val transferLimit: Int?, + val transferLimit: Int? = null, @XmlElement(true) @XmlSerialName("OptimisationMethod", OJP_NAME_SPACE, "") - val optimisationMethod: String?, + val optimisationMethod: String? = null, @XmlElement(true) @XmlSerialName("BikeTransport", OJP_NAME_SPACE, "") - val bikeTransport: Boolean?, + val bikeTransport: Boolean? = null, ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/remote/trip/RemoteTripDataSourceImpl.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/remote/trip/RemoteTripDataSourceImpl.kt index b91adf5..cbfdbb2 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/remote/trip/RemoteTripDataSourceImpl.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/remote/trip/RemoteTripDataSourceImpl.kt @@ -19,6 +19,7 @@ import ch.opentransportdata.ojp.data.remote.OjpService import ch.opentransportdata.ojp.domain.model.LanguageCode import ch.opentransportdata.ojp.domain.model.TripParams import ch.opentransportdata.ojp.domain.model.TripRefineParam +import ch.opentransportdata.ojp.domain.model.serializedName import ch.opentransportdata.ojp.domain.model.shortName import ch.opentransportdata.ojp.domain.usecase.Initializer import kotlinx.coroutines.Dispatchers @@ -134,13 +135,13 @@ internal class RemoteTripDataSourceImpl( ModeAndModeOfOperationFilterDto( ptMode = filter.ptMode, exclude = filter.exclude, - railSubmode = filter.railSubmode, + railSubmode = filter.railSubmode?.serializedName(), busSubmode = filter.busSubmode, coachSubmode = filter.coachSubmode, metroSubmode = filter.metroSubmode, tramSubmode = filter.tramSubmode, trolleyBusSubmode = filter.trolleyBusSubmode, - telecabinSubmode = filter.trolleyBusSubmode, + telecabinSubmode = filter.telecabinSubmode, funicularSubmode = filter.funicularSubmode, waterSubmode = filter.waterSubmode, airSubmode = filter.airSubmode, @@ -150,7 +151,7 @@ internal class RemoteTripDataSourceImpl( }, walkSpeed = this.walkSpeed, transferLimit = this.transferLimit, - optimisationMethod = this.optimisationMethod, + optimisationMethod = this.optimisationMethod?.serializedName(), bikeTransport = this.bikeTransport, ) } diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ModeAndModeOfOperationFilter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ModeAndModeOfOperationFilter.kt index eeb8091..ec8ba76 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ModeAndModeOfOperationFilter.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ModeAndModeOfOperationFilter.kt @@ -10,7 +10,7 @@ import kotlinx.parcelize.Parcelize data class ModeAndModeOfOperationFilter( val ptMode: List, val exclude: Boolean, - val railSubmode: String? = null, + val railSubmode: RailSubmode? = null, val busSubmode: String? = null, val coachSubmode: String? = null, val metroSubmode: String? = null, diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/OptimisationMethod.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/OptimisationMethod.kt index 325af17..1a4ae15 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/OptimisationMethod.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/OptimisationMethod.kt @@ -7,13 +7,11 @@ import kotlinx.serialization.Serializable * Created by Nico Brandenberger on 19.02.2026 */ @Serializable -enum class OptimisationMethod() { +enum class OptimisationMethod { @SerialName("minChanges") MIN_CHANGES } -fun OptimisationMethod.serializedName(): String = - this::class.java.getField(this.name) - .getAnnotation(SerialName::class.java) - ?.value - ?: this.name \ No newline at end of file +fun OptimisationMethod.serializedName(): String = when (this) { + OptimisationMethod.MIN_CHANGES -> "minChanges" +} \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/RailSubmode.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/RailSubmode.kt index a0fb475..9f9faee 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/RailSubmode.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/RailSubmode.kt @@ -7,7 +7,7 @@ import kotlinx.serialization.Serializable * Created by Nico Brandenberger on 19.02.2026 */ @Serializable -enum class RailSubmode() { +enum class RailSubmode { @SerialName("international") //Trains ICE, TGV, EC, RJX, NJ, EN INTERNATIONAL, @SerialName("highSpeedRail") //Trains IC @@ -17,11 +17,18 @@ enum class RailSubmode() { @SerialName("railShuttle") // Trains ATZ, PE RAIL_SHUTTLE, @SerialName("local") //Trains S, SN, RB, RE, - LOCAL, + LOCAL; + + companion object { + fun fromSerializedName(name: String): RailSubmode? = + entries.firstOrNull { it.serializedName() == name } + } } -fun RailSubmode.serializedName(): String = - this::class.java.getField(this.name) - .getAnnotation(SerialName::class.java) - ?.value - ?: this.name \ No newline at end of file +fun RailSubmode.serializedName(): String = when (this) { + RailSubmode.INTERNATIONAL -> "international" + RailSubmode.HIGH_SPEED_RAIL -> "highSpeedRail" + RailSubmode.INTERREGIONAL_RAIL -> "interregionalRail" + RailSubmode.RAIL_SHUTTLE -> "railShuttle" + RailSubmode.LOCAL -> "local" +} \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/TripParams.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/TripParams.kt index e0801f5..d7a67ac 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/TripParams.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/TripParams.kt @@ -21,9 +21,9 @@ data class TripParams( val includeIntermediateStops: Boolean = false, val includeAllRestrictedLines: Boolean = false, val useRealtimeData: RealtimeData? = null, - val modeAndModeOfOperationFilter: List?, - val walkSpeed: Int?, - val transferLimit: Int?, - val optimisationMethod: String?, - val bikeTransport: Boolean?, + val modeAndModeOfOperationFilter: List? = null, + val walkSpeed: Int? = null, + val transferLimit: Int? = null, + val optimisationMethod: OptimisationMethod? = null, + val bikeTransport: Boolean? = null, ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/usecase/RequestTrips.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/usecase/RequestTrips.kt index 6d73afc..7a77545 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/usecase/RequestTrips.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/usecase/RequestTrips.kt @@ -45,6 +45,7 @@ internal class RequestTrips( time = time, isSearchForDepartureTime = isSearchForDepartureTime, params = params, + individualTransportOption = individualTransportOption, ) return when (val response = diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripRefinementTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripRefinementTest.kt index 4eb6062..2e88695 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripRefinementTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripRefinementTest.kt @@ -24,7 +24,7 @@ import ch.opentransportdata.ojp.domain.model.RealtimeData import ch.opentransportdata.ojp.domain.model.Result import ch.opentransportdata.ojp.domain.model.TripParams import ch.opentransportdata.ojp.domain.model.TripRefineParam -import ch.opentransportdata.ojp.domain.model.serializedName + import kotlinx.coroutines.test.runTest import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString @@ -141,7 +141,7 @@ class TripRefinementXmlUtilTest { useRealtimeData = RealtimeData.FULL, walkSpeed = 100, transferLimit = 0, - optimisationMethod = OptimisationMethod.MIN_CHANGES.serializedName(), + optimisationMethod = OptimisationMethod.MIN_CHANGES, bikeTransport = false )