Skip to content
This repository was archived by the owner on Mar 19, 2024. It is now read-only.

Commit b10e74a

Browse files
committed
Use moshi to parse capabilities
1 parent 7b29f8f commit b10e74a

File tree

6 files changed

+86
-167
lines changed

6 files changed

+86
-167
lines changed

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CapabilityResponse.kt

Lines changed: 56 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,61 @@
2424
*/
2525
package com.owncloud.android.lib.resources.response
2626

27+
import com.owncloud.android.lib.resources.status.RemoteCapability
28+
import com.owncloud.android.lib.resources.status.RemoteCapability.CapabilityBooleanType
2729
import com.squareup.moshi.Json
2830
import com.squareup.moshi.JsonClass
2931

3032
@JsonClass(generateAdapter = true)
3133
data class CapabilityResponse(
32-
@Json(name = NODE_SERVER_VERSION)
34+
@Json(name = "version")
3335
val serverVersion: ServerVersion,
3436
val capabilities: Capabilities
35-
)
37+
) {
38+
fun toRemoteCapability(): RemoteCapability = RemoteCapability(
39+
versionMayor = serverVersion.major,
40+
versionMinor = serverVersion.minor,
41+
versionMicro = serverVersion.micro,
42+
versionString = serverVersion.string,
43+
versionEdition = serverVersion.edition,
44+
corePollinterval = capabilities.coreCapabilities.pollinterval,
45+
filesSharingApiEnabled = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingApiEnabled),
46+
filesSharingResharing = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingReSharing),
47+
filesSharingPublicEnabled = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.enabled),
48+
filesSharingPublicUpload = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicUpload),
49+
filesSharingPublicSupportsUploadOnly = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicUploadOnly),
50+
filesSharingPublicMultiple = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicMultiple),
51+
filesSharingPublicPasswordEnforced = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicPassword.enforced),
52+
filesSharingPublicPasswordEnforcedReadOnly = CapabilityBooleanType.fromBooleanValue(
53+
capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicPassword.enforcedFor.enforcedReadOnly
54+
),
55+
filesSharingPublicPasswordEnforcedReadWrite = CapabilityBooleanType.fromBooleanValue(
56+
capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicPassword.enforcedFor.enforcedReadWrite
57+
),
58+
filesSharingPublicPasswordEnforcedUploadOnly = CapabilityBooleanType.fromBooleanValue(
59+
capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicPassword.enforcedFor.enforcedUploadOnly
60+
),
61+
filesSharingPublicExpireDateEnabled = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicExpireDate.enabled),
62+
filesSharingPublicExpireDateDays = capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicExpireDate.days
63+
?: 0,
64+
filesSharingPublicExpireDateEnforced = CapabilityBooleanType.fromBooleanValue(
65+
capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicExpireDate.enforced ?: false
66+
),
67+
filesBigFileChunking = CapabilityBooleanType.fromBooleanValue(capabilities.filesCapabilities.bigfilechunking),
68+
filesUndelete = CapabilityBooleanType.fromBooleanValue(capabilities.filesCapabilities.undelete),
69+
filesVersioning = CapabilityBooleanType.fromBooleanValue(capabilities.filesCapabilities.versioning),
70+
filesSharingFederationIncoming = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingFederation.incoming),
71+
filesSharingFederationOutgoing = CapabilityBooleanType.fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingFederation.outgoing)
72+
)
73+
}
3674

3775
@JsonClass(generateAdapter = true)
3876
data class Capabilities(
39-
@Json(name = NODE_CORE)
77+
@Json(name = "core")
4078
val coreCapabilities: CoreCapabilities,
41-
@Json(name = NODE_FILES_SHARING)
79+
@Json(name = "files_sharing")
4280
val fileSharingCapabilities: FileSharingCapabilities,
43-
@Json(name = NODE_FILES)
81+
@Json(name = "files")
4482
val filesCapabilities: FilesCapabilities
4583
)
4684

