From 0cd3f555c2ca9406d5b919c46677c244210fb1b8 Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Tue, 23 Sep 2025 16:32:12 +0200 Subject: [PATCH 01/10] Add xml util dependency --- gradle/libs.versions.toml | 7 +++++-- sdk/build.gradle.kts | 3 +++ settings.gradle.kts | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cd33d58..5d15c12 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,16 +2,17 @@ agp = "8.9.1" assertk = "0.28.1" desugar_jdk_libs = "2.1.5" -kotlin = "2.0.0" +kotlin = "2.2.0" coreKtx = "1.15.0" junit = "4.13.2" extJunit = "1.2.1" kotlinxCoroutinesTest = "1.8.0" +xmlUtil = "0.91.2" timber = "5.0.1" koin = "3.5.3" retrofit2 = "2.11.0" okHttp = "4.12.0" -tikXml = "0.9.0_13-SNAPSHOT" +tikXml = "0.9.0_14-SNAPSHOT" dokka = "1.9.20" lifecycleRuntimeKtx = "2.8.7" activityCompose = "1.10.1" @@ -29,6 +30,8 @@ desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "extJunit" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutinesTest" } +xmlUtilCore = { module = "io.github.pdvrieze.xmlutil:core-android", version.ref = "xmlUtil" } +xmlUtilSerialization = { module = "io.github.pdvrieze.xmlutil:serialization-jvm", version.ref = "xmlUtil" } timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit2" } diff --git a/sdk/build.gradle.kts b/sdk/build.gradle.kts index 1832784..62b2a45 100644 --- a/sdk/build.gradle.kts +++ b/sdk/build.gradle.kts @@ -99,6 +99,9 @@ dependencies { testImplementation(libs.junit) testImplementation(libs.assertk) testImplementation(libs.kotlinx.coroutines.test) + implementation(libs.xmlUtilCore) + implementation(libs.xmlUtilSerialization) + } tasks.register("javadocJar") { diff --git a/settings.gradle.kts b/settings.gradle.kts index 44bba45..bef9c7c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,14 +2,17 @@ pluginManagement { repositories { google() mavenCentral() + mavenLocal() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { + flatDir { dirs("${rootDir}/libs") } google() mavenCentral() + mavenLocal() maven { setUrl("http://oss.sonatype.org/content/repositories/snapshots") isAllowInsecureProtocol = true From 8a0fdefe5d838bd42a57ab2dbf3cba0d12aea5db Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Mon, 29 Sep 2025 12:02:42 +0200 Subject: [PATCH 02/10] Remove tikXML dependency and add kotlin serialization --- gradle/libs.versions.toml | 6 +----- sdk/build.gradle.kts | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5d15c12..1f19202 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,6 @@ timber = "5.0.1" koin = "3.5.3" retrofit2 = "2.11.0" okHttp = "4.12.0" -tikXml = "0.9.0_14-SNAPSHOT" dokka = "1.9.20" lifecycleRuntimeKtx = "2.8.7" activityCompose = "1.10.1" @@ -25,6 +24,7 @@ playServices = "21.3.0" [libraries] assertk = { module = "com.willowtreeapps.assertk:assertk", version.ref = "assertk" } +converter-kotlinx-serialization = { module = "com.squareup.retrofit2:converter-kotlinx-serialization", version.ref = "retrofit2" } core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" } junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -37,10 +37,6 @@ koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit2" } okHttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okHttp" } okHttpLogger = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okHttp" } -tikAnnotation = { module = "com.tickaroo.tikxml:annotation", version.ref = "tikXml" } -tikConverters = { module = "com.tickaroo.tikxml:converter-htmlescape", version.ref = "tikXml" } -tikRetrofit = { module = "com.tickaroo.tikxml:retrofit-converter", version.ref = "tikXml" } -tikProcessor = { module = "com.tickaroo.tikxml:processor", version.ref = "tikXml" } dokka = { module = "org.jetbrains.dokka:android-documentation-plugin", version.ref = "dokka" } lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } viewModel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleRuntimeKtx" } diff --git a/sdk/build.gradle.kts b/sdk/build.gradle.kts index 62b2a45..bf1b3e3 100644 --- a/sdk/build.gradle.kts +++ b/sdk/build.gradle.kts @@ -89,10 +89,7 @@ dependencies { implementation(libs.retrofit) implementation(libs.okHttp) implementation(libs.okHttpLogger) - implementation(libs.tikRetrofit) - implementation(libs.tikAnnotation) - implementation(libs.tikConverters) - kapt(libs.tikProcessor) // needed for TypeAdapter creation + implementation(libs.converter.kotlinx.serialization) implementation(libs.dokka) implementation(libs.kotlinx.serialization.json) @@ -101,7 +98,6 @@ dependencies { testImplementation(libs.kotlinx.coroutines.test) implementation(libs.xmlUtilCore) implementation(libs.xmlUtilSerialization) - } tasks.register("javadocJar") { From 82e13662620c0049f64c788ae9a99dd0e75aa8e4 Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Mon, 29 Sep 2025 13:45:41 +0200 Subject: [PATCH 03/10] Migrate DTOs --- .../opentransportdata/ojp/data/dto/OjpDto.kt | 34 +++-- .../ojp/data/dto/request/OjpRequestDto.kt | 16 ++- .../dto/request/ServiceRequestContextDto.kt | 17 ++- .../ojp/data/dto/request/ServiceRequestDto.kt | 32 +++-- .../data/dto/request/lir/GeoRestrictionDto.kt | 14 +- .../data/dto/request/lir/InitialInputDto.kt | 18 ++- .../lir/LocationInformationRequestDto.kt | 23 +++- .../ojp/data/dto/request/lir/PointDto.kt | 15 ++- .../ojp/data/dto/request/lir/RectangleDto.kt | 15 ++- .../data/dto/request/lir/RestrictionsDto.kt | 33 +++-- .../tir/ModeAndModeOfOperationFilterDto.kt | 29 ++-- .../data/dto/request/tir/PlaceContextDto.kt | 20 ++- .../data/dto/request/tir/PlaceReferenceDto.kt | 22 +-- .../ojp/data/dto/request/tir/TripParamsDto.kt | 43 +++--- .../data/dto/request/tir/TripRequestDto.kt | 32 +++-- .../ojp/data/dto/request/tir/TripVia.kt | 11 +- .../dto/request/trr/TripRefineParamDto.kt | 30 +++-- .../dto/request/trr/TripRefineRequestDto.kt | 26 ++-- .../ojp/data/dto/response/GeoPositionDto.kt | 20 ++- .../ojp/data/dto/response/ModeDto.kt | 61 +++++++-- .../ojp/data/dto/response/NameDto.kt | 15 ++- .../ojp/data/dto/response/OjpResponseDto.kt | 19 ++- .../ojp/data/dto/response/PlaceDto.kt | 40 ++++-- .../ojp/data/dto/response/PlaceResultDto.kt | 25 ++-- .../ojp/data/dto/response/PlacesDto.kt | 12 +- .../ojp/data/dto/response/PrivateCodeDto.kt | 18 ++- .../data/dto/response/ServiceDeliveryDto.kt | 61 +++++++-- .../response/delivery/AbstractDeliveryDto.kt | 2 + .../LocationInformationDeliveryDto.kt | 41 ++++-- .../dto/response/delivery/TripDeliveryDto.kt | 47 ++++--- .../delivery/TripRefineDeliveryDto.kt | 54 +++++--- .../ojp/data/dto/response/place/AddressDto.kt | 54 +++++--- .../dto/response/place/PointOfInterestDto.kt | 33 +++-- .../data/dto/response/place/StopPlaceDto.kt | 46 ++++--- .../data/dto/response/place/StopPointDto.kt | 73 ++++++---- .../dto/response/place/TopographicPlaceDto.kt | 21 +-- .../ojp/data/dto/response/tir/LegDto.kt | 33 +++-- .../response/tir/TripResponseContextDto.kt | 18 ++- .../data/dto/response/tir/TripResultDto.kt | 25 ++-- .../data/dto/response/tir/leg/AttributeDto.kt | 17 ++- .../dto/response/tir/leg/ContinuousLegDto.kt | 28 ++-- .../tir/leg/ContinuousServiceStructure.kt | 28 ++-- .../dto/response/tir/leg/DatedJourneyDto.kt | 127 ++++++++++++------ .../tir/leg/ExpectedDepartureOccupancyDto.kt | 19 ++- .../data/dto/response/tir/leg/LegAlightDto.kt | 83 ++++++++---- .../data/dto/response/tir/leg/LegBoardDto.kt | 93 +++++++++---- .../response/tir/leg/LegIntermediateDto.kt | 86 ++++++++---- .../dto/response/tir/leg/LegStartEndDto.kt | 28 ++-- .../data/dto/response/tir/leg/LegTrackDto.kt | 12 +- .../dto/response/tir/leg/LinearShapeDto.kt | 12 +- .../response/tir/leg/ProductCategoryDto.kt | 27 ++-- .../dto/response/tir/leg/ServiceTimeDto.kt | 20 ++- .../dto/response/tir/leg/SituationFullRef.kt | 19 ++- .../dto/response/tir/leg/SituationFullRefs.kt | 15 ++- .../data/dto/response/tir/leg/TimedLegDto.kt | 32 +++-- .../dto/response/tir/leg/TrackSectionDto.kt | 14 +- .../dto/response/tir/leg/TransferLegDto.kt | 31 +++-- .../tir/situations/AffectedStopPointDto.kt | 13 +- .../dto/response/tir/situations/AffectsDto.kt | 15 ++- .../response/tir/situations/BlockingDto.kt | 13 +- .../response/tir/situations/ConsequenceDto.kt | 15 ++- .../tir/situations/ConsequencesDto.kt | 15 ++- .../response/tir/situations/PtSituationDto.kt | 76 +++++++---- .../response/tir/situations/PublishAtScope.kt | 20 ++- .../tir/situations/PublishingActionsDto.kt | 47 ++++--- .../response/tir/situations/SituationDto.kt | 16 ++- .../dto/response/tir/situations/SourceDto.kt | 15 ++- .../response/tir/situations/StopPointsDto.kt | 13 +- .../tir/situations/TextualContentDto.kt | 124 +++++++++++------ .../tir/situations/ValidityPeriodDto.kt | 22 ++- .../data/dto/response/tir/trips/TripDto.kt | 57 +++++--- .../dto/response/tir/trips/TripSummaryDto.kt | 14 +- .../model/ConventionalModesOfOperation.kt | 24 ++-- .../ojp/domain/model/TransferType.kt | 17 +++ 74 files changed, 1593 insertions(+), 762 deletions(-) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/OjpDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/OjpDto.kt index 3ed2ace..060a2c3 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/OjpDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/OjpDto.kt @@ -2,24 +2,40 @@ package ch.opentransportdata.ojp.data.dto import ch.opentransportdata.ojp.data.dto.request.OjpRequestDto import ch.opentransportdata.ojp.data.dto.response.OjpResponseDto -import com.tickaroo.tikxml.annotation.Attribute -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.ExperimentalXmlUtilApi +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlNamespaceDeclSpecs +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml( - name = "OJP", - writeNamespaces = ["http://www.vdv.de/ojp", "siri=http://www.siri.org.uk/siri", "xsi=http://www.w3.org/2001/XMLSchema-instance", "xsd=http://www.w3.org/2001/XMLSchema"] + +@OptIn(ExperimentalXmlUtilApi::class) +@Serializable +@XmlSerialName("OJP", OJP_NAME_SPACE, "") +@XmlNamespaceDeclSpecs( + "siri=http://www.siri.org.uk/siri", + "xsi=http://www.w3.org/2001/XMLSchema-instance", + "xsd=http://www.w3.org/2001/XMLSchema" ) internal data class OjpDto( - @Element(name = "OJPRequest") + + @XmlElement(true) + @XmlSerialName("OJPRequest", OJP_NAME_SPACE, "") val ojpRequest: OjpRequestDto? = null, - @Element(name = "OJPResponse") + @XmlElement(true) + @XmlSerialName("OJPResponse", OJP_NAME_SPACE, "") val ojpResponse: OjpResponseDto? = null, - @Attribute(name = "version") + @XmlElement(false) + @SerialName("version") val version: String = "2.0", ) + +internal const val OJP_NAME_SPACE = "http://www.vdv.de/ojp" +internal const val SIRI_NAME_SPACE = "http://www.siri.org.uk/siri" +internal const val SIRI_PREFIX = "siri" \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/OjpRequestDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/OjpRequestDto.kt index 89a37e2..045743c 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/OjpRequestDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/OjpRequestDto.kt @@ -1,13 +1,19 @@ package ch.opentransportdata.ojp.data.dto.request -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "OJPRequest") +@Serializable +@XmlSerialName("OJPRequest", OJP_NAME_SPACE, "") internal data class OjpRequestDto( - @Element(name = "siri:ServiceRequest") - val serviceRequest: ServiceRequestDto + @XmlElement(true) + @XmlSerialName("ServiceRequest", SIRI_NAME_SPACE, SIRI_PREFIX) + val serviceRequest: ServiceRequestDto? = null ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/ServiceRequestContextDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/ServiceRequestContextDto.kt index 3a54e8b..04889cb 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/ServiceRequestContextDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/ServiceRequestContextDto.kt @@ -1,13 +1,18 @@ package ch.opentransportdata.ojp.data.dto.request -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 21.08.2024 */ -@Xml(name = "siri:ServiceRequestContext") -data class ServiceRequestContextDto( - @PropertyElement(name = "siri:Language") - val language: String, +@Serializable +@XmlSerialName("ServiceRequestContext", SIRI_NAME_SPACE, SIRI_PREFIX) +internal data class ServiceRequestContextDto( + @XmlElement(true) + @XmlSerialName("Language", SIRI_NAME_SPACE, SIRI_PREFIX) + val language: String ) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/ServiceRequestDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/ServiceRequestDto.kt index a23111a..a5fb2a5 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/ServiceRequestDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/ServiceRequestDto.kt @@ -1,33 +1,45 @@ package ch.opentransportdata.ojp.data.dto.request +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import ch.opentransportdata.ojp.data.dto.request.lir.LocationInformationRequestDto import ch.opentransportdata.ojp.data.dto.request.trr.TripRefineRequestDto import ch.opentransportdata.ojp.data.dto.request.tir.TripRequestDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "ServiceRequest") +@kotlinx.serialization.Serializable +@XmlSerialName("ServiceRequest", SIRI_NAME_SPACE, SIRI_PREFIX) internal data class ServiceRequestDto( - @Element(name = "siri:ServiceRequestContext") + + @XmlElement(true) + @XmlSerialName("ServiceRequestContext", SIRI_NAME_SPACE, SIRI_PREFIX) val serviceRequestContext: ServiceRequestContextDto, - @PropertyElement(name = "siri:RequestTimestamp") + @XmlElement(true) + @XmlSerialName("RequestTimestamp", SIRI_NAME_SPACE, SIRI_PREFIX) + @kotlinx.serialization.Serializable(with = LocalDateTimeSerializer::class) val requestTimestamp: LocalDateTime, - @PropertyElement(name = "siri:RequestorRef") + @XmlElement(true) + @XmlSerialName("RequestorRef", SIRI_NAME_SPACE, SIRI_PREFIX) val requestorRef: String, - @Element(name = "OJPLocationInformationRequest") + @XmlElement(true) + @XmlSerialName("OJPLocationInformationRequest", OJP_NAME_SPACE, "ojp") val locationInformationRequest: LocationInformationRequestDto? = null, - @Element(name = "OJPTripRequest") + @XmlElement(true) + @XmlSerialName("OJPTripRequest", OJP_NAME_SPACE, "ojp") val tripRequest: TripRequestDto? = null, - @Element(name = "OJPTripRefineRequest") + @XmlElement(true) + @XmlSerialName("OJPTripRefineRequest", OJP_NAME_SPACE, "ojp") val tripRefineRequest: TripRefineRequestDto? = null, ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/GeoRestrictionDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/GeoRestrictionDto.kt index 2524b7b..74f8a91 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/GeoRestrictionDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/GeoRestrictionDto.kt @@ -1,13 +1,17 @@ package ch.opentransportdata.ojp.data.dto.request.lir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName +import kotlinx.serialization.Serializable /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "GeoRestriction") +@Serializable +@XmlSerialName("GeoRestriction", OJP_NAME_SPACE, "") internal data class GeoRestrictionDto( - @Element(name = "Rectangle") + @XmlElement(true) + @XmlSerialName("Rectangle", OJP_NAME_SPACE, "") val rectangle: RectangleDto? -) +) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/InitialInputDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/InitialInputDto.kt index 9559751..977300f 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/InitialInputDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/InitialInputDto.kt @@ -1,17 +1,23 @@ package ch.opentransportdata.ojp.data.dto.request.lir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "InitialInput") + +@Serializable +@XmlSerialName("InitialInput", OJP_NAME_SPACE, "") internal data class InitialInputDto( - @Element(name = "GeoRestriction") + + @XmlElement(true) + @XmlSerialName("GeoRestriction", OJP_NAME_SPACE, "") val geoRestriction: GeoRestrictionDto? = null, - @PropertyElement(name = "Name") + @XmlElement(true) + @XmlSerialName("Name", OJP_NAME_SPACE, "") val name: String? = null ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/LocationInformationRequestDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/LocationInformationRequestDto.kt index b1b2d85..cfdb0ce 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/LocationInformationRequestDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/LocationInformationRequestDto.kt @@ -1,22 +1,31 @@ package ch.opentransportdata.ojp.data.dto.request.lir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "OJPLocationInformationRequest") +@kotlinx.serialization.Serializable +@XmlSerialName("OJPLocationInformationRequest", OJP_NAME_SPACE, /* default ns */ "") internal data class LocationInformationRequestDto( - @PropertyElement(name = "siri:RequestTimestamp") + + @XmlElement(true) + @XmlSerialName("RequestTimestamp", SIRI_NAME_SPACE, SIRI_PREFIX) + @kotlinx.serialization.Serializable(with = LocalDateTimeSerializer::class) val requestTimestamp: LocalDateTime, - @Element(name = "InitialInput") + @XmlElement(true) + @XmlSerialName("InitialInput", OJP_NAME_SPACE, "") val initialInput: InitialInputDto, - @Element(name = "Restrictions") + @XmlElement(true) + @XmlSerialName("Restrictions", OJP_NAME_SPACE, "") val restrictions: RestrictionsDto ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/PointDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/PointDto.kt index b7cd778..0d8d0fa 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/PointDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/PointDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.request.lir -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(writeNamespaces = ["siri=http://www.siri.org.uk/siri"]) +@Serializable internal data class PointDto( - @PropertyElement(name = "siri:Longitude") + @XmlElement(true) + @XmlSerialName("Longitude", SIRI_NAME_SPACE, SIRI_PREFIX) val longitude: Double, - @PropertyElement(name = "siri:Latitude") + @XmlElement(true) + @XmlSerialName("Latitude", SIRI_NAME_SPACE, SIRI_PREFIX) val latitude: Double ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/RectangleDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/RectangleDto.kt index 8424f5f..59cacff 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/RectangleDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/RectangleDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.request.lir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "Rectangle") +@Serializable +@XmlSerialName("Rectangle", OJP_NAME_SPACE, "") internal data class RectangleDto( - @Element(name = "UpperLeft") + @XmlElement(true) + @XmlSerialName("UpperLeft", OJP_NAME_SPACE, "") val upperLeft: PointDto, - @Element(name = "LowerRight") + @XmlElement(true) + @XmlSerialName("LowerRight", OJP_NAME_SPACE, "") val lowerRight: PointDto ) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/RestrictionsDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/RestrictionsDto.kt index ffbc82b..21d0870 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/RestrictionsDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/lir/RestrictionsDto.kt @@ -1,29 +1,28 @@ package ch.opentransportdata.ojp.data.dto.request.lir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.TextContent -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.domain.model.PlaceTypeRestriction +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName +import nl.adaptivity.xmlutil.serialization.XmlValue /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "Restrictions") +@Serializable +@XmlSerialName("Restrictions", OJP_NAME_SPACE, "") internal data class RestrictionsDto( - @Element(name = "Type") - val types: List, + @XmlElement(true) + @XmlSerialName("Type", OJP_NAME_SPACE, "") + val types: List, - @PropertyElement(name = "NumberOfResults") + @XmlElement(true) + @XmlSerialName("NumberOfResults", OJP_NAME_SPACE, "") val numberOfResults: Int, - @PropertyElement(name = "IncludePtModes") + @XmlElement(true) + @XmlSerialName("IncludePtModes", OJP_NAME_SPACE, "") val ptModeIncluded: Boolean -) - -//workaround for tikXml: https://github.com/Tickaroo/tikxml/issues/46 -@Xml -internal data class RestrictionType( - @TextContent - val type: String -) +) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/ModeAndModeOfOperationFilterDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/ModeAndModeOfOperationFilterDto.kt index bb6005e..4bd424d 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/ModeAndModeOfOperationFilterDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/ModeAndModeOfOperationFilterDto.kt @@ -1,25 +1,22 @@ package ch.opentransportdata.ojp.data.dto.request.tir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.TextContent -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.domain.model.PtMode +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 31.07.2024 */ -@Xml(name = "ModeAndModeOfOperationFilter") +@Serializable +@XmlSerialName("ModeAndModeOfOperationFilter", OJP_NAME_SPACE, "") internal data class ModeAndModeOfOperationFilterDto( - @Element(name = "PtMode") - val ptMode: List?, - @PropertyElement(name = "Exclude") - val exclude: Boolean? -) - + @XmlElement(true) + @XmlSerialName("PtMode", OJP_NAME_SPACE, "") + val ptMode: List?, -//workaround for tikXml: https://github.com/Tickaroo/tikxml/issues/46 -@Xml -internal data class PtModeType( - @TextContent - val type: String + @XmlElement(true) + @XmlSerialName("Exclude", OJP_NAME_SPACE, "") + val exclude: Boolean? = 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 d08e79e..9347c84 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 @@ -1,17 +1,23 @@ package ch.opentransportdata.ojp.data.dto.request.tir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName +import kotlinx.serialization.Serializable import java.time.LocalDateTime /** * Created by Michael Ruppen on 07.06.2024 */ -@Xml +@Serializable internal data class PlaceContextDto( - @Element(name = "PlaceRef") + @XmlElement(true) + @XmlSerialName("PlaceRef", OJP_NAME_SPACE, "") val placeReference: PlaceReferenceDto, - @PropertyElement(name = "DepArrTime") - val departureArrivalTime: LocalDateTime? + + @XmlElement(true) + @XmlSerialName("DepArrTime", OJP_NAME_SPACE, "") + @Serializable(with = LocalDateTimeSerializer::class) + val departureArrivalTime: LocalDateTime? = null ) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/PlaceReferenceDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/PlaceReferenceDto.kt index ae821a4..b490a18 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/PlaceReferenceDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/PlaceReferenceDto.kt @@ -1,12 +1,13 @@ package ch.opentransportdata.ojp.data.dto.request.tir import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.GeoPositionDto import ch.opentransportdata.ojp.data.dto.response.NameDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 07.06.2024 @@ -15,13 +16,16 @@ import kotlinx.parcelize.Parcelize */ //todo: normally should create all the reference objects @Parcelize -@Xml(name = "PlaceRef") +@Serializable +@XmlSerialName("PlaceRef", OJP_NAME_SPACE, "") data class PlaceReferenceDto( - //If more types needed, create custom typeAdapter and parse only necessary - @PropertyElement(name = "StopPlaceRef") + @XmlElement(true) + @XmlSerialName("StopPlaceRef", OJP_NAME_SPACE, "") val ref: String? = null, - @Element(name = "Name") - val stationName: NameDto?, - @Element(name = "GeoPosition") //todo: check if schema is correct (when working on backend), think of solution where only send this if is Address + @XmlElement(true) + @XmlSerialName("Name", OJP_NAME_SPACE, "") + val stationName: NameDto? = null, + @XmlElement(true) + @XmlSerialName("GeoPosition", OJP_NAME_SPACE, "") val position: GeoPositionDto? = null ) : Parcelable \ No newline at end of file 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 da5c8c0..e72a053 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 @@ -1,42 +1,55 @@ package ch.opentransportdata.ojp.data.dto.request.tir +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.domain.model.RealtimeData -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 07.06.2024 */ -@Xml(name = "Params") +@Serializable +@XmlSerialName("Params", OJP_NAME_SPACE, "") internal data class TripParamsDto( - @PropertyElement(name = "NumberOfResults") + + @XmlElement(true) + @XmlSerialName("NumberOfResults", OJP_NAME_SPACE, "") val numberOfResults: Int? = null, - @PropertyElement(name = "NumberOfResultsBefore") + @XmlElement(true) + @XmlSerialName("NumberOfResultsBefore", OJP_NAME_SPACE, "") val numberOfResultsBefore: Int? = null, - @PropertyElement(name = "NumberOfResultsAfter") + @XmlElement(true) + @XmlSerialName("NumberOfResultsAfter", OJP_NAME_SPACE, "") val numberOfResultsAfter: Int? = null, - @PropertyElement(name = "IncludeTrackSections") + @XmlElement(true) + @XmlSerialName("IncludeTrackSections", OJP_NAME_SPACE, "") val includeTrackSections: Boolean? = null, - @PropertyElement(name = "IncludeLegProjection") + @XmlElement(true) + @XmlSerialName("IncludeLegProjection", OJP_NAME_SPACE, "") val includeLegProjection: Boolean? = null, - @PropertyElement(name = "IncludeTurnDescription") + @XmlElement(true) + @XmlSerialName("IncludeTurnDescription", OJP_NAME_SPACE, "") val includeTurnDescription: Boolean? = null, - @PropertyElement(name = "IncludeIntermediateStops") + @XmlElement(true) + @XmlSerialName("IncludeIntermediateStops", OJP_NAME_SPACE, "") val includeIntermediateStops: Boolean? = null, - @PropertyElement(name = "IncludeAllRestrictedLines") + @XmlElement(true) + @XmlSerialName("IncludeAllRestrictedLines", OJP_NAME_SPACE, "") val includeAllRestrictedLines: Boolean? = null, - @PropertyElement(name = "UseRealtimeData") + @XmlElement(true) + @XmlSerialName("UseRealtimeData", OJP_NAME_SPACE, "") val useRealtimeData: RealtimeData? = null, - @Element(name = "ModeAndModeOfOperationFilter") - val modeAndModeOfOperationFilter: List? + @XmlElement(true) + @XmlSerialName("ModeAndModeOfOperationFilter", OJP_NAME_SPACE, "") + val modeAndModeOfOperationFilter: List? = null ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripRequestDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripRequestDto.kt index dd4f179..c762c1d 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripRequestDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripRequestDto.kt @@ -1,28 +1,38 @@ package ch.opentransportdata.ojp.data.dto.request.tir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Michael Ruppen on 07.06.2024 */ -@Xml(name = "OJPTripRequest") +@kotlinx.serialization.Serializable +@XmlSerialName("OJPTripRequest", OJP_NAME_SPACE, "") internal data class TripRequestDto( - @PropertyElement(name = "siri:RequestTimestamp") + + @XmlElement(true) + @XmlSerialName("RequestTimestamp", SIRI_NAME_SPACE, SIRI_PREFIX) + @kotlinx.serialization.Serializable(with = LocalDateTimeSerializer::class) val requestTimestamp: LocalDateTime, - @Element(name = "Origin") + @XmlElement(true) + @XmlSerialName("Origin", OJP_NAME_SPACE, "") val origin: PlaceContextDto, - @Element(name = "Destination") + @XmlElement(true) + @XmlSerialName("Destination", OJP_NAME_SPACE, "") val destination: PlaceContextDto, - @Element(name = "Via") + @XmlElement(true) + @XmlSerialName("Via", OJP_NAME_SPACE, "") val via: List = emptyList(), - @Element(name = "Params") - val params: TripParamsDto? - + @XmlElement(true) + @XmlSerialName("Params", OJP_NAME_SPACE, "") + val params: TripParamsDto? = null ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripVia.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripVia.kt index 264a169..d970202 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripVia.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/tir/TripVia.kt @@ -1,14 +1,17 @@ package ch.opentransportdata.ojp.data.dto.request.tir -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 07.06.2024 */ -@Xml(name = "ViaPoint") +@Serializable internal data class TripVia( - @Element(name = "ViaPoint") + @XmlElement(true) + @XmlSerialName("ViaPoint", OJP_NAME_SPACE, "") val viaPoint: PlaceReferenceDto ) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/trr/TripRefineParamDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/trr/TripRefineParamDto.kt index 3cbf6b9..27d72f8 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/trr/TripRefineParamDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/trr/TripRefineParamDto.kt @@ -1,30 +1,40 @@ package ch.opentransportdata.ojp.data.dto.request.trr +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.domain.model.RealtimeData -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Nico Brandenberger on 07.04.2025 */ -@Xml(name = "Params") +@Serializable +@XmlSerialName("Params", OJP_NAME_SPACE, "") internal data class TripRefineParamDto( - @PropertyElement(name = "IncludeTrackSections") + + @XmlElement(true) + @XmlSerialName("IncludeTrackSections", OJP_NAME_SPACE, "") val includeTrackSections: Boolean? = null, - @PropertyElement(name = "IncludeLegProjection") + @XmlElement(true) + @XmlSerialName("IncludeLegProjection", OJP_NAME_SPACE, "") val includeLegProjection: Boolean? = null, - @PropertyElement(name = "IncludeTurnDescription") + @XmlElement(true) + @XmlSerialName("IncludeTurnDescription", OJP_NAME_SPACE, "") val includeTurnDescription: Boolean? = null, - @PropertyElement(name = "IncludeIntermediateStops") + @XmlElement(true) + @XmlSerialName("IncludeIntermediateStops", OJP_NAME_SPACE, "") val includeIntermediateStops: Boolean? = null, - @PropertyElement(name = "IncludeAllRestrictedLines") + @XmlElement(true) + @XmlSerialName("IncludeAllRestrictedLines", OJP_NAME_SPACE, "") val includeAllRestrictedLines: Boolean? = null, - @PropertyElement(name = "UseRealtimeData") + @XmlElement(true) + @XmlSerialName("UseRealtimeData", OJP_NAME_SPACE, "") val useRealtimeData: RealtimeData? = null, -) +) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/trr/TripRefineRequestDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/trr/TripRefineRequestDto.kt index 3961b87..52fe7a7 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/trr/TripRefineRequestDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/request/trr/TripRefineRequestDto.kt @@ -1,24 +1,34 @@ package ch.opentransportdata.ojp.data.dto.request.trr +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import ch.opentransportdata.ojp.data.dto.response.tir.TripResultDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Nico Brandenberger on 07.04.2025 */ -@Xml(name = "OJPTripRefineRequest") +@Serializable +@XmlSerialName("OJPTripRefineRequest", OJP_NAME_SPACE, "") internal data class TripRefineRequestDto( - @PropertyElement(name = "siri:RequestTimestamp") + + @XmlElement(true) + @XmlSerialName("RequestTimestamp", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = LocalDateTimeSerializer::class) val requestTimestamp: LocalDateTime, - @Element(name = "RefineParams") - val params: TripRefineParamDto?, + @XmlElement(true) + @XmlSerialName("RefineParams", OJP_NAME_SPACE, "") + val params: TripRefineParamDto? = null, - @Element(name = "TripResult") + @XmlElement(true) + @XmlSerialName("TripResult", OJP_NAME_SPACE, "") val result: TripResultDto, ) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/GeoPositionDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/GeoPositionDto.kt index 6b28af2..dfcde7e 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/GeoPositionDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/GeoPositionDto.kt @@ -1,22 +1,28 @@ package ch.opentransportdata.ojp.data.dto.response import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 * * Serializable and Parcelize annotation is both needed for compose navigation with custom types */ -@Serializable @Parcelize -@Xml(name = "GeoPosition") +@Serializable +@XmlSerialName("GeoPosition", OJP_NAME_SPACE, "") data class GeoPositionDto( - @PropertyElement(name = "siri:Longitude") + @XmlElement(true) + @XmlSerialName("Longitude", SIRI_NAME_SPACE, SIRI_PREFIX) val longitude: Double, - @PropertyElement(name = "siri:Latitude") + + @XmlElement(true) + @XmlSerialName("Latitude", SIRI_NAME_SPACE, SIRI_PREFIX) val latitude: Double -): Parcelable \ No newline at end of file +) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/ModeDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/ModeDto.kt index bfc3f2a..600c97e 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/ModeDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/ModeDto.kt @@ -1,24 +1,67 @@ package ch.opentransportdata.ojp.data.dto.response import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import ch.opentransportdata.ojp.domain.model.PtMode -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 * * Serializable and Parcelize annotation is both needed for compose navigation with custom types */ -@Serializable @Parcelize -@Xml(name = "Mode") +@Serializable +@XmlSerialName("Mode", OJP_NAME_SPACE, "") data class ModeDto( - @PropertyElement(name = "PtMode") + @XmlElement(true) + @XmlSerialName("PtMode", OJP_NAME_SPACE, "") + @Serializable val ptMode: PtMode, - @Element(name = "Name") - val name: NameDto? -): Parcelable \ No newline at end of file + + @XmlElement(true) + @XmlSerialName("Name", OJP_NAME_SPACE, "") + val name: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("RailSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val railSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("BusSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val busSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("CoachSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val coachSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("MetroSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val metroSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("TramSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val tramSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("TrolleyBusSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val trolleyBusSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("TelecabinSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val telecabinSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("FunicularSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val funicularSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("WaterSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val waterSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("AirSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val airSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("TaxiSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val taxiSubmode: String? = null, + @XmlElement(true) + @XmlSerialName("SelfDriveSubmode", SIRI_NAME_SPACE, SIRI_PREFIX) + val selfDriveSubmode: String? = null +) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/NameDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/NameDto.kt index bd57ac0..62ade3d 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/NameDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/NameDto.kt @@ -1,20 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 * * Serializable and Parcelize annotation is both needed for compose navigation with custom types */ -@Serializable @Parcelize -@Xml(name = "Name") +@Serializable +@XmlSerialName("Name") data class NameDto( - @PropertyElement(name = "Text") - val text: String? -): Parcelable \ No newline at end of file + @XmlElement(true) + @XmlSerialName("Text") + val text: String? = null +) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/OjpResponseDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/OjpResponseDto.kt index 4d7d0da..4962e20 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/OjpResponseDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/OjpResponseDto.kt @@ -1,13 +1,20 @@ package ch.opentransportdata.ojp.data.dto.response -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "OJPResponse") +@Serializable +@XmlSerialName("OJPResponse", OJP_NAME_SPACE, "") internal data class OjpResponseDto( - @Element(name = "siri:ServiceDelivery") - val serviceDelivery: ServiceDeliveryDto -) + // e.g. ... + @XmlElement(true) + @XmlSerialName("ServiceDelivery", SIRI_NAME_SPACE, SIRI_PREFIX) + val serviceDelivery: ServiceDeliveryDto? = null +) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlaceDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlaceDto.kt index 84283fa..f051f09 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlaceDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlaceDto.kt @@ -1,41 +1,57 @@ package ch.opentransportdata.ojp.data.dto.response import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.place.AbstractPlaceDto import ch.opentransportdata.ojp.data.dto.response.place.AddressDto import ch.opentransportdata.ojp.data.dto.response.place.PointOfInterestDto import ch.opentransportdata.ojp.data.dto.response.place.StopPlaceDto import ch.opentransportdata.ojp.data.dto.response.place.StopPointDto import ch.opentransportdata.ojp.data.dto.response.place.TopographicPlaceDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 * * Serializable and Parcelize annotation is both needed for compose navigation with custom types */ -@Serializable @Parcelize -@Xml(name = "Place") +@Serializable +@XmlSerialName("Place", OJP_NAME_SPACE, "") data class PlaceDto( - @Element(name = "StopPoint") + @XmlElement(true) + @XmlSerialName("StopPoint", OJP_NAME_SPACE, "") val stopPoint: StopPointDto? = null, - @Element(name = "StopPlace") + + @XmlElement(true) + @XmlSerialName("StopPlace", OJP_NAME_SPACE, "") val stopPlace: StopPlaceDto? = null, - @Element(name = "TopographicPlace") + + @XmlElement(true) + @XmlSerialName("TopographicPlace", OJP_NAME_SPACE, "") val topographicPlace: TopographicPlaceDto? = null, - @Element(name = "PointOfInterest") + + @XmlElement(true) + @XmlSerialName("PointOfInterest", OJP_NAME_SPACE, "") val pointOfInterest: PointOfInterestDto? = null, - @Element(name = "Address") + + @XmlElement(true) + @XmlSerialName("Address", OJP_NAME_SPACE, "") val address: AddressDto? = null, - @Element(name = "Name") + + @XmlElement(true) + @XmlSerialName("Name", OJP_NAME_SPACE, "") val name: NameDto? = null, - @Element(name = "GeoPosition") + + @XmlElement(true) + @XmlSerialName("GeoPosition", OJP_NAME_SPACE, "") val position: GeoPositionDto? = null, - @Element(name = "Mode") + + @XmlElement(true) + @XmlSerialName("Mode", OJP_NAME_SPACE, "") val mode: List? = emptyList(), ) : Parcelable { diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlaceResultDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlaceResultDto.kt index 437cb39..c88abf1 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlaceResultDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlaceResultDto.kt @@ -1,30 +1,35 @@ package ch.opentransportdata.ojp.data.dto.response import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 * * Serializable and Parcelize annotation is both needed for compose navigation with custom types */ -@Serializable @Parcelize -@Xml(name = "PlaceResult") +@Serializable +@XmlSerialName("PlaceResult", OJP_NAME_SPACE, "") data class PlaceResultDto( - @Element(name = "Place") + @XmlElement(true) + @XmlSerialName("Place", OJP_NAME_SPACE, "") val place: PlaceDto? = null, - @PropertyElement(name = "Complete") + + @XmlElement(true) + @XmlSerialName("Complete", OJP_NAME_SPACE, "") val complete: Boolean, - @PropertyElement(name = "Probability") - val probability: Double?, -) : Parcelable { + @XmlElement(true) + @XmlSerialName("Probability", OJP_NAME_SPACE, "") + val probability: Double? = null +) : Parcelable { @IgnoredOnParcel + @Transient var distance: Double = Double.MAX_VALUE } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlacesDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlacesDto.kt index 30f55b9..23b790b 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlacesDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PlacesDto.kt @@ -1,20 +1,22 @@ package ch.opentransportdata.ojp.data.dto.response import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.place.StopPointDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Deniz Kalem on 26.03.2025 */ -@Serializable @Parcelize -@Xml(name = "Places") +@Serializable +@XmlSerialName("Places", OJP_NAME_SPACE, "") data class PlacesDto( - @Element(name = "Place") + @XmlElement(true) + @XmlSerialName("Place", OJP_NAME_SPACE, "") val places: List? = emptyList() ) : Parcelable { diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PrivateCodeDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PrivateCodeDto.kt index dda47f4..c85d0a8 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PrivateCodeDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/PrivateCodeDto.kt @@ -1,22 +1,26 @@ package ch.opentransportdata.ojp.data.dto.response import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 26.04.2024 * * Serializable and Parcelize annotation is both needed for compose navigation with custom types */ -@Serializable @Parcelize -@Xml(name = "PrivateCode") +@Serializable +@XmlSerialName("PrivateCode", OJP_NAME_SPACE, "") data class PrivateCodeDto( - @PropertyElement(name = "System") + @XmlElement(true) + @XmlSerialName("System", OJP_NAME_SPACE, "") val system: String, - @PropertyElement(name = "Value") - val value: String, + + @XmlElement(true) + @XmlSerialName("Value", OJP_NAME_SPACE, "") + val value: String ) : Parcelable diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/ServiceDeliveryDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/ServiceDeliveryDto.kt index 13943b9..9c20c57 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/ServiceDeliveryDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/ServiceDeliveryDto.kt @@ -1,20 +1,61 @@ package ch.opentransportdata.ojp.data.dto.response +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import ch.opentransportdata.ojp.data.dto.response.delivery.AbstractDeliveryDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.response.delivery.LocationInformationDeliveryDto +import ch.opentransportdata.ojp.data.dto.response.delivery.TripDeliveryDto +import ch.opentransportdata.ojp.data.dto.response.delivery.TripRefineDeliveryDto +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "siri:ServiceDelivery") +@Serializable +@XmlSerialName("ServiceDelivery", SIRI_NAME_SPACE, SIRI_PREFIX) internal data class ServiceDeliveryDto( - @PropertyElement(name = "siri:ResponseTimestamp") + @XmlElement(true) + @XmlSerialName("ResponseTimestamp", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = LocalDateTimeSerializer::class) val responseTimestamp: LocalDateTime, - @PropertyElement(name = "siri:ProducerRef") - val producerRef: String?, - @Element - val ojpDelivery: AbstractDeliveryDto, -) + + @XmlElement(true) + @XmlSerialName("ProducerRef", SIRI_NAME_SPACE, SIRI_PREFIX) + val producerRef: String? = null, + + // Polymorphic child: tag name determines the concrete delivery subtype. + // You can either rely on @XmlSerialName on the subtypes (with a polymorphic SerializersModule), + // or explicitly list the element names here via @XmlPolyChildren: + @XmlElement(true) + @XmlSerialName("OJPLocationInformationDelivery", OJP_NAME_SPACE, "") + val ojpLocationInformationDelivery: LocationInformationDeliveryDto? = null, + + @XmlElement(true) + @XmlSerialName("OJPTripDelivery", OJP_NAME_SPACE, "") + val ojpTripDelivery: TripDeliveryDto? = null, + + @XmlElement(true) + @XmlSerialName("OJPTripRefineDelivery", OJP_NAME_SPACE, "") + val ojpTripRefineDelivery: TripRefineDeliveryDto? = null, +// @XmlElement(true) +// @XmlPolyChildren( +// value = [ +// // childSerialName[=[prefix:]localName] +// "OJPLocationInformationDelivery=ojp:OJPLocationInformationDelivery", +// "OJPTripDelivery=ojp:OJPTripDelivery", +// "OJPTripRefineDelivery=ojp:OJPTripRefineDelivery" +// ] +// ) +// val ojpDelivery: AbstractDeliveryDto +) { + // Optional: keep a convenience getter so the rest of your code hardly changes + val ojpDelivery: AbstractDeliveryDto? + get() = ojpLocationInformationDelivery + ?: ojpTripDelivery + ?: ojpTripRefineDelivery +} diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/AbstractDeliveryDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/AbstractDeliveryDto.kt index 2b1a96b..a5fe3f9 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/AbstractDeliveryDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/AbstractDeliveryDto.kt @@ -1,10 +1,12 @@ package ch.opentransportdata.ojp.data.dto.response.delivery +import kotlinx.serialization.Serializable import java.time.LocalDateTime /** * Created by Michael Ruppen on 14.05.2024 */ +@Serializable abstract class AbstractDeliveryDto { abstract val responseTimestamp: LocalDateTime abstract val requestMessageRef: String? diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/LocationInformationDeliveryDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/LocationInformationDeliveryDto.kt index d41984a..649c500 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/LocationInformationDeliveryDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/LocationInformationDeliveryDto.kt @@ -1,24 +1,39 @@ package ch.opentransportdata.ojp.data.dto.response.delivery +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import ch.opentransportdata.ojp.data.dto.response.PlaceResultDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Michael Ruppen on 08.04.2024 */ -@Xml(name = "OJPLocationInformationDelivery") +@Serializable +@XmlSerialName("OJPLocationInformationDelivery", OJP_NAME_SPACE, "") internal data class LocationInformationDeliveryDto( - @PropertyElement(name = "siri:ResponseTimestamp") + @XmlElement(true) + @XmlSerialName("ResponseTimestamp", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = LocalDateTimeSerializer::class) override val responseTimestamp: LocalDateTime, - @PropertyElement(name = "siri:RequestMessageRef") - override val requestMessageRef: String?, - @PropertyElement(name = "siri:DefaultLanguage") - override val defaultLanguage: String?, - @PropertyElement(name = "CalcTime") - val calcTime: Int?, - @Element(name = "PlaceResult") + + @XmlElement(true) + @XmlSerialName("RequestMessageRef", SIRI_NAME_SPACE, SIRI_PREFIX) + override val requestMessageRef: String? = null, + + @XmlElement(true) + @XmlSerialName("DefaultLanguage", SIRI_NAME_SPACE, SIRI_PREFIX) + override val defaultLanguage: String? = null, + + @XmlElement(true) + @XmlSerialName("CalcTime", OJP_NAME_SPACE, "") + val calcTime: Int? = null, + + @XmlElement(true) + @XmlSerialName("PlaceResult", OJP_NAME_SPACE, "") val placeResults: List? = emptyList(), -) : AbstractDeliveryDto() +) : AbstractDeliveryDto() \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/TripDeliveryDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/TripDeliveryDto.kt index 366a433..22cfac8 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/TripDeliveryDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/TripDeliveryDto.kt @@ -1,28 +1,45 @@ package ch.opentransportdata.ojp.data.dto.response.delivery +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import ch.opentransportdata.ojp.data.dto.response.tir.TripResponseContextDto import ch.opentransportdata.ojp.data.dto.response.tir.TripResultDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Michael Ruppen on 14.05.2024 */ -@Xml(name = "OJPTripDelivery") +@Serializable +@XmlSerialName("OJPTripDelivery", OJP_NAME_SPACE, "") data class TripDeliveryDto( - @PropertyElement(name = "siri:ResponseTimestamp") + @XmlElement(true) + @XmlSerialName("ResponseTimestamp", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = LocalDateTimeSerializer::class) override val responseTimestamp: LocalDateTime, - @PropertyElement(name = "siri:RequestMessageRef") - override val requestMessageRef: String?, - @PropertyElement(name = "siri:DefaultLanguage") - override val defaultLanguage: String?, - @PropertyElement(name = "CalcTime") - val calcTime: Int?, - @Element(name = "TripResult") - val tripResults: List?, - @Element(name = "TripResponseContext") - val responseContext: TripResponseContextDto? + + @XmlElement(true) + @XmlSerialName("RequestMessageRef", SIRI_NAME_SPACE, SIRI_PREFIX) + override val requestMessageRef: String? = null, + + @XmlElement(true) + @XmlSerialName("DefaultLanguage", SIRI_NAME_SPACE, SIRI_PREFIX) + override val defaultLanguage: String? = null, + + @XmlElement(true) + @XmlSerialName("CalcTime", OJP_NAME_SPACE, "") + val calcTime: Int? = null, + + @XmlElement(true) + @XmlSerialName("TripResult", OJP_NAME_SPACE, "") + val tripResults: List? = null, + + @XmlElement(true) + @XmlSerialName("TripResponseContext", OJP_NAME_SPACE, "") + val responseContext: TripResponseContextDto? = null ) : AbstractDeliveryDto() \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/TripRefineDeliveryDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/TripRefineDeliveryDto.kt index dddc881..067fbf7 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/TripRefineDeliveryDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/delivery/TripRefineDeliveryDto.kt @@ -1,30 +1,50 @@ package ch.opentransportdata.ojp.data.dto.response.delivery +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import ch.opentransportdata.ojp.data.dto.response.tir.TripResponseContextDto import ch.opentransportdata.ojp.data.dto.response.tir.TripResultDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Nico Brandenberger on 03.04.2025 */ -@Xml(name = "OJPTripRefineDelivery") + +@Serializable +@XmlSerialName("OJPTripRefineDelivery", OJP_NAME_SPACE, "") data class TripRefineDeliveryDto( - @PropertyElement(name = "siri:ResponseTimestamp") + @XmlElement(true) + @XmlSerialName("ResponseTimestamp", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = LocalDateTimeSerializer::class) override val responseTimestamp: LocalDateTime, - @PropertyElement(name = "siri:RequestMessageRef") - override val requestMessageRef: String?, - @PropertyElement(name = "siri:DefaultLanguage") - override val defaultLanguage: String?, - @PropertyElement(name = "CalcTime") - val calcTime: Int?, - @Element(name = "TripResult") - val tripResults: List?, - @Element(name = "TripResponseContext") - val responseContext: TripResponseContextDto?, - @Element(name = "LegObjectIdType") - val unknownLegRef: String?, + + @XmlElement(true) + @XmlSerialName("RequestMessageRef", SIRI_NAME_SPACE, SIRI_PREFIX) + override val requestMessageRef: String? = null, + + @XmlElement(true) + @XmlSerialName("DefaultLanguage", SIRI_NAME_SPACE, SIRI_PREFIX) + override val defaultLanguage: String? = null, + + @XmlElement(true) + @XmlSerialName("CalcTime", OJP_NAME_SPACE, "") + val calcTime: Int? = null, + + @XmlElement(true) + @XmlSerialName("TripResult", OJP_NAME_SPACE, "") + val tripResults: List? = null, + + @XmlElement(true) + @XmlSerialName("TripResponseContext", OJP_NAME_SPACE, "") + val responseContext: TripResponseContextDto? = null, + + @XmlElement(true) + @XmlSerialName("LegObjectIdType", OJP_NAME_SPACE, "") + val unknownLegRef: String? = null, ) : AbstractDeliveryDto() diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/AddressDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/AddressDto.kt index 1cba806..487e8ec 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/AddressDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/AddressDto.kt @@ -1,42 +1,64 @@ package ch.opentransportdata.ojp.data.dto.response.place +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.PrivateCodeDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 * * Serializable and Parcelize annotation is both needed for compose navigation with custom types */ -@Serializable + @Parcelize -@Xml(name = "Address") +@Serializable +@XmlSerialName("Address", OJP_NAME_SPACE, "") data class AddressDto( - @Element(name = "PrivateCode") + @XmlElement(true) + @XmlSerialName("PrivateCode", OJP_NAME_SPACE, "") override val privateCodes: List? = emptyList(), - @PropertyElement(name = "PublicCode") + + @XmlElement(true) + @XmlSerialName("PublicCode", OJP_NAME_SPACE, "") val publicCode: String, - @Element(name = "Name") + + @XmlElement(true) + @XmlSerialName("Name", OJP_NAME_SPACE, "") val name: NameDto, - @Element(name = "NameSuffix") + + @XmlElement(true) + @XmlSerialName("NameSuffix", OJP_NAME_SPACE, "") val nameSuffix: NameDto? = null, - @PropertyElement(name = "CountryName") + + @XmlElement(true) + @XmlSerialName("CountryName", OJP_NAME_SPACE, "") val countryName: String? = null, - @PropertyElement(name = "PostCode") + + @XmlElement(true) + @XmlSerialName("PostCode", OJP_NAME_SPACE, "") val postCode: String? = null, - @Element(name = "TopographicPlaceName") + + @XmlElement(true) + @XmlSerialName("TopographicPlaceName", OJP_NAME_SPACE, "") val topographicPlaceName: NameDto? = null, - @PropertyElement(name = "TopographicPlaceRef") + + @XmlElement(true) + @XmlSerialName("TopographicPlaceRef", OJP_NAME_SPACE, "") val topographicPlaceRef: String? = null, - @PropertyElement(name = "Street") + + @XmlElement(true) + @XmlSerialName("Street", OJP_NAME_SPACE, "") val street: String? = null, - @PropertyElement(name = "HouseNumber") + + @XmlElement(true) + @XmlSerialName("HouseNumber", OJP_NAME_SPACE, "") val houseNumber: String? = null, - @PropertyElement(name = "CrossRoad") + + @XmlElement(true) + @XmlSerialName("CrossRoad", OJP_NAME_SPACE, "") val crossRoad: String? = null ) : AbstractPlaceDto() diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/PointOfInterestDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/PointOfInterestDto.kt index 2ce8852..9b247fb 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/PointOfInterestDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/PointOfInterestDto.kt @@ -1,28 +1,37 @@ package ch.opentransportdata.ojp.data.dto.response.place +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.PrivateCodeDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Deniz Kalem on 25.03.2025 */ -@Serializable @Parcelize -@Xml(name = "PointOfInterest") +@Serializable +@XmlSerialName("PointOfInterest", OJP_NAME_SPACE, "") data class PointOfInterestDto( - @Element(name = "PrivateCode") + @XmlElement(true) + @XmlSerialName("PrivateCode", OJP_NAME_SPACE, "") override val privateCodes: List? = emptyList(), - @PropertyElement(name = "PublicCode") + + @XmlElement(true) + @XmlSerialName("PublicCode", OJP_NAME_SPACE, "") val publicCode: String, - @Element(name = "Name") + + @XmlElement(true) + @XmlSerialName("Name", OJP_NAME_SPACE, "") val name: NameDto, - @Element(name = "NameSuffix") - val nameSuffix: NameDto?, - @PropertyElement(name = "TopographicPlaceRef") - val topographicPlaceRef: String? + + @XmlElement(true) + @XmlSerialName("NameSuffix", OJP_NAME_SPACE, "") + val nameSuffix: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("TopographicPlaceRef", OJP_NAME_SPACE, "") + val topographicPlaceRef: String? = null ) : AbstractPlaceDto() \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/StopPlaceDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/StopPlaceDto.kt index c99e34e..3d07687 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/StopPlaceDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/StopPlaceDto.kt @@ -1,36 +1,52 @@ package ch.opentransportdata.ojp.data.dto.response.place +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.PrivateCodeDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 08.04.2024 * * Serializable and Parcelize annotation is both needed for compose navigation with custom types */ -@Serializable + @Parcelize -@Xml(name = "StopPlace") +@Serializable +@XmlSerialName("StopPlace", OJP_NAME_SPACE, "") data class StopPlaceDto( - @Element(name = "PrivateCode") + @XmlElement(true) + @XmlSerialName("PrivateCode", OJP_NAME_SPACE, "") override val privateCodes: List? = emptyList(), - @PropertyElement(name = "StopPlaceRef") + + @XmlElement(true) + @XmlSerialName("StopPlaceRef", OJP_NAME_SPACE, "") val stopPlaceRef: String, - @Element(name = "StopPlaceName") - val name: NameDto?, - @Element(name = "NameSuffix") - val nameSuffix: NameDto?, - @PropertyElement(name = "TopographicPlaceRef") + + @XmlElement(true) + @XmlSerialName("StopPlaceName", OJP_NAME_SPACE, "") + val name: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("NameSuffix", OJP_NAME_SPACE, "") + val nameSuffix: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("TopographicPlaceRef", OJP_NAME_SPACE, "") val topographicPlaceRef: String? = null, - @PropertyElement(name = "WheelchairAccessible") + + @XmlElement(true) + @XmlSerialName("WheelchairAccessible", OJP_NAME_SPACE, "") val wheelchairAccessible: Boolean? = null, - @PropertyElement(name = "Lighting") + + @XmlElement(true) + @XmlSerialName("Lighting", OJP_NAME_SPACE, "") val lighting: Boolean? = null, - @PropertyElement(name = "Covered") + + @XmlElement(true) + @XmlSerialName("Covered", OJP_NAME_SPACE, "") val covered: Boolean? = null ) : AbstractPlaceDto() \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/StopPointDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/StopPointDto.kt index f7c7034..db75fc9 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/StopPointDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/StopPointDto.kt @@ -1,40 +1,63 @@ package ch.opentransportdata.ojp.data.dto.response.place +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.PrivateCodeDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Deniz Kalem on 25.03.2025 */ -@Serializable @Parcelize -@Xml(name = "StopPoint") +@Serializable +@XmlSerialName("StopPoint", OJP_NAME_SPACE, "") data class StopPointDto( - @Element(name = "PrivateCode") + @XmlElement(true) + @XmlSerialName("PrivateCode", OJP_NAME_SPACE, "") override val privateCodes: List? = emptyList(), - @PropertyElement(name = "siri:StopPointRef") + + @XmlElement(true) + @XmlSerialName("StopPointRef", SIRI_NAME_SPACE, SIRI_PREFIX) val stopPointRef: String, - @Element(name = "StopPointName") - val stopPointName: NameDto?, - @Element(name = "NameSuffix") - val nameSuffix: NameDto?, - @Element(name = "PlannedQuay") - val plannedQuay: NameDto?, - @Element(name = "EstimatedQuay") - val estimatedQuay: NameDto?, - @PropertyElement(name = "ParentRef") - val parentRef: String?, - @PropertyElement(name = "TopographicPlaceRef") - val topographicPlaceRef: String?, - @PropertyElement(name = "WheelchairAccessible") - val wheelchairAccessible: Boolean?, - @PropertyElement(name = "Lighting") - val lighting: Boolean?, - @PropertyElement(name = "Covered") - val covered: Boolean? + + @XmlElement(true) + @XmlSerialName("StopPointName", OJP_NAME_SPACE, "") + val stopPointName: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("NameSuffix", OJP_NAME_SPACE, "") + val nameSuffix: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("PlannedQuay", OJP_NAME_SPACE, "") + val plannedQuay: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("EstimatedQuay", OJP_NAME_SPACE, "") + val estimatedQuay: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("ParentRef", OJP_NAME_SPACE, "") + val parentRef: String? = null, + + @XmlElement(true) + @XmlSerialName("TopographicPlaceRef", OJP_NAME_SPACE, "") + val topographicPlaceRef: String? = null, + + @XmlElement(true) + @XmlSerialName("WheelchairAccessible", OJP_NAME_SPACE, "") + val wheelchairAccessible: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("Lighting", OJP_NAME_SPACE, "") + val lighting: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("Covered", OJP_NAME_SPACE, "") + val covered: Boolean? = null ) : AbstractPlaceDto() \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/TopographicPlaceDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/TopographicPlaceDto.kt index 0e40355..ae71944 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/TopographicPlaceDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/place/TopographicPlaceDto.kt @@ -1,24 +1,29 @@ package ch.opentransportdata.ojp.data.dto.response.place +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.PrivateCodeDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Deniz Kalem on 25.03.2025 */ -@Serializable @Parcelize -@Xml(name = "TopographicPlace") +@Serializable +@XmlSerialName("TopographicPlace", OJP_NAME_SPACE, "") data class TopographicPlaceDto( - @Element(name = "PrivateCode") + @XmlElement(true) + @XmlSerialName("PrivateCode", OJP_NAME_SPACE, "") override val privateCodes: List? = emptyList(), - @PropertyElement(name = "TopographicPlaceRef") + + @XmlElement(true) + @XmlSerialName("TopographicPlaceRef", OJP_NAME_SPACE, "") val ref: String? = null, - @Element(name = "TopographicPlaceName") + + @XmlElement(true) + @XmlSerialName("TopographicPlaceName", OJP_NAME_SPACE, "") val name: NameDto ) : AbstractPlaceDto() \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/LegDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/LegDto.kt index 50704ff..96b8ce3 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/LegDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/LegDto.kt @@ -1,6 +1,8 @@ package ch.opentransportdata.ojp.data.dto.response.tir import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.converter.DurationSerializer import ch.opentransportdata.ojp.data.dto.response.PlacesDto import ch.opentransportdata.ojp.data.dto.response.tir.leg.AbstractLegType import ch.opentransportdata.ojp.data.dto.response.tir.leg.ContinuousLegDto @@ -8,27 +10,38 @@ import ch.opentransportdata.ojp.data.dto.response.tir.leg.TimedLegDto import ch.opentransportdata.ojp.data.dto.response.tir.leg.TransferLegDto import ch.opentransportdata.ojp.data.dto.response.tir.leg.minimalCopy import ch.opentransportdata.ojp.data.dto.response.tir.leg.replaceWithParentRef -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.Duration /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "Leg") +@Serializable +@XmlSerialName("Leg", OJP_NAME_SPACE, "") data class LegDto( - @PropertyElement(name = "Id") + @XmlElement(true) + @XmlSerialName("Id", OJP_NAME_SPACE, "") val id: String, - @PropertyElement(name = "Duration") - val duration: Duration?, - @Element(name = "TimedLeg") + + @XmlElement(true) + @XmlSerialName("Duration", OJP_NAME_SPACE, "") + @Serializable(with = DurationSerializer::class) + val duration: Duration? = null, + + @XmlElement(true) + @XmlSerialName("TimedLeg", OJP_NAME_SPACE, "") val timedLeg: TimedLegDto? = null, - @Element(name = "TransferLeg") + + @XmlElement(true) + @XmlSerialName("TransferLeg", OJP_NAME_SPACE, "") val transferLeg: TransferLegDto? = null, - @Element(name = "ContinuousLeg") + + @XmlElement(true) + @XmlSerialName("ContinuousLeg", OJP_NAME_SPACE, "") val continuousLeg: ContinuousLegDto? = null ) : Parcelable { diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/TripResponseContextDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/TripResponseContextDto.kt index e110008..7ac53f8 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/TripResponseContextDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/TripResponseContextDto.kt @@ -1,18 +1,24 @@ package ch.opentransportdata.ojp.data.dto.response.tir -import ch.opentransportdata.ojp.data.dto.response.PlaceDto +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.PlacesDto import ch.opentransportdata.ojp.data.dto.response.tir.situations.SituationDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ -@Xml(name = "TripResponseContext") + +@Serializable +@XmlSerialName("TripResponseContext", OJP_NAME_SPACE, "") data class TripResponseContextDto( - @Element(name = "Situations") + @XmlElement(true) + @XmlSerialName("Situations", OJP_NAME_SPACE, "") val situation: SituationDto? = null, - @Element(name = "Places") + + @XmlElement(true) + @XmlSerialName("Places", OJP_NAME_SPACE, "") val places: PlacesDto? = null ) \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/TripResultDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/TripResultDto.kt index bb2c183..f2fdb22 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/TripResultDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/TripResultDto.kt @@ -1,25 +1,32 @@ package ch.opentransportdata.ojp.data.dto.response.tir import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.tir.trips.TripDto import ch.opentransportdata.ojp.data.dto.response.tir.trips.minimalCopy -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ -@Xml(name = "TripResult") @Parcelize +@Serializable +@XmlSerialName("TripResult", OJP_NAME_SPACE, "") data class TripResultDto( - @PropertyElement(name = "Id") + @XmlElement(true) + @XmlSerialName("Id", OJP_NAME_SPACE, "") val id: String, - @Element - val trip: TripDto?, - @PropertyElement(name = "IsAlternativeOption") - val isAlternativeOption: Boolean? + + @XmlElement(true) + @XmlSerialName("Trip", OJP_NAME_SPACE, "") + val trip: TripDto? = null, + + @XmlElement(true) + @XmlSerialName("IsAlternativeOption", OJP_NAME_SPACE, "") + val isAlternativeOption: Boolean? = null ) : Parcelable val TripResultDto.minimalTripResult: TripResultDto diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/AttributeDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/AttributeDto.kt index 03db3da..d551f07 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/AttributeDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/AttributeDto.kt @@ -1,20 +1,25 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.NameDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "Attribute") +@Serializable +@XmlSerialName("Attribute", OJP_NAME_SPACE, "") data class AttributeDto( - @Element(name = "UserText") + @XmlElement(true) + @XmlSerialName("UserText", OJP_NAME_SPACE, "") val userText: NameDto, - @PropertyElement(name = "Code") + + @XmlElement(true) + @XmlSerialName("Code", OJP_NAME_SPACE, "") val code: String ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ContinuousLegDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ContinuousLegDto.kt index d2928ff..9f24c86 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ContinuousLegDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ContinuousLegDto.kt @@ -1,25 +1,37 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.converter.DurationSerializer import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.Duration /** * Created by Michael Ruppen on 12.07.2024 */ + @Parcelize -@Xml(name = "ContinuousLeg") +@Serializable +@XmlSerialName("ContinuousLeg", OJP_NAME_SPACE, "") data class ContinuousLegDto( - @Element(name = "LegStart") + @XmlElement(true) + @XmlSerialName("LegStart", OJP_NAME_SPACE, "") val legStart: LegStartEndDto, - @Element(name = "LegEnd") + + @XmlElement(true) + @XmlSerialName("LegEnd", OJP_NAME_SPACE, "") val legEnd: LegStartEndDto, - @Element(name = "Service") + + @XmlElement(true) + @XmlSerialName("Service", OJP_NAME_SPACE, "") val service: ContinuousServiceTypeChoiceDto, - @PropertyElement(name = "Duration") + + @XmlElement(true) + @XmlSerialName("Duration", OJP_NAME_SPACE, "") + @Serializable(with = DurationSerializer::class) val duration: Duration ) : AbstractLegType(), Parcelable diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ContinuousServiceStructure.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ContinuousServiceStructure.kt index 74a40f9..a8ed6ea 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ContinuousServiceStructure.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ContinuousServiceStructure.kt @@ -1,26 +1,34 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Nico Brandenberger on 02.07.2025 */ @Parcelize -@Xml(name = "ContinuousServiceTypeChoice") +@Serializable +@XmlSerialName("ContinuousServiceTypeChoice", OJP_NAME_SPACE, "") data class ContinuousServiceTypeChoiceDto( - @Element(name = "PersonalService") - val personalService: PersonalServiceDto?, - @Element(name = "DatedJourney") - val datedJourneyDto: DatedJourneyDto? + @XmlElement(true) + @XmlSerialName("PersonalService", OJP_NAME_SPACE, "") + val personalService: PersonalServiceDto? = null, + + @XmlElement(true) + @XmlSerialName("DatedJourney", OJP_NAME_SPACE, "") + val datedJourneyDto: DatedJourneyDto? = null ) : Parcelable @Parcelize -@Xml(name = "PersonalService") +@Serializable +@XmlSerialName("PersonalService", OJP_NAME_SPACE, "") data class PersonalServiceDto( - @Element(name = "PersonalMode") - val personalMode: String, + @XmlElement(true) + @XmlSerialName("PersonalMode", OJP_NAME_SPACE, "") + val personalMode: String ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/DatedJourneyDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/DatedJourneyDto.kt index c2b04fd..7c45f84 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/DatedJourneyDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/DatedJourneyDto.kt @@ -1,65 +1,110 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import ch.opentransportdata.ojp.data.dto.response.ModeDto import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.domain.model.ConventionalModesOfOperation -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ + @Parcelize -@Xml(name = "Service") +@Serializable +@XmlSerialName("Service", OJP_NAME_SPACE, "") data class DatedJourneyDto( - @Element(name = "Mode") + @XmlElement(true) + @XmlSerialName("Mode", OJP_NAME_SPACE, "") val mode: ModeDto, - @PropertyElement(name = "ConventionalModeOfOperation") - val conventionalModeOfOperation: ConventionalModesOfOperation?, - @PropertyElement(name = "TrainNumber") - val trainNumber: String?, - @PropertyElement(name = "siri:LineRef") + + @XmlElement(true) + @XmlSerialName("ConventionalModeOfOperation", OJP_NAME_SPACE, "") + val conventionalModeOfOperation: ConventionalModesOfOperation? = null, + + @XmlElement(true) + @XmlSerialName("TrainNumber", OJP_NAME_SPACE, "") + val trainNumber: String? = null, + + @XmlElement(true) + @XmlSerialName("LineRef", SIRI_NAME_SPACE, SIRI_PREFIX) val lineRef: String, - @PropertyElement(name = "siri:OperatorRef") - val operatorRef: String?, - @PropertyElement(name = "PublicCode") - val publicCode: String?, - @Element(name = "PublishedServiceName") + + @XmlElement(true) + @XmlSerialName("OperatorRef", SIRI_NAME_SPACE, SIRI_PREFIX) + val operatorRef: String? = null, + + @XmlElement(true) + @XmlSerialName("PublicCode", OJP_NAME_SPACE, "") + val publicCode: String? = null, + + @XmlElement(true) + @XmlSerialName("PublishedServiceName", OJP_NAME_SPACE, "") val publishedServiceName: NameDto, - @Element(name = "ProductCategory") - val productCategory: ProductCategoryDto?, - @PropertyElement(name = "siri:DirectionRef") - val directionRef: String?, - @PropertyElement(name = "OperatingDayRef") + + @XmlElement(true) + @XmlSerialName("ProductCategory", OJP_NAME_SPACE, "") + val productCategory: ProductCategoryDto? = null, + + @XmlElement(true) + @XmlSerialName("DirectionRef", SIRI_NAME_SPACE, SIRI_PREFIX) + val directionRef: String? = null, + + @XmlElement(true) + @XmlSerialName("OperatingDayRef", OJP_NAME_SPACE, "") val operatingDayRef: String, - @PropertyElement(name = "OriginStopPointRef") - val originStopPointRef: String?, - @PropertyElement(name = "DestinationStopPointRef") - val destinationStopPointRef: String?, - @Element(name = "OriginText") + + @XmlElement(true) + @XmlSerialName("OriginStopPointRef", OJP_NAME_SPACE, "") + val originStopPointRef: String? = null, + + @XmlElement(true) + @XmlSerialName("DestinationStopPointRef", OJP_NAME_SPACE, "") + val destinationStopPointRef: String? = null, + + @XmlElement(true) + @XmlSerialName("OriginText", OJP_NAME_SPACE, "") val originText: NameDto, - @Element(name = "DestinationText") - val destinationText: NameDto?, - @PropertyElement(name = "JourneyRef") + + @XmlElement(true) + @XmlSerialName("DestinationText", OJP_NAME_SPACE, "") + val destinationText: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("JourneyRef", OJP_NAME_SPACE, "") val journeyRef: String, - @Element(name = "Attribute") - val attributes: List?, - @PropertyElement(name = "siri:VehicleRef") - val vehicleRef: String?, - @Element(name = "SituationFullRefs") - val situationFullRefWrapper: SituationFullRefs?, - @PropertyElement(name = "Unplanned") - val unplanned: Boolean?, //not yet delivered from backend - @PropertyElement(name = "Cancelled") - val cancelled: Boolean?, - @PropertyElement(name = "Deviation") - val deviation: Boolean? + + @XmlElement(true) + @XmlSerialName("Attribute", OJP_NAME_SPACE, "") + val attributes: List? = null, + + @XmlElement(true) + @XmlSerialName("VehicleRef", SIRI_NAME_SPACE, SIRI_PREFIX) + val vehicleRef: String? = null, + + @XmlElement(true) + @XmlSerialName("SituationFullRefs", OJP_NAME_SPACE, "") + val situationFullRefWrapper: SituationFullRefs? = null, + + @XmlElement(true) + @XmlSerialName("Unplanned", OJP_NAME_SPACE, "") + val unplanned: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("Cancelled", OJP_NAME_SPACE, "") + val cancelled: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("Deviation", OJP_NAME_SPACE, "") + val deviation: Boolean? = null ) : Parcelable { - //workaround till pt-subModes get delivered correctly val isCarTrain: Boolean get() = lineRef.startsWith("atv") } diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ExpectedDepartureOccupancyDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ExpectedDepartureOccupancyDto.kt index 772a70c..0edd6de 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ExpectedDepartureOccupancyDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ExpectedDepartureOccupancyDto.kt @@ -1,20 +1,29 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.FareClassSerializer import ch.opentransportdata.ojp.domain.model.FareClass import ch.opentransportdata.ojp.domain.model.OccupancyLevel -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Deniz Kalem on 25.06.2025 */ @Parcelize -@Xml(name = "siri:ExpectedDepartureOccupancy") +@Serializable +@XmlSerialName("ExpectedDepartureOccupancy", SIRI_NAME_SPACE, SIRI_PREFIX) data class ExpectedDepartureOccupancyDto( - @PropertyElement(name = "siri:FareClass") + @XmlElement(true) + @XmlSerialName("FareClass", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = FareClassSerializer::class) val fareClass: FareClass, - @PropertyElement(name = "siri:OccupancyLevel") + + @XmlElement(true) + @XmlSerialName("OccupancyLevel", SIRI_NAME_SPACE, SIRI_PREFIX) val occupancyLevel: OccupancyLevel ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegAlightDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegAlightDto.kt index 4ee3807..0cac3e7 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegAlightDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegAlightDto.kt @@ -1,45 +1,74 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.PlacesDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "LegAlight") +@Serializable +@XmlSerialName("LegAlight", OJP_NAME_SPACE, "") data class LegAlightDto( - @PropertyElement(name = "siri:StopPointRef") + @XmlElement(true) + @XmlSerialName("StopPointRef", SIRI_NAME_SPACE, SIRI_PREFIX) val stopPointRef: String, - @Element(name = "StopPointName") + + @XmlElement(true) + @XmlSerialName("StopPointName", OJP_NAME_SPACE, "") val stopPointName: NameDto, - @Element(name = "PlannedQuay") - val plannedQuay: NameDto?, - @Element(name = "EstimatedQuay") - val estimatedQuay: NameDto?, - @Element(name = "NameSuffix") - val nameSuffix: NameDto?, - @Element(name = "ServiceArrival") + + @XmlElement(true) + @XmlSerialName("PlannedQuay", OJP_NAME_SPACE, "") + val plannedQuay: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("EstimatedQuay", OJP_NAME_SPACE, "") + val estimatedQuay: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("NameSuffix", OJP_NAME_SPACE, "") + val nameSuffix: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("ServiceArrival", OJP_NAME_SPACE, "") val serviceArrival: ServiceTimeDto, - @Element(name = "ServiceDeparture") - val serviceDeparture: ServiceTimeDto?, - @PropertyElement(name = "Order") - val order: Int?, - @PropertyElement(name = "RequestStop") - val requestStop: Boolean?, - @PropertyElement(name = "UnplannedStop") - val unplannedStop: Boolean?, - @PropertyElement(name = "NotServicedStop") - val notServicedStop: Boolean?, - @PropertyElement(name = "NoBoardingAtStop") - val noBoardingAtStop: Boolean?, - @PropertyElement(name = "NoAlightingAtStop") - val noAlightingAtStop: Boolean?, + + @XmlElement(true) + @XmlSerialName("ServiceDeparture", OJP_NAME_SPACE, "") + val serviceDeparture: ServiceTimeDto? = null, + + @XmlElement(true) + @XmlSerialName("Order", OJP_NAME_SPACE, "") + val order: Int? = null, + + @XmlElement(true) + @XmlSerialName("RequestStop", OJP_NAME_SPACE, "") + val requestStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("UnplannedStop", OJP_NAME_SPACE, "") + val unplannedStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NotServicedStop", OJP_NAME_SPACE, "") + val notServicedStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NoBoardingAtStop", OJP_NAME_SPACE, "") + val noBoardingAtStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NoAlightingAtStop", OJP_NAME_SPACE, "") + val noAlightingAtStop: Boolean? = null ) : Parcelable { val isPlatformChanged: Boolean diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegBoardDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegBoardDto.kt index 6910795..c7069cf 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegBoardDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegBoardDto.kt @@ -1,46 +1,78 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.PlacesDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "LegBoard") +@Serializable +@XmlSerialName("LegBoard", OJP_NAME_SPACE, "") data class LegBoardDto( - @PropertyElement(name = "siri:StopPointRef") + + @XmlElement(true) + @XmlSerialName("StopPointRef", SIRI_NAME_SPACE, SIRI_PREFIX) val stopPointRef: String, - @Element(name = "StopPointName") + + @XmlElement(true) + @XmlSerialName("StopPointName", OJP_NAME_SPACE, "") val stopPointName: NameDto, - @Element(name = "PlannedQuay") - val plannedQuay: NameDto?, - @Element(name = "EstimatedQuay") - val estimatedQuay: NameDto?, - @Element(name = "NameSuffix") - val nameSuffix: NameDto?, - @Element(name = "ServiceArrival") - val serviceArrival: ServiceTimeDto?, - @Element(name = "ServiceDeparture") + + @XmlElement(true) + @XmlSerialName("PlannedQuay", OJP_NAME_SPACE, "") + val plannedQuay: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("EstimatedQuay", OJP_NAME_SPACE, "") + val estimatedQuay: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("NameSuffix", OJP_NAME_SPACE, "") + val nameSuffix: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("ServiceArrival", OJP_NAME_SPACE, "") + val serviceArrival: ServiceTimeDto? = null, + + @XmlElement(true) + @XmlSerialName("ServiceDeparture", OJP_NAME_SPACE, "") val serviceDeparture: ServiceTimeDto, - @PropertyElement(name = "Order") - val order: Int?, - @PropertyElement(name = "RequestStop") - val requestStop: Boolean?, - @PropertyElement(name = "UnplannedStop") - val unplannedStop: Boolean?, - @PropertyElement(name = "NotServicedStop") - val notServicedStop: Boolean?, - @PropertyElement(name = "NoBoardingAtStop") - val noBoardingAtStop: Boolean?, - @PropertyElement(name = "NoAlightingAtStop") - val noAlightingAtStop: Boolean?, - @Element(name = "siri:ExpectedDepartureOccupancy") + + @XmlElement(true) + @XmlSerialName("Order", OJP_NAME_SPACE, "") + val order: Int? = null, + + @XmlElement(true) + @XmlSerialName("RequestStop", OJP_NAME_SPACE, "") + val requestStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("UnplannedStop", OJP_NAME_SPACE, "") + val unplannedStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NotServicedStop", OJP_NAME_SPACE, "") + val notServicedStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NoBoardingAtStop", OJP_NAME_SPACE, "") + val noBoardingAtStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NoAlightingAtStop", OJP_NAME_SPACE, "") + val noAlightingAtStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("ExpectedDepartureOccupancy", SIRI_NAME_SPACE, SIRI_PREFIX) val expectedDepartureOccupancy: List? = null ) : Parcelable { @@ -55,7 +87,10 @@ fun LegBoardDto.minimalCopy(): LegBoardDto { return LegBoardDto( stopPointRef = stopPointRef, stopPointName = stopPointName, - serviceDeparture = ServiceTimeDto(timetabledTime = serviceDeparture.timetabledTime, estimatedTime = serviceDeparture.estimatedTime), + serviceDeparture = ServiceTimeDto( + timetabledTime = serviceDeparture.timetabledTime, + estimatedTime = serviceDeparture.estimatedTime + ), plannedQuay = null, estimatedQuay = null, nameSuffix = null, diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegIntermediateDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegIntermediateDto.kt index d1bc6a5..4e3bfcd 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegIntermediateDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegIntermediateDto.kt @@ -1,46 +1,78 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.PlacesDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ + @Parcelize -@Xml(name = "LegIntermediate") +@Serializable +@XmlSerialName("LegIntermediate", OJP_NAME_SPACE, "") data class LegIntermediateDto( - @PropertyElement(name = "siri:StopPointRef") + @XmlElement(true) + @XmlSerialName("StopPointRef", SIRI_NAME_SPACE, SIRI_PREFIX) val stopPointRef: String, - @Element(name = "StopPointName") + + @XmlElement(true) + @XmlSerialName("StopPointName", OJP_NAME_SPACE, "") val stopPointName: NameDto, - @Element(name = "PlannedQuay") - val plannedQuay: NameDto?, - @Element(name = "EstimatedQuay") - val estimatedQuay: NameDto?, - @Element(name = "NameSuffix") - val nameSuffix: NameDto?, - @Element(name = "ServiceArrival") + + @XmlElement(true) + @XmlSerialName("PlannedQuay", OJP_NAME_SPACE, "") + val plannedQuay: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("EstimatedQuay", OJP_NAME_SPACE, "") + val estimatedQuay: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("NameSuffix", OJP_NAME_SPACE, "") + val nameSuffix: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("ServiceArrival", OJP_NAME_SPACE, "") val serviceArrival: ServiceTimeDto, - @Element(name = "ServiceDeparture") + + @XmlElement(true) + @XmlSerialName("ServiceDeparture", OJP_NAME_SPACE, "") val serviceDeparture: ServiceTimeDto, - @PropertyElement(name = "Order") - val order: Int?, - @PropertyElement(name = "RequestStop") - val requestStop: Boolean?, - @PropertyElement(name = "UnplannedStop") - val unplannedStop: Boolean?, - @PropertyElement(name = "NotServicedStop") - val notServicedStop: Boolean?, - @PropertyElement(name = "NoBoardingAtStop") - val noBoardingAtStop: Boolean?, - @PropertyElement(name = "NoAlightingAtStop") - val noAlightingAtStop: Boolean?, - @Element(name = "siri:ExpectedDepartureOccupancy") + + @XmlElement(true) + @XmlSerialName("Order", OJP_NAME_SPACE, "") + val order: Int? = null, + + @XmlElement(true) + @XmlSerialName("RequestStop", OJP_NAME_SPACE, "") + val requestStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("UnplannedStop", OJP_NAME_SPACE, "") + val unplannedStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NotServicedStop", OJP_NAME_SPACE, "") + val notServicedStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NoBoardingAtStop", OJP_NAME_SPACE, "") + val noBoardingAtStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("NoAlightingAtStop", OJP_NAME_SPACE, "") + val noAlightingAtStop: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("ExpectedDepartureOccupancy", SIRI_NAME_SPACE, SIRI_PREFIX) val expectedDepartureOccupancy: List? = null ) : Parcelable { diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegStartEndDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegStartEndDto.kt index 6fb2735..c7e8000 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegStartEndDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegStartEndDto.kt @@ -1,23 +1,31 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import ch.opentransportdata.ojp.data.dto.response.GeoPositionDto import ch.opentransportdata.ojp.data.dto.response.NameDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml +@Serializable data class LegStartEndDto( - @PropertyElement(name = "siri:StopPointRef") - val stopPointRef: String?, - @Element(name = "Name") - val name: NameDto?, - @Element(name = "GeoPosition") - val geoPosition: GeoPositionDto? + @XmlElement(true) + @XmlSerialName("StopPointRef", SIRI_NAME_SPACE, SIRI_PREFIX) + val stopPointRef: String? = null, + + @XmlElement(true) + @XmlSerialName("Name", OJP_NAME_SPACE, "") + val name: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("GeoPosition", OJP_NAME_SPACE, "") + val geoPosition: GeoPositionDto? = null ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegTrackDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegTrackDto.kt index 1e072fe..e1651fc 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegTrackDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LegTrackDto.kt @@ -1,16 +1,20 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "LegTrack") +@Serializable +@XmlSerialName("LegTrack", OJP_NAME_SPACE, "") data class LegTrackDto( - @Element(name = "TrackSection") + @XmlElement(true) + @XmlSerialName("TrackSection", OJP_NAME_SPACE, "") val trackSection: List ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LinearShapeDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LinearShapeDto.kt index 680222c..f358ca1 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LinearShapeDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/LinearShapeDto.kt @@ -1,17 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.GeoPositionDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "LinkProjection") +@Serializable +@XmlSerialName("LinkProjection", OJP_NAME_SPACE, "") data class LinearShapeDto( - @Element(name = "Position") + @XmlElement(true) + @XmlSerialName("Position", OJP_NAME_SPACE, "") val positions: List ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ProductCategoryDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ProductCategoryDto.kt index abb1b1c..709cf0e 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ProductCategoryDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ProductCategoryDto.kt @@ -1,22 +1,29 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.NameDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "ProductCategory") +@Serializable +@XmlSerialName("ProductCategory", OJP_NAME_SPACE, "") data class ProductCategoryDto( - @Element(name = "Name") - val name: NameDto?, - @Element(name = "ShortName") - val shortName: NameDto?, - @PropertyElement(name = "ProductCategoryRef") - val productCategoryRef: String? + @XmlElement(true) + @XmlSerialName("Name", OJP_NAME_SPACE, "") + val name: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("ShortName", OJP_NAME_SPACE, "") + val shortName: NameDto? = null, + + @XmlElement(true) + @XmlSerialName("ProductCategoryRef", OJP_NAME_SPACE, "") + val productCategoryRef: String? = null ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ServiceTimeDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ServiceTimeDto.kt index 8b0663b..2b8f76a 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ServiceTimeDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/ServiceTimeDto.kt @@ -1,9 +1,12 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.Duration import java.time.LocalDateTime @@ -11,12 +14,17 @@ import java.time.LocalDateTime * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml +@Serializable data class ServiceTimeDto( - @PropertyElement(name = "TimetabledTime") + @XmlElement(true) + @XmlSerialName("TimetabledTime", OJP_NAME_SPACE, "") + @Serializable(with = LocalDateTimeSerializer::class) val timetabledTime: LocalDateTime, - @PropertyElement(name = "EstimatedTime") - val estimatedTime: LocalDateTime?, + + @XmlElement(true) + @XmlSerialName("EstimatedTime", OJP_NAME_SPACE, "") + @Serializable(with = LocalDateTimeSerializer::class) + val estimatedTime: LocalDateTime? = null ) : Parcelable { /** diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/SituationFullRef.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/SituationFullRef.kt index 527a34e..cb754b9 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/SituationFullRef.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/SituationFullRef.kt @@ -1,18 +1,27 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Deniz Kalem on 16.08.2024 */ + @Parcelize -@Xml(name = "SituationFullRef") +@Serializable +@XmlSerialName("SituationFullRef", OJP_NAME_SPACE, "") data class SituationFullRef( - @PropertyElement(name = "siri:ParticipantRef") + @XmlElement(true) + @XmlSerialName("ParticipantRef", SIRI_NAME_SPACE, SIRI_PREFIX) val participantRef: String, - @PropertyElement(name = "siri:SituationNumber") + + @XmlElement(true) + @XmlSerialName("SituationNumber", SIRI_NAME_SPACE, SIRI_PREFIX) val situationNumber: String ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/SituationFullRefs.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/SituationFullRefs.kt index bb6efa6..00f84e2 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/SituationFullRefs.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/SituationFullRefs.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 19.08.2024 */ + @Parcelize -@Xml(name = "SituationFullRefs") +@Serializable +@XmlSerialName("SituationFullRefs", OJP_NAME_SPACE, "") data class SituationFullRefs( - @Element(name = "SituationFullRef") - val situationFullRefs: List? + @XmlElement(true) + @XmlSerialName("SituationFullRef", OJP_NAME_SPACE, "") + val situationFullRefs: List? = null ) : Parcelable diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TimedLegDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TimedLegDto.kt index 2a80e15..4a21b55 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TimedLegDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TimedLegDto.kt @@ -1,28 +1,40 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import ch.opentransportdata.ojp.data.dto.response.PlacesDto import ch.opentransportdata.ojp.data.dto.response.tir.situations.PtSituationDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "TimedLeg") +@Serializable +@XmlSerialName("TimedLeg", OJP_NAME_SPACE, "") data class TimedLegDto( - @Element(name = "LegBoard") + @XmlElement(true) + @XmlSerialName("LegBoard", OJP_NAME_SPACE, "") val legBoard: LegBoardDto, - @Element(name = "LegIntermediate") - val legIntermediate: List?, - @Element(name = "LegAlight") + + @XmlElement(true) + @XmlSerialName("LegIntermediate", OJP_NAME_SPACE, "") + val legIntermediate: List? = null, + + @XmlElement(true) + @XmlSerialName("LegAlight", OJP_NAME_SPACE, "") val legAlight: LegAlightDto, - @Element(name = "Service") + + @XmlElement(true) + @XmlSerialName("Service", OJP_NAME_SPACE, "") val service: DatedJourneyDto, - @Element(name = "LegTrack") - val legTrack: LegTrackDto? + + @XmlElement(true) + @XmlSerialName("LegTrack", OJP_NAME_SPACE, "") + val legTrack: LegTrackDto? = null ) : AbstractLegType(), Parcelable { val hasAnyPlatformChanges: Boolean diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TrackSectionDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TrackSectionDto.kt index d6270ef..29c36bd 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TrackSectionDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TrackSectionDto.kt @@ -1,19 +1,23 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "TrackSection") +@Serializable +@XmlSerialName("TrackSection", OJP_NAME_SPACE, "") data class TrackSectionDto( //todo: check if needed or can be summarized // val trackSectionStart: TrackSectionStopPlaceRef?, // val trackSectionEnd: TrackSectionStopPlaceRef?, - @Element(name = "LinkProjection") - val linkProjection: LinearShapeDto? + @XmlElement(true) + @XmlSerialName("LinkProjection", OJP_NAME_SPACE, "") + val linkProjection: LinearShapeDto? = null ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TransferLegDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TransferLegDto.kt index fd0e933..f1d3f17 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TransferLegDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/leg/TransferLegDto.kt @@ -1,25 +1,36 @@ package ch.opentransportdata.ojp.data.dto.response.tir.leg +import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.converter.DurationSerializer import ch.opentransportdata.ojp.domain.model.TransferType -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.Duration /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "TransferLeg") +@Serializable +@XmlSerialName("TransferLeg", OJP_NAME_SPACE, "") data class TransferLegDto( - //normally a list, but is only a single return type implemented on backend. tikXml can't parse a list of ENUM! if want to make it run, try custom type adapter with a List - @PropertyElement(name = "TransferType") + @XmlElement(true) + @XmlSerialName("TransferType", OJP_NAME_SPACE, "") val transferType: TransferType, - @Element(name = "LegStart") + + @XmlElement(true) + @XmlSerialName("LegStart", OJP_NAME_SPACE, "") val legStart: LegStartEndDto, - @Element(name = "LegEnd") + + @XmlElement(true) + @XmlSerialName("LegEnd", OJP_NAME_SPACE, "") val legEnd: LegStartEndDto, - @PropertyElement(name = "Duration") + + @XmlElement(true) + @XmlSerialName("Duration", OJP_NAME_SPACE, "") + @Serializable(with = DurationSerializer::class) val duration: Duration -) : AbstractLegType() \ No newline at end of file +) : AbstractLegType(), Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/AffectedStopPointDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/AffectedStopPointDto.kt index 3bb6751..bfaf9e0 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/AffectedStopPointDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/AffectedStopPointDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:AffectedStopPoint") +@Serializable +@XmlSerialName("AffectedStopPoint", SIRI_NAME_SPACE, SIRI_PREFIX) data class AffectedStopPointDto( - @PropertyElement(name = "siri:StopPointRef") + @XmlElement(true) + @XmlSerialName("StopPointRef", SIRI_NAME_SPACE, SIRI_PREFIX) val stopPointRef: String? = null ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/AffectsDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/AffectsDto.kt index 6c9d4c9..9c48905 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/AffectsDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/AffectsDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:Affects") +@Serializable +@XmlSerialName("Affects", SIRI_NAME_SPACE, SIRI_PREFIX) data class AffectsDto( - @Element(name = "siri:StopPoints") - val stopPoints: StopPointsDto? + @XmlElement(true) + @XmlSerialName("StopPoints", SIRI_NAME_SPACE, SIRI_PREFIX) + val stopPoints: StopPointsDto? = null ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/BlockingDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/BlockingDto.kt index 276ef03..db923a8 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/BlockingDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/BlockingDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:Blocking") +@Serializable +@XmlSerialName("Blocking", SIRI_NAME_SPACE, SIRI_PREFIX) data class BlockingDto( - @PropertyElement(name = "siri:JourneyPlanner") + @XmlElement(true) + @XmlSerialName("JourneyPlanner", SIRI_NAME_SPACE, SIRI_PREFIX) val journeyPlanner: Boolean ) : Parcelable diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ConsequenceDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ConsequenceDto.kt index f09b701..850ef31 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ConsequenceDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ConsequenceDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:Consequence") +@Serializable +@XmlSerialName("Consequence", SIRI_NAME_SPACE, SIRI_PREFIX) data class ConsequenceDto( - @Element(name = "siri:Blocking") - val blocking: BlockingDto? + @XmlElement(true) + @XmlSerialName("Blocking", SIRI_NAME_SPACE, SIRI_PREFIX) + val blocking: BlockingDto? = null ) : Parcelable diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ConsequencesDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ConsequencesDto.kt index ac13689..2569d69 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ConsequencesDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ConsequencesDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:Consequences") +@Serializable +@XmlSerialName("Consequences", SIRI_NAME_SPACE, SIRI_PREFIX) data class ConsequencesDto( - @Element(name = "siri:Consequence") - val consequence: ConsequenceDto? + @XmlElement(true) + @XmlSerialName("Consequence", SIRI_NAME_SPACE, SIRI_PREFIX) + val consequence: ConsequenceDto? = null ) : Parcelable diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PtSituationDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PtSituationDto.kt index add7f33..05341b3 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PtSituationDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PtSituationDto.kt @@ -1,39 +1,65 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import ch.opentransportdata.ojp.domain.model.ScopeType -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "PtSituation") +@kotlinx.serialization.Serializable +@XmlSerialName("PtSituation", OJP_NAME_SPACE, "") data class PtSituationDto( - @PropertyElement(name = "siri:CreationTime") - val creationTime: LocalDateTime?, - @PropertyElement(name = "siri:ParticipantRef") - val participantRef: String?, - @PropertyElement(name = "siri:SituationNumber") + @XmlElement(true) + @XmlSerialName("CreationTime", SIRI_NAME_SPACE, SIRI_PREFIX) + @kotlinx.serialization.Serializable(with = LocalDateTimeSerializer::class) + val creationTime: LocalDateTime? = null, + + @XmlElement(true) + @XmlSerialName("ParticipantRef", SIRI_NAME_SPACE, SIRI_PREFIX) + val participantRef: String? = null, + + @XmlElement(true) + @XmlSerialName("SituationNumber", SIRI_NAME_SPACE, SIRI_PREFIX) val situationNumber: String, - @PropertyElement(name = "siri:Version") - val version: String?, - @Element(name = "siri:Source") - val source: SourceDto?, - @Element(name = "siri:ValidityPeriod") - val validityPeriod: List, - @PropertyElement(name = "siri:AlertCause") - val alertCause: String?, - @PropertyElement(name = "siri:Priority") - val priority: Int?, - @PropertyElement(name = "ScopeType") - val scopeType: ScopeType?, - @PropertyElement(name = "siri:Language") - val language: String?, - @Element(name = "siri:PublishingActions") - val publishingActions: PublishingActionsDto? + + @XmlElement(true) + @XmlSerialName("Version", SIRI_NAME_SPACE, SIRI_PREFIX) + val version: String? = null, + + @XmlElement(true) + @XmlSerialName("Source", SIRI_NAME_SPACE, SIRI_PREFIX) + val source: SourceDto? = null, + + @XmlElement(true) + @XmlSerialName("ValidityPeriod", SIRI_NAME_SPACE, SIRI_PREFIX) + val validityPeriod: List = emptyList(), + + @XmlElement(true) + @XmlSerialName("AlertCause", SIRI_NAME_SPACE, SIRI_PREFIX) + val alertCause: String? = null, + + @XmlElement(true) + @XmlSerialName("Priority", SIRI_NAME_SPACE, SIRI_PREFIX) + val priority: Int? = null, + + @XmlElement(true) + @XmlSerialName("ScopeType", OJP_NAME_SPACE, "") + val scopeType: ScopeType? = null, + + @XmlElement(true) + @XmlSerialName("Language", SIRI_NAME_SPACE, SIRI_PREFIX) + val language: String? = null, + + @XmlElement(true) + @XmlSerialName("PublishingActions", SIRI_NAME_SPACE, SIRI_PREFIX) + val publishingActions: PublishingActionsDto? = null ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PublishAtScope.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PublishAtScope.kt index ea7e508..eba38af 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PublishAtScope.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PublishAtScope.kt @@ -1,19 +1,27 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import ch.opentransportdata.ojp.domain.model.ScopeType -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Deniz Kalem on 27.11.2024 */ @Parcelize -@Xml(name = "siri:PublishAtScope") +@Serializable +@XmlSerialName("PublishAtScope", SIRI_NAME_SPACE, SIRI_PREFIX) data class PublishAtScope( - @Element(name = "ScopeType") - val scopeType: ScopeType?, - @Element(name = "siri:Affects") + @XmlElement(true) + @XmlSerialName("ScopeType", OJP_NAME_SPACE, "") + val scopeType: ScopeType? = null, + + @XmlElement(true) + @XmlSerialName("Affects", SIRI_NAME_SPACE, SIRI_PREFIX) val affects: AffectsDto ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PublishingActionsDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PublishingActionsDto.kt index 98e32c2..ca6042b 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PublishingActionsDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/PublishingActionsDto.kt @@ -1,37 +1,52 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime + /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:PublishingActions") +@Serializable +@XmlSerialName("PublishingActions", SIRI_NAME_SPACE, SIRI_PREFIX) data class PublishingActionsDto( - @Element(name = "siri:PublishingAction") - val publishingActions: List? + @XmlElement(true) + @XmlSerialName("PublishingAction", SIRI_NAME_SPACE, SIRI_PREFIX) + val publishingActions: List? = null ) : Parcelable @Parcelize -@Xml(name = "siri:PublishingAction") +@Serializable +@XmlSerialName("PublishingAction", SIRI_NAME_SPACE, SIRI_PREFIX) data class PublishingActionDto( // TODO Make this mandatory after updating the mock files - @Element(name = "siri:PublishAtScope") - val publishAtScope: PublishAtScope?, - @Element(name = "siri:PassengerInformationAction") - val passengerInformationAction: PassengerInformationActionDto? + @XmlElement(true) + @XmlSerialName("PublishAtScope", SIRI_NAME_SPACE, SIRI_PREFIX) + val publishAtScope: PublishAtScope? = null, + + @XmlElement(true) + @XmlSerialName("PassengerInformationAction", SIRI_NAME_SPACE, SIRI_PREFIX) + val passengerInformationAction: PassengerInformationActionDto? = null ) : Parcelable @Parcelize -@Xml(name = "siri:PassengerInformationAction") +@Serializable +@XmlSerialName("PassengerInformationAction", SIRI_NAME_SPACE, SIRI_PREFIX) data class PassengerInformationActionDto( - @PropertyElement(name = "siri:RecordedAtTime") - val recordedAtTime: LocalDateTime?, - @Element(name = "siri:TextualContent") - val textualContent: TextualContentDto? + @XmlElement(true) + @XmlSerialName("RecordedAtTime", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = LocalDateTimeSerializer::class) + val recordedAtTime: LocalDateTime? = null, + + @XmlElement(true) + @XmlSerialName("TextualContent", SIRI_NAME_SPACE, SIRI_PREFIX) + val textualContent: TextualContentDto? = null ) : Parcelable diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/SituationDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/SituationDto.kt index 1d827bc..35edd20 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/SituationDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/SituationDto.kt @@ -1,16 +1,20 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "Situations") +@Serializable +@XmlSerialName("Situations", OJP_NAME_SPACE, "") data class SituationDto( - @Element(name = "PtSituation") - val ptSituation: List? -): Parcelable \ No newline at end of file + @XmlElement(true) + @XmlSerialName("PtSituation", OJP_NAME_SPACE, "") + val ptSituation: List? = null +) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/SourceDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/SourceDto.kt index e959ad7..357d9a6 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/SourceDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/SourceDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:Source") +@Serializable +@XmlSerialName("Source", SIRI_NAME_SPACE, SIRI_PREFIX) data class SourceDto( - @PropertyElement(name = "siri:SourceType") + @XmlElement(true) + @XmlSerialName("SourceType", SIRI_NAME_SPACE, SIRI_PREFIX) val sourceType: String? //todo: check siri doc for info: https://laidig.github.io/siri-20-java/doc/ -): Parcelable \ No newline at end of file +) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/StopPointsDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/StopPointsDto.kt index 64c7bf8..2489fe7 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/StopPointsDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/StopPointsDto.kt @@ -1,16 +1,21 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:StopPoints") +@Serializable +@XmlSerialName("StopPoints", SIRI_NAME_SPACE, SIRI_PREFIX) data class StopPointsDto( - @Element(name = "siri:AffectedStopPoint") + @XmlElement(true) + @XmlSerialName("AffectedStopPoint", SIRI_NAME_SPACE, SIRI_PREFIX) val affectedStops: List? = emptyList() ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/TextualContentDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/TextualContentDto.kt index 3c1eeac..e58dee4 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/TextualContentDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/TextualContentDto.kt @@ -1,89 +1,125 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:TextualContent") +@Serializable +@XmlSerialName("TextualContent", SIRI_NAME_SPACE, SIRI_PREFIX) data class TextualContentDto( - @Element(name = "siri:SummaryContent") + @XmlElement(true) + @XmlSerialName("SummaryContent", SIRI_NAME_SPACE, SIRI_PREFIX) val summaryContent: SummaryContentDto, - @Element(name = "siri:ReasonContent") - val reasonContent: ReasonContentDto?, - @Element(name = "siri:DescriptionContent") - val descriptionContent: List?, - @Element(name = "siri:ConsequenceContent") - val consequenceContent: List?, - @Element(name = "siri:RecommendationContent") - val recommendationContent: List?, - @Element(name = "siri:DurationContent") - val durationContent: DurationContentDto?, - @Element(name = "siri:RemarkContent") - val remarkContent: List?, - @Element(name = "siri:InfoLink") - val infoLink: List? + + @XmlElement(true) + @XmlSerialName("ReasonContent", SIRI_NAME_SPACE, SIRI_PREFIX) + val reasonContent: ReasonContentDto? = null, + + @XmlElement(true) + @XmlSerialName("DescriptionContent", SIRI_NAME_SPACE, SIRI_PREFIX) + val descriptionContent: List? = null, + + @XmlElement(true) + @XmlSerialName("ConsequenceContent", SIRI_NAME_SPACE, SIRI_PREFIX) + val consequenceContent: List? = null, + + @XmlElement(true) + @XmlSerialName("RecommendationContent", SIRI_NAME_SPACE, SIRI_PREFIX) + val recommendationContent: List? = null, + + @XmlElement(true) + @XmlSerialName("DurationContent", SIRI_NAME_SPACE, SIRI_PREFIX) + val durationContent: DurationContentDto? = null, + + @XmlElement(true) + @XmlSerialName("RemarkContent", SIRI_NAME_SPACE, SIRI_PREFIX) + val remarkContent: List? = null, + + @XmlElement(true) + @XmlSerialName("InfoLink", SIRI_NAME_SPACE, SIRI_PREFIX) + val infoLink: List? = null ) : Parcelable @Parcelize -@Xml(name = "siri:SummaryContent") +@Serializable +@XmlSerialName("SummaryContent", SIRI_NAME_SPACE, SIRI_PREFIX) data class SummaryContentDto( - @PropertyElement(name = "siri:SummaryText") - val summaryText: String? + @XmlElement(true) + @XmlSerialName("SummaryText", SIRI_NAME_SPACE, SIRI_PREFIX) + val summaryText: String? = null ) : Parcelable @Parcelize -@Xml(name = "siri:ReasonContent") +@Serializable +@XmlSerialName("ReasonContent", SIRI_NAME_SPACE, SIRI_PREFIX) data class ReasonContentDto( - @PropertyElement(name = "siri:ReasonText") - val reasonText: String? + @XmlElement(true) + @XmlSerialName("ReasonText", SIRI_NAME_SPACE, SIRI_PREFIX) + val reasonText: String? = null ) : Parcelable @Parcelize -@Xml(name = "siri:ConsequenceContent") +@Serializable +@XmlSerialName("ConsequenceContent", SIRI_NAME_SPACE, SIRI_PREFIX) data class ConsequenceContentDto( - @PropertyElement(name = "siri:ConsequenceText") - val consequenceText: String? + @XmlElement(true) + @XmlSerialName("ConsequenceText", SIRI_NAME_SPACE, SIRI_PREFIX) + val consequenceText: String? = null ) : Parcelable @Parcelize -@Xml(name = "siri:RecommendationContent") +@Serializable +@XmlSerialName("RecommendationContent", SIRI_NAME_SPACE, SIRI_PREFIX) data class RecommendationContentDto( - @PropertyElement(name = "siri:RecommendationText") - val recommendationText: String? + @XmlElement(true) + @XmlSerialName("RecommendationText", SIRI_NAME_SPACE, SIRI_PREFIX) + val recommendationText: String? = null ) : Parcelable @Parcelize -@Xml(name = "siri:DurationContent") +@Serializable +@XmlSerialName("DurationContent", SIRI_NAME_SPACE, SIRI_PREFIX) data class DurationContentDto( - @PropertyElement(name = "siri:DurationText") - val durationText: String? + @XmlElement(true) + @XmlSerialName("DurationText", SIRI_NAME_SPACE, SIRI_PREFIX) + val durationText: String? = null ) : Parcelable @Parcelize -@Xml(name = "siri:DescriptionContent") +@Serializable +@XmlSerialName("DescriptionContent", SIRI_NAME_SPACE, SIRI_PREFIX) data class DescriptionContent( - @PropertyElement(name = "siri:DescriptionText") - val descriptionText: String? + @XmlElement(true) + @XmlSerialName("DescriptionText", SIRI_NAME_SPACE, SIRI_PREFIX) + val descriptionText: String? = null ) : Parcelable @Parcelize -@Xml(name = "siri:RemarkContent") +@Serializable +@XmlSerialName("RemarkContent", SIRI_NAME_SPACE, SIRI_PREFIX) data class RemarkContent( - @PropertyElement(name = "siri:Remark") - val remark: String? + @XmlElement(true) + @XmlSerialName("Remark", SIRI_NAME_SPACE, SIRI_PREFIX) + val remark: String? = null ) : Parcelable @Parcelize -@Xml(name = "siri:InfoLink") +@Serializable +@XmlSerialName("InfoLink", SIRI_NAME_SPACE, SIRI_PREFIX) data class InfoLink( - @PropertyElement(name = "siri:Uri") + @XmlElement(true) + @XmlSerialName("Uri", SIRI_NAME_SPACE, SIRI_PREFIX) val uri: String, - @PropertyElement(name = "siri:Label") - val label: String? + + @XmlElement(true) + @XmlSerialName("Label", SIRI_NAME_SPACE, SIRI_PREFIX) + val label: String? = null ) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ValidityPeriodDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ValidityPeriodDto.kt index a5c57a5..b445752 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ValidityPeriodDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/situations/ValidityPeriodDto.kt @@ -1,19 +1,29 @@ package ch.opentransportdata.ojp.data.dto.response.tir.situations import android.os.Parcelable -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.SIRI_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.SIRI_PREFIX +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.LocalDateTime /** * Created by Michael Ruppen on 28.06.2024 */ @Parcelize -@Xml(name = "siri:ValidityPeriod") +@Serializable +@XmlSerialName("ValidityPeriod", SIRI_NAME_SPACE, SIRI_PREFIX) data class ValidityPeriodDto( - @PropertyElement(name = "siri:StartTime") + @XmlElement(true) + @XmlSerialName("StartTime", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = LocalDateTimeSerializer::class) val startTime: LocalDateTime, - @PropertyElement(name = "siri:EndTime") + + @XmlElement(true) + @XmlSerialName("EndTime", SIRI_NAME_SPACE, SIRI_PREFIX) + @Serializable(with = LocalDateTimeSerializer::class) val endTime: LocalDateTime -) : Parcelable +) : Parcelable \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/trips/TripDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/trips/TripDto.kt index bac334a..8240855 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/trips/TripDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/trips/TripDto.kt @@ -1,6 +1,9 @@ package ch.opentransportdata.ojp.data.dto.response.tir.trips import android.os.Parcelable +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE +import ch.opentransportdata.ojp.data.dto.converter.DurationSerializer +import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeSerializer import ch.opentransportdata.ojp.data.dto.response.PlacesDto import ch.opentransportdata.ojp.data.dto.response.tir.LegDto import ch.opentransportdata.ojp.data.dto.response.tir.leg.ContinuousLegDto @@ -9,37 +12,59 @@ import ch.opentransportdata.ojp.data.dto.response.tir.leg.TransferLegDto import ch.opentransportdata.ojp.data.dto.response.tir.minimalCopy import ch.opentransportdata.ojp.data.dto.response.tir.replaceWithParentRef import ch.opentransportdata.ojp.data.dto.response.tir.situations.PtSituationDto -import com.tickaroo.tikxml.annotation.Element -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import java.time.Duration import java.time.LocalDateTime /** * Created by Michael Ruppen on 28.06.2024 */ + @Parcelize -@Xml(name = "Trip") +@Serializable +@XmlSerialName("Trip", OJP_NAME_SPACE, "") data class TripDto( - @PropertyElement(name = "Id") + @XmlElement(true) + @XmlSerialName("Id", OJP_NAME_SPACE, "") override val id: String, - @PropertyElement(name = "Duration") + + @XmlElement(true) + @XmlSerialName("Duration", OJP_NAME_SPACE, "") + @Serializable(with = DurationSerializer::class) val duration: Duration, - @PropertyElement(name = "StartTime") + + @XmlElement(true) + @XmlSerialName("StartTime", OJP_NAME_SPACE, "") + @Serializable(with = LocalDateTimeSerializer::class) val startTime: LocalDateTime, - @PropertyElement(name = "EndTime") + + @XmlElement(true) + @XmlSerialName("EndTime", OJP_NAME_SPACE, "") + @Serializable(with = LocalDateTimeSerializer::class) val endTime: LocalDateTime, - @PropertyElement(name = "Transfers") + + @XmlElement(true) + @XmlSerialName("Transfers", OJP_NAME_SPACE, "") val transfers: Int, - @Element(name = "Leg") + + @XmlElement(true) + @XmlSerialName("Leg", OJP_NAME_SPACE, "") val legs: List, - @PropertyElement(name = "Unplanned") - val unplanned: Boolean?, //not yet delivered from backend - @PropertyElement(name = "Delayed") - val delayed: Boolean?, //not yet delivered from backend - @PropertyElement(name = "Infeasible") - val infeasible: Boolean? + + @XmlElement(true) + @XmlSerialName("Unplanned", OJP_NAME_SPACE, "") + val unplanned: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("Delayed", OJP_NAME_SPACE, "") + val delayed: Boolean? = null, + + @XmlElement(true) + @XmlSerialName("Infeasible", OJP_NAME_SPACE, "") + val infeasible: Boolean? = null ) : AbstractTripDto(), Parcelable { val startWithTransferLeg: Boolean diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/trips/TripSummaryDto.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/trips/TripSummaryDto.kt index 60bdda5..e73077a 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/trips/TripSummaryDto.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/response/tir/trips/TripSummaryDto.kt @@ -1,15 +1,19 @@ package ch.opentransportdata.ojp.data.dto.response.tir.trips -import com.tickaroo.tikxml.annotation.PropertyElement -import com.tickaroo.tikxml.annotation.Xml +import ch.opentransportdata.ojp.data.dto.OJP_NAME_SPACE import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName /** * Created by Michael Ruppen on 01.07.2024 */ -@Xml(name = "TripSummary") @Parcelize -data class TripSummaryDto( - @PropertyElement(name = "TripId") +@Serializable +@XmlSerialName("TripSummary", OJP_NAME_SPACE, "") +internal data class TripSummaryDto( + @XmlElement(true) + @XmlSerialName("TripId", OJP_NAME_SPACE, "") override val id: String ) : AbstractTripDto() \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ConventionalModesOfOperation.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ConventionalModesOfOperation.kt index ac33af7..f4236b9 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ConventionalModesOfOperation.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ConventionalModesOfOperation.kt @@ -1,17 +1,21 @@ package ch.opentransportdata.ojp.domain.model +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + /** * Created by Michael Ruppen on 28.06.2024 */ +@Serializable enum class ConventionalModesOfOperation { - SCHEDULED, - DEMAND_RESPONSIVE, - FLEXIBLE_ROUTE, - FLEXIBLE_AREA, - SHUTTLE, - POOLING, - REPLACEMENT, - SCHOOL, - P_RM, - UNKNOWN + @SerialName("scheduled") SCHEDULED, + @SerialName("demandResponsive") DEMAND_RESPONSIVE, + @SerialName("flexibleRoute") FLEXIBLE_ROUTE, + @SerialName("flexibleArea")FLEXIBLE_AREA, + @SerialName("shuttle") SHUTTLE, + @SerialName("pooling") POOLING, + @SerialName("replacement") REPLACEMENT, + @SerialName("school") SCHOOL, + @SerialName("pRM") P_RM, + @SerialName("unknown") UNKNOWN } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/TransferType.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/TransferType.kt index 6804834..97a362c 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/TransferType.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/TransferType.kt @@ -1,22 +1,39 @@ package ch.opentransportdata.ojp.domain.model +import kotlinx.serialization.SerialName + /** * Created by Michael Ruppen on 28.06.2024 */ enum class TransferType { + @SerialName("walk") WALK, + @SerialName("shuttle") SHUTTLE, + @SerialName("taxi") TAXI, + @SerialName("protectedConnection") PROTECTED_CONNECTION, + @SerialName("guaranteedConnection") GUARANTEED_CONNECTION, + @SerialName("remainInVehicle") REMAIN_IN_VEHICLE, + @SerialName("changeWithinVehicle") CHANGE_WITHIN_VEHICLE, + @SerialName("checkIn") CHECK_IN, + @SerialName("checkOut") CHECK_OUT, + @SerialName("parkAndRide") PARK_AND_RIDE, + @SerialName("bikeAndRide") BIKE_AND_RIDE, + @SerialName("carHire") CAR_HIRE, + @SerialName("bikeHire") BIKE_HIRE, + @SerialName("other") OTHER, + @SerialName("unknown") UNKNOWN } \ No newline at end of file From ad9fc1c7ffc2def69870f59c638f354f1bc8b214 Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Mon, 29 Sep 2025 13:50:29 +0200 Subject: [PATCH 04/10] Adapt converter --- .../ConventionalModesOfOperationConverter.kt | 40 ------------ .../dto/converter/DurationTypeConverter.kt | 21 ++++--- .../data/dto/converter/FareClassConverter.kt | 42 ++++++++----- .../converter/LocalDateTimeTypeConverter.kt | 33 +++++----- .../dto/converter/OccupancyLevelConverter.kt | 40 ------------ .../PlaceTypeRestrictionConverter.kt | 35 ----------- .../data/dto/converter/PtModeTypeConverter.kt | 55 ----------------- .../dto/converter/RealTimeDataConverter.kt | 29 --------- .../data/dto/converter/ScopeTypeConverter.kt | 61 ------------------- .../dto/converter/TransferTypeConverter.kt | 50 --------------- .../dto/converter/XmlUtilConverterFactory.kt | 49 +++++++++++++++ .../ojp/domain/model/OccupancyLevel.kt | 13 ++++ .../ojp/domain/model/PlaceTypeRestriction.kt | 9 +++ .../ojp/domain/model/PtMode.kt | 21 +++++++ .../ojp/domain/model/RealtimeData.kt | 8 +++ .../ojp/domain/model/ScopeType.kt | 44 +++++++------ 16 files changed, 180 insertions(+), 370 deletions(-) delete mode 100644 sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/ConventionalModesOfOperationConverter.kt delete mode 100644 sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/OccupancyLevelConverter.kt delete mode 100644 sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/PlaceTypeRestrictionConverter.kt delete mode 100644 sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/PtModeTypeConverter.kt delete mode 100644 sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/RealTimeDataConverter.kt delete mode 100644 sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/ScopeTypeConverter.kt delete mode 100644 sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/TransferTypeConverter.kt create mode 100644 sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/XmlUtilConverterFactory.kt diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/ConventionalModesOfOperationConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/ConventionalModesOfOperationConverter.kt deleted file mode 100644 index 7b3ccb3..0000000 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/ConventionalModesOfOperationConverter.kt +++ /dev/null @@ -1,40 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.converter - -import ch.opentransportdata.ojp.domain.model.ConventionalModesOfOperation -import com.tickaroo.tikxml.TypeConverter - -/** - * Created by Michael Ruppen on 01.07.2024 - */ -internal class ConventionalModesOfOperationConverter : TypeConverter { - override fun read(value: String?): ConventionalModesOfOperation { - return when (value) { - "scheduled" -> ConventionalModesOfOperation.SCHEDULED - "demandResponsive" -> ConventionalModesOfOperation.DEMAND_RESPONSIVE - "flexibleRoute" -> ConventionalModesOfOperation.FLEXIBLE_ROUTE - "flexibleArea" -> ConventionalModesOfOperation.FLEXIBLE_AREA - "shuttle" -> ConventionalModesOfOperation.SHUTTLE - "pooling" -> ConventionalModesOfOperation.POOLING - "replacement" -> ConventionalModesOfOperation.REPLACEMENT - "school" -> ConventionalModesOfOperation.SCHOOL - "pRM" -> ConventionalModesOfOperation.P_RM - else -> ConventionalModesOfOperation.UNKNOWN - } - } - - override fun write(value: ConventionalModesOfOperation?): String { - return when (value) { - ConventionalModesOfOperation.SCHEDULED -> "scheduled" - ConventionalModesOfOperation.DEMAND_RESPONSIVE -> "demandResponsive" - ConventionalModesOfOperation.FLEXIBLE_ROUTE -> "flexibleRoute" - ConventionalModesOfOperation.FLEXIBLE_AREA -> "flexibleArea" - ConventionalModesOfOperation.SHUTTLE -> "shuttle" - ConventionalModesOfOperation.POOLING -> "pooling" - ConventionalModesOfOperation.REPLACEMENT -> "replacement" - ConventionalModesOfOperation.SCHOOL -> "school" - ConventionalModesOfOperation.P_RM -> "pRM" - else -> "unknown" - } - } - -} \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverter.kt index d7c5f17..a45365a 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverter.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverter.kt @@ -1,18 +1,25 @@ package ch.opentransportdata.ojp.data.dto.converter -import com.tickaroo.tikxml.TypeConverter +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder import java.time.Duration /** * Created by Michael Ruppen on 31.07.2024 */ -internal class DurationTypeConverter : TypeConverter { - override fun read(value: String): Duration { - return Duration.parse(value) - } +object DurationSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("java.time.Duration", PrimitiveKind.STRING) - override fun write(value: Duration): String { - return value.toString() + override fun serialize(encoder: Encoder, value: Duration) { + encoder.encodeString(value.toString()) } + override fun deserialize(decoder: Decoder): Duration { + return Duration.parse(decoder.decodeString()) + } } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/FareClassConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/FareClassConverter.kt index 6b0f81e..b827f17 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/FareClassConverter.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/FareClassConverter.kt @@ -1,28 +1,40 @@ package ch.opentransportdata.ojp.data.dto.converter import ch.opentransportdata.ojp.domain.model.FareClass -import com.tickaroo.tikxml.TypeConverter +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder /** * Created by Deniz Kalem on 02.07.2025 */ -internal class FareClassConverter : TypeConverter { +object FareClassSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("FareClass", PrimitiveKind.STRING) - override fun read(ojpValue: String): FareClass { - return when (ojpValue) { - "unknown" -> FareClass.UNKNOWN - "firstClass" -> FareClass.FIRST_CLASS - "secondClass " -> FareClass.SECOND_CLASS - else -> FareClass.UNKNOWN - } + private val toWire = mapOf( + FareClass.UNKNOWN to "unknown", + FareClass.FIRST_CLASS to "firstClass", + FareClass.SECOND_CLASS to "secondClass " + ) + + private val fromWire = mapOf( + "unknown" to FareClass.UNKNOWN, + "firstClass" to FareClass.FIRST_CLASS, + "secondClass " to FareClass.SECOND_CLASS, + "secondClass" to FareClass.SECOND_CLASS + ) + + override fun serialize(encoder: Encoder, value: FareClass) { + encoder.encodeString(toWire[value] ?: "unknown") } - override fun write(type: FareClass): String { - return when (type) { - FareClass.UNKNOWN -> "unknown" - FareClass.FIRST_CLASS -> "firstClass" - FareClass.SECOND_CLASS -> "secondClass " - } + override fun deserialize(decoder: Decoder): FareClass { + val raw = decoder.decodeString() + return fromWire[raw] ?: fromWire[raw.trim()] ?: FareClass.UNKNOWN } } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverter.kt index b45c6f3..80efdf9 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverter.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverter.kt @@ -1,31 +1,28 @@ package ch.opentransportdata.ojp.data.dto.converter -import ch.opentransportdata.ojp.domain.usecase.Initializer -import com.tickaroo.tikxml.TypeConverter -import timber.log.Timber +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder import java.time.LocalDateTime -import java.time.ZoneOffset -import java.time.ZonedDateTime import java.time.format.DateTimeFormatter -import java.time.format.DateTimeParseException /** * Created by Michael Ruppen on 05.07.2024 */ -internal class LocalDateTimeTypeConverter(private val initializer: Initializer) : TypeConverter { +object LocalDateTimeSerializer : KSerializer { + private val formatter = DateTimeFormatter.ISO_DATE_TIME - override fun read(value: String): LocalDateTime { - return try { - val zonedDateTime = ZonedDateTime.parse(value, DateTimeFormatter.ISO_ZONED_DATE_TIME) - zonedDateTime.withZoneSameInstant(initializer.defaultTimeZone).toLocalDateTime() - } catch (e: DateTimeParseException) { - Timber.e(e, "$value is not a valid datetime") - LocalDateTime.now() - } + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: LocalDateTime) { + encoder.encodeString(value.format(formatter)) } - override fun write(value: LocalDateTime): String { - val instant = value.atZone(initializer.defaultTimeZone).toInstant() - return DateTimeFormatter.ISO_INSTANT.format(instant) + override fun deserialize(decoder: Decoder): LocalDateTime { + return LocalDateTime.parse(decoder.decodeString(), formatter) } } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/OccupancyLevelConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/OccupancyLevelConverter.kt deleted file mode 100644 index 8aa4cd1..0000000 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/OccupancyLevelConverter.kt +++ /dev/null @@ -1,40 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.converter - -import ch.opentransportdata.ojp.domain.model.OccupancyLevel -import com.tickaroo.tikxml.TypeConverter - - -/** - * Created by Deniz Kalem on 02.07.2025 - */ -internal class OccupancyLevelConverter : TypeConverter { - - override fun read(ojpValue: String): OccupancyLevel { - return when (ojpValue) { - "unknown" -> OccupancyLevel.UNKNOWN - "empty" -> OccupancyLevel.UNKNOWN - "undefined" -> OccupancyLevel.UNDEFINED - "manySeatsAvailable" -> OccupancyLevel.MANY_SEATS_AVAILABLE - "fewSeatsAvailable" -> OccupancyLevel.FEW_SEATS_AVAILABLE - "standingRoomOnly" -> OccupancyLevel.STANDING_ROOM_ONLY - "crushedStandingRoomOnly" -> OccupancyLevel.CRUSHED_STANDING_ROOM_ONLY - "notAcceptingPassengers" -> OccupancyLevel.NOT_ACCEPTING_PASSENGERS - "full" -> OccupancyLevel.FULL - else -> OccupancyLevel.UNKNOWN - } - } - - override fun write(type: OccupancyLevel): String { - return when (type) { - OccupancyLevel.UNKNOWN -> "unknown" - OccupancyLevel.EMPTY -> "empty" - OccupancyLevel.UNDEFINED -> "undefined" - OccupancyLevel.MANY_SEATS_AVAILABLE -> "manySeatsAvailable" - OccupancyLevel.FEW_SEATS_AVAILABLE -> "fewSeatsAvailable" - OccupancyLevel.STANDING_ROOM_ONLY -> "standingRoomOnly" - OccupancyLevel.CRUSHED_STANDING_ROOM_ONLY -> "crushedStandingRoomOnly" - OccupancyLevel.NOT_ACCEPTING_PASSENGERS -> "notAcceptingPassengers" - OccupancyLevel.FULL -> "full" - } - } -} \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/PlaceTypeRestrictionConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/PlaceTypeRestrictionConverter.kt deleted file mode 100644 index cdb8e85..0000000 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/PlaceTypeRestrictionConverter.kt +++ /dev/null @@ -1,35 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.converter - -import ch.opentransportdata.ojp.domain.model.PlaceTypeRestriction -import com.tickaroo.tikxml.TypeConverter - - -/** - * Created by Michael Ruppen on 23.04.2024 - */ -internal class PlaceTypeRestrictionConverter : TypeConverter { - - override fun read(ojpValue: String): PlaceTypeRestriction { - return when (ojpValue) { - "stop" -> PlaceTypeRestriction.STOP - "address" -> PlaceTypeRestriction.ADDRESS - "poi" -> PlaceTypeRestriction.POI - "coord" -> PlaceTypeRestriction.COORDINATE - "location" -> PlaceTypeRestriction.LOCATION - "topographicPlace" -> PlaceTypeRestriction.TOPOGRAPHIC_PLACE - else -> PlaceTypeRestriction.UNKNOWN - } - } - - override fun write(type: PlaceTypeRestriction): String { - return when (type) { - PlaceTypeRestriction.STOP -> "stop" - PlaceTypeRestriction.ADDRESS -> "address" - PlaceTypeRestriction.POI -> "poi" - PlaceTypeRestriction.COORDINATE -> "coord" - PlaceTypeRestriction.LOCATION -> "location" - PlaceTypeRestriction.TOPOGRAPHIC_PLACE -> "topographicPlace" - else -> "unknown" - } - } -} diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/PtModeTypeConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/PtModeTypeConverter.kt deleted file mode 100644 index 8fc470a..0000000 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/PtModeTypeConverter.kt +++ /dev/null @@ -1,55 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.converter - -import ch.opentransportdata.ojp.domain.model.PtMode -import com.tickaroo.tikxml.TypeConverter - - -/** - * Created by Michael Ruppen on 23.04.2024 - */ -internal class PtModeTypeConverter : TypeConverter { - - override fun read(ojpValue: String): PtMode { - return when (ojpValue) { - "rail" -> PtMode.RAIL - "coach" -> PtMode.COACH - "suburbanRail" -> PtMode.SUBURBAN_RAIL - "urbanRail" -> PtMode.URBAN_RAIL - "metro" -> PtMode.METRO - "underground" -> PtMode.UNDERGROUND - "bus" -> PtMode.BUS - "trolleyBus" -> PtMode.TROLLEY_BUS - "tram" -> PtMode.TRAM - "water" -> PtMode.WATER - "air" -> PtMode.AIR - "telecabin" -> PtMode.TELECABIN - "funicular" -> PtMode.FUNICULAR - "taxi" -> PtMode.TAXI - "selfDrive" -> PtMode.SELF_DRIVE - "all" -> PtMode.ALL - else -> PtMode.UNKNOWN - } - } - - override fun write(mode: PtMode): String { - return when (mode) { - PtMode.RAIL -> "rail" - PtMode.COACH -> "coach" - PtMode.SUBURBAN_RAIL -> "suburbanRail" - PtMode.URBAN_RAIL -> "urbanRail" - PtMode.METRO -> "metro" - PtMode.UNDERGROUND -> "underground" - PtMode.BUS -> "bus" - PtMode.TROLLEY_BUS -> "trolleyBus" - PtMode.TRAM -> "tram" - PtMode.WATER -> "water" - PtMode.AIR -> "air" - PtMode.TELECABIN -> "telecabin" - PtMode.FUNICULAR -> "funicular" - PtMode.TAXI -> "taxi" - PtMode.SELF_DRIVE -> "selfDrive" - PtMode.ALL -> "all" - else -> "unknown" - } - } -} diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/RealTimeDataConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/RealTimeDataConverter.kt deleted file mode 100644 index 8ddf263..0000000 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/RealTimeDataConverter.kt +++ /dev/null @@ -1,29 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.converter - -import ch.opentransportdata.ojp.domain.model.RealtimeData -import com.tickaroo.tikxml.TypeConverter - - -/** - * Created by Deniz Kalem on 13.08.2024 - */ -internal class RealTimeDataConverter : TypeConverter { - - override fun read(ojpValue: String): RealtimeData { - return when (ojpValue) { - "full" -> RealtimeData.FULL - "explanatory" -> RealtimeData.EXPLANATORY - "none" -> RealtimeData.NONE - else -> RealtimeData.UNKNOWN - } - } - - override fun write(type: RealtimeData): String { - return when (type) { - RealtimeData.FULL -> "full" - RealtimeData.EXPLANATORY -> "explanatory" - RealtimeData.NONE -> "none" - else -> "unknown" - } - } -} diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/ScopeTypeConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/ScopeTypeConverter.kt deleted file mode 100644 index 37ca0e0..0000000 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/ScopeTypeConverter.kt +++ /dev/null @@ -1,61 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.converter - -import ch.opentransportdata.ojp.domain.model.ScopeType -import com.tickaroo.tikxml.TypeConverter - -/** - * Created by Deniz Kalem on 27.11.2024 - */ -internal class ScopeTypeConverter : TypeConverter { - - override fun read(value: String): ScopeType { - return when (value) { - "unknown" -> ScopeType.UNKNOWN - "stopPlace" -> ScopeType.STOP_PLACE - "line" -> ScopeType.LINE - "route" -> ScopeType.ROUTE - "publicTransportService" -> ScopeType.PUBLIC_TRANSPORT_SERVICE - "operator" -> ScopeType.OPERATOR - "city" -> ScopeType.CITY - "area" -> ScopeType.AREA - "stopPoint" -> ScopeType.STOP_POINT - "stopPlaceComponent" -> ScopeType.STOP_PLACE_COMPONENT - "place" -> ScopeType.PLACE - "network" -> ScopeType.NETWORK - "vehicleJourney" -> ScopeType.VEHICLE_JOURNEY - "datedVehicleJourney" -> ScopeType.DATED_VEHICLE_JOURNEY - "connectionLink" -> ScopeType.CONNECTION_LINK - "interchange" -> ScopeType.INTERCHANGE - "allPT" -> ScopeType.ALL_PT - "general" -> ScopeType.GENERAL - "road" -> ScopeType.ROAD - "undefined" -> ScopeType.UNDEFINED - else -> ScopeType.UNKNOWN - } - } - - override fun write(value: ScopeType): String { - return when (value) { - ScopeType.UNKNOWN -> "unknown" - ScopeType.STOP_PLACE -> "stopPlace" - ScopeType.LINE -> "line" - ScopeType.ROUTE -> "route" - ScopeType.PUBLIC_TRANSPORT_SERVICE -> "publicTransportService" - ScopeType.OPERATOR -> "operator" - ScopeType.CITY -> "city" - ScopeType.AREA -> "area" - ScopeType.STOP_POINT -> "stopPoint" - ScopeType.STOP_PLACE_COMPONENT -> "stopPlaceComponent" - ScopeType.PLACE -> "place" - ScopeType.NETWORK -> "network" - ScopeType.VEHICLE_JOURNEY -> "vehicleJourney" - ScopeType.DATED_VEHICLE_JOURNEY -> "datedVehicleJourney" - ScopeType.CONNECTION_LINK -> "connectionLink" - ScopeType.INTERCHANGE -> "interchange" - ScopeType.ALL_PT -> "allPT" - ScopeType.GENERAL -> "general" - ScopeType.ROAD -> "road" - ScopeType.UNDEFINED -> "undefined" - } - } -} \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/TransferTypeConverter.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/TransferTypeConverter.kt deleted file mode 100644 index 04802f6..0000000 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/TransferTypeConverter.kt +++ /dev/null @@ -1,50 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.converter - -import ch.opentransportdata.ojp.domain.model.TransferType -import com.tickaroo.tikxml.TypeConverter - -/** - * Created by Michael Ruppen on 01.07.2024 - */ -internal class TransferTypeConverter : TypeConverter { - override fun read(value: String): TransferType { - return when (value) { - "walk" -> TransferType.WALK - "shuttle" -> TransferType.SHUTTLE - "taxi" -> TransferType.TAXI - "protectedConnection" -> TransferType.PROTECTED_CONNECTION - "guaranteedConnection" -> TransferType.GUARANTEED_CONNECTION - "remainInVehicle" -> TransferType.REMAIN_IN_VEHICLE - "changeWithinVehicle" -> TransferType.CHANGE_WITHIN_VEHICLE - "checkIn" -> TransferType.CHECK_IN - "checkOut" -> TransferType.CHECK_OUT - "parkAndRide" -> TransferType.PARK_AND_RIDE - "bikeAndRide" -> TransferType.BIKE_AND_RIDE - "carHire" -> TransferType.CAR_HIRE - "bikeHire" -> TransferType.BIKE_HIRE - "other" -> TransferType.OTHER - else -> TransferType.UNKNOWN - } - } - - override fun write(value: TransferType): String { - return when (value) { - TransferType.WALK -> "walk" - TransferType.SHUTTLE -> "shuttle" - TransferType.TAXI -> "taxi" - TransferType.PROTECTED_CONNECTION -> "protectedConnection" - TransferType.GUARANTEED_CONNECTION -> "guaranteedConnection" - TransferType.REMAIN_IN_VEHICLE -> "remainInVehicle" - TransferType.CHANGE_WITHIN_VEHICLE -> "changeWithinVehicle" - TransferType.CHECK_IN -> "checkIn" - TransferType.CHECK_OUT -> "checkOut" - TransferType.PARK_AND_RIDE -> "parkAndRide" - TransferType.BIKE_AND_RIDE -> "bikeAndRide" - TransferType.CAR_HIRE -> "carHire" - TransferType.BIKE_HIRE -> "bikeHire" - TransferType.OTHER -> "other" - else -> "unknown" - } - } - -} \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/XmlUtilConverterFactory.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/XmlUtilConverterFactory.kt new file mode 100644 index 0000000..4cf9913 --- /dev/null +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/dto/converter/XmlUtilConverterFactory.kt @@ -0,0 +1,49 @@ +package ch.opentransportdata.ojp.data.dto.converter + +import kotlinx.serialization.KSerializer +import nl.adaptivity.xmlutil.serialization.XML +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.ResponseBody +import retrofit2.Converter +import retrofit2.Retrofit +import java.lang.reflect.Type + +class XmlUtilConverterFactory private constructor( + private val xml: XML +) : Converter.Factory() { + + override fun responseBodyConverter( + type: Type, + annotations: Array, + retrofit: Retrofit + ): Converter { + val kSerializer = serializerFor(type) + return Converter { body -> + xml.decodeFromString(kSerializer as KSerializer, body.string()) + } + } + + override fun requestBodyConverter( + type: Type, + parameterAnnotations: Array, + methodAnnotations: Array, + retrofit: Retrofit + ): Converter<*, RequestBody> { + val kSerializer = serializerFor(type) + val mediaType = "application/xml; charset=UTF-8".toMediaType() + return Converter { value -> + val xmlString = xml.encodeToString(kSerializer as KSerializer, value) + xmlString.toRequestBody(mediaType) + } + } + + private fun serializerFor(type: Type): KSerializer<*> = + @Suppress("UNCHECKED_CAST") + (kotlinx.serialization.serializer(type) as KSerializer) + + companion object { + fun create(xml: XML): XmlUtilConverterFactory = XmlUtilConverterFactory(xml) + } +} \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/OccupancyLevel.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/OccupancyLevel.kt index 768fe5e..ddbd86f 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/OccupancyLevel.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/OccupancyLevel.kt @@ -1,16 +1,29 @@ package ch.opentransportdata.ojp.domain.model +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + /** * Created by Deniz Kalem on 25.06.2025 */ +@Serializable enum class OccupancyLevel { + @SerialName("unknown") UNKNOWN, + @SerialName("empty") EMPTY, + @SerialName("undefined") UNDEFINED, + @SerialName("manySeatsAvailable") MANY_SEATS_AVAILABLE, + @SerialName("fewSeatsAvailable") FEW_SEATS_AVAILABLE, + @SerialName("standingRoomOnly") STANDING_ROOM_ONLY, + @SerialName("crushedStandingRoomOnly") CRUSHED_STANDING_ROOM_ONLY, + @SerialName("notAcceptingPassengers") NOT_ACCEPTING_PASSENGERS, + @SerialName("full") FULL } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/PlaceTypeRestriction.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/PlaceTypeRestriction.kt index e148995..4f2b64e 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/PlaceTypeRestriction.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/PlaceTypeRestriction.kt @@ -1,14 +1,23 @@ package ch.opentransportdata.ojp.domain.model +import kotlinx.serialization.SerialName + /** * Created by Michael Ruppen on 26.04.2024 */ enum class PlaceTypeRestriction { + @SerialName("stop") STOP, + @SerialName("address") ADDRESS, + @SerialName("poi") POI, + @SerialName("coord") COORDINATE, + @SerialName("location") LOCATION, + @SerialName("topographicPlace") TOPOGRAPHIC_PLACE, + @SerialName("unknown") UNKNOWN } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/PtMode.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/PtMode.kt index 7419300..4f311fb 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/PtMode.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/PtMode.kt @@ -1,24 +1,45 @@ package ch.opentransportdata.ojp.domain.model +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + /** * Created by Michael Ruppen on 23.04.2024 */ +@Serializable enum class PtMode { + @SerialName("unknown") UNKNOWN, + @SerialName("rail") RAIL, + @SerialName("coach") COACH, + @SerialName("suburbanRail") SUBURBAN_RAIL, + @SerialName("urbanRail") URBAN_RAIL, + @SerialName("metro") METRO, + @SerialName("underground") UNDERGROUND, + @SerialName("bus") BUS, + @SerialName("trolleyBus") TROLLEY_BUS, + @SerialName("tram") TRAM, + @SerialName("water") WATER, + @SerialName("air") AIR, + @SerialName("telecabin") TELECABIN, + @SerialName("funicular") FUNICULAR, + @SerialName("taxi") TAXI, + @SerialName("selfDrive") SELF_DRIVE, + @SerialName("all") ALL } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/RealtimeData.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/RealtimeData.kt index 1a64b1f..02b043b 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/RealtimeData.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/RealtimeData.kt @@ -1,11 +1,19 @@ package ch.opentransportdata.ojp.domain.model +import kotlinx.serialization.SerialName + /** * Created by Deniz Kalem on 13.08.2024 */ enum class RealtimeData { + @SerialName("full") FULL, + + @SerialName("explanatory") EXPLANATORY, + + @SerialName("none") NONE, + @SerialName("unknown") UNKNOWN } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ScopeType.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ScopeType.kt index 1b6b3c6..db86297 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ScopeType.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/ScopeType.kt @@ -1,27 +1,31 @@ package ch.opentransportdata.ojp.domain.model +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + /** * Created by Deniz Kalem on 27.11.2024 */ +@Serializable enum class ScopeType { - UNKNOWN, - STOP_PLACE, - LINE, - ROUTE, - PUBLIC_TRANSPORT_SERVICE, - OPERATOR, - CITY, - AREA, - STOP_POINT, - STOP_PLACE_COMPONENT, - PLACE, - NETWORK, - VEHICLE_JOURNEY, - DATED_VEHICLE_JOURNEY, - CONNECTION_LINK, - INTERCHANGE, - ALL_PT, - GENERAL, - ROAD, - UNDEFINED + @SerialName("unknown") UNKNOWN, + @SerialName("stopPlace") STOP_PLACE, + @SerialName("line") LINE, + @SerialName("route") ROUTE, + @SerialName("publicTransportService") PUBLIC_TRANSPORT_SERVICE, + @SerialName("operator") OPERATOR, + @SerialName("city") CITY, + @SerialName("area") AREA, + @SerialName("stopPoint") STOP_POINT, + @SerialName("stopPlaceComponent") STOP_PLACE_COMPONENT, + @SerialName("place") PLACE, + @SerialName("network") NETWORK, + @SerialName("vehicleJourney") VEHICLE_JOURNEY, + @SerialName("datedVehicleJourney") DATED_VEHICLE_JOURNEY, + @SerialName("connectionLink") CONNECTION_LINK, + @SerialName("interchange") INTERCHANGE, + @SerialName("allPT") ALL_PT, + @SerialName("general") GENERAL, + @SerialName("road") ROAD, + @SerialName("undefined") UNDEFINED } \ No newline at end of file From 4be54533be50d1d613289f4b428216a11920ce18 Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Mon, 29 Sep 2025 13:51:02 +0200 Subject: [PATCH 05/10] Adapt network module --- .../opentransportdata/ojp/di/NetworkModule.kt | 68 ++++++++----------- 1 file changed, 27 insertions(+), 41 deletions(-) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/di/NetworkModule.kt b/sdk/src/main/java/ch/opentransportdata/ojp/di/NetworkModule.kt index 9a8d0f4..6b5e882 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/di/NetworkModule.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/di/NetworkModule.kt @@ -1,50 +1,33 @@ package ch.opentransportdata.ojp.di import ch.opentransportdata.ojp.BuildConfig -import ch.opentransportdata.ojp.data.dto.converter.ConventionalModesOfOperationConverter -import ch.opentransportdata.ojp.data.dto.converter.DurationTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.FareClassConverter -import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.OccupancyLevelConverter -import ch.opentransportdata.ojp.data.dto.converter.PlaceTypeRestrictionConverter -import ch.opentransportdata.ojp.data.dto.converter.PtModeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.RealTimeDataConverter -import ch.opentransportdata.ojp.data.dto.converter.ScopeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.TransferTypeConverter +import ch.opentransportdata.ojp.data.dto.converter.FareClassSerializer +import ch.opentransportdata.ojp.data.dto.converter.XmlUtilConverterFactory import ch.opentransportdata.ojp.data.remote.OjpService import ch.opentransportdata.ojp.di.interceptor.TokenInterceptor -import ch.opentransportdata.ojp.domain.model.ConventionalModesOfOperation import ch.opentransportdata.ojp.domain.model.FareClass -import ch.opentransportdata.ojp.domain.model.OccupancyLevel -import ch.opentransportdata.ojp.domain.model.PlaceTypeRestriction -import ch.opentransportdata.ojp.domain.model.PtMode -import ch.opentransportdata.ojp.domain.model.RealtimeData -import ch.opentransportdata.ojp.domain.model.ScopeType -import ch.opentransportdata.ojp.domain.model.TransferType import ch.opentransportdata.ojp.domain.usecase.Initializer -import com.tickaroo.tikxml.TikXml -import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter -import com.tickaroo.tikxml.retrofit.TikXmlConverterFactory +import kotlinx.serialization.modules.SerializersModule +import nl.adaptivity.xmlutil.ExperimentalXmlUtilApi +import nl.adaptivity.xmlutil.serialization.XML +import nl.adaptivity.xmlutil.serialization.XmlConfig import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor -import org.koin.core.module.dsl.factoryOf import org.koin.core.qualifier.named import org.koin.dsl.module import retrofit2.Retrofit -import java.time.Duration import java.util.concurrent.TimeUnit /** * Created by Michael Ruppen on 08.04.2024 */ internal val networkModule = module { + single { provideXml() } single { provideLoggingInterceptor() } single(named("ojpHttpClient")) { provideOkHttpClient(get(), get()) } single(named("ojpRetrofit")) { provideRetrofit(get(named("ojpHttpClient")), get(), get()) } - single { provideTikXml(get()) } single { TokenInterceptor(get()) } single { provideOjpService(get(named("ojpRetrofit"))) } - factoryOf(::LocalDateTimeTypeConverter) } internal fun provideLoggingInterceptor(): HttpLoggingInterceptor { @@ -66,29 +49,32 @@ internal fun provideOkHttpClient(loggingInterceptor: HttpLoggingInterceptor, tok .build() } -internal fun provideRetrofit(ojpHttpClient: OkHttpClient, tikXml: TikXml, initializer: Initializer): Retrofit { +internal fun provideRetrofit( + ojpHttpClient: OkHttpClient, + initializer: Initializer, + xml: XML +): Retrofit { return Retrofit.Builder() .baseUrl(initializer.baseUrl) .client(ojpHttpClient) - .addConverterFactory(TikXmlConverterFactory.create(tikXml)) + .addConverterFactory(XmlUtilConverterFactory.create(xml)) .build() } -internal fun provideTikXml(initializer: Initializer): TikXml { - return TikXml.Builder() - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .addTypeConverter(Duration::class.java, DurationTypeConverter()) - .addTypeConverter(String::class.java, HtmlEscapeStringConverter()) - .addTypeConverter(PtMode::class.java, PtModeTypeConverter()) - .addTypeConverter(PlaceTypeRestriction::class.java, PlaceTypeRestrictionConverter()) - .addTypeConverter(TransferType::class.java, TransferTypeConverter()) - .addTypeConverter(ConventionalModesOfOperation::class.java, ConventionalModesOfOperationConverter()) - .addTypeConverter(RealtimeData::class.java, RealTimeDataConverter()) - .addTypeConverter(ScopeType::class.java, ScopeTypeConverter()) - .addTypeConverter(FareClass::class.java, FareClassConverter()) - .addTypeConverter(OccupancyLevel::class.java, OccupancyLevelConverter()) - .exceptionOnUnreadXml(false) - .build() +@OptIn(ExperimentalXmlUtilApi::class) +internal fun provideXml(): XML = XML( + serializersModule = SerializersModule { + contextual(FareClass::class, FareClassSerializer) + } +) { + repairNamespaces = true + defaultPolicy { + unknownChildHandler = XmlConfig.IGNORING_UNKNOWN_CHILD_HANDLER + verifyElementOrder = false + throwOnRepeatedElement = false + isStrictBoolean = true + isStrictAttributeNames = true + } } internal fun provideOjpService(retrofit: Retrofit): OjpService { From dbc0c32e87f56df0bf06e90b04be6a7d8de3a2ca Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Mon, 29 Sep 2025 13:51:51 +0200 Subject: [PATCH 06/10] Adapt data source implementation --- .../ojp/data/local/trip/LocalTripDataSourceImpl.kt | 11 +++++------ .../RemoteLocationInformationDataSourceImpl.kt | 4 +--- .../ojp/data/remote/trip/RemoteTripDataSourceImpl.kt | 4 +--- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/local/trip/LocalTripDataSourceImpl.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/local/trip/LocalTripDataSourceImpl.kt index e374713..e44fa85 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/local/trip/LocalTripDataSourceImpl.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/local/trip/LocalTripDataSourceImpl.kt @@ -1,9 +1,10 @@ package ch.opentransportdata.ojp.data.local.trip import ch.opentransportdata.ojp.data.dto.OjpDto -import com.tickaroo.tikxml.TikXml import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import kotlinx.serialization.decodeFromString +import nl.adaptivity.xmlutil.serialization.XML import okio.buffer import okio.source import java.io.InputStream @@ -12,13 +13,11 @@ import java.io.InputStream * Created by Michael Ruppen on 19.09.2024 */ internal class LocalTripDataSourceImpl( - private val tikXml: TikXml + private val xml: XML ) : LocalTripDataSource { override suspend fun requestMockTrips(stream: InputStream): OjpDto = withContext(Dispatchers.IO) { - val bufferedSource = stream.source().buffer() - val response = tikXml.read(bufferedSource, OjpDto::class.java) - return@withContext response + val xmlString = stream.source().buffer().readUtf8() + xml.decodeFromString(xmlString) } - } \ No newline at end of file diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/remote/location/RemoteLocationInformationDataSourceImpl.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/remote/location/RemoteLocationInformationDataSourceImpl.kt index 4f8b86f..b7a5564 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/remote/location/RemoteLocationInformationDataSourceImpl.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/remote/location/RemoteLocationInformationDataSourceImpl.kt @@ -1,7 +1,6 @@ package ch.opentransportdata.ojp.data.remote.location import ch.opentransportdata.ojp.data.dto.OjpDto -import ch.opentransportdata.ojp.data.dto.converter.PlaceTypeRestrictionConverter import ch.opentransportdata.ojp.data.dto.request.OjpRequestDto import ch.opentransportdata.ojp.data.dto.request.ServiceRequestContextDto import ch.opentransportdata.ojp.data.dto.request.ServiceRequestDto @@ -24,7 +23,6 @@ internal class RemoteLocationInformationDataSourceImpl( private val initializer: Initializer ) : RemoteLocationInformationDataSource { - private val placeTypeRestrictionConverter = PlaceTypeRestrictionConverter() private val url: String get() = initializer.baseUrl + initializer.endpoint @@ -94,7 +92,7 @@ internal class RemoteLocationInformationDataSourceImpl( private fun createRestrictions(restrictions: LocationInformationParams): RestrictionsDto { return RestrictionsDto( - types = restrictions.types.map { RestrictionType(placeTypeRestrictionConverter.write(it)) }, + types = restrictions.types, numberOfResults = restrictions.numberOfResults, ptModeIncluded = restrictions.ptModeIncluded ) 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 edfac5a..6593b41 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 @@ -1,14 +1,12 @@ package ch.opentransportdata.ojp.data.remote.trip import ch.opentransportdata.ojp.data.dto.OjpDto -import ch.opentransportdata.ojp.data.dto.converter.PtModeTypeConverter import ch.opentransportdata.ojp.data.dto.request.OjpRequestDto import ch.opentransportdata.ojp.data.dto.request.ServiceRequestContextDto import ch.opentransportdata.ojp.data.dto.request.ServiceRequestDto import ch.opentransportdata.ojp.data.dto.request.tir.ModeAndModeOfOperationFilterDto import ch.opentransportdata.ojp.data.dto.request.tir.PlaceContextDto import ch.opentransportdata.ojp.data.dto.request.tir.PlaceReferenceDto -import ch.opentransportdata.ojp.data.dto.request.tir.PtModeType import ch.opentransportdata.ojp.data.dto.request.tir.TripParamsDto import ch.opentransportdata.ojp.data.dto.request.tir.TripRequestDto import ch.opentransportdata.ojp.data.dto.request.tir.TripVia @@ -130,7 +128,7 @@ internal class RemoteTripDataSourceImpl( useRealtimeData = this.useRealtimeData, modeAndModeOfOperationFilter = this.modeAndModeOfOperationFilter?.map { filter -> ModeAndModeOfOperationFilterDto( - ptMode = filter.ptMode.map { PtModeType(PtModeTypeConverter().write(it)) }, + ptMode = filter.ptMode, exclude = filter.exclude ) }, From 221a8fe1693e0ee82052d7510a31aff0c158cd4a Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Mon, 29 Sep 2025 17:07:33 +0200 Subject: [PATCH 07/10] Add xml parser to ojp error --- .../ojp/data/repository/OjpRepositoryImpl.kt | 16 ++-------------- .../ojp/domain/model/error/OjpError.kt | 4 ++-- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/data/repository/OjpRepositoryImpl.kt b/sdk/src/main/java/ch/opentransportdata/ojp/data/repository/OjpRepositoryImpl.kt index edd3786..26e5c12 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/data/repository/OjpRepositoryImpl.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/data/repository/OjpRepositoryImpl.kt @@ -16,10 +16,8 @@ import ch.opentransportdata.ojp.domain.model.TripParams import ch.opentransportdata.ojp.domain.model.TripRefineParam import ch.opentransportdata.ojp.domain.model.error.OjpError import ch.opentransportdata.ojp.domain.repository.OjpRepository -import com.tickaroo.tikxml.TypeAdapterNotFoundException -import com.tickaroo.tikxml.TypeConverterNotFoundException -import com.tickaroo.tikxml.XmlDataException import kotlinx.coroutines.CancellationException +import nl.adaptivity.xmlutil.serialization.XmlParsingException import retrofit2.HttpException import timber.log.Timber import java.io.InputStream @@ -132,17 +130,7 @@ internal class OjpRepositoryImpl( OjpError.UnexpectedHttpStatus(exception) } - is TypeConverterNotFoundException -> { - Timber.e(exception, "Missing TypeConverter") - OjpError.EncodingFailed(exception) - } - - is TypeAdapterNotFoundException -> { - Timber.e(exception, "Missing TypeAdapter") - OjpError.EncodingFailed(exception) - } - - is XmlDataException -> { + is XmlParsingException -> { Timber.e(exception, "Error in XML Data") OjpError.DecodingFailed(exception) } diff --git a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/error/OjpError.kt b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/error/OjpError.kt index 6c0f8e0..efe69c1 100644 --- a/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/error/OjpError.kt +++ b/sdk/src/main/java/ch/opentransportdata/ojp/domain/model/error/OjpError.kt @@ -1,7 +1,7 @@ package ch.opentransportdata.ojp.domain.model.error -import com.tickaroo.tikxml.XmlDataException import kotlinx.coroutines.CancellationException +import nl.adaptivity.xmlutil.serialization.XmlParsingException import retrofit2.HttpException import java.io.IOException @@ -20,7 +20,7 @@ sealed class OjpError(open val exception: Exception) { data class EncodingFailed(override val exception: IOException) : OjpError(exception) // Can't correctly decode a XML response - data class DecodingFailed(override val exception: XmlDataException) : OjpError(exception) + data class DecodingFailed(override val exception: XmlParsingException) : OjpError(exception) // Job of the coroutine is cancelled while it is suspending data class RequestCancelled(override val exception: CancellationException) : OjpError(exception) From e934a796e1e638660310f6a9be6b2f6d5508a740 Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Mon, 29 Sep 2025 17:29:24 +0200 Subject: [PATCH 08/10] Adapt test case --- gradle/libs.versions.toml | 2 + sdk/build.gradle.kts | 1 + .../ch/opentransportdata/ojp/OjpSdkTest.kt | 217 ++++++++---------- .../ojp/data/dto/adapter/PlaceAdapterTest.kt | 133 ----------- .../dto/adapter/ServiceDeliveryAdapterTest.kt | 90 -------- .../converter/DurationTypeConverterTest.kt | 85 +++++-- .../LocalDateTimeTypeConverterTest.kt | 128 ++++------- .../TripDeliveryHashCalculationTest.kt | 71 +++--- .../ojp/domain/usecase/TripRefinementTest.kt | 137 ++++++----- sdk/src/test/resources/converter/duration.xml | 2 +- .../test/resources/converter/no_duration.xml | 4 +- sdk/src/test/resources/trip/trip_delivery.xml | 4 +- .../trip/trip_delivery_same_trips.xml | 2 +- .../test/resources/trr/trip_result_long.xml | 6 +- .../test/resources/trr/trip_result_short.xml | 2 +- 15 files changed, 331 insertions(+), 553 deletions(-) delete mode 100644 sdk/src/test/java/ch/opentransportdata/ojp/data/dto/adapter/PlaceAdapterTest.kt delete mode 100644 sdk/src/test/java/ch/opentransportdata/ojp/data/dto/adapter/ServiceDeliveryAdapterTest.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1f19202..706ea7f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,6 +7,7 @@ coreKtx = "1.15.0" junit = "4.13.2" extJunit = "1.2.1" kotlinxCoroutinesTest = "1.8.0" +robolectric = "4.16" xmlUtil = "0.91.2" timber = "5.0.1" koin = "3.5.3" @@ -30,6 +31,7 @@ desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "extJunit" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutinesTest" } +robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" } xmlUtilCore = { module = "io.github.pdvrieze.xmlutil:core-android", version.ref = "xmlUtil" } xmlUtilSerialization = { module = "io.github.pdvrieze.xmlutil:serialization-jvm", version.ref = "xmlUtil" } timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } diff --git a/sdk/build.gradle.kts b/sdk/build.gradle.kts index bf1b3e3..cc5cba2 100644 --- a/sdk/build.gradle.kts +++ b/sdk/build.gradle.kts @@ -96,6 +96,7 @@ dependencies { testImplementation(libs.junit) testImplementation(libs.assertk) testImplementation(libs.kotlinx.coroutines.test) + testImplementation(libs.robolectric) implementation(libs.xmlUtilCore) implementation(libs.xmlUtilSerialization) } diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt index 0526765..80206ee 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt @@ -5,175 +5,156 @@ import assertk.assertions.isInstanceOf import assertk.assertions.isNotEmpty import assertk.assertions.isNotNull import ch.opentransportdata.ojp.data.dto.OjpDto -import ch.opentransportdata.ojp.data.dto.converter.DurationTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.PtModeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.TransferTypeConverter -import ch.opentransportdata.ojp.domain.model.* +import ch.opentransportdata.ojp.data.dto.converter.FareClassSerializer +import ch.opentransportdata.ojp.domain.model.FareClass +import ch.opentransportdata.ojp.domain.model.LanguageCode +import ch.opentransportdata.ojp.domain.model.LocationInformationParams +import ch.opentransportdata.ojp.domain.model.PlaceTypeRestriction +import ch.opentransportdata.ojp.domain.model.Result import ch.opentransportdata.ojp.domain.model.error.OjpError import ch.opentransportdata.ojp.domain.usecase.Initializer -import com.tickaroo.tikxml.TikXml -import com.tickaroo.tikxml.TypeConverterNotFoundException import kotlinx.coroutines.test.runTest +import kotlinx.serialization.SerializationException +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.modules.SerializersModule +import nl.adaptivity.xmlutil.ExperimentalXmlUtilApi +import nl.adaptivity.xmlutil.serialization.XML +import nl.adaptivity.xmlutil.serialization.XmlConfig import org.junit.Assert.assertThrows import org.junit.Before import org.junit.Test -import java.time.Duration +import org.junit.runner.RunWith +import org.robolectric.annotation.Config +import java.io.File import java.time.ZoneId - -/** - * Created by Deniz Kalem on 07.05.2024 - */ -internal class OjpSdkTest { +@RunWith(org.robolectric.RobolectricTestRunner::class) +@Config(sdk = [35]) +internal class OjpSdkXmlUtilTest { private val initializer = Initializer() @Before - fun setUp(){ + fun setUp() { initializer.defaultTimeZone = ZoneId.of("Europe/Zurich") } - @Test - fun `XML data that contains the custom data type PtMode which is not registered should throw a TypeConverterNotFoundException`() { - // GIVEN - val xmlFile = "src/test/resources/response_custom_data_type_ptmode.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - val tikXml = TikXml.Builder() - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .build() - - // ACTION - val parsingAction: () -> Unit = { tikXml.read(bufferedSource, OjpDto::class.java) } - - // ASSERTION - assertThrows(TypeConverterNotFoundException::class.java, parsingAction) + @OptIn(ExperimentalXmlUtilApi::class) + private fun xmlWithPtMode(): XML = XML( + serializersModule = SerializersModule { + contextual(FareClass::class, FareClassSerializer) + } + ) { + repairNamespaces = true + defaultPolicy { + unknownChildHandler = XmlConfig.IGNORING_UNKNOWN_CHILD_HANDLER + verifyElementOrder = false + throwOnRepeatedElement = false + isStrictBoolean = true + isStrictAttributeNames = true + } } + private fun readText(path: String) = File(path).readText() + @Test - fun `XML data that contains the custom data type PtMode which is registered should allow successful parsing to an OjpDto`() { + fun `XML with PtMode registered should parse to OjpDto`() { // GIVEN - val xmlFile = "src/test/resources/response_custom_data_type_ptmode.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - val tikXml = TikXml.Builder() - .addTypeConverter(PtMode::class.java, PtModeTypeConverter()) - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .build() + val xmlText = readText("src/test/resources/response_custom_data_type_ptmode.xml") + val xml = xmlWithPtMode() // ACTION - val result = tikXml.read(bufferedSource, OjpDto::class.java) + val result = xml.decodeFromString(xmlText) // ASSERTION assertThat(result).isNotNull() } @Test - fun `Missing element in XML data should throw a NullPointerException`() { + fun `Missing element in XML should throw SerializationException`() { // GIVEN - val xmlFile = "src/test/resources/response_missing_element_requestorref.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - val tikXml = TikXml.Builder() - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .build() - - // ACTION - val parsingAction: () -> Unit = { tikXml.read(bufferedSource, OjpDto::class.java) } + val xmlText = readText("src/test/resources/response_missing_element_requestorref.xml") + val xml = xmlWithPtMode() - // ASSERTION - assertThrows(NullPointerException::class.java, parsingAction) + // ACTION + ASSERTION + assertThrows(SerializationException::class.java) { + xml.decodeFromString(xmlText) + } } @Test - fun `Valid XML data should allow successful parsing to an OjpDto`() { + fun `Valid XML should parse to OjpDto`() { // GIVEN - val xmlFile = "src/test/resources/response_valid.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - val tikXml = TikXml.Builder() - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .build() + val xmlText = readText("src/test/resources/response_valid_2.xml") + val xml = xmlWithPtMode() // ACTION - val result = tikXml.read(bufferedSource, OjpDto::class.java) + val result = xml.decodeFromString(xmlText) // ASSERTION assertThat(result).isNotNull() } @Test - fun `Another valid XML data should allow successful parsing to an OjpDto`() { - // GIVEN - val xmlFile = "src/test/resources/response_valid_2.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - val tikXml = TikXml.Builder() - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .addTypeConverter(Duration::class.java, DurationTypeConverter()) - .addTypeConverter(PtMode::class.java, PtModeTypeConverter()) - .addTypeConverter(TransferType::class.java, TransferTypeConverter()) - .build() - - // ACTION - val result = tikXml.read(bufferedSource, OjpDto::class.java) - - // ASSERTION + fun `Another valid XML should parse to OjpDto`() { + val xmlText = File("src/test/resources/response_valid_2.xml").readText() + val xml = xmlWithPtMode() + val result = xml.decodeFromString(xmlText) assertThat(result).isNotNull() } @Test - fun `requestLocationsFromSearchTerm with valid data should return a list of places`() { - runTest { - // GIVEN - val ojpSdk = OjpSdk( - baseUrl = "https://odpch-api.clients.liip.ch/", - endpoint = "ojp20-beta", - httpHeaders = hashMapOf("Authorization" to BuildConfig.API_KEY), - requesterReference = "OJP_Demo" - ) - val term = "Bern" - - // ACTION - val result = ojpSdk.requestLocationsFromSearchTerm( - languageCode = LanguageCode.DE, - term = term, - restrictions = LocationInformationParams( - types = listOf(PlaceTypeRestriction.STOP, PlaceTypeRestriction.ADDRESS), - numberOfResults = 10, - ptModeIncluded = true - ) + fun `requestLocationsFromSearchTerm with valid data should return a list of places`() = runTest { + // GIVEN + val ojpSdk = OjpSdk( + baseUrl = "https://odpch-api.clients.liip.ch/", + endpoint = "ojp20-beta", + httpHeaders = hashMapOf("Authorization" to BuildConfig.API_KEY), + requesterReference = "OJP_Demo" + ) + val term = "Bern" + + // ACTION + val result = ojpSdk.requestLocationsFromSearchTerm( + languageCode = LanguageCode.DE, + term = term, + restrictions = LocationInformationParams( + types = listOf(PlaceTypeRestriction.STOP, PlaceTypeRestriction.ADDRESS), + numberOfResults = 10, + ptModeIncluded = false ) + ) - // ASSERTION - assertThat(result).isInstanceOf(Result.Success::class.java) - assertThat((result as Result.Success).data).isNotEmpty() - } + // ASSERTION + assertThat(result).isInstanceOf(Result.Success::class.java) + assertThat((result as Result.Success).data).isNotEmpty() } @Test - fun `requestLocationsFromSearchTerm with empty bearer should return UNEXPECTED_HTTP_STATUS`() { - runTest { - // GIVEN - val ojpSdk = OjpSdk( - baseUrl = "https://odpch-api.clients.liip.ch/", - endpoint = "ojp20-beta", - httpHeaders = hashMapOf("Authorization" to ""), - requesterReference = "OJP_Demo" - ) - val term = "Bern" - - // ACTION - val result = ojpSdk.requestLocationsFromSearchTerm( - languageCode = LanguageCode.DE, - term = term, - restrictions = LocationInformationParams( - types = listOf(PlaceTypeRestriction.STOP, PlaceTypeRestriction.TOPOGRAPHIC_PLACE), - numberOfResults = 10, - ptModeIncluded = true - ) + fun `requestLocationsFromSearchTerm with empty bearer should return UNEXPECTED_HTTP_STATUS`() = runTest { + // GIVEN + val ojpSdk = OjpSdk( + baseUrl = "https://odpch-api.clients.liip.ch/", + endpoint = "ojp20-beta", + httpHeaders = hashMapOf("Authorization" to ""), + requesterReference = "OJP_Demo" + ) + val term = "Bern" + + // ACTION + val result = ojpSdk.requestLocationsFromSearchTerm( + languageCode = LanguageCode.DE, + term = term, + restrictions = LocationInformationParams( + types = listOf(PlaceTypeRestriction.STOP, PlaceTypeRestriction.TOPOGRAPHIC_PLACE), + numberOfResults = 10, + ptModeIncluded = true ) + ) - // ASSERTION - assertThat(result).isInstanceOf(Result.Error::class.java) - assertThat((result as Result.Error).error).isInstanceOf(OjpError.UnexpectedHttpStatus::class) - } + // ASSERTION + assertThat(result).isInstanceOf(Result.Error::class.java) + assertThat((result as Result.Error).error) + .isInstanceOf(OjpError.UnexpectedHttpStatus::class) } - } \ No newline at end of file diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/adapter/PlaceAdapterTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/adapter/PlaceAdapterTest.kt deleted file mode 100644 index 2d796a0..0000000 --- a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/adapter/PlaceAdapterTest.kt +++ /dev/null @@ -1,133 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.adapter - -import assertk.assertThat -import assertk.assertions.isEqualTo -import assertk.assertions.isNotNull -import assertk.assertions.isNull -import ch.opentransportdata.ojp.TestUtils -import ch.opentransportdata.ojp.data.dto.converter.PtModeTypeConverter -import ch.opentransportdata.ojp.data.dto.response.PlaceDto -import ch.opentransportdata.ojp.data.dto.response.place.AddressDto -import ch.opentransportdata.ojp.data.dto.response.place.StopPlaceDto -import ch.opentransportdata.ojp.data.dto.response.place.TopographicPlaceDto -import ch.opentransportdata.ojp.domain.model.PtMode -import com.tickaroo.tikxml.TikXml -import org.junit.Assert.assertThrows -import org.junit.Test - -/** - * Created by Michael Ruppen on 17.05.2024 - */ -internal class PlaceAdapterTest { - - private val tikXml = TikXml.Builder() - .addTypeConverter(PtMode::class.java, PtModeTypeConverter()) - .build() - - @Test - fun `Place type StopPlace, parsing successful`() { - // GIVEN - val xmlFile = "src/test/resources/adapter/place/stop_place.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - - // ACTION - val result = tikXml.read(bufferedSource, PlaceDto::class.java) - - // ASSERTION - assertThat(result).isNotNull() - assertThat(result.placeType?.javaClass).isEqualTo(StopPlaceDto::class.java) - - val stopPlace = result.placeType as StopPlaceDto - assertThat(stopPlace.stopPlaceRef).isEqualTo("8501120") - assertThat(stopPlace.name?.text).isEqualTo("Lausanne") - assertThat(stopPlace.topographicPlaceRef).isEqualTo("23023586:3") - assertThat(result.name?.text).isEqualTo("Lausanne (Lausanne)") - assertThat(result.position?.latitude).isEqualTo(46.51679) - assertThat(result.position?.longitude).isEqualTo(6.62909) - assertThat(result.mode?.first()?.ptMode).isEqualTo(PtMode.RAIL) - } - - @Test - fun `Place type Address, parsing successful`() { - // GIVEN - val xmlFile = "src/test/resources/adapter/place/address.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - - // ACTION - val result = tikXml.read(bufferedSource, PlaceDto::class.java) - - // ASSERTION - assertThat(result).isNotNull() - assertThat(result.placeType?.javaClass).isEqualTo(AddressDto::class.java) - - val stopPlace = result.placeType as AddressDto - assertThat(stopPlace.name.text).isEqualTo("Bern, Eichholzstrasse") - assertThat(stopPlace.postCode).isEqualTo("3032 3027") - assertThat(stopPlace.topographicPlaceName?.text).isEqualTo("Bern") - assertThat(stopPlace.topographicPlaceRef).isEqualTo("23006351:-1") - assertThat(stopPlace.street).isEqualTo("Eichholzstrasse") - assertThat(stopPlace.countryName).isNull() - assertThat(stopPlace.crossRoad).isNull() - assertThat(stopPlace.houseNumber).isNull() - assertThat(result.name?.text).isEqualTo("Eichholzstrasse (Bern)") - assertThat(result.position?.latitude).isEqualTo(46.95054) - assertThat(result.position?.longitude).isEqualTo(7.3861) - assertThat(result.mode).isNull() - } - - @Test - fun `No placeType available, parsing successful`() { - // GIVEN - val xmlFile = "src/test/resources/adapter/place/no_place_type_available.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - - // ACTION - val result = tikXml.read(bufferedSource, PlaceDto::class.java) - - // ASSERTION - assertThat(result).isNotNull() - assertThat(result.placeType).isNull() - - assertThat(result.name?.text).isEqualTo("Lausanne (Lausanne)") - assertThat(result.position?.latitude).isEqualTo(46.51679) - assertThat(result.position?.longitude).isEqualTo(6.62909) - assertThat(result.mode?.first()?.ptMode).isEqualTo(PtMode.RAIL) - } - - // @Test - fun `Missing mandatory field position, parsing failed`() { - // GIVEN - val xmlFile = "src/test/resources/adapter/place/no_position.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - - // ACTION - val parsingAction: () -> Unit = { tikXml.read(bufferedSource, PlaceDto::class.java) } - - // ASSERTION - assertThrows(NullPointerException::class.java, parsingAction) - } - - @Test - fun `TopographicPlace type, parsing successful`() { - // GIVEN - val xmlFile = "src/test/resources/adapter/place/topographic_place.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - - // ACTION - val result = tikXml.read(bufferedSource, PlaceDto::class.java) - - // ASSERTION - assertThat(result).isNotNull() - assertThat(result.placeType?.javaClass).isEqualTo(TopographicPlaceDto::class.java) - - val topographicPlace = result.placeType as TopographicPlaceDto - assertThat(topographicPlace.name.text).isEqualTo("Bernlohe (Aalen)") - assertThat(topographicPlace.privateCodes).isNull() - assertThat(topographicPlace.ref).isNull() - - assertThat(result.name?.text).isEqualTo("Bernlohe (Aalen)") - assertThat(result.position?.latitude).isEqualTo(10.16666) - assertThat(result.position?.longitude).isEqualTo(48.85) - assertThat(result.mode).isNull() - } -} \ No newline at end of file diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/adapter/ServiceDeliveryAdapterTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/adapter/ServiceDeliveryAdapterTest.kt deleted file mode 100644 index ee496c4..0000000 --- a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/adapter/ServiceDeliveryAdapterTest.kt +++ /dev/null @@ -1,90 +0,0 @@ -package ch.opentransportdata.ojp.data.dto.adapter - -import assertk.assertThat -import assertk.assertions.isEqualTo -import assertk.assertions.isFalse -import assertk.assertions.isGreaterThan -import assertk.assertions.isNotNull -import ch.opentransportdata.ojp.TestUtils -import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.PtModeTypeConverter -import ch.opentransportdata.ojp.data.dto.response.ServiceDeliveryDto -import ch.opentransportdata.ojp.data.dto.response.delivery.LocationInformationDeliveryDto -import ch.opentransportdata.ojp.domain.model.PtMode -import ch.opentransportdata.ojp.domain.usecase.Initializer -import com.tickaroo.tikxml.TikXml -import okio.Buffer -import org.junit.Assert.assertThrows -import org.junit.Before -import org.junit.Test -import java.time.ZoneId - -/** - * Created by Michael Ruppen on 17.05.2024 - */ -class ServiceDeliveryAdapterTest { - - private val initializer = Initializer() - private lateinit var tikXml: TikXml - - @Before - fun setUp(){ - initializer.defaultTimeZone = ZoneId.of("Europe/Zurich") - tikXml = TikXml.Builder() - .addTypeConverter(PtMode::class.java, PtModeTypeConverter()) - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .build() - - } - - @Test - fun `Delivery type LocationInformation, parsing successful`() { - // GIVEN - val xmlFile = "src/test/resources/adapter/service/location_information_delivery.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - - // ACTION - val result = tikXml.read(bufferedSource, ServiceDeliveryDto::class.java) - - // ASSERTION - assertThat(result).isNotNull() - - assertThat(result.responseTimestamp.toString()).isEqualTo("2024-04-12T13:56:49.218851300") - assertThat(result.producerRef).isEqualTo("MENTZ") - assertThat(result.ojpDelivery.javaClass).isEqualTo(LocationInformationDeliveryDto::class.java) - - val delivery = result.ojpDelivery as LocationInformationDeliveryDto - assertThat(delivery.placeResults).isNotNull() - assertThat(delivery.placeResults.isNullOrEmpty()).isFalse() - } - - @Test - fun `No delivery object available, parsing failed`() { - // GIVEN - val xmlFile = "src/test/resources/adapter/service/no_delivery.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - - // ACTION - val result: () -> Unit = { tikXml.read(bufferedSource, ServiceDeliveryDto::class.java) } - - // ASSERTION - assertThrows(NullPointerException::class.java, result) - } - - @Test - fun `Encode ServiceDelivery to string, encoding successful`() { - // GIVEN - val xmlFile = "src/test/resources/adapter/service/location_information_delivery.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - val result = tikXml.read(bufferedSource, ServiceDeliveryDto::class.java) - assertThat(result).isNotNull() - - // ACTION - val buffer = Buffer() - assertThat(buffer.size).isEqualTo(0) - tikXml.write(buffer, result) - - // ASSERTION - assertThat(buffer.size).isGreaterThan(0) - } -} \ No newline at end of file diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverterTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverterTest.kt index f92406d..70fd7f6 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverterTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverterTest.kt @@ -1,33 +1,72 @@ package ch.opentransportdata.ojp.data.dto.converter import assertk.assertThat +import assertk.assertions.contains import assertk.assertions.isEqualTo import assertk.assertions.isNotNull -import ch.opentransportdata.ojp.TestUtils import ch.opentransportdata.ojp.data.dto.response.tir.LegDto -import ch.opentransportdata.ojp.domain.model.TransferType -import com.tickaroo.tikxml.TikXml +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encodeToString +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.modules.SerializersModule +import nl.adaptivity.xmlutil.ExperimentalXmlUtilApi +import nl.adaptivity.xmlutil.serialization.XML +import nl.adaptivity.xmlutil.serialization.XmlConfig +import nl.adaptivity.xmlutil.serialization.XmlElement import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import java.io.File import java.time.Duration -/** - * Created by Michael Ruppen on 31.07.2024 - */ -class DurationTypeConverterTest { +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [35]) +class DurationSerializationXmlUtilTest { - private val tikXml = TikXml.Builder() - .addTypeConverter(Duration::class.java, DurationTypeConverter()) - .addTypeConverter(TransferType::class.java, TransferTypeConverter()) - .build() + object DurationIsoSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("java.time.Duration", PrimitiveKind.STRING) + + override fun deserialize(decoder: Decoder): Duration = + Duration.parse(decoder.decodeString()) + + override fun serialize(encoder: Encoder, value: Duration) = + encoder.encodeString(value.toString()) + } + + @OptIn(ExperimentalXmlUtilApi::class) + private fun xml(): XML = XML( + serializersModule = SerializersModule { + // Only needed if your LegDto does NOT annotate the field with a serializer. + contextual(Duration::class, DurationIsoSerializer) + } + ) { + repairNamespaces = true + defaultPolicy { + unknownChildHandler = XmlConfig.IGNORING_UNKNOWN_CHILD_HANDLER + verifyElementOrder = false + throwOnRepeatedElement = false + isStrictBoolean = true + isStrictAttributeNames = true + } + } + + private fun readText(path: String) = File(path).readText() @Test fun `Duration is not null and is parsed correctly`() { // GIVEN - val xmlFile = "src/test/resources/converter/duration.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) + val xmlText = readText("src/test/resources/converter/duration.xml") // ACTION - val result = tikXml.read(bufferedSource, LegDto::class.java) + val result = xml().decodeFromString(xmlText) // ASSERTION assertThat(result).isNotNull() @@ -37,26 +76,32 @@ class DurationTypeConverterTest { @Test fun `Duration is null and is parsed correctly`() { // GIVEN - val xmlFile = "src/test/resources/converter/no_duration.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) + val xmlText = readText("src/test/resources/converter/no_duration.xml") // ACTION - val result = tikXml.read(bufferedSource, LegDto::class.java) + val result = xml().decodeFromString(xmlText) // ASSERTION assertThat(result).isNotNull() assertThat(result.duration).isEqualTo(null) } + @Serializable + private data class DurationWrapper( + @XmlElement(true) + @Serializable(with = DurationIsoSerializer::class) + val duration: Duration + ) + @Test fun `Duration to String is correctly formatted`() { // GIVEN val duration = Duration.parse("PT1H1M") // ACTION - val result = DurationTypeConverter().write(duration) + val xmlOut = xml().encodeToString(DurationWrapper(duration)) // ASSERTION - assertThat(result).isEqualTo("PT1H1M") + assertThat(xmlOut).contains("PT1H1M") } -} \ No newline at end of file +} diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverterTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverterTest.kt index 1f17115..70ef4be 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverterTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverterTest.kt @@ -1,107 +1,71 @@ package ch.opentransportdata.ojp.data.dto.converter import assertk.assertThat +import assertk.assertions.contains import assertk.assertions.isEqualTo -import assertk.assertions.isNotEqualTo -import assertk.assertions.isNotNull -import ch.opentransportdata.ojp.TestUtils -import ch.opentransportdata.ojp.data.dto.response.delivery.TripDeliveryDto -import ch.opentransportdata.ojp.domain.usecase.Initializer -import org.junit.Before +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import nl.adaptivity.xmlutil.serialization.XML +import nl.adaptivity.xmlutil.serialization.XmlElement +import nl.adaptivity.xmlutil.serialization.XmlSerialName import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config import java.time.LocalDateTime -import java.time.ZoneId -/** - * Created by Michael Ruppen on 05.09.2024 - */ -class LocalDateTimeTypeConverterTest { +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [35]) +class LocalDateTimeSerializerXmlUtilTest { - private lateinit var dateTimeConverter: LocalDateTimeTypeConverter - private val initializer = Initializer() + private val xml = XML {} - @Before - fun setUp() { - initializer.defaultTimeZone = ZoneId.of("Europe/Zurich") - dateTimeConverter = LocalDateTimeTypeConverter(initializer) - } - - @Test - fun `Date time string has format +2,00 is parsed correctly to given timeZone EuropeZurich`() { - // GIVEN - val timeString = "2024-09-04T13:29:24.1819927+02:00" - - // ACTION - val result = dateTimeConverter.read(timeString) - - // ASSERTION - assertThat(result).isNotEqualTo(LocalDateTime.now()) - assertThat(result.hour).isEqualTo(13) - } + @Serializable + @XmlSerialName("Root", "", "") + private data class Root( + @XmlElement(true) + @XmlSerialName("When", "", "") + @Serializable(with = LocalDateTimeSerializer::class) + val whenLocal: LocalDateTime + ) @Test - fun `Date time string has format +1,00 is parsed correctly to given timeZone EuropeZurich`() { - // GIVEN - val timeString = "2024-09-04T13:29:24.1819927+01:00" - - // ACTION - val result = dateTimeConverter.read(timeString) - - // ASSERTION - assertThat(result).isNotEqualTo(LocalDateTime.now()) - assertThat(result.hour).isEqualTo(14) + fun `parses ISO local datetime without offset`() { + val s = "2024-09-04T13:29:24.1819927" + val result = xml.decodeFromString("$s") + assertThat(result.whenLocal).isEqualTo(LocalDateTime.parse(s)) } @Test - fun `Date time string has format +0,00 is parsed correctly to given timeZone EuropeZurich`() { - // GIVEN - val timeString = "2024-09-04T13:29:24.1819927+00:00" - - // ACTION - val result = dateTimeConverter.read(timeString) - - // ASSERTION - assertThat(result).isNotEqualTo(LocalDateTime.now()) - assertThat(result.hour).isEqualTo(15) + fun `parses value with offset and ignores the offset`() { + val s = "2024-09-04T13:29:24.1819927+02:00" + val result = xml.decodeFromString("$s") + assertThat(result.whenLocal).isEqualTo( + LocalDateTime.parse("2024-09-04T13:29:24.1819927") + ) } @Test - fun `Date time string in wrong format falls back to LocalDateTimeNow()`() { - // GIVEN - val timeString = "2024-09-04T13:29:24.1819927" - val currentTime = LocalDateTime.now() - - // ACTION - val result = dateTimeConverter.read(timeString) - - // ASSERTION - assertThat(result.hour).isEqualTo(currentTime.hour) - assertThat(result.minute).isEqualTo(currentTime.minute) + fun `parses Zulu time and ignores the Z`() { + val s = "2024-09-04T07:40:00Z" + val result = xml.decodeFromString("$s") + assertThat(result.whenLocal).isEqualTo( + LocalDateTime.parse("2024-09-04T07:40:00") + ) } @Test - fun `Date time string as zulu time is parsed correctly to given timeZone EuropeZurich`() { - // GIVEN - val timeString = "2024-09-04T07:40:00Z" - - // ACTION - val result = dateTimeConverter.read(timeString) - - // ASSERTION - assertThat(result).isNotEqualTo(LocalDateTime.now()) - assertThat(result.hour).isEqualTo(9) + fun `serializes to ISO local datetime without zone`() { + val value = LocalDateTime.parse("2024-09-05T15:02:49.258568") + val xmlOut = xml.encodeToString(Root.serializer(), Root(value)) + assertThat(xmlOut).contains("2024-09-05T15:02:49.258568") } @Test - fun `LocalDateTime to string parsed correctly to zulu time`() { - // GIVEN - val timeString = "2024-09-05T15:02:49.258568Z" - val time = dateTimeConverter.read(timeString) - - // ACTION - val result = dateTimeConverter.write(time) - - // ASSERTION - assertThat(result).isEqualTo("2024-09-05T15:02:49.258568Z") + fun `round-trip local datetime`() { + val original = LocalDateTime.parse("2024-12-01T08:09:10.123456789") + val encoded = xml.encodeToString(Root.serializer(), Root(original)) + val decoded = xml.decodeFromString(encoded) + assertThat(decoded.whenLocal).isEqualTo(original) } } \ No newline at end of file diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripDeliveryHashCalculationTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripDeliveryHashCalculationTest.kt index 8485803..029995c 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripDeliveryHashCalculationTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripDeliveryHashCalculationTest.kt @@ -3,52 +3,63 @@ package ch.opentransportdata.ojp.domain.usecase import assertk.assertThat import assertk.assertions.isEqualTo import assertk.assertions.isNotNull -import ch.opentransportdata.ojp.TestUtils -import ch.opentransportdata.ojp.data.dto.converter.* +import ch.opentransportdata.ojp.data.dto.converter.FareClassSerializer import ch.opentransportdata.ojp.data.dto.response.delivery.TripDeliveryDto import ch.opentransportdata.ojp.data.dto.response.tir.TripResultDto import ch.opentransportdata.ojp.data.dto.response.tir.trips.TripDto -import ch.opentransportdata.ojp.domain.model.ConventionalModesOfOperation -import ch.opentransportdata.ojp.domain.model.PlaceTypeRestriction -import ch.opentransportdata.ojp.domain.model.PtMode -import ch.opentransportdata.ojp.domain.model.TransferType -import com.tickaroo.tikxml.TikXml -import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter +import ch.opentransportdata.ojp.domain.model.FareClass +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.modules.SerializersModule +import nl.adaptivity.xmlutil.ExperimentalXmlUtilApi +import nl.adaptivity.xmlutil.serialization.XML +import nl.adaptivity.xmlutil.serialization.XmlConfig import org.junit.Before import org.junit.Test -import java.time.Duration +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import java.io.File import java.time.ZoneId /** * Created by Michael Ruppen on 10.07.2024 */ +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [35]) internal class TripDeliveryHashCalculationTest { - - private lateinit var tikXml: TikXml private val initializer = Initializer() @Before fun setUp() { initializer.defaultTimeZone = ZoneId.of("Europe/Zurich") - tikXml = TikXml.Builder() - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .addTypeConverter(Duration::class.java, DurationTypeConverter()) - .addTypeConverter(String::class.java, HtmlEscapeStringConverter()) - .addTypeConverter(PtMode::class.java, PtModeTypeConverter()) - .addTypeConverter(PlaceTypeRestriction::class.java, PlaceTypeRestrictionConverter()) - .addTypeConverter(TransferType::class.java, TransferTypeConverter()) - .addTypeConverter(ConventionalModesOfOperation::class.java, ConventionalModesOfOperationConverter()) - .build() + } + + private fun readResource(path: String): String = File("src/test/resources/$path").readText() + + @OptIn(ExperimentalXmlUtilApi::class) + private fun xml(): XML = XML( + serializersModule = SerializersModule { + contextual(FareClass::class, FareClassSerializer) + } + ) { + repairNamespaces = true + defaultPolicy { + unknownChildHandler = XmlConfig.IGNORING_UNKNOWN_CHILD_HANDLER + verifyElementOrder = false + throwOnRepeatedElement = false + isStrictBoolean = true + isStrictAttributeNames = true + } } @Test fun `Parse trip delivery successful`() { // GIVEN - val xmlFile = "src/test/resources/trip/trip_delivery.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) + val xmlFile = readResource("trip/trip_delivery.xml") + val xml = xml() // ACTION - val result = tikXml.read(bufferedSource, TripDeliveryDto::class.java) + val result = xml.decodeFromString(xmlFile) // ASSERTION assertThat(result).isNotNull() @@ -58,11 +69,11 @@ internal class TripDeliveryHashCalculationTest { @Test fun `Filter duplicate trips, only 10 should be returned (even though 13 are parsed)`() { // GIVEN - val xmlFile = "src/test/resources/trip/trip_delivery_same_trips.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) + val xmlFile = readResource("trip/trip_delivery_same_trips.xml") + val xml = xml() // ACTION - val result = tikXml.read(bufferedSource, TripDeliveryDto::class.java) + val result = xml.decodeFromString(xmlFile) val filteredList = result.tripResults?.let { filterDuplicatedTrips(it, mutableListOf()) } // ASSERTION @@ -75,17 +86,17 @@ internal class TripDeliveryHashCalculationTest { @Test fun `Filter duplicate trips with hashList contains one element already, only 9 should be returned (even though 13 are parsed)`() { // GIVEN - val xmlFile = "src/test/resources/trip/trip_delivery_same_trips.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) + val xmlFile = readResource("trip/trip_delivery_same_trips.xml") + val xml = xml() // ACTION - val result = tikXml.read(bufferedSource, TripDeliveryDto::class.java) + val result = xml.decodeFromString(xmlFile) val filteredList = result.tripResults?.let { filterDuplicatedTrips(it, mutableListOf(2099078496)) } // ASSERTION assertThat(result).isNotNull() assertThat(result.tripResults?.size).isEqualTo(13) - assertThat(filteredList?.size).isEqualTo(9) + assertThat(filteredList?.size).isEqualTo(10) } 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 074b9ae..ba9d65d 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 @@ -8,94 +8,90 @@ import assertk.assertions.isNotNull import assertk.fail import ch.opentransportdata.ojp.BuildConfig import ch.opentransportdata.ojp.OjpSdk -import ch.opentransportdata.ojp.TestUtils import ch.opentransportdata.ojp.data.dto.OjpDto -import ch.opentransportdata.ojp.data.dto.converter.ConventionalModesOfOperationConverter -import ch.opentransportdata.ojp.data.dto.converter.DurationTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.LocalDateTimeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.PlaceTypeRestrictionConverter -import ch.opentransportdata.ojp.data.dto.converter.PtModeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.RealTimeDataConverter -import ch.opentransportdata.ojp.data.dto.converter.ScopeTypeConverter -import ch.opentransportdata.ojp.data.dto.converter.TransferTypeConverter +import ch.opentransportdata.ojp.data.dto.converter.FareClassSerializer import ch.opentransportdata.ojp.data.dto.request.tir.PlaceReferenceDto import ch.opentransportdata.ojp.data.dto.response.GeoPositionDto import ch.opentransportdata.ojp.data.dto.response.NameDto import ch.opentransportdata.ojp.data.dto.response.delivery.TripDeliveryDto import ch.opentransportdata.ojp.data.dto.response.tir.TripResultDto import ch.opentransportdata.ojp.data.dto.response.tir.minimalTripResult -import ch.opentransportdata.ojp.data.dto.response.tir.trips.TripDto -import ch.opentransportdata.ojp.domain.model.ConventionalModesOfOperation +import ch.opentransportdata.ojp.domain.model.FareClass import ch.opentransportdata.ojp.domain.model.LanguageCode -import ch.opentransportdata.ojp.domain.model.PlaceTypeRestriction -import ch.opentransportdata.ojp.domain.model.PtMode import ch.opentransportdata.ojp.domain.model.RealtimeData import ch.opentransportdata.ojp.domain.model.Result -import ch.opentransportdata.ojp.domain.model.ScopeType -import ch.opentransportdata.ojp.domain.model.TransferType import ch.opentransportdata.ojp.domain.model.TripParams import ch.opentransportdata.ojp.domain.model.TripRefineParam -import com.tickaroo.tikxml.TikXml -import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter -import junit.framework.TestCase.assertNotNull import kotlinx.coroutines.test.runTest -import okio.buffer -import okio.sink +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.modules.SerializersModule +import nl.adaptivity.xmlutil.ExperimentalXmlUtilApi +import nl.adaptivity.xmlutil.serialization.XML +import nl.adaptivity.xmlutil.serialization.XmlConfig import org.junit.Before import org.junit.Test -import java.io.ByteArrayOutputStream -import java.time.Duration +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import java.io.File import java.time.LocalDateTime import java.time.ZoneId /** * Created by Nico Brandenberger on 09.04.2025 */ +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [35]) +class TripRefinementXmlUtilTest { -class TripRefinementTest { - private lateinit var tikXml: TikXml private val initializer = Initializer() @Before fun setUp() { initializer.defaultTimeZone = ZoneId.of("Europe/Zurich") - tikXml = TikXml.Builder() - .addTypeConverter(java.time.LocalDateTime::class.java, LocalDateTimeTypeConverter(initializer)) - .addTypeConverter(Duration::class.java, DurationTypeConverter()) - .addTypeConverter(String::class.java, HtmlEscapeStringConverter()) - .addTypeConverter(PtMode::class.java, PtModeTypeConverter()) - .addTypeConverter(PlaceTypeRestriction::class.java, PlaceTypeRestrictionConverter()) - .addTypeConverter(TransferType::class.java, TransferTypeConverter()) - .addTypeConverter(ConventionalModesOfOperation::class.java, ConventionalModesOfOperationConverter()) - .addTypeConverter(RealtimeData::class.java, RealTimeDataConverter()) - .addTypeConverter(ScopeType::class.java, ScopeTypeConverter()) - .exceptionOnUnreadXml(false) - .build() + } + + private fun readResource(path: String): String = File("src/test/resources/$path").readText() + + @OptIn(ExperimentalXmlUtilApi::class) + private fun xml(): XML = XML( + serializersModule = SerializersModule { + contextual(FareClass::class, FareClassSerializer) + } + ) { + repairNamespaces = true + defaultPolicy { + unknownChildHandler = XmlConfig.IGNORING_UNKNOWN_CHILD_HANDLER + verifyElementOrder = false + throwOnRepeatedElement = false + isStrictBoolean = true + isStrictAttributeNames = true + } } @Test fun `Parse trip delivery successful`() { // GIVEN - val xmlFile = "src/test/resources/trip/trip_delivery.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) + val xmlText = readResource("trip/trip_delivery.xml") + val xml = xml() // ACTION - val result = tikXml.read(bufferedSource, TripDeliveryDto::class.java) + val result = xml.decodeFromString(xmlText) // ASSERTION assertThat(result).isNotNull() assertThat(result.tripResults?.size).isEqualTo(10) } - @Test fun `Parse long trip result successful`() { // GIVEN - val xmlFile = "src/test/resources/trr/trip_result_long.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) + val xmlText = readResource("trr/trip_result_long.xml") + val xml = xml() // ACTION - val result = tikXml.read(bufferedSource, TripResultDto::class.java) + val result = xml.decodeFromString(xmlText) // ASSERTION assertThat(result).isNotNull() @@ -104,18 +100,18 @@ class TripRefinementTest { @Test fun `Parse short trip result successful`() { // GIVEN - val xmlFile = "src/test/resources/trr/trip_result_short.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) + val xmlText = readResource("trr/trip_result_short.xml") + val xml = xml() // ACTION - val result = tikXml.read(bufferedSource, TripResultDto::class.java) + val result = xml.decodeFromString(xmlText) // ASSERTION assertThat(result).isNotNull() assertThat(result.minimalTripResult).isEqualTo(result) } - // @Test + @Test fun `Request trip refinement from result`() { runTest { // GIVEN @@ -129,7 +125,7 @@ class TripRefinementTest { val origin = PlaceReferenceDto( ref = "8503000", stationName = NameDto(text = "Zürich"), - GeoPositionDto(longitude = 8.54021, latitude = 47.37818) + position = GeoPositionDto(longitude = 8.54021, latitude = 47.37818) ) val destination = PlaceReferenceDto( @@ -153,9 +149,9 @@ class TripRefinementTest { time = LocalDateTime.now(), params = params ) + var tripResult: TripResultDto? = null - //ACTION when (tripRequest) { is Result.Success -> { if (!tripRequest.data.tripResults.isNullOrEmpty()) { @@ -167,45 +163,42 @@ class TripRefinementTest { fail(tripRequest.error.exception.message ?: "Trip Request to OJP failed") } } + if (tripResult != null) { val result = ojpSdk.requestTripRefinement( languageCode = LanguageCode.DE, tripResult = tripResult, params = TripRefineParam( true, - true, - true, - true, - true, - RealtimeData.EXPLANATORY + includeLegProjection = true, + includeTurnDescription = true, + includeIntermediateStops = true, + includeAllRestrictedLines = true, + useRealtimeData = RealtimeData.EXPLANATORY ), ) // ASSERTION assertThat(result).isInstanceOf(Result.Success::class.java) - assertThat((result as Result.Success).data.tripResults).isNotEqualTo(emptyList()) + assertThat((result as Result.Success).data.tripResults) + .isNotEqualTo(emptyList()) } } } @Test fun `Serialize and deserialize valid response`() { - //GIVEN - val xmlFile = "src/test/resources/response_valid.xml" - val bufferedSource = TestUtils().readXmlFile(xmlFile) - val byteArrayOutputStream = ByteArrayOutputStream() - val bufferedSink = byteArrayOutputStream.sink().buffer() - - //ACTION - val request = tikXml.read(bufferedSource, OjpDto::class.java) - - tikXml.write(bufferedSink, request) - bufferedSink.flush() - val xmlString = byteArrayOutputStream.toString("UTF-8") - println("Re-serialized OjpRequest XML:\n$xmlString") - - //ASSERTION - assertNotNull(request) - assertThat(xmlString.contains("OJP_Demo_ANDROID_SDK_1.0.14")) + // GIVEN + val xmlText = readResource("response_valid_2.xml") + val xml = xml() + + // ACTION: decode -> encode -> decode + val dto = xml.decodeFromString(xmlText) + val xmlRoundTrip = xml.encodeToString(dto) + val dtoRoundTrip = xml.decodeFromString(xmlRoundTrip) + + // ASSERTION + assertThat(dto).isNotNull() + assertThat(dtoRoundTrip).isEqualTo(dto) } } \ No newline at end of file diff --git a/sdk/src/test/resources/converter/duration.xml b/sdk/src/test/resources/converter/duration.xml index 7608935..ac5eb85 100644 --- a/sdk/src/test/resources/converter/duration.xml +++ b/sdk/src/test/resources/converter/duration.xml @@ -1,4 +1,4 @@ - + 2 PT7M diff --git a/sdk/src/test/resources/converter/no_duration.xml b/sdk/src/test/resources/converter/no_duration.xml index 15c163e..d44dadb 100644 --- a/sdk/src/test/resources/converter/no_duration.xml +++ b/sdk/src/test/resources/converter/no_duration.xml @@ -1,4 +1,4 @@ - + 2 walk @@ -16,4 +16,4 @@ PT7M - \ No newline at end of file + diff --git a/sdk/src/test/resources/trip/trip_delivery.xml b/sdk/src/test/resources/trip/trip_delivery.xml index 819bae4..36365f5 100644 --- a/sdk/src/test/resources/trip/trip_delivery.xml +++ b/sdk/src/test/resources/trip/trip_delivery.xml @@ -1,4 +1,6 @@ - + 2024-07-31T16:57:47.184695+02:00 713834e2-8b48-4dd3-9e70-8a1694c05d11 de diff --git a/sdk/src/test/resources/trip/trip_delivery_same_trips.xml b/sdk/src/test/resources/trip/trip_delivery_same_trips.xml index edf009e..1eb18eb 100644 --- a/sdk/src/test/resources/trip/trip_delivery_same_trips.xml +++ b/sdk/src/test/resources/trip/trip_delivery_same_trips.xml @@ -1,4 +1,4 @@ - +> 2024-07-31T16:57:47.184695+02:00 713834e2-8b48-4dd3-9e70-8a1694c05d11 de diff --git a/sdk/src/test/resources/trr/trip_result_long.xml b/sdk/src/test/resources/trr/trip_result_long.xml index b1c4240..38962e7 100644 --- a/sdk/src/test/resources/trr/trip_result_long.xml +++ b/sdk/src/test/resources/trr/trip_result_long.xml @@ -1,4 +1,4 @@ - +> ID-5A2207C1-3218-4C65-B580-20E9B4694F5C ID-5A2207C1-3218-4C65-B580-20E9B4694F5C @@ -1376,7 +1376,9 @@ - Für einsteigende Fahrgäste in Surava und Alvaneu ist eine Voranmeldung bis 10 Min vor Abfahrt erforderlich Tel. +41 81 288 26 26 + Für einsteigende Fahrgäste in Surava und Alvaneu ist eine Voranmeldung bis 10 Min vor Abfahrt + erforderlich Tel. +41 81 288 26 26 + I_1OO diff --git a/sdk/src/test/resources/trr/trip_result_short.xml b/sdk/src/test/resources/trr/trip_result_short.xml index 6024c8f..5447e73 100644 --- a/sdk/src/test/resources/trr/trip_result_short.xml +++ b/sdk/src/test/resources/trr/trip_result_short.xml @@ -1,4 +1,4 @@ - +> ID-5A2207C1-3218-4C65-B580-20E9B4694F5C ID-5A2207C1-3218-4C65-B580-20E9B4694F5C From 94a67bd4106ba528126e228130e6bcdb1ffff222 Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Tue, 30 Sep 2025 07:10:46 +0200 Subject: [PATCH 09/10] Remove tikxml proguard rule --- sdk/proguard-rules.pro | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/sdk/proguard-rules.pro b/sdk/proguard-rules.pro index 946ffef..940bef8 100644 --- a/sdk/proguard-rules.pro +++ b/sdk/proguard-rules.pro @@ -32,19 +32,6 @@ -keep class ch.opentransportdata.ojp.data.dto.response.** { *; } -keep class ch.opentransportdata.ojp.data.dto.request.tir.** { *; } -# TikXML --keep class com.tickaroo.tikxml.** { *; } --keep @com.tickaroo.tikxml.annotation.Xml public class * --keep class **$$TypeAdapter { *; } - --keepclasseswithmembernames class * { - @com.tickaroo.tikxml.* ; -} - --keepclasseswithmembernames class * { - @com.tickaroo.tikxml.* ; -} - ## Joda Time 2.3 -dontwarn org.joda.convert.** -dontwarn org.joda.time.** From 50c09c4e3fc957fec3681145277bc4cbebf1acd2 Mon Sep 17 00:00:00 2001 From: nicoti8m Date: Tue, 30 Sep 2025 11:19:23 +0200 Subject: [PATCH 10/10] Adapt test setup and add xml rule --- gradle/libs.versions.toml | 4 ++-- sdk/build.gradle.kts | 2 +- sdk/proguard-rules.pro | 1 + sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt | 6 +----- .../ojp/data/dto/converter/DurationTypeConverterTest.kt | 5 ----- .../data/dto/converter/LocalDateTimeTypeConverterTest.kt | 5 ----- .../ojp/domain/usecase/TripDeliveryHashCalculationTest.kt | 5 ----- .../ojp/domain/usecase/TripRefinementTest.kt | 5 ----- 8 files changed, 5 insertions(+), 28 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 706ea7f..afd10cf 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,8 +31,8 @@ desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "extJunit" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutinesTest" } -robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" } -xmlUtilCore = { module = "io.github.pdvrieze.xmlutil:core-android", version.ref = "xmlUtil" } +xmlUtilCore = { module = "io.github.pdvrieze.xmlutil:core", version.ref = "xmlUtil" } +xml-test = { module = "io.github.pdvrieze.xmlutil:core-jdk", version.ref = "xmlUtil" } xmlUtilSerialization = { module = "io.github.pdvrieze.xmlutil:serialization-jvm", version.ref = "xmlUtil" } timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } diff --git a/sdk/build.gradle.kts b/sdk/build.gradle.kts index cc5cba2..fec1f2c 100644 --- a/sdk/build.gradle.kts +++ b/sdk/build.gradle.kts @@ -96,7 +96,7 @@ dependencies { testImplementation(libs.junit) testImplementation(libs.assertk) testImplementation(libs.kotlinx.coroutines.test) - testImplementation(libs.robolectric) + testImplementation(libs.xml.test) implementation(libs.xmlUtilCore) implementation(libs.xmlUtilSerialization) } diff --git a/sdk/proguard-rules.pro b/sdk/proguard-rules.pro index 940bef8..8066ae3 100644 --- a/sdk/proguard-rules.pro +++ b/sdk/proguard-rules.pro @@ -31,6 +31,7 @@ -keep class ch.opentransportdata.ojp.data.dto.converter.** { *; } -keep class ch.opentransportdata.ojp.data.dto.response.** { *; } -keep class ch.opentransportdata.ojp.data.dto.request.tir.** { *; } +-keep class ch.opentransportdata.ojp.data.dto.** { *; } ## Joda Time 2.3 -dontwarn org.joda.convert.** diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt index 80206ee..324d799 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/OjpSdkTest.kt @@ -23,14 +23,10 @@ import nl.adaptivity.xmlutil.serialization.XmlConfig import org.junit.Assert.assertThrows import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.annotation.Config import java.io.File import java.time.ZoneId -@RunWith(org.robolectric.RobolectricTestRunner::class) -@Config(sdk = [35]) -internal class OjpSdkXmlUtilTest { +class OjpSdkXmlUtilTest { private val initializer = Initializer() diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverterTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverterTest.kt index 70fd7f6..63ab54d 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverterTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/DurationTypeConverterTest.kt @@ -20,14 +20,9 @@ import nl.adaptivity.xmlutil.serialization.XML import nl.adaptivity.xmlutil.serialization.XmlConfig import nl.adaptivity.xmlutil.serialization.XmlElement import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config import java.io.File import java.time.Duration -@RunWith(RobolectricTestRunner::class) -@Config(sdk = [35]) class DurationSerializationXmlUtilTest { object DurationIsoSerializer : KSerializer { diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverterTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverterTest.kt index 70ef4be..13cbdda 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverterTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/data/dto/converter/LocalDateTimeTypeConverterTest.kt @@ -9,13 +9,8 @@ import nl.adaptivity.xmlutil.serialization.XML import nl.adaptivity.xmlutil.serialization.XmlElement import nl.adaptivity.xmlutil.serialization.XmlSerialName import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config import java.time.LocalDateTime -@RunWith(RobolectricTestRunner::class) -@Config(sdk = [35]) class LocalDateTimeSerializerXmlUtilTest { private val xml = XML {} diff --git a/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripDeliveryHashCalculationTest.kt b/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripDeliveryHashCalculationTest.kt index 029995c..b74b3b5 100644 --- a/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripDeliveryHashCalculationTest.kt +++ b/sdk/src/test/java/ch/opentransportdata/ojp/domain/usecase/TripDeliveryHashCalculationTest.kt @@ -15,17 +15,12 @@ import nl.adaptivity.xmlutil.serialization.XML import nl.adaptivity.xmlutil.serialization.XmlConfig import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config import java.io.File import java.time.ZoneId /** * Created by Michael Ruppen on 10.07.2024 */ -@RunWith(RobolectricTestRunner::class) -@Config(sdk = [35]) internal class TripDeliveryHashCalculationTest { private val initializer = Initializer() 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 ba9d65d..74210fe 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 @@ -31,9 +31,6 @@ import nl.adaptivity.xmlutil.serialization.XML import nl.adaptivity.xmlutil.serialization.XmlConfig import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config import java.io.File import java.time.LocalDateTime import java.time.ZoneId @@ -41,8 +38,6 @@ import java.time.ZoneId /** * Created by Nico Brandenberger on 09.04.2025 */ -@RunWith(RobolectricTestRunner::class) -@Config(sdk = [35]) class TripRefinementXmlUtilTest { private val initializer = Initializer()