import org.opendaylight.restconf.nb.rfc8040.rests.services.api.RestconfStreamsSubscriptionService;
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.RestconfTransaction;
import org.opendaylight.restconf.nb.rfc8040.rests.utils.DeleteDataTransactionUtil;
import org.opendaylight.restconf.nb.rfc8040.rests.utils.PatchDataTransactionUtil;
import org.opendaylight.restconf.nb.rfc8040.rests.utils.PlainPatchDataTransactionUtil;
import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
final DOMMountPoint mountPoint = instanceIdentifier.getMountPoint();
final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
- final NormalizedNode<?, ?> node = readData(identifier, parameters.getContent(),
- instanceIdentifier.getInstanceIdentifier(), strategy, parameters.getWithDefault(), schemaContextRef,
- uriInfo);
+ final NormalizedNode<?, ?> node;
+ if (parameters.getFieldPaths() != null && !parameters.getFieldPaths().isEmpty()) {
+ node = ReadDataTransactionUtil.readData(parameters.getContent(), instanceIdentifier.getInstanceIdentifier(),
+ strategy, parameters.getWithDefault(), schemaContextRef, parameters.getFieldPaths());
+ } else {
+ node = readData(identifier, parameters.getContent(), instanceIdentifier.getInstanceIdentifier(), strategy,
+ parameters.getWithDefault(), schemaContextRef, uriInfo);
+ }
if (identifier != null && identifier.contains(STREAM_PATH) && identifier.contains(STREAM_ACCESS_PATH_PART)
&& identifier.contains(STREAM_LOCATION_PATH_PART)) {
final String value = (String) node.getValue();
private void createAllYangNotificationStreams(final RestconfStrategy strategy,
final EffectiveModelContext schemaContext, final UriInfo uriInfo) {
- strategy.prepareReadWriteExecution();
- final boolean exist = checkExist(schemaContext, strategy);
+ final RestconfTransaction transaction = strategy.prepareWriteExecution();
for (final NotificationDefinition notificationDefinition : schemaContext.getNotifications()) {
final NotificationListenerAdapter notifiStreamXML =
final NotificationListenerAdapter notifiStreamJSON =
CreateStreamUtil.createYangNotifiStream(notificationDefinition, schemaContext,
NotificationOutputType.JSON);
- writeNotificationStreamToDatastore(schemaContext, uriInfo, strategy, exist, notifiStreamXML);
- writeNotificationStreamToDatastore(schemaContext, uriInfo, strategy, exist, notifiStreamJSON);
+ writeNotificationStreamToDatastore(schemaContext, uriInfo, transaction, notifiStreamXML);
+ writeNotificationStreamToDatastore(schemaContext, uriInfo, transaction, notifiStreamJSON);
}
try {
- strategy.commit().get();
+ transaction.commit().get();
} catch (final InterruptedException | ExecutionException e) {
throw new RestconfDocumentedException("Problem while putting data to DS.", e);
}
}
private void writeNotificationStreamToDatastore(final EffectiveModelContext schemaContext,
- final UriInfo uriInfo, final RestconfStrategy strategy, final boolean exist,
- final NotificationListenerAdapter listener) {
+ final UriInfo uriInfo, final RestconfTransaction transaction, final NotificationListenerAdapter listener) {
final URI uri = streamUtils.prepareUriByStreamName(uriInfo, listener.getStreamName());
- final NormalizedNode<?, ?> mapToStreams =
- RestconfMappingNodeUtil.mapYangNotificationStreamByIetfRestconfMonitoring(
+ final MapEntryNode mapToStreams = RestconfMappingNodeUtil.mapYangNotificationStreamByIetfRestconfMonitoring(
listener.getSchemaPath().lastNodeIdentifier(), schemaContext.getNotifications(), null,
- listener.getOutputType(), uri, SubscribeToStreamUtil.getMonitoringModule(schemaContext), exist);
- writeDataToDS(schemaContext,
- listener.getSchemaPath().lastNodeIdentifier().getLocalName(), strategy, exist, mapToStreams);
- }
+ listener.getOutputType(), uri);
- private static boolean checkExist(final EffectiveModelContext schemaContext, final RestconfStrategy strategy) {
- try {
- return strategy.exists(LogicalDatastoreType.OPERATIONAL,
- IdentifierCodec.deserialize(Rfc8040.MonitoringModule.PATH_TO_STREAMS, schemaContext)).get();
- } catch (final InterruptedException | ExecutionException exception) {
- throw new RestconfDocumentedException("Problem while checking data if exists", exception);
- }
- }
-
- private static void writeDataToDS(final EffectiveModelContext schemaContext, final String name,
- final RestconfStrategy strategy, final boolean exist,
- final NormalizedNode<?, ?> mapToStreams) {
- final String pathId;
- if (exist) {
- pathId = Rfc8040.MonitoringModule.PATH_TO_STREAM_WITHOUT_KEY + name;
- } else {
- pathId = Rfc8040.MonitoringModule.PATH_TO_STREAMS;
- }
- strategy.merge(LogicalDatastoreType.OPERATIONAL, IdentifierCodec.deserialize(pathId, schemaContext),
+ final String name = listener.getSchemaPath().lastNodeIdentifier().getLocalName();
+ transaction.merge(LogicalDatastoreType.OPERATIONAL,
+ IdentifierCodec.deserialize(Rfc8040.MonitoringModule.PATH_TO_STREAM_WITHOUT_KEY + name, schemaContext),
mapToStreams);
}