From 535ec34a50324672179ef9f91a48d561857c04e6 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Tue, 3 Dec 2024 09:30:53 +0100 Subject: [PATCH 1/8] Added hint for dataclasses Signed-off-by: Arnau Mora Gras --- src/main/kotlin/at/bitfire/dav4jvm/Property.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/at/bitfire/dav4jvm/Property.kt b/src/main/kotlin/at/bitfire/dav4jvm/Property.kt index 8d1aba5..73a0a87 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/Property.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/Property.kt @@ -7,17 +7,19 @@ package at.bitfire.dav4jvm import at.bitfire.dav4jvm.exception.InvalidPropertyException -import org.xmlpull.v1.XmlPullParser import java.io.Serializable import java.util.LinkedList import java.util.logging.Level import java.util.logging.Logger +import org.xmlpull.v1.XmlPullParser /** * Represents a WebDAV property. * * Every [Property] must define a static field (use `@JvmStatic`) called `NAME` of type [Property.Name], * which will be accessed by reflection. + * + * Every [Property] must be a data class. */ interface Property { From 807b2f4a3473209a86092f5e3b396f90b6579627 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Tue, 3 Dec 2024 09:39:28 +0100 Subject: [PATCH 2/8] Migrated caldav properties Signed-off-by: Arnau Mora Gras --- .../property/caldav/CalendarHomeSet.kt | 7 ++++- .../property/caldav/CalendarProxyReadFor.kt | 5 +++- .../property/caldav/CalendarProxyWriteFor.kt | 5 +++- .../property/caldav/CalendarTimezoneId.kt | 2 +- .../property/caldav/CalendarUserAddressSet.kt | 5 +++- .../dav4jvm/property/caldav/ScheduleTag.kt | 6 +++-- .../bitfire/dav4jvm/property/caldav/Source.kt | 9 +++++-- .../caldav/SupportedCalendarComponentSet.kt | 26 ++++++++++++------- .../property/caldav/SupportedCalendarData.kt | 14 +++++----- .../property/webdav/HrefListProperty.kt | 20 +++++++------- 10 files changed, 63 insertions(+), 36 deletions(-) diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt index 5b77982..37c8028 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt @@ -8,13 +8,18 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty +import java.util.LinkedList import org.xmlpull.v1.XmlPullParser -class CalendarHomeSet: HrefListProperty() { +data class CalendarHomeSet( + override val hrefs: LinkedList = LinkedList() +): HrefListProperty(hrefs) { companion object { + @JvmField val NAME = Property.Name(NS_CALDAV, "calendar-home-set") + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt index 5af9305..b79b73e 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt @@ -8,9 +8,12 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty +import java.util.LinkedList import org.xmlpull.v1.XmlPullParser -class CalendarProxyReadFor: HrefListProperty() { +data class CalendarProxyReadFor( + override val hrefs: LinkedList = LinkedList() +): HrefListProperty(hrefs) { companion object { @JvmField diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt index b100460..ecc371c 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt @@ -8,9 +8,12 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty +import java.util.LinkedList import org.xmlpull.v1.XmlPullParser -class CalendarProxyWriteFor: HrefListProperty() { +data class CalendarProxyWriteFor( + override val hrefs: LinkedList = LinkedList() +): HrefListProperty(hrefs) { companion object { @JvmField diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarTimezoneId.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarTimezoneId.kt index 79de3e3..327ec0d 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarTimezoneId.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarTimezoneId.kt @@ -11,7 +11,7 @@ import at.bitfire.dav4jvm.PropertyFactory import at.bitfire.dav4jvm.XmlReader import org.xmlpull.v1.XmlPullParser -class CalendarTimezoneId( +data class CalendarTimezoneId( val identifier: String? ): Property { diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt index b82e488..42d7dc8 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt @@ -8,9 +8,12 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty +import java.util.LinkedList import org.xmlpull.v1.XmlPullParser -class CalendarUserAddressSet: HrefListProperty() { +data class CalendarUserAddressSet( + override val hrefs: LinkedList = LinkedList() +): HrefListProperty(hrefs) { companion object { @JvmField diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/ScheduleTag.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/ScheduleTag.kt index 0e82b95..e1a254f 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/ScheduleTag.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/ScheduleTag.kt @@ -13,16 +13,18 @@ import at.bitfire.dav4jvm.XmlReader import okhttp3.Response import org.xmlpull.v1.XmlPullParser -class ScheduleTag( - rawScheduleTag: String? +data class ScheduleTag( + val rawScheduleTag: String? ): Property { companion object { + @JvmField val NAME = Property.Name(NS_CALDAV, "schedule-tag") fun fromResponse(response: Response) = response.header("Schedule-Tag")?.let { ScheduleTag(it) } + } /* Value: opaque-tag diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt index 4e06355..41bfae0 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt @@ -8,13 +8,18 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty +import java.util.LinkedList import org.xmlpull.v1.XmlPullParser -class Source: HrefListProperty() { +class Source( + override val hrefs: LinkedList = LinkedList() +): HrefListProperty(hrefs) { companion object { + @JvmField val NAME = Property.Name(NS_CALENDARSERVER, "source") + } @@ -26,4 +31,4 @@ class Source: HrefListProperty() { } -} \ No newline at end of file +} diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarComponentSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarComponentSet.kt index f350877..c906007 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarComponentSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarComponentSet.kt @@ -12,9 +12,9 @@ import at.bitfire.dav4jvm.XmlUtils.propertyName import org.xmlpull.v1.XmlPullParser data class SupportedCalendarComponentSet( - var supportsEvents: Boolean, - var supportsTasks: Boolean, - var supportsJournal: Boolean + val supportsEvents: Boolean, + val supportsTasks: Boolean, + val supportsJournal: Boolean ): Property { companion object { @@ -37,7 +37,11 @@ data class SupportedCalendarComponentSet( */ - val components = SupportedCalendarComponentSet(false, false, false) + var components = SupportedCalendarComponentSet( + supportsEvents = false, + supportsTasks = false, + supportsJournal = false + ) val depth = parser.depth var eventType = parser.eventType @@ -45,15 +49,17 @@ data class SupportedCalendarComponentSet( if (eventType == XmlPullParser.START_TAG && parser.depth == depth + 1) { when (parser.propertyName()) { ALLCOMP -> { - components.supportsEvents = true - components.supportsTasks = true - components.supportsJournal = true + components = SupportedCalendarComponentSet( + supportsEvents = true, + supportsTasks = true, + supportsJournal = true + ) } COMP -> when (parser.getAttributeValue(null, "name")?.uppercase()) { - "VEVENT" -> components.supportsEvents = true - "VTODO" -> components.supportsTasks = true - "VJOURNAL" -> components.supportsJournal = true + "VEVENT" -> components = components.copy(supportsEvents = true) + "VTODO" -> components = components.copy(supportsTasks = true) + "VJOURNAL" -> components = components.copy(supportsJournal = true) } } } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarData.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarData.kt index 29ea169..7b1e821 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarData.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarData.kt @@ -12,7 +12,9 @@ import at.bitfire.dav4jvm.XmlReader import okhttp3.MediaType import org.xmlpull.v1.XmlPullParser -class SupportedCalendarData: Property { +data class SupportedCalendarData( + val types: Set = emptySet() +): Property { companion object { @@ -25,23 +27,19 @@ class SupportedCalendarData: Property { } - val types = mutableSetOf() - fun hasJCal() = types.any { "application".equals(it.type, true) && "calendar+json".equals(it.subtype, true) } - override fun toString() = "[${types.joinToString(", ")}]" - object Factory: PropertyFactory { override fun getName() = NAME override fun create(parser: XmlPullParser): SupportedCalendarData { - val supported = SupportedCalendarData() + val supportedTypes = mutableSetOf() - XmlReader(parser).readContentTypes(CALENDAR_DATA_TYPE, supported.types::add) + XmlReader(parser).readContentTypes(CALENDAR_DATA_TYPE, supportedTypes::add) - return supported + return SupportedCalendarData(supportedTypes) } } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/HrefListProperty.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/HrefListProperty.kt index 4bfb3a4..3658979 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/HrefListProperty.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/HrefListProperty.kt @@ -10,17 +10,19 @@ import at.bitfire.dav4jvm.DavResource import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.PropertyFactory import at.bitfire.dav4jvm.XmlReader +import java.util.LinkedList import org.xmlpull.v1.XmlPullParser -import java.util.* -abstract class HrefListProperty: Property { - - val hrefs = LinkedList() - - val href - get() = hrefs.firstOrNull() +/** + * Represents a list of hrefs. + * + * Every [HrefListProperty] must be a data class. + */ +abstract class HrefListProperty( + open val hrefs: LinkedList = LinkedList() +): Property { - override fun toString() = "href=[" + hrefs.joinToString(", ") + "]" + val href get() = hrefs.firstOrNull() abstract class Factory : PropertyFactory { @@ -32,4 +34,4 @@ abstract class HrefListProperty: Property { } -} \ No newline at end of file +} From f90f8aba32fa5938d2b4d35e3fb902dfc94224c5 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Tue, 3 Dec 2024 09:41:18 +0100 Subject: [PATCH 3/8] Migrated carddav properties Signed-off-by: Arnau Mora Gras --- .../bitfire/dav4jvm/property/carddav/AddressData.kt | 4 +++- .../property/carddav/AddressbookDescription.kt | 2 +- .../dav4jvm/property/carddav/AddressbookHomeSet.kt | 7 ++++++- .../dav4jvm/property/carddav/MaxResourceSize.kt | 8 +++++++- .../dav4jvm/property/carddav/SupportedAddressData.kt | 12 ++++++------ 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressData.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressData.kt index ebad666..7cc7789 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressData.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressData.kt @@ -12,16 +12,18 @@ import at.bitfire.dav4jvm.XmlReader import org.xmlpull.v1.XmlPullParser data class AddressData( - val card: String? + val card: String? ): Property { companion object { + @JvmField val NAME = Property.Name(NS_CARDDAV, "address-data") // attributes const val CONTENT_TYPE = "content-type" const val VERSION = "version" + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookDescription.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookDescription.kt index 7f95e7b..a575358 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookDescription.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookDescription.kt @@ -12,7 +12,7 @@ import at.bitfire.dav4jvm.XmlReader import org.xmlpull.v1.XmlPullParser data class AddressbookDescription( - var description: String? = null + val description: String? = null ): Property { companion object { diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookHomeSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookHomeSet.kt index 380252c..2a9104b 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookHomeSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookHomeSet.kt @@ -8,13 +8,18 @@ package at.bitfire.dav4jvm.property.carddav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty +import java.util.LinkedList import org.xmlpull.v1.XmlPullParser -class AddressbookHomeSet: HrefListProperty() { +class AddressbookHomeSet( + override val hrefs: LinkedList = LinkedList() +): HrefListProperty(hrefs) { companion object { + @JvmField val NAME = Property.Name(NS_CARDDAV, "addressbook-home-set") + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/MaxResourceSize.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/MaxResourceSize.kt index a812f13..53e51c2 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/MaxResourceSize.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/MaxResourceSize.kt @@ -14,15 +14,21 @@ import org.xmlpull.v1.XmlPullParser data class MaxResourceSize( val maxSize: Long? ) : Property { + companion object { + @JvmField val NAME = Property.Name(NS_CARDDAV, "max-resource-size") + } object Factory: PropertyFactory { + override fun getName() = NAME override fun create(parser: XmlPullParser) = MaxResourceSize(XmlReader(parser).readLong()) + } -} \ No newline at end of file + +} diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/SupportedAddressData.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/SupportedAddressData.kt index 77092a6..78b79de 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/SupportedAddressData.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/SupportedAddressData.kt @@ -12,7 +12,9 @@ import at.bitfire.dav4jvm.XmlReader import okhttp3.MediaType import org.xmlpull.v1.XmlPullParser -class SupportedAddressData: Property { +class SupportedAddressData( + val types: Set = emptySet() +): Property { companion object { @@ -25,8 +27,6 @@ class SupportedAddressData: Property { } - val types = mutableSetOf() - fun hasVCard4() = types.any { "text/vcard; version=4.0".equals(it.toString(), true) } fun hasJCard() = types.any { "application".equals(it.type, true) && "vcard+json".equals(it.subtype, true) } @@ -38,11 +38,11 @@ class SupportedAddressData: Property { override fun getName() = NAME override fun create(parser: XmlPullParser): SupportedAddressData { - val supported = SupportedAddressData() + val supportedTypes = mutableSetOf() - XmlReader(parser).readContentTypes(ADDRESS_DATA_TYPE, supported.types::add) + XmlReader(parser).readContentTypes(ADDRESS_DATA_TYPE, supportedTypes::add) - return supported + return SupportedAddressData(supportedTypes) } } From 978a5bd45061df02014d89ea1fd4eaa0c769ac0a Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Tue, 3 Dec 2024 09:47:08 +0100 Subject: [PATCH 4/8] Migrated webdav properties Signed-off-by: Arnau Mora Gras --- .../dav4jvm/property/webdav/AddMember.kt | 8 +++- .../dav4jvm/property/webdav/CreationDate.kt | 8 +++- .../property/webdav/CurrentUserPrincipal.kt | 2 + .../webdav/CurrentUserPrivilegeSet.kt | 42 ++++++++++--------- .../dav4jvm/property/webdav/DisplayName.kt | 3 ++ .../property/webdav/GetContentLength.kt | 8 +++- .../dav4jvm/property/webdav/GetContentType.kt | 2 + .../dav4jvm/property/webdav/GetETag.kt | 6 +-- .../property/webdav/GetLastModified.kt | 6 ++- .../property/webdav/GroupMembership.kt | 2 + .../bitfire/dav4jvm/property/webdav/Owner.kt | 4 +- .../property/webdav/QuotaAvailableBytes.kt | 8 +++- .../dav4jvm/property/webdav/QuotaUsedBytes.kt | 8 +++- .../dav4jvm/property/webdav/ResourceType.kt | 16 +++---- .../property/webdav/SupportedReportSet.kt | 16 ++++--- .../dav4jvm/property/webdav/SyncToken.kt | 3 ++ 16 files changed, 93 insertions(+), 49 deletions(-) diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/AddMember.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/AddMember.kt index 2be5370..34eaeb2 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/AddMember.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/AddMember.kt @@ -18,14 +18,20 @@ import org.xmlpull.v1.XmlPullParser data class AddMember( val href: String? ): Property { + companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "add-member") + } object Factory: PropertyFactory { + override fun getName() = NAME override fun create(parser: XmlPullParser) = AddMember(XmlReader(parser).readTextProperty(DavResource.HREF)) + } -} \ No newline at end of file + +} diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CreationDate.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CreationDate.kt index 6695471..f7ed594 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CreationDate.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CreationDate.kt @@ -14,15 +14,21 @@ import org.xmlpull.v1.XmlPullParser data class CreationDate( var creationDate: String? ): Property { + companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "creationdate") + } object Factory: PropertyFactory { + override fun getName() = NAME override fun create(parser: XmlPullParser) = CreationDate(XmlReader(parser).readText()) + } -} \ No newline at end of file + +} diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrincipal.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrincipal.kt index 0b5700a..4b44870 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrincipal.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrincipal.kt @@ -19,8 +19,10 @@ data class CurrentUserPrincipal( ): Property { companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "current-user-principal") + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrivilegeSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrivilegeSet.kt index ce3ee57..0e5bcc7 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrivilegeSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrivilegeSet.kt @@ -15,11 +15,11 @@ import org.xmlpull.v1.XmlPullParser data class CurrentUserPrivilegeSet( // not all privileges from RFC 3744 are implemented by now // feel free to add more if you need them for your project - var mayRead: Boolean = false, - var mayWriteProperties: Boolean = false, - var mayWriteContent: Boolean = false, - var mayBind: Boolean = false, - var mayUnbind: Boolean = false + val mayRead: Boolean = false, + val mayWriteProperties: Boolean = false, + val mayWriteContent: Boolean = false, + val mayBind: Boolean = false, + val mayUnbind: Boolean = false ): Property { companion object { @@ -46,7 +46,7 @@ data class CurrentUserPrivilegeSet( override fun create(parser: XmlPullParser): CurrentUserPrivilegeSet { // // - val privs = CurrentUserPrivilegeSet() + var privs = CurrentUserPrivilegeSet() XmlReader(parser).processTag(PRIVILEGE) { val depth = parser.depth @@ -55,27 +55,27 @@ data class CurrentUserPrivilegeSet( if (eventType == XmlPullParser.START_TAG && parser.depth == depth + 1) when (parser.propertyName()) { READ -> - privs.mayRead = true + privs = privs.copy(mayRead = true) WRITE -> { - privs.mayBind = true - privs.mayUnbind = true - privs.mayWriteProperties = true - privs.mayWriteContent = true + privs = privs.copy(mayBind = true) + privs = privs.copy(mayUnbind = true) + privs = privs.copy(mayWriteProperties = true) + privs = privs.copy(mayWriteContent = true) } WRITE_PROPERTIES -> - privs.mayWriteProperties = true + privs = privs.copy(mayWriteProperties = true) WRITE_CONTENT -> - privs.mayWriteContent = true + privs = privs.copy(mayWriteContent = true) BIND -> - privs.mayBind = true + privs = privs.copy(mayBind = true) UNBIND -> - privs.mayUnbind = true + privs = privs.copy(mayUnbind = true) ALL -> { - privs.mayRead = true - privs.mayBind = true - privs.mayUnbind = true - privs.mayWriteProperties = true - privs.mayWriteContent = true + privs = privs.copy(mayRead = true) + privs = privs.copy(mayBind = true) + privs = privs.copy(mayUnbind = true) + privs = privs.copy(mayWriteProperties = true) + privs = privs.copy(mayWriteContent = true) } } eventType = parser.next() @@ -84,5 +84,7 @@ data class CurrentUserPrivilegeSet( return privs } + } + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/DisplayName.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/DisplayName.kt index 4e020b5..d067cfe 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/DisplayName.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/DisplayName.kt @@ -16,8 +16,10 @@ data class DisplayName( ): Property { companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "displayname") + } @@ -30,4 +32,5 @@ data class DisplayName( DisplayName(XmlReader(parser).readText()) } + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetContentLength.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetContentLength.kt index 075d120..2cb599a 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetContentLength.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetContentLength.kt @@ -14,15 +14,21 @@ import org.xmlpull.v1.XmlPullParser data class GetContentLength( val contentLength: Long? ) : Property { + companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "getcontentlength") + } object Factory: PropertyFactory { + override fun getName() = NAME override fun create(parser: XmlPullParser) = GetContentLength(XmlReader(parser).readLong()) + } -} \ No newline at end of file + +} diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetContentType.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetContentType.kt index 0ad80de..62c3433 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetContentType.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetContentType.kt @@ -18,8 +18,10 @@ data class GetContentType( ): Property { companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "getcontenttype") + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetETag.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetETag.kt index 1f507f1..fca84e7 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetETag.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetETag.kt @@ -19,8 +19,8 @@ import org.xmlpull.v1.XmlPullParser * Can also be used to parse ETags from HTTP responses – just pass the raw ETag * header value to the constructor and then use [eTag] and [weak]. */ -class GetETag( - rawETag: String? +data class GetETag( + val rawETag: String? ): Property { companion object { @@ -65,8 +65,6 @@ class GetETag( } } - override fun toString() = "ETag(weak=${weak}, tag=$eTag)" - override fun equals(other: Any?): Boolean { if (other !is GetETag) return false diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetLastModified.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetLastModified.kt index bd0db2c..abd22eb 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetLastModified.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GetLastModified.kt @@ -9,16 +9,18 @@ package at.bitfire.dav4jvm.property.webdav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.PropertyFactory import at.bitfire.dav4jvm.XmlReader -import org.xmlpull.v1.XmlPullParser import java.time.Instant +import org.xmlpull.v1.XmlPullParser data class GetLastModified( - var lastModified: Instant? + val lastModified: Instant? ): Property { companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "getlastmodified") + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt index 90f434f..349be00 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt @@ -12,8 +12,10 @@ import org.xmlpull.v1.XmlPullParser class GroupMembership: HrefListProperty() { companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "group-membership") + } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt index 851b861..6ead3d8 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt @@ -12,8 +12,10 @@ import org.xmlpull.v1.XmlPullParser class Owner: HrefListProperty() { companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "owner") + } @@ -25,4 +27,4 @@ class Owner: HrefListProperty() { } -} \ No newline at end of file +} diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/QuotaAvailableBytes.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/QuotaAvailableBytes.kt index b39bb25..e8184bb 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/QuotaAvailableBytes.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/QuotaAvailableBytes.kt @@ -14,15 +14,21 @@ import org.xmlpull.v1.XmlPullParser data class QuotaAvailableBytes( val quotaAvailableBytes: Long? ) : Property { + companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "quota-available-bytes") + } object Factory: PropertyFactory { + override fun getName() = NAME override fun create(parser: XmlPullParser) = QuotaAvailableBytes(XmlReader(parser).readLong()) + } -} \ No newline at end of file + +} diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/QuotaUsedBytes.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/QuotaUsedBytes.kt index 221687c..603192b 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/QuotaUsedBytes.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/QuotaUsedBytes.kt @@ -14,15 +14,21 @@ import org.xmlpull.v1.XmlPullParser data class QuotaUsedBytes( val quotaUsedBytes: Long? ) : Property { + companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "quota-used-bytes") + } object Factory: PropertyFactory { + override fun getName() = NAME override fun create(parser: XmlPullParser) = QuotaUsedBytes(XmlReader(parser).readLong()) + } -} \ No newline at end of file + +} diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/ResourceType.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/ResourceType.kt index a052bdc..e41bdc6 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/ResourceType.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/ResourceType.kt @@ -13,9 +13,12 @@ import at.bitfire.dav4jvm.property.caldav.NS_CALENDARSERVER import at.bitfire.dav4jvm.property.carddav.NS_CARDDAV import org.xmlpull.v1.XmlPullParser -class ResourceType: Property { +class ResourceType( + val types: Set = emptySet() +): Property { companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "resourcetype") @@ -28,11 +31,8 @@ class ResourceType: Property { val CALENDAR_PROXY_READ = Property.Name(NS_CALENDARSERVER, "calendar-proxy-read") // CalDAV Proxy val CALENDAR_PROXY_WRITE = Property.Name(NS_CALENDARSERVER, "calendar-proxy-write") // CalDAV Proxy val SUBSCRIBED = Property.Name(NS_CALENDARSERVER, "subscribed") - } - val types = mutableSetOf() - - override fun toString() = "[${types.joinToString(", ")}]" + } object Factory: PropertyFactory { @@ -40,7 +40,7 @@ class ResourceType: Property { override fun getName() = NAME override fun create(parser: XmlPullParser): ResourceType { - val type = ResourceType() + val types = mutableSetOf() val depth = parser.depth var eventType = parser.eventType @@ -57,13 +57,13 @@ class ResourceType: Property { CALENDAR_PROXY_WRITE -> typeName = CALENDAR_PROXY_WRITE SUBSCRIBED -> typeName = SUBSCRIBED } - type.types.add(typeName) + types.add(typeName) } eventType = parser.next() } assert(parser.depth == depth) - return type + return ResourceType(types) } } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/SupportedReportSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/SupportedReportSet.kt index d2c5548..cf390c0 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/SupportedReportSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/SupportedReportSet.kt @@ -11,7 +11,9 @@ import at.bitfire.dav4jvm.PropertyFactory import at.bitfire.dav4jvm.XmlReader import org.xmlpull.v1.XmlPullParser -class SupportedReportSet: Property { +data class SupportedReportSet( + val reports: Set = emptySet() +): Property { companion object { @@ -25,10 +27,6 @@ class SupportedReportSet: Property { } - val reports = mutableSetOf() - - override fun toString() = "[${reports.joinToString(", ")}]" - object Factory: PropertyFactory { @@ -40,17 +38,17 @@ class SupportedReportSet: Property { */ - val supported = SupportedReportSet() + val reports = mutableSetOf() XmlReader(parser).processTag(SUPPORTED_REPORT) { processTag(REPORT) { parser.nextTag() if (parser.eventType == XmlPullParser.TEXT) - supported.reports += parser.text + reports += parser.text else if (parser.eventType == XmlPullParser.START_TAG) - supported.reports += "${parser.namespace}${parser.name}" + reports += "${parser.namespace}${parser.name}" } } - return supported + return SupportedReportSet(reports) } } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/SyncToken.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/SyncToken.kt index 03057cd..0138ecb 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/SyncToken.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/SyncToken.kt @@ -16,8 +16,10 @@ data class SyncToken( ): Property { companion object { + @JvmField val NAME = Property.Name(NS_WEBDAV, "sync-token") + } @@ -30,4 +32,5 @@ data class SyncToken( SyncToken(XmlReader(parser).readText()) } + } From 634b1d99e8b67d912d28eee3f8b92084a848c146 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Thu, 5 Dec 2024 12:27:20 +0100 Subject: [PATCH 5/8] Improved syntax Signed-off-by: Arnau Mora Gras --- .../webdav/CurrentUserPrivilegeSet.kt | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrivilegeSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrivilegeSet.kt index 0e5bcc7..b5e8349 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrivilegeSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/CurrentUserPrivilegeSet.kt @@ -57,10 +57,12 @@ data class CurrentUserPrivilegeSet( READ -> privs = privs.copy(mayRead = true) WRITE -> { - privs = privs.copy(mayBind = true) - privs = privs.copy(mayUnbind = true) - privs = privs.copy(mayWriteProperties = true) - privs = privs.copy(mayWriteContent = true) + privs = privs.copy( + mayBind = true, + mayUnbind = true, + mayWriteProperties = true, + mayWriteContent = true + ) } WRITE_PROPERTIES -> privs = privs.copy(mayWriteProperties = true) @@ -71,11 +73,13 @@ data class CurrentUserPrivilegeSet( UNBIND -> privs = privs.copy(mayUnbind = true) ALL -> { - privs = privs.copy(mayRead = true) - privs = privs.copy(mayBind = true) - privs = privs.copy(mayUnbind = true) - privs = privs.copy(mayWriteProperties = true) - privs = privs.copy(mayWriteContent = true) + privs = privs.copy( + mayRead = true, + mayBind = true, + mayUnbind = true, + mayWriteProperties = true, + mayWriteContent = true + ) } } eventType = parser.next() From b05fd76a53e6bcebd0f786e24978156d6c1d2ee5 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Thu, 5 Dec 2024 12:38:30 +0100 Subject: [PATCH 6/8] Improve comment Signed-off-by: Arnau Mora Gras --- src/main/kotlin/at/bitfire/dav4jvm/Property.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/at/bitfire/dav4jvm/Property.kt b/src/main/kotlin/at/bitfire/dav4jvm/Property.kt index 73a0a87..e03a503 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/Property.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/Property.kt @@ -19,7 +19,8 @@ import org.xmlpull.v1.XmlPullParser * Every [Property] must define a static field (use `@JvmStatic`) called `NAME` of type [Property.Name], * which will be accessed by reflection. * - * Every [Property] must be a data class. + * Every [Property] should be a data class in order to be able to compare it against others, and convert to a useful + * string for debugging. */ interface Property { From d7c20516fd9b7100c44b01ced9174139c1624325 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Thu, 5 Dec 2024 12:41:14 +0100 Subject: [PATCH 7/8] Made HrefListProperty static Signed-off-by: Arnau Mora Gras --- .../dav4jvm/property/caldav/CalendarHomeSet.kt | 5 ++--- .../property/caldav/CalendarProxyReadFor.kt | 5 ++--- .../property/caldav/CalendarProxyWriteFor.kt | 5 ++--- .../property/caldav/CalendarUserAddressSet.kt | 5 ++--- .../at/bitfire/dav4jvm/property/caldav/Source.kt | 5 ++--- .../property/carddav/AddressbookHomeSet.kt | 5 ++--- .../dav4jvm/property/webdav/GroupMembership.kt | 4 ++-- .../dav4jvm/property/webdav/HrefListProperty.kt | 16 +++++++++++++--- .../at/bitfire/dav4jvm/property/webdav/Owner.kt | 4 ++-- 9 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt index 37c8028..ee9b609 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt @@ -8,11 +8,10 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty -import java.util.LinkedList import org.xmlpull.v1.XmlPullParser data class CalendarHomeSet( - override val hrefs: LinkedList = LinkedList() + override val hrefs: List = emptyList() ): HrefListProperty(hrefs) { companion object { @@ -27,7 +26,7 @@ data class CalendarHomeSet( override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser, CalendarHomeSet()) + override fun create(parser: XmlPullParser) = create(parser, ::CalendarHomeSet) } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt index b79b73e..5a33c5c 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt @@ -8,11 +8,10 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty -import java.util.LinkedList import org.xmlpull.v1.XmlPullParser data class CalendarProxyReadFor( - override val hrefs: LinkedList = LinkedList() + override val hrefs: List = emptyList() ): HrefListProperty(hrefs) { companion object { @@ -25,7 +24,7 @@ data class CalendarProxyReadFor( override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser, CalendarProxyReadFor()) + override fun create(parser: XmlPullParser) = create(parser, ::CalendarProxyReadFor) } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt index ecc371c..cc0beb7 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt @@ -8,11 +8,10 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty -import java.util.LinkedList import org.xmlpull.v1.XmlPullParser data class CalendarProxyWriteFor( - override val hrefs: LinkedList = LinkedList() + override val hrefs: List = emptyList() ): HrefListProperty(hrefs) { companion object { @@ -25,7 +24,7 @@ data class CalendarProxyWriteFor( override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser, CalendarProxyWriteFor()) + override fun create(parser: XmlPullParser) = create(parser, ::CalendarProxyWriteFor) } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt index 42d7dc8..7a34e6f 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt @@ -8,11 +8,10 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty -import java.util.LinkedList import org.xmlpull.v1.XmlPullParser data class CalendarUserAddressSet( - override val hrefs: LinkedList = LinkedList() + override val hrefs: List = emptyList() ): HrefListProperty(hrefs) { companion object { @@ -25,7 +24,7 @@ data class CalendarUserAddressSet( override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser, CalendarUserAddressSet()) + override fun create(parser: XmlPullParser) = create(parser, ::CalendarUserAddressSet) } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt index 41bfae0..f7620df 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt @@ -8,11 +8,10 @@ package at.bitfire.dav4jvm.property.caldav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty -import java.util.LinkedList import org.xmlpull.v1.XmlPullParser class Source( - override val hrefs: LinkedList = LinkedList() + override val hrefs: List = emptyList() ): HrefListProperty(hrefs) { companion object { @@ -27,7 +26,7 @@ class Source( override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser, Source()) + override fun create(parser: XmlPullParser) = create(parser, ::Source) } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookHomeSet.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookHomeSet.kt index 2a9104b..c7be0bd 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookHomeSet.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/carddav/AddressbookHomeSet.kt @@ -8,11 +8,10 @@ package at.bitfire.dav4jvm.property.carddav import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.property.webdav.HrefListProperty -import java.util.LinkedList import org.xmlpull.v1.XmlPullParser class AddressbookHomeSet( - override val hrefs: LinkedList = LinkedList() + override val hrefs: List = emptyList() ): HrefListProperty(hrefs) { companion object { @@ -27,7 +26,7 @@ class AddressbookHomeSet( override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser, AddressbookHomeSet()) + override fun create(parser: XmlPullParser) = create(parser, ::AddressbookHomeSet) } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt index 349be00..9f097d8 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt @@ -9,7 +9,7 @@ package at.bitfire.dav4jvm.property.webdav import at.bitfire.dav4jvm.Property import org.xmlpull.v1.XmlPullParser -class GroupMembership: HrefListProperty() { +class GroupMembership: HrefListProperty(emptyList()) { companion object { @@ -23,7 +23,7 @@ class GroupMembership: HrefListProperty() { override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser, GroupMembership()) + override fun create(parser: XmlPullParser) = create(parser) { GroupMembership() } } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/HrefListProperty.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/HrefListProperty.kt index 3658979..d0048af 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/HrefListProperty.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/HrefListProperty.kt @@ -10,7 +10,6 @@ import at.bitfire.dav4jvm.DavResource import at.bitfire.dav4jvm.Property import at.bitfire.dav4jvm.PropertyFactory import at.bitfire.dav4jvm.XmlReader -import java.util.LinkedList import org.xmlpull.v1.XmlPullParser /** @@ -19,7 +18,7 @@ import org.xmlpull.v1.XmlPullParser * Every [HrefListProperty] must be a data class. */ abstract class HrefListProperty( - open val hrefs: LinkedList = LinkedList() + open val hrefs: List ): Property { val href get() = hrefs.firstOrNull() @@ -27,11 +26,22 @@ abstract class HrefListProperty( abstract class Factory : PropertyFactory { + @Deprecated("hrefs is no longer mutable.", level = DeprecationLevel.ERROR) fun create(parser: XmlPullParser, list: HrefListProperty): HrefListProperty { - XmlReader(parser).readTextPropertyList(DavResource.HREF, list.hrefs) + val hrefs = list.hrefs.toMutableList() + XmlReader(parser).readTextPropertyList(DavResource.HREF, hrefs) return list } + fun create( + parser: XmlPullParser, + constructor: (hrefs: List + ) -> PropertyType): PropertyType { + val hrefs = mutableListOf() + XmlReader(parser).readTextPropertyList(DavResource.HREF, hrefs) + return constructor(hrefs) + } + } } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt index 6ead3d8..2511304 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt @@ -9,7 +9,7 @@ package at.bitfire.dav4jvm.property.webdav import at.bitfire.dav4jvm.Property import org.xmlpull.v1.XmlPullParser -class Owner: HrefListProperty() { +class Owner: HrefListProperty(emptyList()) { companion object { @@ -23,7 +23,7 @@ class Owner: HrefListProperty() { override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser, Owner()) + override fun create(parser: XmlPullParser) = create(parser) { Owner() } } From 441d0dee7f8f15d16ffe37bab2de97dd2ca9a1a0 Mon Sep 17 00:00:00 2001 From: Arnau Mora Gras Date: Thu, 5 Dec 2024 12:44:53 +0100 Subject: [PATCH 8/8] Fixed constructors Signed-off-by: Arnau Mora Gras --- .../at/bitfire/dav4jvm/property/webdav/GroupMembership.kt | 6 ++++-- src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt index 9f097d8..7e36bfb 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/GroupMembership.kt @@ -9,7 +9,9 @@ package at.bitfire.dav4jvm.property.webdav import at.bitfire.dav4jvm.Property import org.xmlpull.v1.XmlPullParser -class GroupMembership: HrefListProperty(emptyList()) { +class GroupMembership( + override val hrefs: List +): HrefListProperty(hrefs) { companion object { @@ -23,7 +25,7 @@ class GroupMembership: HrefListProperty(emptyList()) { override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser) { GroupMembership() } + override fun create(parser: XmlPullParser) = create(parser, ::GroupMembership) } diff --git a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt index 2511304..e7ada5e 100644 --- a/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt +++ b/src/main/kotlin/at/bitfire/dav4jvm/property/webdav/Owner.kt @@ -9,7 +9,9 @@ package at.bitfire.dav4jvm.property.webdav import at.bitfire.dav4jvm.Property import org.xmlpull.v1.XmlPullParser -class Owner: HrefListProperty(emptyList()) { +data class Owner( + override val hrefs: List +): HrefListProperty(hrefs) { companion object { @@ -23,7 +25,7 @@ class Owner: HrefListProperty(emptyList()) { override fun getName() = NAME - override fun create(parser: XmlPullParser) = create(parser) { Owner() } + override fun create(parser: XmlPullParser) = create(parser, ::Owner) }