Bump upstreams
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / server / mdsal / MdsalRestconfServer.java
index 426a6983bf01eb93f38993639e6fbedb39512341..edfe86e53d8e01d5b2c45b7b975250d91511afab 100644 (file)
@@ -12,7 +12,7 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
-import java.io.IOException;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.VarHandle;
 import java.net.URI;
@@ -34,8 +34,6 @@ import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
 import org.opendaylight.restconf.api.ApiPath;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfFuture;
-import org.opendaylight.restconf.common.patch.PatchContext;
-import org.opendaylight.restconf.common.patch.PatchStatusContext;
 import org.opendaylight.restconf.nb.rfc8040.databind.ChildBody;
 import org.opendaylight.restconf.nb.rfc8040.databind.DataPostBody;
 import org.opendaylight.restconf.nb.rfc8040.databind.OperationInputBody;
@@ -44,14 +42,14 @@ import org.opendaylight.restconf.nb.rfc8040.databind.ResourceBody;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.MdsalRestconfStrategy;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy;
-import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy.StrategyAndPath;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy.StrategyAndTail;
 import org.opendaylight.restconf.server.api.DataGetParams;
-import org.opendaylight.restconf.server.api.DataPatchPath;
+import org.opendaylight.restconf.server.api.DataGetResult;
+import org.opendaylight.restconf.server.api.DataPatchResult;
 import org.opendaylight.restconf.server.api.DataPostResult;
 import org.opendaylight.restconf.server.api.DataPostResult.CreateResource;
-import org.opendaylight.restconf.server.api.DataPutPath;
 import org.opendaylight.restconf.server.api.DataPutResult;
+import org.opendaylight.restconf.server.api.DataYangPatchResult;
 import org.opendaylight.restconf.server.api.DatabindContext;
 import org.opendaylight.restconf.server.api.ModulesGetResult;
 import org.opendaylight.restconf.server.api.OperationsGetResult;
@@ -68,8 +66,6 @@ import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.YangNames;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
@@ -115,6 +111,7 @@ public final class MdsalRestconfServer
     private final Registration reg;
 
     @SuppressWarnings("unused")
+    @SuppressFBWarnings(value = "URF_UNREAD_FIELD", justification = "https://github.com/spotbugs/spotbugs/issues/2749")
     private volatile MdsalRestconfStrategy localStrategy;
 
     @Inject
@@ -173,22 +170,22 @@ public final class MdsalRestconfServer
 
     @Override
     public RestconfFuture<Empty> dataDELETE(final ApiPath identifier) {
-        final StrategyAndPath stratAndPath;
+        final StrategyAndTail stratAndTail;
         try {
-            stratAndPath = localStrategy().resolveStrategyPath(identifier);
+            stratAndTail = localStrategy().resolveStrategy(identifier);
         } catch (RestconfDocumentedException e) {
             return RestconfFuture.failed(e);
         }
-        return stratAndPath.strategy().delete(stratAndPath.path().instance());
+        return stratAndTail.strategy().dataDELETE(stratAndTail.tail());
     }
 
     @Override
-    public RestconfFuture<NormalizedNodePayload> dataGET(final DataGetParams params) {
+    public RestconfFuture<DataGetResult> dataGET(final DataGetParams params) {
         return localStrategy().dataGET(ApiPath.empty(), params);
     }
 
     @Override
-    public RestconfFuture<NormalizedNodePayload> dataGET(final ApiPath identifier, final DataGetParams params) {
+    public RestconfFuture<DataGetResult> dataGET(final ApiPath identifier, final DataGetParams params) {
         final StrategyAndTail stratAndTail;
         try {
             stratAndTail = localStrategy().resolveStrategy(identifier);
@@ -199,64 +196,35 @@ public final class MdsalRestconfServer
     }
 
     @Override
-    public RestconfFuture<Empty> dataPATCH(final ResourceBody body) {
-        final var strategy = localStrategy();
-        return dataPATCH(strategy, new DataPutPath(strategy.databind()), body);
+    public RestconfFuture<DataPatchResult> dataPATCH(final ResourceBody body) {
+        return localStrategy().dataPATCH(ApiPath.empty(), body);
     }
 
     @Override
-    public RestconfFuture<Empty> dataPATCH(final ApiPath identifier, final ResourceBody body) {
-        final StrategyAndPath strategyAndPath;
-        try {
-            strategyAndPath = localStrategy().resolveStrategyPath(identifier);
-        } catch (RestconfDocumentedException e) {
-            return RestconfFuture.failed(e);
-        }
-        final var strategy = strategyAndPath.strategy();
-        final var path = strategyAndPath.path();
-        return dataPATCH(strategy, new DataPutPath(strategy.databind(), path.inference(), path.instance()), body);
-    }
-
-    private static @NonNull RestconfFuture<Empty> dataPATCH(final RestconfStrategy strategy, final DataPutPath path,
-            final ResourceBody body) {
-        final NormalizedNode data;
+    public RestconfFuture<DataPatchResult> dataPATCH(final ApiPath identifier, final ResourceBody body) {
+        final StrategyAndTail strategyAndTail;
         try {
-            data = body.toNormalizedNode(path);
+            strategyAndTail = localStrategy().resolveStrategy(identifier);
         } catch (RestconfDocumentedException e) {
             return RestconfFuture.failed(e);
         }
-        return strategy.merge(path.instance(), data);
+        return strategyAndTail.strategy().dataPATCH(strategyAndTail.tail(), body);
     }
 
     @Override
-    public RestconfFuture<PatchStatusContext> dataPATCH(final PatchBody body) {
-        final var strategy = localStrategy();
-        return dataPATCH(strategy, new DataPatchPath(strategy.databind(), YangInstanceIdentifier.of()), body);
+    public RestconfFuture<DataYangPatchResult> dataPATCH(final PatchBody body) {
+        return localStrategy().dataPATCH(ApiPath.empty(), body);
     }
 
     @Override
-    public RestconfFuture<PatchStatusContext> dataPATCH(final ApiPath identifier, final PatchBody body) {
-        final StrategyAndPath stratAndPath;
+    public RestconfFuture<DataYangPatchResult> dataPATCH(final ApiPath identifier, final PatchBody body) {
+        final StrategyAndTail strategyAndTail;
         try {
-            stratAndPath = localStrategy().resolveStrategyPath(identifier);
+            strategyAndTail = localStrategy().resolveStrategy(identifier);
         } catch (RestconfDocumentedException e) {
             return RestconfFuture.failed(e);
         }
-        final var strategy = stratAndPath.strategy();
-        return dataPATCH(strategy, new DataPatchPath(strategy.databind(), stratAndPath.path().instance()), body);
-    }
-
-    private static @NonNull RestconfFuture<PatchStatusContext> dataPATCH(final RestconfStrategy strategy,
-            final DataPatchPath path, final PatchBody body) {
-        final PatchContext patch;
-        try {
-            patch = body.toPatchContext(path);
-        } catch (IOException e) {
-            LOG.debug("Error parsing YANG Patch input", e);
-            return RestconfFuture.failed(new RestconfDocumentedException("Error parsing input: " + e.getMessage(),
-                ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE, e));
-        }
-        return strategy.patchData(patch);
+        return strategyAndTail.strategy().dataPATCH(strategyAndTail.tail(), body);
     }
 
     @Override