Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check Nullability of OCS Remote Operation #1289

Merged
merged 4 commits into from
Mar 18, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -33,11 +33,16 @@ class DashboardGetWidgetItemsRemoteOperation(val id: String, private val limitSi
get,
object :
TypeToken<ServerResponse<HashMap<String, List<DashboardWidgetItem>>>>() {}
).ocs.data
)?.ocs?.data

result =
RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>>(true, get)
result.resultData = list
if (list != null) {
result =
RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>>(true, get)
result.resultData = list
} else {
result =
RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>>(false, get)
}
} else {
result =
RemoteOperationResult<HashMap<String, List<DashboardWidgetItem>>>(false, get)
Original file line number Diff line number Diff line change
@@ -30,10 +30,14 @@ class DashboardListWidgetsRemoteOperation : OCSRemoteOperation<Map<String, Dashb
getServerResponse(
get,
object : TypeToken<ServerResponse<HashMap<String, DashboardWidget>>>() {}
).ocs.data
)?.ocs?.data

result = RemoteOperationResult<Map<String, DashboardWidget>>(true, get)
result.resultData = list
if (list != null) {
result = RemoteOperationResult<Map<String, DashboardWidget>>(true, get)
result.resultData = list
} else {
result = RemoteOperationResult<Map<String, DashboardWidget>>(false, get)
}
} else {
result = RemoteOperationResult<Map<String, DashboardWidget>>(false, get)
}
Original file line number Diff line number Diff line change
@@ -49,13 +49,15 @@ protected RemoteOperationResult<TemplateList> run(OwnCloudClient client) {
int status = client.executeMethod(getMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);

if (status == HttpStatus.SC_OK) {
TemplateList templateList = getServerResponse(getMethod,
new TypeToken<ServerResponse<TemplateList>>() {
})
.getOcs().getData();
ServerResponse<TemplateList> serverResponse = getServerResponse(getMethod, new TypeToken<>() {});

result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(templateList);
if (serverResponse != null) {
TemplateList templateList = serverResponse.getOcs().getData();
result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(templateList);
} else {
result = new RemoteOperationResult<>(false, getMethod);
}
} else {
result = new RemoteOperationResult<>(false, getMethod);
client.exhaustResponse(getMethod.getResponseBodyAsStream());
@@ -69,6 +71,7 @@ protected RemoteOperationResult<TemplateList> run(OwnCloudClient client) {
getMethod.releaseConnection();
}
}

return result;
}
}
Original file line number Diff line number Diff line change
@@ -41,13 +41,18 @@ protected RemoteOperationResult<DirectEditing> run(OwnCloudClient client) {
int status = client.executeMethod(getMethod, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT);

if (status == HttpStatus.SC_OK) {
DirectEditing directEditing = getServerResponse(getMethod,
new TypeToken<ServerResponse<DirectEditing>>() {
})
.getOcs().getData();
ServerResponse<DirectEditing> serverResponse = getServerResponse(getMethod,
new TypeToken<>() {
});

if (serverResponse != null) {
DirectEditing directEditing = serverResponse.getOcs().getData();
result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(directEditing);
} else {
result = new RemoteOperationResult<>(false, getMethod);
}

result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(directEditing);
} else {
result = new RemoteOperationResult<>(false, getMethod);
client.exhaustResponse(getMethod.getResponseBodyAsStream());
@@ -61,6 +66,7 @@ protected RemoteOperationResult<DirectEditing> run(OwnCloudClient client) {
getMethod.releaseConnection();
}
}

return result;
}
}
Original file line number Diff line number Diff line change
@@ -37,10 +37,14 @@ class GetGroupfoldersRemoteOperation :
getServerResponse(
getMethod,
object : TypeToken<ServerResponse<Map<String, Groupfolder>>>() {}
)
.ocs.data
result = RemoteOperationResult(true, getMethod)
result.setResultData(map)
)?.ocs?.data

