Clean up getStatusCode() 13/109013/5
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 17 Nov 2023 19:10:32 +0000 (20:10 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 18 Nov 2023 08:00:58 +0000 (09:00 +0100)
Do not use else branches and simplify error evaluation. Rename it ot
statusOf() and put it into JaxRsCallback which is using it.

JIRA: NETCONF-773
Change-Id: I8e40f87f174a1ab62b6c5d9188f202a5f85f6028
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java

index 3e45435cac09f9a1ee71c19551ec9cbdbdd5035b..2eb2ba56e9a36f58568a01313cd4737db737599e 100644 (file)
@@ -34,9 +34,9 @@ import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.dom.api.DOMActionResult;
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
+import org.opendaylight.restconf.common.errors.RestconfError;
 import org.opendaylight.restconf.common.patch.PatchContext;
 import org.opendaylight.restconf.common.patch.PatchStatusContext;
-import org.opendaylight.restconf.common.patch.PatchStatusEntity;
 import org.opendaylight.restconf.nb.rfc8040.MediaTypes;
 import org.opendaylight.restconf.nb.rfc8040.databind.ChildBody;
 import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
@@ -441,26 +441,32 @@ public final class RestconfDataServiceImpl {
             .addCallback(new JaxRsRestconfCallback<>(ar) {
                 @Override
                 Response transform(final PatchStatusContext result) {
-                    return Response.status(getStatusCode(result)).entity(result).build();
+                    return Response.status(statusOf(result)).entity(result).build();
                 }
-            });
-    }
 
-    private static Status getStatusCode(final PatchStatusContext result) {
-        if (result.ok()) {
-            return Status.OK;
-        } else if (result.globalErrors() == null || result.globalErrors().isEmpty()) {
-            return result.editCollection().stream()
-                .filter(patchStatus -> !patchStatus.isOk() && !patchStatus.getEditErrors().isEmpty())
-                .findFirst()
-                .map(PatchStatusEntity::getEditErrors)
-                .flatMap(errors -> errors.stream().findFirst())
-                .map(error -> ErrorTags.statusOf(error.getErrorTag()))
-                .orElse(Status.INTERNAL_SERVER_ERROR);
-        } else {
-            final var error = result.globalErrors().iterator().next();
-            return ErrorTags.statusOf(error.getErrorTag());
-        }
+                private static Status statusOf(final PatchStatusContext result) {
+                    if (result.ok()) {
+                        return Status.OK;
+                    }
+                    final var globalErrors = result.globalErrors();
+                    if (globalErrors != null && !globalErrors.isEmpty()) {
+                        return statusOfFirst(globalErrors);
+                    }
+                    for (var edit : result.editCollection()) {
+                        if (!edit.isOk()) {
+                            final var editErrors = edit.getEditErrors();
+                            if (editErrors != null && !editErrors.isEmpty()) {
+                                return statusOfFirst(editErrors);
+                            }
+                        }
+                    }
+                    return Status.INTERNAL_SERVER_ERROR;
+                }
+
+                private static Status statusOfFirst(final List<RestconfError> error) {
+                    return ErrorTags.statusOf(error.get(0).getErrorTag());
+                }
+            });
     }
 
     private static @NonNull PatchContext parsePatchBody(final @NonNull EffectiveModelContext context,