package org.opendaylight.restconf.common.patch;
+import static java.util.Objects.requireNonNull;
+
import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.restconf.common.errors.RestconfError;
-public class PatchStatusContext {
-
- private final String patchId;
- private final List<PatchStatusEntity> editCollection;
- private boolean ok;
- private List<RestconfError> globalErrors;
-
- public PatchStatusContext(final String patchId, final List<PatchStatusEntity> editCollection,
- final boolean ok, final List<RestconfError> globalErrors) {
- this.patchId = patchId;
- this.editCollection = editCollection;
- this.ok = ok;
- this.globalErrors = globalErrors;
- }
-
- public String getPatchId() {
- return patchId;
- }
-
- public List<PatchStatusEntity> getEditCollection() {
- return editCollection;
- }
-
- public boolean isOk() {
- return ok;
- }
-
- public List<RestconfError> getGlobalErrors() {
- return globalErrors;
+/**
+ * Holder of patch status context.
+ */
+public record PatchStatusContext(
+ @NonNull String patchId,
+ @NonNull List<PatchStatusEntity> editCollection,
+ boolean ok,
+ @Nullable List<RestconfError> globalErrors) {
+
+ public PatchStatusContext {
+ requireNonNull(patchId);
+ requireNonNull(editCollection);
}
}
final JsonWriter jsonWriter = createJsonWriter(entityStream);
jsonWriter.beginObject().name("ietf-yang-patch:yang-patch-status");
jsonWriter.beginObject();
- jsonWriter.name("patch-id").value(patchStatusContext.getPatchId());
- if (patchStatusContext.isOk()) {
+ jsonWriter.name("patch-id").value(patchStatusContext.patchId());
+ if (patchStatusContext.ok()) {
reportSuccess(jsonWriter);
} else {
- if (patchStatusContext.getGlobalErrors() != null) {
- reportErrors(patchStatusContext.getGlobalErrors(), jsonWriter);
+ if (patchStatusContext.globalErrors() != null) {
+ reportErrors(patchStatusContext.globalErrors(), jsonWriter);
}
jsonWriter.name("edit-status");
jsonWriter.beginObject();
jsonWriter.name("edit");
jsonWriter.beginArray();
- for (final PatchStatusEntity patchStatusEntity : patchStatusContext.getEditCollection()) {
+ for (final PatchStatusEntity patchStatusEntity : patchStatusContext.editCollection()) {
jsonWriter.beginObject();
jsonWriter.name("edit-id").value(patchStatusEntity.getEditId());
if (patchStatusEntity.getEditErrors() != null) {
throws XMLStreamException {
writer.writeStartElement("", "yang-patch-status", XML_NAMESPACE);
writer.writeStartElement("patch-id");
- writer.writeCharacters(context.getPatchId());
+ writer.writeCharacters(context.patchId());
writer.writeEndElement();
- if (context.isOk()) {
+ if (context.ok()) {
writer.writeEmptyElement("ok");
} else {
- if (context.getGlobalErrors() != null) {
- reportErrors(context.getGlobalErrors(), writer);
+ if (context.globalErrors() != null) {
+ reportErrors(context.globalErrors(), writer);
}
writer.writeStartElement("edit-status");
- for (final PatchStatusEntity patchStatusEntity : context.getEditCollection()) {
+ for (final PatchStatusEntity patchStatusEntity : context.editCollection()) {
writer.writeStartElement("edit");
writer.writeStartElement("edit-id");
writer.writeCharacters(patchStatusEntity.getEditId());
doReturn(immediateTrueFluentFuture())
.when(readWrite).exists(LogicalDatastoreType.CONFIGURATION, GAP_IID);
final PatchStatusContext status = dataService.patchData(patch);
- assertTrue(status.isOk());
- assertEquals(3, status.getEditCollection().size());
- assertEquals("replace data", status.getEditCollection().get(1).getEditId());
+ assertTrue(status.ok());
+ assertEquals(3, status.editCollection().size());
+ assertEquals("replace data", status.editCollection().get(1).getEditId());
}
@Test
doReturn(immediateTrueFluentFuture()).when(readWrite).exists(LogicalDatastoreType.CONFIGURATION, GAP_IID);
final PatchStatusContext status = dataService.patchData(patch);
- assertTrue(status.isOk());
- assertEquals(3, status.getEditCollection().size());
- assertNull(status.getGlobalErrors());
+ assertTrue(status.ok());
+ assertEquals(3, status.editCollection().size());
+ assertNull(status.globalErrors());
}
@Test
doReturn(true).when(readWrite).cancel();
final PatchStatusContext status = dataService.patchData(patch);
- assertFalse(status.isOk());
- assertEquals(3, status.getEditCollection().size());
- assertTrue(status.getEditCollection().get(0).isOk());
- assertTrue(status.getEditCollection().get(1).isOk());
- assertFalse(status.getEditCollection().get(2).isOk());
- assertFalse(status.getEditCollection().get(2).getEditErrors().isEmpty());
- final String errorMessage = status.getEditCollection().get(2).getEditErrors().get(0).getErrorMessage();
+ assertFalse(status.ok());
+ assertEquals(3, status.editCollection().size());
+ assertTrue(status.editCollection().get(0).isOk());
+ assertTrue(status.editCollection().get(1).isOk());
+ assertFalse(status.editCollection().get(2).isOk());
+ assertFalse(status.editCollection().get(2).getEditErrors().isEmpty());
+ final String errorMessage = status.editCollection().get(2).getEditErrors().get(0).getErrorMessage();
assertEquals("Data does not exist", errorMessage);
}
InstanceIdentifierContext.ofLocalPath(JUKEBOX_SCHEMA, GAP_IID),
List.of(new PatchEntity("edit", Operation.Delete, CREATE_AND_DELETE_TARGET)), "patchD"),
deleteNonexistentDataTestStrategy(), JUKEBOX_SCHEMA);
- assertFalse(patchStatusContext.isOk());
+ assertFalse(patchStatusContext.ok());
}
abstract @NonNull RestconfStrategy deleteNonexistentDataTestStrategy();
private static void patch(final PatchContext patchContext, final RestconfStrategy strategy, final boolean failed) {
final var patchStatusContext = PatchDataTransactionUtil.patchData(patchContext, strategy, JUKEBOX_SCHEMA);
- for (var entity : patchStatusContext.getEditCollection()) {
+ for (var entity : patchStatusContext.editCollection()) {
if (failed) {
assertTrue("Edit " + entity.getEditId() + " failed", entity.isOk());
} else {
assertTrue(entity.isOk());
}
}
- assertTrue(patchStatusContext.isOk());
+ assertTrue(patchStatusContext.ok());
}
}
@Override
void assertTestDeleteNonexistentData(final PatchStatusContext status) {
- final var editCollection = status.getEditCollection();
+ final var editCollection = status.editCollection();
assertEquals(1, editCollection.size());
final var editErrors = editCollection.get(0).getEditErrors();
assertEquals(1, editErrors.size());
@Override
void assertTestDeleteNonexistentData(final PatchStatusContext status) {
- final var globalErrors = status.getGlobalErrors();
+ final var globalErrors = status.globalErrors();
assertEquals(1, globalErrors.size());
final var globalError = globalErrors.get(0);
assertEquals(ErrorType.PROTOCOL, globalError.getErrorType());