@@ -51,47 +89,45 @@ data class CoreCapabilities(
5189

5290
@JsonClass(generateAdapter = true)
5391
data class FileSharingCapabilities(
54-
@Json(name = PROPERTY_FILES_SHARING_API_ENABLED)
92+
@Json(name = "api_enabled")
5593
val fileSharingApiEnabled: Boolean,
56-
@Json(name = PROPERTY_FILES_SHARING_SEARCH_MIN_LENGTH)
57-
val fileSharingSearchMinLength: Int,
58-
@Json(name = NODE_FILES_SHARING_PUBLIC)
94+
@Json(name = "public")
5995
val fileSharingPublic: FileSharingPublic,
60-
@Json(name = PROPERTY_FILES_SHARING_RESHARING)
96+
@Json(name = "resharing")
6197
val fileSharingReSharing: Boolean,
62-
@Json(name = NODE_FEDERATION)
98+
@Json(name = "federation")
6399
val fileSharingFederation: FileSharingFederation
64100
)
65101

66102
@JsonClass(generateAdapter = true)
67103
data class FileSharingPublic(
68104
val enabled: Boolean,
69-
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_UPLOAD)
105+
@Json(name = "upload")
70106
val fileSharingPublicUpload: Boolean,
71-
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_UPLOAD_ONLY)
107+
@Json(name = "supports_upload_only")
72108
val fileSharingPublicUploadOnly: Boolean,
73-
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_MULTIPLE)
109+
@Json(name = "multiple")
74110
val fileSharingPublicMultiple: Boolean,
75-
@Json(name = NODE_PASSWORD)
111+
@Json(name = "password")
76112
val fileSharingPublicPassword: FileSharingPublicPassword,
77-
@Json(name = NODE_EXPIRE_DATE)
113+
@Json(name = "expire_date")
78114
val fileSharingPublicExpireDate: FileSharingPublicExpireDate
79115
)
80116

81117
@JsonClass(generateAdapter = true)
82118
data class FileSharingPublicPassword(
83119
val enforced: Boolean,
84-
@Json(name = NODE_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED)
120+
@Json(name = "enforced_for")
85121
val enforcedFor: FileSharingPublicPasswordEnforced
86122
)
87123

88124
@JsonClass(generateAdapter = true)
89125
data class FileSharingPublicPasswordEnforced(
90-
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_READ_ONLY)
126+
@Json(name = "read_only")
91127
val enforcedReadOnly: Boolean,
92-
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_READ_WRITE)
128+
@Json(name = "read_write")
93129
val enforcedReadWrite: Boolean,
94-
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_UPLOAD_ONLY)
130+
@Json(name = "upload_only")
95131
val enforcedUploadOnly: Boolean
96132
)
97133

@@ -123,29 +159,3 @@ data class ServerVersion(
123159
var string: String = "",
124160
var edition: String = ""
125161
)
126-
127-
private const val NODE_SERVER_VERSION = "version"
128-
129-
private const val NODE_CORE = "core"
130-
131-
private const val NODE_FILES_SHARING = "files_sharing"
132-
private const val PROPERTY_FILES_SHARING_API_ENABLED = "api_enabled"
133-
private const val PROPERTY_FILES_SHARING_SEARCH_MIN_LENGTH = "search_min_length"
134-
private const val PROPERTY_FILES_SHARING_RESHARING = "resharing"
135-
136-
private const val NODE_FILES_SHARING_PUBLIC = "public"
137-
private const val PROPERTY_FILES_SHARING_PUBLIC_UPLOAD = "upload"
138-
private const val PROPERTY_FILES_SHARING_PUBLIC_UPLOAD_ONLY = "supports_upload_only"
139-
private const val PROPERTY_FILES_SHARING_PUBLIC_MULTIPLE = "multiple"
140-
141-
private const val NODE_FEDERATION = "federation"
142-
143-
private const val NODE_PASSWORD = "password"
144-
private const val NODE_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED = "enforced_for"
145-
private const val PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_READ_ONLY = "read_only"
146-
private const val PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_READ_WRITE = "read_write"
147-
private const val PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_UPLOAD_ONLY = "upload_only"
148-
149-
private const val NODE_EXPIRE_DATE = "expire_date"
150-
151-
private const val NODE_FILES = "files"

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt renamed to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CommonOcsResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
* THE SOFTWARE.
2323
*/
24-
package com.owncloud.android.lib.resources
24+
package com.owncloud.android.lib.resources.response
2525

2626
import com.squareup.moshi.JsonClass
2727

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CommonResponse.kt

Lines changed: 0 additions & 45 deletions
This file was deleted.

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/UserInfoResponse.kt renamed to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/UserInfoResponse.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
* THE SOFTWARE.
2323
*/
24-
package com.owncloud.android.lib.resources.users
24+
package com.owncloud.android.lib.resources.response
2525

