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;
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;
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;
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;
private final Registration reg;
@SuppressWarnings("unused")
+ @SuppressFBWarnings(value = "URF_UNREAD_FIELD", justification = "https://github.com/spotbugs/spotbugs/issues/2749")
private volatile MdsalRestconfStrategy localStrategy;
@Inject
@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);
}
@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