Skip to content

Commit a4f4068

Browse files
authored
Make all properties data classes (#62)
* Added hint for dataclasses Signed-off-by: Arnau Mora Gras <[email protected]> * Migrated caldav properties Signed-off-by: Arnau Mora Gras <[email protected]> * Migrated carddav properties Signed-off-by: Arnau Mora Gras <[email protected]> * Migrated webdav properties Signed-off-by: Arnau Mora Gras <[email protected]> * Improved syntax Signed-off-by: Arnau Mora Gras <[email protected]> * Improve comment Signed-off-by: Arnau Mora Gras <[email protected]> * Made HrefListProperty static Signed-off-by: Arnau Mora Gras <[email protected]> * Fixed constructors Signed-off-by: Arnau Mora Gras <[email protected]> --------- Signed-off-by: Arnau Mora Gras <[email protected]>
1 parent 8b59413 commit a4f4068

32 files changed

+206
-107
lines changed

src/main/kotlin/at/bitfire/dav4jvm/Property.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,20 @@
77
package at.bitfire.dav4jvm
88

99
import at.bitfire.dav4jvm.exception.InvalidPropertyException
10-
import org.xmlpull.v1.XmlPullParser
1110
import java.io.Serializable
1211
import java.util.LinkedList
1312
import java.util.logging.Level
1413
import java.util.logging.Logger
14+
import org.xmlpull.v1.XmlPullParser
1515

1616
/**
1717
* Represents a WebDAV property.
1818
*
1919
* Every [Property] must define a static field (use `@JvmStatic`) called `NAME` of type [Property.Name],
2020
* which will be accessed by reflection.
21+
*
22+
* Every [Property] should be a data class in order to be able to compare it against others, and convert to a useful
23+
* string for debugging.
2124
*/
2225
interface Property {
2326

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarHomeSet.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,23 @@ import at.bitfire.dav4jvm.Property
1010
import at.bitfire.dav4jvm.property.webdav.HrefListProperty
1111
import org.xmlpull.v1.XmlPullParser
1212

13-
class CalendarHomeSet: HrefListProperty() {
13+
data class CalendarHomeSet(
14+
override val hrefs: List<String> = emptyList()
15+
): HrefListProperty(hrefs) {
1416

1517
companion object {
18+
1619
@JvmField
1720
val NAME = Property.Name(NS_CALDAV, "calendar-home-set")
21+
1822
}
1923

2024

2125
object Factory: HrefListProperty.Factory() {
2226

2327
override fun getName() = NAME
2428

25-
override fun create(parser: XmlPullParser) = create(parser, CalendarHomeSet())
29+
override fun create(parser: XmlPullParser) = create(parser, ::CalendarHomeSet)
2630

2731
}
2832

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyReadFor.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import at.bitfire.dav4jvm.Property
1010
import at.bitfire.dav4jvm.property.webdav.HrefListProperty
1111
import org.xmlpull.v1.XmlPullParser
1212

13-
class CalendarProxyReadFor: HrefListProperty() {
13+
data class CalendarProxyReadFor(
14+
override val hrefs: List<String> = emptyList()
15+
): HrefListProperty(hrefs) {
1416

1517
companion object {
1618
@JvmField
@@ -22,7 +24,7 @@ class CalendarProxyReadFor: HrefListProperty() {
2224

2325
override fun getName() = NAME
2426

25-
override fun create(parser: XmlPullParser) = create(parser, CalendarProxyReadFor())
27+
override fun create(parser: XmlPullParser) = create(parser, ::CalendarProxyReadFor)
2628

2729
}
2830

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarProxyWriteFor.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import at.bitfire.dav4jvm.Property
1010
import at.bitfire.dav4jvm.property.webdav.HrefListProperty
1111
import org.xmlpull.v1.XmlPullParser
1212

13-
class CalendarProxyWriteFor: HrefListProperty() {
13+
data class CalendarProxyWriteFor(
14+
override val hrefs: List<String> = emptyList()
15+
): HrefListProperty(hrefs) {
1416

1517
companion object {
1618
@JvmField
@@ -22,7 +24,7 @@ class CalendarProxyWriteFor: HrefListProperty() {
2224

2325
override fun getName() = NAME
2426

25-
override fun create(parser: XmlPullParser) = create(parser, CalendarProxyWriteFor())
27+
override fun create(parser: XmlPullParser) = create(parser, ::CalendarProxyWriteFor)
2628

2729
}
2830

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarTimezoneId.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import at.bitfire.dav4jvm.PropertyFactory
1111
import at.bitfire.dav4jvm.XmlReader
1212
import org.xmlpull.v1.XmlPullParser
1313

14-
class CalendarTimezoneId(
14+
data class CalendarTimezoneId(
1515
val identifier: String?
1616
): Property {
1717

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/CalendarUserAddressSet.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import at.bitfire.dav4jvm.Property
1010
import at.bitfire.dav4jvm.property.webdav.HrefListProperty
1111
import org.xmlpull.v1.XmlPullParser
1212

13-
class CalendarUserAddressSet: HrefListProperty() {
13+
data class CalendarUserAddressSet(
14+
override val hrefs: List<String> = emptyList()
15+
): HrefListProperty(hrefs) {
1416

1517
companion object {
1618
@JvmField
@@ -22,7 +24,7 @@ class CalendarUserAddressSet: HrefListProperty() {
2224

2325
override fun getName() = NAME
2426

25-
override fun create(parser: XmlPullParser) = create(parser, CalendarUserAddressSet())
27+
override fun create(parser: XmlPullParser) = create(parser, ::CalendarUserAddressSet)
2628

2729
}
2830

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/ScheduleTag.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,18 @@ import at.bitfire.dav4jvm.XmlReader
1313
import okhttp3.Response
1414
import org.xmlpull.v1.XmlPullParser
1515

16-
class ScheduleTag(
17-
rawScheduleTag: String?
16+
data class ScheduleTag(
17+
val rawScheduleTag: String?
1818
): Property {
1919

2020
companion object {
21+
2122
@JvmField
2223
val NAME = Property.Name(NS_CALDAV, "schedule-tag")
2324

2425
fun fromResponse(response: Response) =
2526
response.header("Schedule-Tag")?.let { ScheduleTag(it) }
27+
2628
}
2729

2830
/* Value: opaque-tag

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/Source.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,24 @@ import at.bitfire.dav4jvm.Property
1010
import at.bitfire.dav4jvm.property.webdav.HrefListProperty
1111
import org.xmlpull.v1.XmlPullParser
1212

13-
class Source: HrefListProperty() {
13+
class Source(
14+
override val hrefs: List<String> = emptyList()
15+
): HrefListProperty(hrefs) {
1416

1517
companion object {
18+
1619
@JvmField
1720
val NAME = Property.Name(NS_CALENDARSERVER, "source")
21+
1822
}
1923

2024

2125
object Factory: HrefListProperty.Factory() {
2226

2327
override fun getName() = NAME
2428

25-
override fun create(parser: XmlPullParser) = create(parser, Source())
29+
override fun create(parser: XmlPullParser) = create(parser, ::Source)
2630

2731
}
2832

29-
}
33+
}

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarComponentSet.kt

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import at.bitfire.dav4jvm.XmlUtils.propertyName
1212
import org.xmlpull.v1.XmlPullParser
1313

1414
data class SupportedCalendarComponentSet(
15-
var supportsEvents: Boolean,
16-
var supportsTasks: Boolean,
17-
var supportsJournal: Boolean
15+
val supportsEvents: Boolean,
16+
val supportsTasks: Boolean,
17+
val supportsJournal: Boolean
1818
): Property {
1919

2020
companion object {
@@ -37,23 +37,29 @@ data class SupportedCalendarComponentSet(
3737
<!ELEMENT comp ((allprop | prop*), (allcomp | comp*))>
3838
<!ATTLIST comp name CDATA #REQUIRED>
3939
*/
40-
val components = SupportedCalendarComponentSet(false, false, false)
40+
var components = SupportedCalendarComponentSet(
41+
supportsEvents = false,
42+
supportsTasks = false,
43+
supportsJournal = false
44+
)
4145

4246
val depth = parser.depth
4347
var eventType = parser.eventType
4448
while (!(eventType == XmlPullParser.END_TAG && parser.depth == depth)) {
4549
if (eventType == XmlPullParser.START_TAG && parser.depth == depth + 1) {
4650
when (parser.propertyName()) {
4751
ALLCOMP -> {
48-
components.supportsEvents = true
49-
components.supportsTasks = true
50-
components.supportsJournal = true
52+
components = SupportedCalendarComponentSet(
53+
supportsEvents = true,
54+
supportsTasks = true,
55+
supportsJournal = true
56+
)
5157
}
5258
COMP ->
5359
when (parser.getAttributeValue(null, "name")?.uppercase()) {
54-
"VEVENT" -> components.supportsEvents = true
55-
"VTODO" -> components.supportsTasks = true
56-
"VJOURNAL" -> components.supportsJournal = true
60+
"VEVENT" -> components = components.copy(supportsEvents = true)
61+
"VTODO" -> components = components.copy(supportsTasks = true)
62+
"VJOURNAL" -> components = components.copy(supportsJournal = true)
5763
}
5864
}
5965
}

src/main/kotlin/at/bitfire/dav4jvm/property/caldav/SupportedCalendarData.kt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import at.bitfire.dav4jvm.XmlReader
1212
import okhttp3.MediaType
1313
import org.xmlpull.v1.XmlPullParser
1414

15-
class SupportedCalendarData: Property {
15+
data class SupportedCalendarData(
16+
val types: Set<MediaType> = emptySet()
17+
): Property {
1618

1719
companion object {
1820

@@ -25,23 +27,19 @@ class SupportedCalendarData: Property {
2527

2628
}
2729

28-
val types = mutableSetOf<MediaType>()
29-
3030
fun hasJCal() = types.any { "application".equals(it.type, true) && "calendar+json".equals(it.subtype, true) }
3131

32-
override fun toString() = "[${types.joinToString(", ")}]"
33-
3432

3533
object Factory: PropertyFactory {
3634

3735
override fun getName() = NAME
3836

3937
override fun create(parser: XmlPullParser): SupportedCalendarData {
40-
val supported = SupportedCalendarData()
38+
val supportedTypes = mutableSetOf<MediaType>()
4139

42-
XmlReader(parser).readContentTypes(CALENDAR_DATA_TYPE, supported.types::add)
40+
XmlReader(parser).readContentTypes(CALENDAR_DATA_TYPE, supportedTypes::add)
4341

44-
return supported
42+
return SupportedCalendarData(supportedTypes)
4543
}
4644

4745
}

0 commit comments

Comments
 (0)