import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
-import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
import org.opendaylight.restconf.common.patch.PatchContext;
import org.opendaylight.restconf.common.patch.PatchEditOperation;
import org.opendaylight.restconf.common.patch.PatchEntity;
import org.opendaylight.restconf.nb.rfc8040.MediaTypes;
-import org.opendaylight.restconf.nb.rfc8040.codecs.StringModuleInstanceIdentifierCodec;
import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
import org.opendaylight.restconf.nb.rfc8040.utils.parser.ParserIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorTag;
import org.opendaylight.yangtools.yang.common.ErrorType;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException;
+import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
@SuppressWarnings("checkstyle:IllegalCatch")
@Override
- protected PatchContext readBody(final InstanceIdentifierContext<?> path, final InputStream entityStream)
+ protected PatchContext readBody(final InstanceIdentifierContext path, final InputStream entityStream)
throws WebApplicationException {
try {
return readFrom(path, entityStream);
}
}
- private PatchContext readFrom(final InstanceIdentifierContext<?> path, final InputStream entityStream)
+ private PatchContext readFrom(final InstanceIdentifierContext path, final InputStream entityStream)
throws IOException {
final JsonReader jsonReader = new JsonReader(new InputStreamReader(entityStream, StandardCharsets.UTF_8));
AtomicReference<String> patchId = new AtomicReference<>();
RestconfDocumentedException.throwIfYangError(exception);
throw new RestconfDocumentedException("Error parsing json input: " + exception.getMessage(), ErrorType.PROTOCOL,
- ErrorTag.MALFORMED_MESSAGE, exception);
+ ErrorTag.MALFORMED_MESSAGE, exception);
}
- private List<PatchEntity> read(final JsonReader in, final InstanceIdentifierContext<?> path,
+ private List<PatchEntity> read(final JsonReader in, final InstanceIdentifierContext path,
final AtomicReference<String> patchId) throws IOException {
+ final DataSchemaContextTree schemaTree = DataSchemaContextTree.from(path.getSchemaContext());
final List<PatchEntity> resultCollection = new ArrayList<>();
- final StringModuleInstanceIdentifierCodec codec = new StringModuleInstanceIdentifierCodec(
- path.getSchemaContext());
final JsonPatchBodyReader.PatchEdit edit = new JsonPatchBodyReader.PatchEdit();
while (in.hasNext()) {
case END_DOCUMENT:
break;
case NAME:
- parseByName(in.nextName(), edit, in, path, codec, resultCollection, patchId);
+ parseByName(in.nextName(), edit, in, path, schemaTree, resultCollection, patchId);
break;
case END_OBJECT:
in.endObject();
* @throws IOException if operation fails
*/
private void parseByName(final @NonNull String name, final @NonNull PatchEdit edit,
- final @NonNull JsonReader in, final @NonNull InstanceIdentifierContext<?> path,
- final @NonNull StringModuleInstanceIdentifierCodec codec,
+ final @NonNull JsonReader in, final @NonNull InstanceIdentifierContext path,
+ final @NonNull DataSchemaContextTree schemaTree,
final @NonNull List<PatchEntity> resultCollection,
final @NonNull AtomicReference<String> patchId) throws IOException {
switch (name) {
in.beginArray();
while (in.hasNext()) {
- readEditDefinition(edit, in, path, codec);
+ readEditDefinition(edit, in, path, schemaTree);
resultCollection.add(prepareEditOperation(edit));
edit.clear();
}
in.endArray();
} else {
- readEditDefinition(edit, in, path, codec);
+ readEditDefinition(edit, in, path, schemaTree);
resultCollection.add(prepareEditOperation(edit));
edit.clear();
}
* @throws IOException if operation fails
*/
private void readEditDefinition(final @NonNull PatchEdit edit, final @NonNull JsonReader in,
- final @NonNull InstanceIdentifierContext<?> path,
- final @NonNull StringModuleInstanceIdentifierCodec codec) throws IOException {
+ final @NonNull InstanceIdentifierContext path,
+ final @NonNull DataSchemaContextTree schemaTree) throws IOException {
String deferredValue = null;
in.beginObject();
final EffectiveStatement<?, ?> parentStmt = SchemaInferenceStack.ofInstantiatedPath(
path.getSchemaContext(),
- codec.getDataContextTree().findChild(edit.getTarget()).orElseThrow().getDataSchemaNode()
+ schemaTree.findChild(edit.getTarget()).orElseThrow().getDataSchemaNode()
.getPath().getParent())
.currentStatement();
verify(parentStmt instanceof SchemaNode, "Unexpected parent %s", parentStmt);
* @return NormalizedNode representing data
*/
private static NormalizedNode readEditData(final @NonNull JsonReader in,
- final @NonNull SchemaNode targetSchemaNode, final @NonNull InstanceIdentifierContext<?> path) {
+ final @NonNull SchemaNode targetSchemaNode, final @NonNull InstanceIdentifierContext path) {
final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
JsonParserStream.create(writer, JSONCodecFactorySupplier.RFC7951.getShared(path.getSchemaContext()),