Reduce the use of AttrBuilders
[netconf.git] / restconf / restconf-nb-rfc8040 / src / main / java / org / opendaylight / restconf / nb / rfc8040 / utils / mapping / RestconfMappingNodeUtil.java
index 4f645edf9a842467852259dbbacca93946f79905..68e03c4121e89c19d55731ac4224991abebead48 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.utils.mapping;
 
-import com.google.common.base.Optional;
 import java.net.URI;
 import java.time.Instant;
 import java.time.OffsetDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.Set;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.Rfc8040.IetfYangLibrary;
@@ -22,6 +22,7 @@ import org.opendaylight.restconf.nb.rfc8040.Rfc8040.MonitoringModule.QueryParams
 import org.opendaylight.restconf.nb.rfc8040.utils.parser.ParserIdentifier;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module.ConformanceType;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
@@ -35,7 +36,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 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.ListNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -78,7 +79,7 @@ public final class RestconfMappingNodeUtil {
                     final SchemaContext context, final String moduleSetId) {
         final DataSchemaNode modulesStateSch =
                 ietfYangLibraryModule.getDataChildByName(IetfYangLibrary.MODUELS_STATE_CONT_QNAME);
-        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> modulesStateBuilder =
+        final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> modulesStateBuilder =
                 Builders.containerBuilder((ContainerSchemaNode) modulesStateSch);
 
         final DataSchemaNode moduleSetIdSch =
@@ -114,24 +115,25 @@ public final class RestconfMappingNodeUtil {
     private static void fillMapByModules(final CollectionNodeBuilder<MapEntryNode, OrderedMapNode> mapBuilder,
             final DataSchemaNode moduleSch, final boolean isSubmodule, final Module module,
             final Module ietfYangLibraryModule, final SchemaContext context) {
-        final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder =
+        final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder =
                 Builders.mapEntryBuilder((ListSchemaNode) moduleSch);
         addCommonLeafs(module, mapEntryBuilder, ietfYangLibraryModule);
         addChildOfModuleBySpecificModuleInternal(
                 IetfYangLibrary.SPECIFIC_MODULE_SCHEMA_LEAF_QNAME, mapEntryBuilder, IetfYangLibrary.BASE_URI_OF_SCHEMA
-                        + module.getName() + "/" + module.getQNameModule().getFormattedRevision(),
+                        + module.getName() + "/"
+                        + module.getQNameModule().getRevision().map(Revision::toString).orElse(null),
                 ietfYangLibraryModule);
         if (!isSubmodule) {
             addChildOfModuleBySpecificModuleOfListChild(IetfYangLibrary.SPECIFIC_MODULE_NAMESPACE_LEAF_QNAME,
                     mapEntryBuilder, module.getNamespace().toString(), ietfYangLibraryModule);
 
             // features - not mandatory
-            if ((module.getFeatures() != null) && !module.getFeatures().isEmpty()) {
+            if (module.getFeatures() != null && !module.getFeatures().isEmpty()) {
                 addFeatureLeafList(IetfYangLibrary.SPECIFIC_MODULE_FEATURE_LEAF_LIST_QNAME, mapEntryBuilder,
                         module.getFeatures(), ietfYangLibraryModule);
             }
             // deviations - not mandatory
-            if ((module.getDeviations() != null) && !module.getDeviations().isEmpty()) {
+            if (module.getDeviations() != null && !module.getDeviations().isEmpty()) {
                 addDeviationList(module, mapEntryBuilder, ietfYangLibraryModule, context);
                 addChildOfModuleBySpecificModuleOfListChild(IetfYangLibrary.SPECIFIC_MODULE_CONFORMANCE_LEAF_QNAME,
                         mapEntryBuilder, ConformanceType.Implement.getName(), ietfYangLibraryModule);
@@ -140,7 +142,7 @@ public final class RestconfMappingNodeUtil {
                         mapEntryBuilder, ConformanceType.Import.getName(), ietfYangLibraryModule);
             }
             // submodules - not mandatory
-            if ((module.getSubmodules() != null) && !module.getSubmodules().isEmpty()) {
+            if (module.getSubmodules() != null && !module.getSubmodules().isEmpty()) {
                 addSubmodules(module, mapEntryBuilder, ietfYangLibraryModule, context);
             }
         }
@@ -160,7 +162,7 @@ public final class RestconfMappingNodeUtil {
      *             schema context
      */
     private static void addSubmodules(final Module module,
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
             final Module ietfYangLibraryModule, final SchemaContext context) {
         final DataSchemaNode listSubm = findSchemaInListOfModulesSchema(
                 IetfYangLibrary.SPECIFIC_MODULE_SUBMODULE_LIST_QNAME, ietfYangLibraryModule);
@@ -185,19 +187,18 @@ public final class RestconfMappingNodeUtil {
      *             schema context
      */
     private static void addDeviationList(final Module module,
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
             final Module ietfYangLibraryModule, final SchemaContext context) {
         final DataSchemaNode deviationsSchema = findSchemaInListOfModulesSchema(
                 IetfYangLibrary.SPECIFIC_MODULE_DEVIATION_LIST_QNAME, ietfYangLibraryModule);
         final CollectionNodeBuilder<MapEntryNode, MapNode> deviations =
                 Builders.mapBuilder((ListSchemaNode) deviationsSchema);
         for (final Deviation deviation : module.getDeviations()) {
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> deviationEntryNode =
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> deviationEntryNode =
                     Builders.mapEntryBuilder((ListSchemaNode) deviationsSchema);
             final QName lastComponent = deviation.getTargetPath().getLastComponent();
             addChildOfModuleBySpecificModule(IetfYangLibrary.SPECIFIC_MODULE_NAME_LEAF_QNAME, deviationEntryNode,
-                    context.findModuleByNamespaceAndRevision(lastComponent.getNamespace(), lastComponent.getRevision())
-                            .getName(),
+                    context.findModule(lastComponent.getModule()).get().getName(),
                     ietfYangLibraryModule);
             addChildOfModuleBySpecificModule(IetfYangLibrary.SPECIFIC_MODULE_REVISION_LEAF_QNAME, deviationEntryNode,
                     lastComponent.getRevision(), ietfYangLibraryModule);
@@ -219,7 +220,7 @@ public final class RestconfMappingNodeUtil {
      *             ieat-yang-library module
      */
     private static void addFeatureLeafList(final QName qnameOfFeaturesLeafList,
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
             final Set<FeatureDefinition> features, final Module ietfYangLibraryModule) {
         final DataSchemaNode schemaNode =
                 findSchemaInListOfModulesSchema(qnameOfFeaturesLeafList, ietfYangLibraryModule);
@@ -244,12 +245,12 @@ public final class RestconfMappingNodeUtil {
      *             ietf-yang-library module
      */
     private static void addCommonLeafs(final Module module,
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
             final Module ietfYangLibraryModule) {
         addChildOfModuleBySpecificModuleInternal(IetfYangLibrary.SPECIFIC_MODULE_NAME_LEAF_QNAME, mapEntryBuilder,
                 module.getName(), ietfYangLibraryModule);
         addChildOfModuleBySpecificModuleInternal(IetfYangLibrary.SPECIFIC_MODULE_REVISION_LEAF_QNAME, mapEntryBuilder,
-                module.getQNameModule().getFormattedRevision(), ietfYangLibraryModule);
+                module.getQNameModule().getRevision().map(Revision::toString).orElse(""), ietfYangLibraryModule);
     }
 
     /**
@@ -265,7 +266,7 @@ public final class RestconfMappingNodeUtil {
      *             ietf-yang-library module
      */
     private static void addChildOfModuleBySpecificModuleOfListChild(final QName specificQName,
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
             final Object value, final Module ietfYangLibraryModule) {
         final DataSchemaNode leafSch = findSchemaInListOfModulesSchema(specificQName, ietfYangLibraryModule);
         mapEntryBuilder.withChild(Builders.leafBuilder((LeafSchemaNode) leafSch).withValue(value).build());
@@ -305,7 +306,7 @@ public final class RestconfMappingNodeUtil {
      *             ietf-yang-library module
      */
     private static void addChildOfModuleBySpecificModuleInternal(final QName specifiLeafQName,
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
             final Object value, final Module ietfYangLibraryModule) {
         final DataSchemaNode nameLeaf = findNodeInInternGroupings(specifiLeafQName, ietfYangLibraryModule);
         mapEntryBuilder.withChild(Builders.leafBuilder((LeafSchemaNode) nameLeaf).withValue(value).build());
@@ -348,7 +349,7 @@ public final class RestconfMappingNodeUtil {
      *             ietf-yang-library module
      */
     private static void addChildOfModuleBySpecificModule(final QName specifiLeafQName,
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
             final Object value, final Module ietfYangLibraryModule) {
         final DataSchemaNode nameLeaf = findNodeInGroupings(specifiLeafQName, ietfYangLibraryModule);
         mapEntryBuilder.withChild(Builders.leafBuilder((LeafSchemaNode) nameLeaf).withValue(value).build());
@@ -383,11 +384,11 @@ public final class RestconfMappingNodeUtil {
             mapCapabilites(final Module monitoringModule) {
         final DataSchemaNode restconfState =
                 monitoringModule.getDataChildByName(MonitoringModule.CONT_RESTCONF_STATE_QNAME);
-        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> restStateContBuilder =
+        final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> restStateContBuilder =
                 Builders.containerBuilder((ContainerSchemaNode) restconfState);
         final DataSchemaNode capabilitesContSchema =
                 getChildOfCont((ContainerSchemaNode) restconfState, MonitoringModule.CONT_CAPABILITES_QNAME);
-        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> capabilitesContBuilder =
+        final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> capabilitesContBuilder =
                 Builders.containerBuilder((ContainerSchemaNode) capabilitesContSchema);
         final DataSchemaNode leafListCapa = getChildOfCont((ContainerSchemaNode) capabilitesContSchema,
                 MonitoringModule.LEAF_LIST_CAPABILITY_QNAME);
@@ -483,18 +484,18 @@ public final class RestconfMappingNodeUtil {
                         .getDataChildByName(MonitoringModule.CONT_RESTCONF_STATE_QNAME))
                                 .getDataChildByName(MonitoringModule.CONT_STREAMS_QNAME))
                                         .getDataChildByName(MonitoringModule.LIST_STREAM_QNAME);
-                final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> streamEntry =
+                final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> streamEntry =
                         Builders.mapEntryBuilder((ListSchemaNode) streamListSchema);
 
-                final ListSchemaNode listSchema = ((ListSchemaNode) streamListSchema);
+                final ListSchemaNode listSchema = (ListSchemaNode) streamListSchema;
                 prepareLeafAndFillEntryBuilder(streamEntry,
                         listSchema.getDataChildByName(MonitoringModule.LEAF_NAME_STREAM_QNAME),
                         notificationDefinition.getQName().getLocalName());
-                if ((notificationDefinition.getDescription() != null)
-                        && !notificationDefinition.getDescription().equals("")) {
+
+                final java.util.Optional<String> optDesc = notificationDefinition.getDescription();
+                if (optDesc.isPresent()) {
                     prepareLeafAndFillEntryBuilder(streamEntry,
-                            listSchema.getDataChildByName(MonitoringModule.LEAF_DESCR_STREAM_QNAME),
-                            notificationDefinition.getDescription());
+                            listSchema.getDataChildByName(MonitoringModule.LEAF_DESCR_STREAM_QNAME), optDesc.get());
                 }
                 prepareLeafAndFillEntryBuilder(streamEntry,
                         listSchema.getDataChildByName(MonitoringModule.LEAF_REPLAY_SUPP_STREAM_QNAME), true);
@@ -524,10 +525,10 @@ public final class RestconfMappingNodeUtil {
     }
 
     private static void prepareListAndFillEntryBuilder(
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> streamEntry,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> streamEntry,
             final ListSchemaNode listSchemaNode, final String outputType, final URI uriToWebsocketServer) {
         final CollectionNodeBuilder<MapEntryNode, MapNode> accessListBuilder = Builders.mapBuilder(listSchemaNode);
-        final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> entryAccessList =
+        final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> entryAccessList =
                 Builders.mapEntryBuilder(listSchemaNode);
         prepareLeafAndFillEntryBuilder(entryAccessList,
                 listSchemaNode.getDataChildByName(MonitoringModule.LEAF_ENCODING_ACCESS_QNAME), outputType);
@@ -545,7 +546,7 @@ public final class RestconfMappingNodeUtil {
      * @param value         Value
      */
     private static void prepareLeafAndFillEntryBuilder(
-            final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> streamEntry,
+            final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> streamEntry,
             final DataSchemaNode leafSchema, final Object value) {
         streamEntry.withChild(Builders.leafBuilder((LeafSchemaNode) leafSchema).withValue(value).build());
     }
@@ -580,23 +581,24 @@ public final class RestconfMappingNodeUtil {
             final Module monitoringModule, final boolean existParent, final SchemaContext schemaContext) {
         final SchemaNode schemaNode = ParserIdentifier
                 .toInstanceIdentifier(ParserIdentifier.stringFromYangInstanceIdentifier(path, schemaContext),
-                        schemaContext, Optional.absent())
+                        schemaContext, Optional.empty())
                 .getSchemaNode();
         final DataSchemaNode streamListSchema = ((ContainerSchemaNode) ((ContainerSchemaNode) monitoringModule
                 .getDataChildByName(MonitoringModule.CONT_RESTCONF_STATE_QNAME))
                         .getDataChildByName(MonitoringModule.CONT_STREAMS_QNAME))
                                 .getDataChildByName(MonitoringModule.LIST_STREAM_QNAME);
-        final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> streamEntry =
+        final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> streamEntry =
                 Builders.mapEntryBuilder((ListSchemaNode) streamListSchema);
 
-        final ListSchemaNode listSchema = ((ListSchemaNode) streamListSchema);
+        final ListSchemaNode listSchema = (ListSchemaNode) streamListSchema;
         prepareLeafAndFillEntryBuilder(streamEntry,
                 listSchema.getDataChildByName(MonitoringModule.LEAF_NAME_STREAM_QNAME),
                 schemaNode.getQName().getLocalName());
-        if ((schemaNode.getDescription() != null) && !schemaNode.getDescription().equals("")) {
+
+        final java.util.Optional<String> optDesc = schemaNode.getDescription();
+        if (optDesc.isPresent()) {
             prepareLeafAndFillEntryBuilder(streamEntry,
-                    listSchema.getDataChildByName(MonitoringModule.LEAF_DESCR_STREAM_QNAME),
-                    schemaNode.getDescription());
+                    listSchema.getDataChildByName(MonitoringModule.LEAF_DESCR_STREAM_QNAME), optDesc.get());
         }
         prepareLeafAndFillEntryBuilder(streamEntry,
                 listSchema.getDataChildByName(MonitoringModule.LEAF_REPLAY_SUPP_STREAM_QNAME), true);