26+
import com.owncloud.android.lib.resources.users.RemoteUserInfo
2627
import com.squareup.moshi.Json
2728
import com.squareup.moshi.JsonClass
2829

@@ -32,11 +33,10 @@ data class UserInfoResponse(
3233
@Json(name = "display-name")
3334
val displayName: String,
3435
val email: String?
35-
)
36-
37-
fun UserInfoResponse.toRemoteUserInfo() =
38-
RemoteUserInfo(
36+
) {
37+
fun toRemoteUserInfo() = RemoteUserInfo(
3938
id = id,
4039
displayName = displayName,
4140
email = email
4241
)
42+
}

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt

Lines changed: 19 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,10 @@ import com.owncloud.android.lib.common.operations.RemoteOperation
3535
import com.owncloud.android.lib.common.operations.RemoteOperationResult
3636
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK
3737
import com.owncloud.android.lib.resources.response.CapabilityResponse
38-
import com.owncloud.android.lib.resources.response.CommonResponse
39-
import com.owncloud.android.lib.resources.status.RemoteCapability.CapabilityBooleanType.Companion.fromBooleanValue
38+
import com.owncloud.android.lib.resources.response.CommonOcsResponse
4039
import com.squareup.moshi.JsonAdapter
4140
import com.squareup.moshi.Moshi
4241
import com.squareup.moshi.Types
43-
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
4442
import timber.log.Timber
4543
import java.lang.reflect.Type
4644
import java.net.URL
@@ -58,49 +56,33 @@ class GetRemoteCapabilitiesOperation : RemoteOperation<RemoteCapability>() {
5856
var result: RemoteOperationResult<RemoteCapability>
5957

6058
try {
61-
val requestUri = client.baseUri
62-
val uriBuilder = requestUri.buildUpon()
63-
uriBuilder.appendEncodedPath(OCS_ROUTE) // avoid starting "/" in this method
64-
uriBuilder.appendQueryParameter(PARAM_FORMAT, VALUE_FORMAT)
65-
66-
val getMethod = GetMethod(URL(uriBuilder.build().toString()))
67-
68-
getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE)
69-
59+
val uriBuilder = client.baseUri.buildUpon().run {
60+
appendEncodedPath(OCS_ROUTE) // avoid starting "/" in this method
61+
appendQueryParameter(PARAM_FORMAT, VALUE_FORMAT)
62+
}
63+
val getMethod = GetMethod(URL(uriBuilder.build().toString())).apply {
64+
addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE)
65+
}
7066
val status = client.executeHttpMethod(getMethod)
7167

7268
val response = getMethod.responseBodyAsString
7369

74-
if (status != HttpConstants.HTTP_OK) {
75-
result = RemoteOperationResult(getMethod)
76-
Timber.e("Failed response while getting capabilities from the server status code: $status; response message: $response")
77-
return result
78-
}
70+
if (status == HttpConstants.HTTP_OK) {
71+
Timber.d("Successful response $response")
7972

80-
Timber.d("Successful response: $response")
73+
// Parse the response
74+
val moshi: Moshi = Moshi.Builder().build()
75+
val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, CapabilityResponse::class.java)
76+
val adapter: JsonAdapter<CommonOcsResponse<CapabilityResponse>> = moshi.adapter(type)
77+
val commonResponse: CommonOcsResponse<CapabilityResponse>? = adapter.fromJson(response)
8178

82-
// Parse the response
83-
val moshi: Moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
84-
val type: Type = Types.newParameterizedType(CommonResponse::class.java, CapabilityResponse::class.java)
85-
val adapter: JsonAdapter<CommonResponse<CapabilityResponse>> = moshi.adapter(type)
86-
val commonResponse: CommonResponse<CapabilityResponse>? = adapter.fromJson(response)
87-
88-
// Read MetaData
89-
val statusMessage = commonResponse?.ocs?.meta?.status
90-
val statusCode = commonResponse?.ocs?.meta?.statuscode
91-
val message = commonResponse?.ocs?.meta?.message
92-
93-
if (statusMessage.equals(PROPERTY_STATUS_OK, ignoreCase = true)) {
94-
val remoteCapability = commonResponse?.ocs?.data?.let { mapToModel(it) } ?: RemoteCapability()
95-
// Result
9679
result = RemoteOperationResult(OK)
97-
result.data = remoteCapability
80+
result.data = commonResponse?.ocs?.data?.toRemoteCapability()
9881

99-
Timber.d("*** Get Capabilities completed and parsed to: $remoteCapability")
82+
Timber.d("*** Get Capabilities completed and parsed to ${result.data}")
10083
} else {
101-
result = RemoteOperationResult(statusCode!!, message, null)
102-
Timber.e("Failed response while getting capabilities from the server ")
103-
Timber.e("*** statusCode: $status; status: $statusMessage; message: $message")
84+
result = RemoteOperationResult(getMethod)
85+
Timber.e("Failed response while getting capabilities from the server status code: $status; response message: $response")
10486
}
10587