if (map != null) {
result = RemoteOperationResult(true, getMethod)
result.setResultData(map)
} else {
result = RemoteOperationResult(false, getMethod)
}
} else {
result = RemoteOperationResult(false, getMethod)
}
Original file line number Diff line number Diff line change
@@ -29,14 +29,20 @@ class GetHoverCardRemoteOperation(private val userId: String) : OCSRemoteOperati
GetMethod(client.baseUri.toString() + DIRECT_ENDPOINT + userId + JSON_FORMAT, true)
val status = client.execute(getMethod)
if (status == HttpStatus.SC_OK) {
val hoverCard: HoverCard =
getServerResponse<ServerResponse<HoverCard>>(
val serverResponse: ServerResponse<HoverCard>? =
getServerResponse(
getMethod,
object : TypeToken<ServerResponse<HoverCard>?>() {}
object : TypeToken<ServerResponse<HoverCard>>() {}
)
.ocs.data
result = RemoteOperationResult(true, getMethod)
result.setResultData(hoverCard)

val hoverCard: HoverCard? = serverResponse?.ocs?.data

if (hoverCard != null) {
result = RemoteOperationResult(true, getMethod)
result.setResultData(hoverCard)
} else {
result = RemoteOperationResult(false, getMethod)
}
} else {
result = RemoteOperationResult(false, getMethod)
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* Nextcloud Android Library
*
* SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2019-2020 Tobias Kaminsky <tobias@kaminsky.me>
* SPDX-FileCopyrightText: 2018 Bartosz Przybylski <bart.p.pl@gmail.com>
* SPDX-License-Identifier: MIT
*/
package com.owncloud.android.lib.resources

import com.google.gson.JsonElement
import com.google.gson.JsonParser
import com.google.gson.JsonSyntaxException
import com.google.gson.reflect.TypeToken
import com.nextcloud.common.OkHttpMethodBase
import com.owncloud.android.lib.common.operations.RemoteOperation
import org.apache.commons.httpclient.HttpMethodBase
import java.io.IOException

/**
* Base class for OCS remote operations with convenient methods
*
* @author Bartosz Przybylski
*/
abstract class OCSRemoteOperation<T> : RemoteOperation<T>() {
@Deprecated("Use OkHttpMethodBase variant instead")
fun <T> getServerResponse(
method: HttpMethodBase,
type: TypeToken<T>
): T? {
return try {
val response = method.responseBodyAsString
val element: JsonElement = JsonParser.parseString(response)
gson.fromJson(element, type.type)
} catch (ioException: IOException) {
null
} catch (syntaxException: JsonSyntaxException) {
null
}
}

fun <T> getServerResponse(
method: OkHttpMethodBase,
type: TypeToken<T>
): T? {
return try {
val response = method.getResponseBodyAsString()
val element: JsonElement = JsonParser.parseString(response)
gson.fromJson(element, type.type)
} catch (syntaxException: JsonSyntaxException) {
null
}
}
}
Original file line number Diff line number Diff line change
@@ -28,12 +28,11 @@ class GetTaskListRemoteOperation(private val appId: String) : OCSRemoteOperation
GetMethod(client.baseUri.toString() + DIRECT_ENDPOINT + appId + JSON_FORMAT, true)
val status = client.execute(getMethod)
if (status == HttpStatus.SC_OK) {
val taskTypes: TaskList =
val taskTypes: TaskList? =
getServerResponse(
getMethod,
object : TypeToken<ServerResponse<TaskList>>() {}
)
.ocs.data
)?.ocs?.data
result = RemoteOperationResult(true, getMethod)
result.setResultData(taskTypes)
} else {
Original file line number Diff line number Diff line change
@@ -28,12 +28,11 @@ class GetTaskTypesRemoteOperation : OCSRemoteOperation<TaskTypes>() {
GetMethod(client.baseUri.toString() + DIRECT_ENDPOINT + JSON_FORMAT, true)
val status = client.execute(getMethod)
if (status == HttpStatus.SC_OK) {
val taskTypes: TaskTypes =
val taskTypes: TaskTypes? =
getServerResponse(
getMethod,
object : TypeToken<ServerResponse<TaskTypes>>() {}
)
.ocs.data
)?.ocs?.data
result = RemoteOperationResult(true, getMethod)
result.setResultData(taskTypes)
} else {
Original file line number Diff line number Diff line change
@@ -40,13 +40,14 @@ public RemoteOperationResult<String> run(NextcloudClient client) {
int status = client.execute(method);

if (status == HttpStatus.SC_OK) {
// Parse the response
ServerResponse<AppPassword> serverResponse = getServerResponse(method,
new TypeToken<ServerResponse<AppPassword>>() {
});
ServerResponse<AppPassword> serverResponse = getServerResponse(method, new TypeToken<>() {});

result = new RemoteOperationResult<>(true, method);
result.setResultData(serverResponse.getOcs().getData().getAppPassword());
if (serverResponse != null) {
result = new RemoteOperationResult<>(true, method);
result.setResultData(serverResponse.getOcs().getData().getAppPassword());
} else {
result = new RemoteOperationResult<>(false, method);
}
} else if (status == HttpStatus.SC_FORBIDDEN) {
result = new RemoteOperationResult<>(true, method);
result.setResultData("");
Original file line number Diff line number Diff line change
@@ -41,14 +41,14 @@ public RemoteOperationResult<ArrayList<PredefinedStatus>> run(NextcloudClient cl
int status = client.execute(getMethod);

if (status == HttpStatus.SC_OK) {
// Parse the response
ServerResponse<ArrayList<PredefinedStatus>> serverResponse =
getServerResponse(getMethod,
new TypeToken<ServerResponse<ArrayList<PredefinedStatus>>>() {
});
ServerResponse<ArrayList<PredefinedStatus>> serverResponse = getServerResponse(getMethod, new TypeToken<>() {});

result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(serverResponse.getOcs().getData());
if (serverResponse != null) {
result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(serverResponse.getOcs().getData());
} else {
result = new RemoteOperationResult<>(false, getMethod);
}
} else {
result = new RemoteOperationResult<>(false, getMethod);
getMethod.releaseConnection();
Original file line number Diff line number Diff line change
@@ -46,8 +46,12 @@ public RemoteOperationResult<PrivateKey> run(NextcloudClient client) {
getServerResponse(getMethod, new TypeToken<ServerResponse<PrivateKey>>() {
});

result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(serverResponse.getOcs().data);
if (serverResponse != null) {
result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(serverResponse.getOcs().data);
} else {
result = new RemoteOperationResult<>(false, getMethod);
}
} else {
result = new RemoteOperationResult<>(false, getMethod);
}
Original file line number Diff line number Diff line change
@@ -40,13 +40,13 @@ public RemoteOperationResult<Status> run(NextcloudClient client) {
int status = client.execute(getMethod);

if (status == HttpStatus.SC_OK) {
// Parse the response
ServerResponse<Status> serverResponse = getServerResponse(getMethod,
new TypeToken<ServerResponse<Status>>() {
});

result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(serverResponse.getOcs().getData());
ServerResponse<Status> serverResponse = getServerResponse(getMethod, new TypeToken<>() {});
if (serverResponse != null) {
result = new RemoteOperationResult<>(true, getMethod);
result.setResultData(serverResponse.getOcs().getData());
} else {
result = new RemoteOperationResult<>(false, getMethod);
}
} else {
// 404 if no status was set before
if (HttpStatus.SC_NOT_FOUND == getMethod.getStatusCode()) {
Original file line number Diff line number Diff line change
@@ -74,18 +74,20 @@ public RemoteOperationResult<UserInfo> run(NextcloudClient client) {
status = client.execute(get);

if (isSuccess(status)) {
ServerResponse<UserInfo> ocsResponse = getServerResponse(get,
new TypeToken<ServerResponse<UserInfo>>() {
});
ServerResponse<UserInfo> ocsResponse = getServerResponse(get, new TypeToken<>() {});

UserInfo userInfo = ocsResponse.ocs.data;
if (ocsResponse != null) {
UserInfo userInfo = ocsResponse.ocs.data;

if (userInfo.getQuota() == null || userInfo.getQuota().getQuota() == 0) {
userInfo.setQuota(new Quota(QUOTA_LIMIT_INFO_NOT_AVAILABLE));
}
if (userInfo.getQuota() == null || userInfo.getQuota().getQuota() == 0) {
userInfo.setQuota(new Quota(QUOTA_LIMIT_INFO_NOT_AVAILABLE));
}

result = new RemoteOperationResult<>(true, get);
result.setResultData(userInfo);
result = new RemoteOperationResult<>(true, get);
result.setResultData(userInfo);
} else {
result = new RemoteOperationResult<>(false, get);
}
} else {
result = new RemoteOperationResult<>(false, get);
String response = get.getResponseBodyAsString();