Merge "Bug 9092: revert to org.json temporarily"
[netconf.git] / restconf / sal-rest-connector / src / main / java / org / opendaylight / restconf / restful / utils / ReadDataTransactionUtil.java
index e18ea0961337881ae5a7b32d913df1b5c7954728..58bc3d1c6659588ff4beacc3820f1ed6657aea11 100644 (file)
@@ -7,9 +7,13 @@
  */
 package org.opendaylight.restconf.restful.utils;
 
+import static org.opendaylight.restconf.restful.utils.RestconfStreamsConstants.STREAMS_PATH;
+import static org.opendaylight.restconf.restful.utils.RestconfStreamsConstants.STREAM_PATH_PART;
+
 import com.google.common.base.Optional;
 import com.google.common.primitives.Ints;
 import com.google.common.util.concurrent.CheckedFuture;
+import java.net.URI;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -21,14 +25,23 @@ import javax.annotation.Nullable;
 import javax.ws.rs.core.UriInfo;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
+import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
 import org.opendaylight.netconf.sal.restconf.impl.RestconfDocumentedException;
 import org.opendaylight.netconf.sal.restconf.impl.RestconfError;
 import org.opendaylight.netconf.sal.restconf.impl.WriterParameters;
 import org.opendaylight.netconf.sal.restconf.impl.WriterParameters.WriterParametersBuilder;
+import org.opendaylight.netconf.sal.streams.listeners.NotificationListenerAdapter;
+import org.opendaylight.restconf.common.references.SchemaContextRef;
 import org.opendaylight.restconf.restful.transaction.TransactionVarsWrapper;
+import org.opendaylight.restconf.utils.mapping.RestconfMappingNodeUtil;
 import org.opendaylight.restconf.utils.parser.ParserFieldsParameter;
+import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
@@ -36,6 +49,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum
 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
@@ -45,8 +59,16 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeAttrBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
+import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 /**
  * Util class for read data from data store via transaction.
@@ -68,14 +90,39 @@ public final class ReadDataTransactionUtil {
      *
      *
      * @param identifier
-     *            - {@link InstanceIdentifierContext}
+     *             {@link InstanceIdentifierContext}
      * @param uriInfo
-     *            - URI info
+     *             URI info
+     * @param tagged
+     *             set tagged for {@link WriterParameters}
      * @return {@link WriterParameters}
      */