10688
} catch (e: Exception) {
@@ -111,36 +93,6 @@ class GetRemoteCapabilitiesOperation : RemoteOperation<RemoteCapability>() {
11193
return result
11294
}
11395

114-
private fun mapToModel(capabilityResponse: CapabilityResponse): RemoteCapability =
115-
with(capabilityResponse) {
116-
RemoteCapability(
117-
versionMayor = serverVersion.major,
118-
versionMinor = serverVersion.minor,
119-
versionMicro = serverVersion.micro,
120-
versionString = serverVersion.string,
121-
versionEdition = serverVersion.edition,
122-
corePollinterval = capabilities.coreCapabilities.pollinterval,
123-
filesSharingApiEnabled = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingApiEnabled),
124-
filesSharingResharing = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingReSharing),
125-
filesSharingPublicEnabled = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.enabled),
126-
filesSharingPublicUpload = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicUpload),
127-
filesSharingPublicSupportsUploadOnly = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicUploadOnly),
128-
filesSharingPublicMultiple = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicMultiple),
129-
filesSharingPublicPasswordEnforced = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicPassword.enforced),
130-
filesSharingPublicPasswordEnforcedReadOnly = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicPassword.enforcedFor.enforcedReadOnly),
131-
filesSharingPublicPasswordEnforcedReadWrite = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicPassword.enforcedFor.enforcedReadWrite),
132-
filesSharingPublicPasswordEnforcedUploadOnly = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicPassword.enforcedFor.enforcedUploadOnly),
133-
filesSharingPublicExpireDateEnabled = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicExpireDate.enabled),
134-
filesSharingPublicExpireDateDays = capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicExpireDate.days ?: 0,
135-
filesSharingPublicExpireDateEnforced = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingPublic.fileSharingPublicExpireDate.enforced?:false),
136-
filesBigFileChunking = fromBooleanValue(capabilities.filesCapabilities.bigfilechunking),
137-
filesUndelete = fromBooleanValue(capabilities.filesCapabilities.undelete),
138-
filesVersioning = fromBooleanValue(capabilities.filesCapabilities.versioning),
139-
filesSharingFederationIncoming = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingFederation.incoming),
140-
filesSharingFederationOutgoing = fromBooleanValue(capabilities.fileSharingCapabilities.fileSharingFederation.outgoing)
141-
)
142-
}
143-
14496
companion object {
14597

14698
// OCS Routes
@@ -151,7 +103,5 @@ class GetRemoteCapabilitiesOperation : RemoteOperation<RemoteCapability>() {
151103

152104
// Arguments - constant values
153105
private const val VALUE_FORMAT = "json"
154-
155-
private const val PROPERTY_STATUS_OK = "ok"
156106
}
157107
}

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod
2929
import com.owncloud.android.lib.common.operations.RemoteOperation
3030
import com.owncloud.android.lib.common.operations.RemoteOperationResult
3131
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode
32-
import com.owncloud.android.lib.resources.CommonOcsResponse
32+
import com.owncloud.android.lib.resources.response.CommonOcsResponse
33+
import com.owncloud.android.lib.resources.response.UserInfoResponse
3334
import com.squareup.moshi.JsonAdapter
3435
import com.squareup.moshi.Moshi
3536
import com.squareup.moshi.Types
@@ -63,6 +64,9 @@ class GetRemoteUserInfoOperation : RemoteOperation<RemoteUserInfo>() {
6364

6465
result = RemoteOperationResult(ResultCode.OK)
6566
result.data = commonResponse?.ocs?.data?.toRemoteUserInfo()
67+
68+
Timber.d("*** Get User Info completed and parsed to ${result.data}")
69+
6670
} else {
6771
result = RemoteOperationResult(getMethod)
6872
Timber.e("Failed response while getting user information status code: $status, response: $response")

0 commit comments

Comments
 (0)