Remove AbstractNormalizedNodeBodyReader
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / jersey / providers / JsonNormalizedNodeBodyReader.java
diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java
deleted file mode 100644 (file)
index 1e152d1..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.restconf.nb.rfc8040.jersey.providers;
-
-import com.google.common.base.Throwables;
-import com.google.gson.stream.JsonReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.ext.Provider;
-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.nb.rfc8040.MediaTypes;
-import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
-import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
-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.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
-import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
-import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
-import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException;
-import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Provider
-@Consumes({ MediaTypes.APPLICATION_YANG_DATA_JSON, MediaType.APPLICATION_JSON })
-public class JsonNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReader {
-    private static final Logger LOG = LoggerFactory.getLogger(JsonNormalizedNodeBodyReader.class);
-
-    public JsonNormalizedNodeBodyReader(final DatabindProvider databindProvider,
-            final DOMMountPointService mountPointService) {
-        super(databindProvider, mountPointService);
-    }
-
-    @SuppressWarnings("checkstyle:IllegalCatch")
-    @Override
-    protected NormalizedNodePayload readBody(final InstanceIdentifierContext path, final InputStream entityStream)
-            throws WebApplicationException {
-        try {
-            return readFrom(path, entityStream);
-        } catch (final Exception e) {
-            propagateExceptionAs(e);
-            return null;
-        }
-    }
-
-    public static NormalizedNodePayload readFrom(final InstanceIdentifierContext path, final InputStream entityStream) {
-        final NormalizationResultHolder resultHolder = new NormalizationResultHolder();
-        final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
-
-        final var parentSchema = path.inference();
-
-        final JsonParserStream jsonParser = JsonParserStream.create(writer,
-            JSONCodecFactorySupplier.RFC7951.getShared(path.getSchemaContext()), parentSchema);
-
-        final JsonReader reader = new JsonReader(new InputStreamReader(entityStream, StandardCharsets.UTF_8));
-        jsonParser.parse(reader);
-
-        NormalizedNode result = resultHolder.getResult().data();
-        final List<YangInstanceIdentifier.PathArgument> iiToDataList = new ArrayList<>();
-
-        while (result instanceof ChoiceNode choice) {
-            final var childNode = choice.body().iterator().next();
-            iiToDataList.add(result.name());
-            result = childNode;
-        }
-
-        if (result instanceof MapEntryNode) {
-            iiToDataList.add(new NodeIdentifier(result.name().getNodeType()));
-            iiToDataList.add(result.name());
-        } else {
-            final var parentPath = parentSchema.statementPath();
-            if (parentPath.isEmpty() || !(parentPath.get(parentPath.size() - 1) instanceof OperationDefinition)) {
-                iiToDataList.add(result.name());
-            }
-        }
-
-        // FIXME: can result really be null?
-        return NormalizedNodePayload.ofNullable(path.withConcatenatedArgs(iiToDataList), result);
-    }
-
-    private static void propagateExceptionAs(final Exception exception) throws RestconfDocumentedException {
-        Throwables.throwIfInstanceOf(exception, RestconfDocumentedException.class);
-        LOG.debug("Error parsing json input", exception);
-
-        if (exception instanceof ResultAlreadySetException) {
-            throw new RestconfDocumentedException("Error parsing json input: Failed to create new parse result data. "
-                    + "Are you creating multiple resources/subresources in POST request?", exception);
-        }
-
-        RestconfDocumentedException.throwIfYangError(exception);
-        throw new RestconfDocumentedException("Error parsing input: " + exception.getMessage(), ErrorType.PROTOCOL,
-            ErrorTag.MALFORMED_MESSAGE, exception);
-    }
-}