import static org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants.STREAM_PATH_PART;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;
import java.net.URI;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMMountPoint;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
-import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
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.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
validTopLevelNodeName(iid.getInstanceIdentifier(), payload);
validateListKeysEqualityInPayloadAndUri(payload);
- final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint();
- final EffectiveModelContext ref = mountPoint == null
- ? schemaContextHandler.get() : modelContext(mountPoint);
-
- final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
- return PutDataTransactionUtil.putData(payload, ref, strategy, params);
+ final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
+ return PutDataTransactionUtil.putData(payload, iid.getSchemaContext(), strategy, params);
}
@Override
@Override
public Response postData(final NormalizedNodePayload payload, final UriInfo uriInfo) {
requireNonNull(payload);
- if (payload.getInstanceIdentifierContext().getSchemaNode() instanceof ActionDefinition) {
+ final InstanceIdentifierContext iid = payload.getInstanceIdentifierContext();
+ if (iid.getSchemaNode() instanceof ActionDefinition) {
return invokeAction(payload);
}
final WriteDataParams params = QueryParams.newWriteDataParams(uriInfo);
- final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint();
- final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
- return PostDataTransactionUtil.postData(uriInfo, payload, strategy, getSchemaContext(mountPoint), params);
+ final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
+ return PostDataTransactionUtil.postData(uriInfo, payload, strategy, iid.getSchemaContext(), params);
}
@Override
@Override
public PatchStatusContext patchData(final PatchContext context, final UriInfo uriInfo) {
- final DOMMountPoint mountPoint = RestconfDocumentedException.throwIfNull(context,
+ final InstanceIdentifierContext iid = RestconfDocumentedException.throwIfNull(context,
ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE, "No patch documented provided")
- .getInstanceIdentifierContext().getMountPoint();
- final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
- return PatchDataTransactionUtil.patchData(context, strategy, getSchemaContext(mountPoint));
+ .getInstanceIdentifierContext();
+ final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
+ return PatchDataTransactionUtil.patchData(context, strategy, iid.getSchemaContext());
}
@Override
validTopLevelNodeName(iid.getInstanceIdentifier(), payload);
validateListKeysEqualityInPayloadAndUri(payload);
- final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint();
- final EffectiveModelContext ref = mountPoint == null
- ? schemaContextHandler.get() : modelContext(mountPoint);
- final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
-
- return PlainPatchDataTransactionUtil.patchData(payload, strategy, ref);
- }
-
- private EffectiveModelContext getSchemaContext(final DOMMountPoint mountPoint) {
- return mountPoint == null ? schemaContextHandler.get() : modelContext(mountPoint);
+ final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
+ return PlainPatchDataTransactionUtil.patchData(payload, strategy, iid.getSchemaContext());
}
// FIXME: why is this synchronized?
}
final DOMMountPoint mountPoint = context.getMountPoint();
- final Absolute schemaPath = Absolute.of(ImmutableList.copyOf(context.getSchemaNode().getPath()
- .getPathFromRoot()));
+ final Absolute schemaPath = context.inference().toSchemaInferenceStack().toSchemaNodeIdentifier();
final DOMActionResult response;
if (mountPoint != null) {
response = invokeAction((ContainerNode) data, schemaPath, yangIIdContext, mountPoint);
return RestconfInvokeOperationsServiceImpl.checkedGet(Futures.catching(actionService.invokeAction(
schemaPath, new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, yangIId.getParent()), data),
DOMActionException.class,
- cause -> new SimpleDOMActionResult(ImmutableList.of(RpcResultBuilder.newError(
- RpcError.ErrorType.RPC, "operation-failed", cause.getMessage()))),
+ cause -> new SimpleDOMActionResult(List.of(RpcResultBuilder.newError(
+ ErrorType.RPC, ErrorTag.OPERATION_FAILED, cause.getMessage()))),
MoreExecutors.directExecutor()));
}
}
}
}
-
- private static EffectiveModelContext modelContext(final DOMMountPoint mountPoint) {
- return mountPoint.getService(DOMSchemaService.class)
- .flatMap(svc -> Optional.ofNullable(svc.getGlobalContext()))
- .orElse(null);
- }
}