-    public static @Nonnull WriterParameters parseUriParameters(@Nonnull final InstanceIdentifierContext<?> identifier,
+    @Nonnull
+    public static WriterParameters parseUriParameters(@Nonnull final InstanceIdentifierContext<?> identifier,
+            @Nullable final UriInfo uriInfo, final boolean tagged) {
+        return parseParams(identifier, uriInfo, tagged);
+    }
+
+    /**
+     * Parse parameters from URI request and check their types and values.
+     *
+     *
+     * @param identifier
+     *             {@link InstanceIdentifierContext}
+     * @param uriInfo
+     *             URI info
+     * @return {@link WriterParameters}
+     */
+    @Nonnull
+    public static WriterParameters parseUriParameters(@Nonnull final InstanceIdentifierContext<?> identifier,
                                                                @Nullable final UriInfo uriInfo) {
+        return parseParams(identifier, uriInfo, false);
+    }
+
+    private static WriterParameters parseParams(final InstanceIdentifierContext<?> identifier, final UriInfo uriInfo,
+            final boolean tagged) {
         final WriterParametersBuilder builder = new WriterParametersBuilder();
+        builder.setTagged(tagged);
 
         if (uriInfo == null) {
             return builder.build();
@@ -87,7 +134,7 @@ public final class ReadDataTransactionUtil {
                 uriInfo.getQueryParameters().keySet(),
                 RestconfDataServiceConstant.ReadData.CONTENT,
                 RestconfDataServiceConstant.ReadData.DEPTH,
-                RestconfDataServiceConstant.ReadData.FIELDS);
+                RestconfDataServiceConstant.ReadData.FIELDS, RestconfDataServiceConstant.ReadData.WITH_DEFAULTS);
 
         // read parameters from URI or set default values
         final List<String> content = uriInfo.getQueryParameters().getOrDefault(
@@ -124,9 +171,9 @@ public final class ReadDataTransactionUtil {
         if (!depth.get(0).equals(RestconfDataServiceConstant.ReadData.UNBOUNDED)) {
             final Integer value = Ints.tryParse(depth.get(0));
 
-            if (value == null
-                    || (!(value >= RestconfDataServiceConstant.ReadData.MIN_DEPTH
-                        && value <= RestconfDataServiceConstant.ReadData.MAX_DEPTH))) {
+            if ((value == null)
+                    || (!((value >= RestconfDataServiceConstant.ReadData.MIN_DEPTH)
+                        && (value <= RestconfDataServiceConstant.ReadData.MAX_DEPTH)))) {
                 throw new RestconfDocumentedException(
                         new RestconfError(RestconfError.ErrorType.PROTOCOL, RestconfError.ErrorTag.INVALID_VALUE,
                                 "Invalid depth parameter: " + depth, null,
@@ -148,24 +195,46 @@ public final class ReadDataTransactionUtil {
      * Read specific type of data from data store via transaction.
      *
      * @param valueOfContent
-     *            - type of data to read (config, state, all)
+     *             type of data to read (config, state, all)
+     * @param transactionNode
+     *             {@link TransactionVarsWrapper} - wrapper for variables
+     * @return {@link NormalizedNode}
+     */
+    @Nullable
+    public static NormalizedNode<?, ?> readData(@Nonnull final String valueOfContent,
+            @Nonnull final TransactionVarsWrapper transactionNode) {
+        return readData(valueOfContent, transactionNode, null);
+    }
+
+    /**
+     * Read specific type of data from data store via transaction.
+     *
+     * @param valueOfContent
+     *             type of data to read (config, state, all)
      * @param transactionNode
-     *            - {@link TransactionVarsWrapper} - wrapper for variables
+     *             {@link TransactionVarsWrapper} - wrapper for variables
+     * @param withDefa
+     *             vaule of with-defaults parameter
      * @return {@link NormalizedNode}
      */
-    public static @Nullable NormalizedNode<?, ?> readData(@Nonnull final String valueOfContent,
-                                                          @Nonnull final TransactionVarsWrapper transactionNode) {
+    @Nullable
+    public static NormalizedNode<?, ?> readData(@Nonnull final String valueOfContent,
+            @Nonnull final TransactionVarsWrapper transactionNode, final String withDefa) {
         switch (valueOfContent) {
             case RestconfDataServiceConstant.ReadData.CONFIG:
                 transactionNode.setLogicalDatastoreType(LogicalDatastoreType.CONFIGURATION);
-                return readDataViaTransaction(transactionNode);
-
+                if (withDefa == null) {
+                    return readDataViaTransaction(transactionNode);
+                } else {
+                    return prepareDataByParamWithDef(readDataViaTransaction(transactionNode),
+                            transactionNode.getInstanceIdentifier().getInstanceIdentifier(), withDefa);
+                }
             case RestconfDataServiceConstant.ReadData.NONCONFIG:
                 transactionNode.setLogicalDatastoreType(LogicalDatastoreType.OPERATIONAL);
                 return readDataViaTransaction(transactionNode);
 
             case RestconfDataServiceConstant.ReadData.ALL:
-                return readAllData(transactionNode);
+                return readAllData(transactionNode, withDefa);
 
             default:
                 throw new RestconfDocumentedException(
@@ -175,23 +244,202 @@ public final class ReadDataTransactionUtil {
         }
     }
 
+    /**
+     * Read specific type of data from data store via transaction and if identifier read data from
+     * streams then put streams from actual schema context to datastore.
+     *
+     * @param identifier
+     *             identifier of data to read
+     * @param content
+     *             type of data to read (config, state, all)
+     * @param transactionNode
+     *             {@link TransactionVarsWrapper} - wrapper for variables
+     * @param withDefa
+     *             vaule of with-defaults parameter
+     * @param schemaContextRef
+     *             schema context
+     * @param uriInfo
+     *             uri info
+     * @return {@link NormalizedNode}
+     */
+    public static NormalizedNode<?, ?> readData(final String identifier, final String content,
+                                                final TransactionVarsWrapper transactionNode, final String withDefa,
+                                                final SchemaContextRef schemaContextRef, final UriInfo uriInfo) {
+        if (identifier.contains(STREAMS_PATH) && !identifier.contains(STREAM_PATH_PART)) {
+            final DOMDataReadWriteTransaction wTx = transactionNode.getTransactionChain().newReadWriteTransaction();
+            final SchemaContext schemaContext = schemaContextRef.get();
+            final boolean exist = SubscribeToStreamUtil.checkExist(schemaContext, wTx);
+
+            for (final NotificationDefinition notificationDefinition : schemaContextRef.get().getNotifications()) {
+                final List<NotificationListenerAdapter> notifiStreamXML =
+                        CreateStreamUtil.createYangNotifiStream(notificationDefinition, schemaContextRef,
+                                NotificationOutputType.XML.getName());
+                final List<NotificationListenerAdapter> notifiStreamJSON =
+                        CreateStreamUtil.createYangNotifiStream(notificationDefinition, schemaContextRef,
+                                NotificationOutputType.JSON.getName());
+                notifiStreamJSON.addAll(notifiStreamXML);
+
+                for (final NotificationListenerAdapter listener : notifiStreamJSON) {
+                    final URI uri = SubscribeToStreamUtil.prepareUriByStreamName(uriInfo, listener.getStreamName());
+                    final NormalizedNode mapToStreams =
+                            RestconfMappingNodeUtil.mapYangNotificationStreamByIetfRestconfMonitoring(
+                                    listener.getSchemaPath().getLastComponent(), schemaContext.getNotifications(),
+                                    null, listener.getOutputType(), uri,
+                                    SubscribeToStreamUtil.getMonitoringModule(schemaContext), exist);
+                    SubscribeToStreamUtil.writeDataToDS(schemaContext,
+                            listener.getSchemaPath().getLastComponent().getLocalName(), wTx, exist,
+                            mapToStreams);
+                }
+            }
+            SubscribeToStreamUtil.submitData(wTx);
+        }
+        return readData(content, transactionNode, withDefa);
+    }
+
+    private static NormalizedNode<?, ?> prepareDataByParamWithDef(final NormalizedNode<?, ?> result,
+            final YangInstanceIdentifier path, final String withDefa) {
+        boolean trim;
+        switch (withDefa) {
+            case "trim":
+                trim = true;
+                break;
+            case "explicit":
+                trim = false;
+                break;
+            default:
+                throw new RestconfDocumentedException("");
+        }
+
+        final SchemaContext ctx = ControllerContext.getInstance().getGlobalSchema();
+        final DataSchemaContextTree baseSchemaCtxTree = DataSchemaContextTree.from(ctx);
+        final DataSchemaNode baseSchemaNode = baseSchemaCtxTree.getChild(path).getDataSchemaNode();
+        if (result instanceof ContainerNode) {
+            final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> builder =
+                    Builders.containerBuilder((ContainerSchemaNode) baseSchemaNode);
+            buildCont(builder, (ContainerNode) result, baseSchemaCtxTree, path, trim);
+            return builder.build();
+        } else {
+            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> builder =
+                    Builders.mapEntryBuilder((ListSchemaNode) baseSchemaNode);
+            buildMapEntryBuilder(builder, (MapEntryNode) result, baseSchemaCtxTree, path, trim,
+                    ((ListSchemaNode) baseSchemaNode).getKeyDefinition());
+            return builder.build();
+        }
+    }
+
+    private static void buildMapEntryBuilder(
+            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> builder,
+            final MapEntryNode result, final DataSchemaContextTree baseSchemaCtxTree,
+            final YangInstanceIdentifier actualPath, final boolean trim, final List<QName> keys) {
+        for (final DataContainerChild<? extends PathArgument, ?> child : result.getValue()) {
+            final YangInstanceIdentifier path = actualPath.node(child.getIdentifier());
+            final DataSchemaNode childSchema = baseSchemaCtxTree.getChild(path).getDataSchemaNode();
+            if (child instanceof ContainerNode) {
+                final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> childBuilder =
+                        Builders.containerBuilder((ContainerSchemaNode) childSchema);
+                buildCont(childBuilder, (ContainerNode) child, baseSchemaCtxTree, path, trim);
+                builder.withChild(childBuilder.build());
+            } else if (child instanceof MapNode) {
+                final CollectionNodeBuilder<MapEntryNode, MapNode> childBuilder =
+                        Builders.mapBuilder((ListSchemaNode) childSchema);
+                buildList(childBuilder, (MapNode) child, baseSchemaCtxTree, path, trim,
+                        ((ListSchemaNode) childSchema).getKeyDefinition());
+                builder.withChild(childBuilder.build());
+            } else if (child instanceof LeafNode) {
+                final String defaultVal = ((LeafSchemaNode) childSchema).getDefault();
+                final String nodeVal = ((LeafNode<String>) child).getValue();
+                final NormalizedNodeAttrBuilder<NodeIdentifier, Object, LeafNode<Object>> leafBuilder =
+                        Builders.leafBuilder((LeafSchemaNode) childSchema);
+                if (keys.contains(child.getNodeType())) {
+                    leafBuilder.withValue(((LeafNode) child).getValue());
+                    builder.withChild(leafBuilder.build());
+                } else {
+                    if (trim) {
+                        if ((defaultVal == null) || !defaultVal.equals(nodeVal)) {
+                            leafBuilder.withValue(((LeafNode) child).getValue());
+                            builder.withChild(leafBuilder.build());
+                        }
+                    } else {
+                        if ((defaultVal != null) && defaultVal.equals(nodeVal)) {
+                            leafBuilder.withValue(((LeafNode) child).getValue());
+                            builder.withChild(leafBuilder.build());
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private static void buildList(final CollectionNodeBuilder<MapEntryNode, MapNode> builder, final MapNode result,
+            final DataSchemaContextTree baseSchemaCtxTree, final YangInstanceIdentifier path, final boolean trim,
+            final List<QName> keys) {
+        for (final MapEntryNode mapEntryNode : result.getValue()) {
+            final YangInstanceIdentifier actualNode = path.node(mapEntryNode.getIdentifier());
+            final DataSchemaNode childSchema = baseSchemaCtxTree.getChild(actualNode).getDataSchemaNode();
+            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder =
+                    Builders.mapEntryBuilder((ListSchemaNode) childSchema);
+            buildMapEntryBuilder(mapEntryBuilder, mapEntryNode, baseSchemaCtxTree, actualNode, trim, keys);
+            builder.withChild(mapEntryBuilder.build());
+        }
+    }
+
+    private static void buildCont(final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> builder,
+            final ContainerNode result, final DataSchemaContextTree baseSchemaCtxTree,
+            final YangInstanceIdentifier actualPath, final boolean trim) {
+        for (final DataContainerChild<? extends PathArgument, ?> child : result.getValue()) {
+            final YangInstanceIdentifier path = actualPath.node(child.getIdentifier());
+            final DataSchemaNode childSchema = baseSchemaCtxTree.getChild(path).getDataSchemaNode();
+            if (child instanceof ContainerNode) {
+                final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> builderChild =
+                        Builders.containerBuilder((ContainerSchemaNode) childSchema);
+                buildCont(builderChild, result, baseSchemaCtxTree, actualPath, trim);
+                builder.withChild(builderChild.build());
+            } else if (child instanceof MapNode) {
+                final CollectionNodeBuilder<MapEntryNode, MapNode> childBuilder =
+                        Builders.mapBuilder((ListSchemaNode) childSchema);
+                buildList(childBuilder, (MapNode) child, baseSchemaCtxTree, path, trim,
+                        ((ListSchemaNode) childSchema).getKeyDefinition());
+                builder.withChild(childBuilder.build());
+            } else if (child instanceof LeafNode) {
+                final String defaultVal = ((LeafSchemaNode) childSchema).getDefault();
+                final String nodeVal = ((LeafNode<String>) child).getValue();
+                final NormalizedNodeAttrBuilder<NodeIdentifier, Object, LeafNode<Object>> leafBuilder =
+                        Builders.leafBuilder((LeafSchemaNode) childSchema);
+                if (trim) {
+                    if ((defaultVal == null) || !defaultVal.equals(nodeVal)) {
+                        leafBuilder.withValue(((LeafNode) child).getValue());
+                        builder.withChild(leafBuilder.build());
+                    }
+                } else {
+                    if ((defaultVal != null) && defaultVal.equals(nodeVal)) {
+                        leafBuilder.withValue(((LeafNode) child).getValue());
+                        builder.withChild(leafBuilder.build());
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * If is set specific {@link LogicalDatastoreType} in
      * {@link TransactionVarsWrapper}, then read this type of data from DS. If
      * don't, we have to read all data from DS (state + config)
      *
      * @param transactionNode
-     *            - {@link TransactionVarsWrapper} - wrapper for variables
+     *             {@link TransactionVarsWrapper} - wrapper for variables
      * @return {@link NormalizedNode}
      */
-    private static @Nullable NormalizedNode<?, ?> readDataViaTransaction(
+    @Nullable
+    private static NormalizedNode<?, ?> readDataViaTransaction(
             @Nonnull final TransactionVarsWrapper transactionNode) {
-        final CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> listenableFuture = transactionNode
-                .getTransactionChain().newReadOnlyTransaction().read(transactionNode.getLogicalDatastoreType(),
-                        transactionNode.getInstanceIdentifier().getInstanceIdentifier());
         final NormalizedNodeFactory dataFactory = new NormalizedNodeFactory();
-        FutureCallbackTx.addCallback(listenableFuture, RestconfDataServiceConstant.ReadData.READ_TYPE_TX,
+        try (DOMDataReadOnlyTransaction tx = transactionNode.getTransactionChain().newReadOnlyTransaction()) {
+            final CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> listenableFuture = tx.read(
+                transactionNode.getLogicalDatastoreType(),
+                transactionNode.getInstanceIdentifier().getInstanceIdentifier());
+            FutureCallbackTx.addCallback(listenableFuture, RestconfDataServiceConstant.ReadData.READ_TYPE_TX,
                 dataFactory);
+        }
         return dataFactory.build();
     }
 
@@ -199,17 +447,26 @@ public final class ReadDataTransactionUtil {
      * Read config and state data, then map them.
      *
      * @param transactionNode
-     *            - {@link TransactionVarsWrapper} - wrapper for variables
+     *             {@link TransactionVarsWrapper} - wrapper for variables
+     * @param withDefa with-defaults parameter
      * @return {@link NormalizedNode}
      */
-    private static @Nullable NormalizedNode<?, ?> readAllData(@Nonnull final TransactionVarsWrapper transactionNode) {
+    @Nullable
+    private static NormalizedNode<?, ?> readAllData(@Nonnull final TransactionVarsWrapper transactionNode,
+            final String withDefa) {
         // PREPARE STATE DATA NODE
         transactionNode.setLogicalDatastoreType(LogicalDatastoreType.OPERATIONAL);
         final NormalizedNode<?, ?> stateDataNode = readDataViaTransaction(transactionNode);
 
         // PREPARE CONFIG DATA NODE
         transactionNode.setLogicalDatastoreType(LogicalDatastoreType.CONFIGURATION);
-        final NormalizedNode<?, ?> configDataNode = readDataViaTransaction(transactionNode);
+        final NormalizedNode<?, ?> configDataNode;
+        if (withDefa == null) {
+            configDataNode = readDataViaTransaction(transactionNode);
+        } else {
+            configDataNode = prepareDataByParamWithDef(readDataViaTransaction(transactionNode),
+                    transactionNode.getInstanceIdentifier().getInstanceIdentifier(), withDefa);
+        }
 
         // if no data exists
         if ((stateDataNode == null) && (configDataNode == null)) {
@@ -234,12 +491,13 @@ public final class ReadDataTransactionUtil {
      * Map data by type of read node.
      *
      * @param stateDataNode
-     *            - data node of state data
+     *             data node of state data
      * @param configDataNode
-     *            - data node of config data
+     *             data node of config data
      * @return {@link NormalizedNode}
      */
-    private static @Nonnull NormalizedNode<?, ?> mapNode(@Nonnull final NormalizedNode<?, ?> stateDataNode,
+    @Nonnull
+    private static NormalizedNode<?, ?> mapNode(@Nonnull final NormalizedNode<?, ?> stateDataNode,
                                                          @Nonnull final NormalizedNode<?, ?> configDataNode) {
         validPossibilityOfMergeNodes(stateDataNode, configDataNode);
         if (configDataNode instanceof RpcDefinition) {
@@ -253,9 +511,9 @@ public final class ReadDataTransactionUtil {
      * Valid of can be data merged together.
      *
      * @param stateDataNode
-     *            - data node of state data
+     *             data node of state data
      * @param configDataNode
-     *            - data node of config data
+     *             data node of config data
      */
     private static void validPossibilityOfMergeNodes(@Nonnull final NormalizedNode<?, ?> stateDataNode,
                                                      @Nonnull final NormalizedNode<?, ?> configDataNode) {
@@ -267,15 +525,16 @@ public final class ReadDataTransactionUtil {
     }
 
     /**
-     * Prepare and map data for rpc
+     * Prepare and map data for rpc.
      *
      * @param configDataNode
-     *            - data node of config data
+     *             data node of config data
      * @param stateDataNode
-     *            - data node of state data
+     *             data node of state data
      * @return {@link NormalizedNode}
      */
-    private static @Nonnull NormalizedNode<?, ?> prepareRpcData(@Nonnull final NormalizedNode<?, ?> configDataNode,
+    @Nonnull
+    private static NormalizedNode<?, ?> prepareRpcData(@Nonnull final NormalizedNode<?, ?> configDataNode,
                                                                 @Nonnull final NormalizedNode<?, ?> stateDataNode) {
         final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder = ImmutableNodes
                 .mapEntryBuilder();
@@ -293,9 +552,9 @@ public final class ReadDataTransactionUtil {
      * Map node to map entry builder.
      *
      * @param dataNode
-     *            - data node
+     *             data node
      * @param mapEntryBuilder
-     *            - builder for mapping data
+     *             builder for mapping data
      */
     private static void mapRpcDataNode(@Nonnull final NormalizedNode<?, ?> dataNode,
                                        @Nonnull final DataContainerNodeBuilder<
@@ -304,15 +563,16 @@ public final class ReadDataTransactionUtil {
     }
 
     /**
-     * Prepare and map all data from DS
+     * Prepare and map all data from DS.
      *
      * @param configDataNode
-     *            - data node of config data
+     *             data node of config data
      * @param stateDataNode
-     *            - data node of state data
+     *             data node of state data
      * @return {@link NormalizedNode}
      */
-    private static @Nonnull NormalizedNode<?, ?> prepareData(@Nonnull final NormalizedNode<?, ?> configDataNode,
+    @Nonnull
+    private static NormalizedNode<?, ?> prepareData(@Nonnull final NormalizedNode<?, ?> configDataNode,
                                                              @Nonnull final NormalizedNode<?, ?> stateDataNode) {
         if (configDataNode instanceof MapNode) {
             final CollectionNodeBuilder<MapEntryNode, MapNode> builder = ImmutableNodes
@@ -342,8 +602,8 @@ public final class ReadDataTransactionUtil {
             final DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> builder = Builders
                     .augmentationBuilder().withNodeIdentifier(((AugmentationNode) configDataNode).getIdentifier());
 
-            mapValueToBuilder(
-                    ((AugmentationNode) configDataNode).getValue(), ((AugmentationNode) stateDataNode).getValue(), builder);
+            mapValueToBuilder(((AugmentationNode) configDataNode).getValue(),
+                    ((AugmentationNode) stateDataNode).getValue(), builder);
 
             return builder.build();
         } else if (configDataNode instanceof ChoiceNode) {
@@ -365,11 +625,11 @@ public final class ReadDataTransactionUtil {
      * Map value from container node to builder.
      *
      * @param configData
-     *            - collection of config data nodes
+     *             collection of config data nodes
      * @param stateData
-     *            - collection of state data nodes
+     *             collection of state data nodes
      * @param builder
-     *            - builder
+     *             builder
      */
     private static <T extends NormalizedNode<? extends PathArgument, ?>> void mapValueToBuilder(
             @Nonnull final Collection<T> configData,
@@ -392,9 +652,9 @@ public final class ReadDataTransactionUtil {
      * as childs to parent node.
      *
      * @param configMap
-     *            - map of config data nodes
+     *             map of config data nodes
      * @param stateMap
-     *            - map of state data nodes
+     *             map of state data nodes
      * @param builder
      *           - builder
      */
@@ -403,9 +663,9 @@ public final class ReadDataTransactionUtil {
             @Nonnull final Map<PathArgument, T> stateMap,
             @Nonnull final NormalizedNodeContainerBuilder<?, PathArgument, T, ?> builder) {
         configMap.entrySet().stream().filter(x -> !stateMap.containsKey(x.getKey())).forEach(
-                y -> builder.addChild(y.getValue()));
+            y -> builder.addChild(y.getValue()));
         stateMap.entrySet().stream().filter(x -> !configMap.containsKey(x.getKey())).forEach(
-                y -> builder.addChild(y.getValue()));
+            y -> builder.addChild(y.getValue()));
     }
 
     /**
@@ -413,9 +673,9 @@ public final class ReadDataTransactionUtil {
      * go one level down with {@code prepareData} method.
      *
      * @param configMap
-     *            - immutable config data
+     *             immutable config data
      * @param stateMap
-     *            - immutable state data
+     *             immutable state data
      * @param builder
      *           - builder
      */
@@ -426,6 +686,6 @@ public final class ReadDataTransactionUtil {
             @Nonnull final NormalizedNodeContainerBuilder<?, PathArgument, T, ?> builder) {
         // it is enough to process only config data because operational contains the same data
         configMap.entrySet().stream().filter(x -> stateMap.containsKey(x.getKey())).forEach(
-                y -> builder.addChild((T) prepareData(y.getValue(), stateMap.get(y.getKey()))));
+            y -> builder.addChild((T) prepareData(y.getValue(), stateMap.get(y.getKey()))));
     }
 }