import org.opendaylight.mdsal.dom.api.DOMMountPoint;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
+import org.opendaylight.restconf.common.ErrorTags;
import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
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.ReadDataParams;
import org.opendaylight.restconf.nb.rfc8040.Rfc8040;
import org.opendaylight.restconf.nb.rfc8040.WriteDataParams;
final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
final PatchStatusContext patchStatusContext = PatchDataTransactionUtil.patchData(context, strategy,
iid.getSchemaContext());
- return Response.status(Status.OK)
+ return Response.status(getStatusCode(patchStatusContext))
.entity(patchStatusContext)
.build();
}
}
}
}
+
+ private static Status getStatusCode(final PatchStatusContext result) {
+ if (result.isOk()) {
+ return Status.OK;
+ } else {
+ if (result.getGlobalErrors() == null || result.getGlobalErrors().isEmpty()) {
+ return result.getEditCollection().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.getGlobalErrors().iterator().next();
+ return ErrorTags.statusOf(error.getErrorTag());
+ }
+ }
+ }
}
.when(readWrite).exists(LogicalDatastoreType.CONFIGURATION, iidleaf);
doReturn(true).when(readWrite).cancel();
final Response response = dataService.patchData(patch, uriInfo);
- assertEquals(200, response.getStatus());
+ assertEquals(409, response.getStatus());
final PatchStatusContext status = assertInstanceOf(PatchStatusContext.class, response.getEntity());
assertFalse(status.isOk());