From 4f8fe6ca68115fecdb9ce43573af5a2e26c50b50 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 9 May 2021 22:18:07 +0200 Subject: [PATCH] Bump MRI upstreams Adopt latest versions, namely; - odlparent-9.0.2 - yangtools-7.0.2-SNAPSHOT - infrautils-2.0.2 - mdsal-8.0.0-SNAPSHOT - controller-4.0.0-SNAPSHOT - aaa-0.14.0-SNAPSHOT Change-Id: Ic4cbc01d88134df26416cd2d6f3e7ac64a03dc1a Signed-off-by: Robert Varga --- artifacts/pom.xml | 2 +- .../features-netconf-connector/pom.xml | 2 +- .../src/main/feature/feature.xml | 6 +- features/netconf-connector/pom.xml | 2 +- .../netconf/features-netconf-testing/pom.xml | 2 +- features/netconf/features-netconf/pom.xml | 2 +- .../src/main/feature/feature.xml | 2 +- .../src/main/feature/feature.xml | 2 +- .../src/main/feature/feature.xml | 8 +- .../src/main/feature/feature.xml | 2 +- .../src/main/feature/feature.xml | 2 +- .../src/main/feature/feature.xml | 4 +- .../src/main/feature/feature.xml | 2 +- .../src/main/feature/feature.xml | 2 +- features/netconf/pom.xml | 2 +- features/parent/pom.xml | 2 +- features/pom.xml | 2 +- features/restconf/features-restconf/pom.xml | 2 +- .../src/main/feature/feature.xml | 2 +- .../src/main/feature/feature.xml | 10 +- .../src/main/feature/feature.xml | 2 +- features/restconf/pom.xml | 2 +- features/yanglib/features-yanglib/pom.xml | 2 +- .../odl-yanglib/src/main/feature/feature.xml | 2 +- features/yanglib/pom.xml | 2 +- karaf-static/pom.xml | 2 +- karaf/pom.xml | 2 +- .../mdsal/connector/ops/AbstractEdit.java | 12 +- .../ComponentNormalizedNodeStreamWriter.java | 2 +- .../mdsal/connector/ops/CopyConfig.java | 6 +- .../mdsal/connector/ops/DataTreeChange.java | 6 +- .../mdsal/connector/ops/EditConfig.java | 19 +- .../mdsal/connector/ops/RuntimeRpc.java | 39 ++- ...ingNormalizedNodeMetadataStreamWriter.java | 6 - .../mdsal/connector/ops/get/AbstractGet.java | 14 +- .../ops/get/FilterContentValidator.java | 29 +- .../netconf/mdsal/connector/ops/get/Get.java | 2 +- .../mdsal/connector/ops/get/GetConfig.java | 2 +- .../mdsal/connector/ops/RuntimeRpcTest.java | 18 +- .../connector/ops/get/Netconf538Test.java | 2 +- .../impl/ops/NotificationsTransformUtil.java | 4 +- .../blueprint/mdsal-netconf-notification.xml | 2 +- .../impl/NetconfNotificationManagerTest.java | 6 +- .../ops/NotificationsTransformUtilTest.java | 6 +- netconf/models/pom.xml | 2 +- netconf/netconf-config/pom.xml | 2 +- .../dom/api/NetconfDataTreeService.java | 22 +- .../tx/NetconfDOMFieldsReadOperations.java | 4 +- ...etconfCapabilityMonitoringServiceTest.java | 6 +- .../impl/NetconfTopologyImplTest.java | 6 +- .../singleton/impl/ProxyDOMRpcService.java | 2 +- .../impl/ProxyNetconfDataTreeService.java | 14 +- .../actors/NetconfDataTreeServiceActor.java | 12 +- .../singleton/impl/actors/ReadAdapter.java | 4 +- .../ActorProxyNetconfServiceFacade.java | 21 +- .../FailedProxyNetconfServiceFacade.java | 14 +- .../impl/netconf/ProxyNetconfService.java | 26 +- .../impl/tx/ActorProxyTransactionFacade.java | 18 +- .../impl/tx/FailedProxyTransactionFacade.java | 8 +- .../impl/tx/ProxyReadWriteTransaction.java | 12 +- .../messages/NormalizedNodeMessage.java | 6 +- .../impl/AbstractBaseSchemasTest.java | 6 +- .../impl/MountPointEndToEndTest.java | 36 ++- .../singleton/impl/NetconfNodeActorTest.java | 7 +- .../impl/NetconfTopologyManagerTest.java | 4 +- .../impl/ProxyNetconfDataTreeServiceTest.java | 8 +- .../impl/RemoteDeviceConnectorImplTest.java | 4 +- .../NetconfDataTreeServiceActorTest.java | 8 +- .../ReadTransactionActorTestAdapter.java | 8 +- .../impl/netconf/ProxyNetconfServiceTest.java | 20 +- .../tx/ProxyReadWriteTransactionTest.java | 12 +- .../netconf/util/NetconfUtil.java | 18 +- .../netconf/util/NodeContainerProxy.java | 12 +- .../util/ProxyEffectiveModelContext.java | 164 ++++++++++++ .../netconf/util/ProxyMountPointContext.java | 44 +++ .../netconf/util/StreamingContext.java | 5 +- netconf/pom.xml | 2 +- netconf/sal-netconf-connector/pom.xml | 4 + .../sal/connect/api/MessageTransformer.java | 4 +- .../impl/DefaultSchemaResourceManager.java | 8 +- .../impl/OSGiSchemaResourceManager.java | 2 +- .../netconf/DeviceActionFactoryImpl.java | 54 ++-- .../netconf/DeviceMountPointContext.java | 20 +- .../netconf/LibraryModulesSchemas.java | 52 ++-- .../sal/connect/netconf/NetconfDevice.java | 6 +- .../NetconfMountPointContextFactory.java | 4 +- .../connect/netconf/NetconfStateSchemas.java | 48 ++-- .../listener/NetconfSessionPreferences.java | 4 +- .../sal/AbstractNetconfDataTreeService.java | 23 +- .../netconf/sal/KeepaliveSalFacade.java | 2 +- .../connect/netconf/sal/NetconfDeviceRpc.java | 2 +- .../sal/SchemalessNetconfDeviceRpc.java | 5 +- .../netconf/sal/tx/AbstractReadOnlyTx.java | 6 +- .../netconf/sal/tx/AbstractWriteTx.java | 17 +- .../netconf/sal/tx/FieldsAwareReadOnlyTx.java | 6 +- .../sal/tx/FieldsAwareReadWriteTx.java | 2 +- .../connect/netconf/sal/tx/ReadWriteTx.java | 6 +- .../netconf/sal/tx/WriteCandidateTx.java | 13 +- .../netconf/sal/tx/WriteRunningTx.java | 9 +- ...NetconfRemoteSchemaYangSourceProvider.java | 26 +- .../YangLibrarySchemaYangSourceProvider.java | 9 +- .../mapping/BaseRpcSchemalessTransformer.java | 4 +- .../netconf/schema/mapping/BaseSchema.java | 2 +- .../mapping/DefaultBaseNetconfSchemas.java | 4 +- .../mapping/NetconfMessageTransformer.java | 28 +- .../mapping/OSGiBaseNetconfSchemas.java | 4 +- .../mapping/SchemalessMessageTransformer.java | 6 +- .../connect/netconf/util/NetconfBaseOps.java | 51 ++-- .../util/NetconfMessageTransformUtil.java | 50 ++-- .../util/NetconfRpcStructureTransformer.java | 12 +- .../netconf/util/RpcStructureTransformer.java | 13 +- .../SchemalessRpcStructureTransformer.java | 17 +- .../netconf/AbstractBaseSchemasTest.java | 6 +- .../NetconfNestedNotificationTest.java | 7 +- .../netconf/NetconfStateSchemasTest.java | 27 +- .../netconf/NetconfToNotificationTest.java | 12 +- .../netconf/NetconfToRpcRequestTest.java | 2 +- .../sal/NetconfDataTreeServiceImplTest.java | 2 +- .../sal/NetconfDeviceDataBrokerTest.java | 2 +- .../NetconfDeviceNotificationServiceTest.java | 6 +- .../netconf/sal/NetconfDeviceRpcTest.java | 9 +- .../sal/NetconfDeviceSalFacadeTest.java | 2 +- .../sal/NetconfDeviceTopologyAdapterTest.java | 12 +- .../sal/SchemalessNetconfDeviceRpcTest.java | 4 +- .../sal/tx/FieldsAwareReadOnlyTxTest.java | 2 +- .../sal/tx/NetconfDeviceWriteOnlyTxTest.java | 12 +- .../netconf/sal/tx/ReadOnlyTxTest.java | 2 +- .../sal/tx/WriteCandidateRunningTxTest.java | 2 +- .../netconf/sal/tx/WriteCandidateTxTest.java | 2 +- .../netconf/sal/tx/WriteRunningTxTest.java | 2 +- ...onfRemoteSchemaYangSourceProviderTest.java | 23 +- .../BaseRpcSchemalessTransformerTest.java | 23 +- .../NetconfMessageTransformerTest.java | 112 ++++---- .../SchemalessMessageTransformerTest.java | 29 +- ...SchemalessRpcStructureTransformerTest.java | 6 +- .../netconf/util/NetconfBaseOpsTest.java | 19 +- ...SchemalessRpcStructureTransformerTest.java | 6 +- netconf/shaded-exificient-jar/pom.xml | 2 +- netconf/shaded-exificient/pom.xml | 2 +- netconf/shaded-sshd-jar/pom.xml | 2 +- netconf/shaded-sshd/pom.xml | 2 +- .../test/tool/MdsalOperationProvider.java | 14 +- .../test/tool/NetconfDeviceSimulator.java | 22 +- .../tool/schemacache/SchemaSourceCache.java | 2 +- netconf/tools/pom.xml | 2 +- netconf/yanglib/pom.xml | 4 + .../yanglib/impl/YangLibProvider.java | 4 +- .../resources/OSGI-INF/blueprint/yanglib.xml | 2 +- .../yanglib/impl/YangLibProviderTest.java | 4 +- parent/pom.xml | 8 +- pom.xml | 2 +- restconf/pom.xml | 2 +- .../common/context/NormalizedNodeContext.java | 15 +- .../restconf/common/patch/PatchEntity.java | 6 +- .../AbstractWebsocketSerializer.java | 13 +- .../util/AbstractOperationDataSchemaNode.java | 6 +- .../common/util/AbstractOperationsModule.java | 23 +- .../util/OperationsContainerSchemaNode.java | 9 +- .../OperationsEffectiveModuleContext.java | 2 +- .../common/util/OperationsImportedModule.java | 8 +- .../common/util/OperationsLeafSchemaNode.java | 5 +- .../common/util/OperationsResourceUtils.java | 6 +- .../common/util/OperationsRestconfModule.java | 12 +- restconf/restconf-models/pom.xml | 2 +- restconf/restconf-nb-bierman02/pom.xml | 4 - .../SchemaExportContentYangBodyWriter.java | 1 - .../api/RestconfNormalizedNodeWriter.java | 3 +- .../impl/DepthAwareNormalizedNodeWriter.java | 74 +++--- .../impl/JsonNormalizedNodeBodyReader.java | 34 ++- .../sal/rest/impl/JsonToPatchBodyReader.java | 34 ++- .../impl/NormalizedNodeJsonBodyWriter.java | 30 +-- .../impl/NormalizedNodeXmlBodyWriter.java | 14 +- ...estconfDelegatingNormalizedNodeWriter.java | 7 +- .../RestconfDocumentedExceptionMapper.java | 43 +-- .../StringModuleInstanceIdentifierCodec.java | 4 +- .../impl/XmlNormalizedNodeBodyReader.java | 19 +- .../sal/rest/impl/XmlToPatchBodyReader.java | 37 +-- .../restconf/impl/BatchedExistenceCheck.java | 4 +- .../sal/restconf/impl/BrokerFacade.java | 250 +++++++++--------- .../sal/restconf/impl/ControllerContext.java | 79 +++--- .../impl/DataNormalizationOperation.java | 19 +- .../restconf/impl/NormalizedDataPrunner.java | 65 ++--- .../netconf/sal/restconf/impl/RestCodec.java | 12 +- .../sal/restconf/impl/RestconfImpl.java | 118 +++++---- .../listeners/AbstractNotificationsData.java | 2 +- .../streams/listeners/ListenerAdapter.java | 4 +- .../md/sal/rest/common/TestRestconfUtils.java | 8 +- .../test/providers/TestJsonBodyReader.java | 32 +-- .../TestJsonBodyReaderMountPoint.java | 24 +- .../test/providers/TestXmlBodyReader.java | 53 ++-- .../TestXmlBodyReaderMountPoint.java | 29 +- .../to/cnsn/test/RestPutListDataTest.java | 12 +- .../to/nn/test/JsonIdentityrefToNnTest.java | 7 +- .../json/to/nn/test/JsonLeafrefToNnTest.java | 7 +- .../impl/json/to/nn/test/JsonToNnTest.java | 82 ++---- .../test/NnInstanceIdentifierToXmlTest.java | 70 ++--- .../impl/nn/to/xml/test/NnToXmlTest.java | 67 ++--- .../nn/to/xml/test/NnToXmlWithChoiceTest.java | 10 +- ...NnToXmlWithDataFromSeveralModulesTest.java | 12 +- .../restconf/impl/test/BrokerFacadeTest.java | 16 +- ...nSnToXmlAndJsonInstanceIdentifierTest.java | 25 +- .../impl/test/CutDataToCorrectDepthTest.java | 38 +-- .../impl/test/InvokeRpcMethodTest.java | 137 ++++------ .../test/JSONRestconfServiceImplTest.java | 24 +- .../impl/test/RestCodecExceptionsTest.java | 11 +- .../impl/test/RestGetOperationTest.java | 21 +- .../impl/test/RestPostOperationTest.java | 1 - .../restconf/impl/test/RestPutConfigTest.java | 5 +- .../restconf/impl/test/RestconfImplTest.java | 34 +-- .../sal/restconf/impl/test/TestUtils.java | 13 +- .../impl/test/URIParametersParsing.java | 21 +- .../DepthAwareNormalizedNodeWriterTest.java | 22 +- .../listeners/NotificationListenerTest.java | 91 +++---- .../restconf/modules/RevisionBuilderTest.java | 4 +- .../leafref/augment-leafref-module.yang | 9 +- .../restconf/nb/rfc8040/codecs/RestCodec.java | 16 +- .../StringModuleInstanceIdentifierCodec.java | 4 +- .../handlers/SchemaContextHandler.java | 10 +- .../JsonNormalizedNodeBodyReader.java | 29 +- .../NormalizedNodeJsonBodyWriter.java | 26 +- .../NormalizedNodeXmlBodyWriter.java | 16 +- .../ParameterAwareNormalizedNodeWriter.java | 82 +++--- .../XmlNormalizedNodeBodyReader.java | 17 +- .../api/RestconfNormalizedNodeWriter.java | 2 +- ...sonStreamWriterWithDisabledValidation.java | 5 +- .../RestconfDocumentedExceptionMapper.java | 8 +- .../patch/JsonToPatchBodyReader.java | 26 +- .../providers/patch/XmlToPatchBodyReader.java | 31 ++- .../rests/services/impl/CreateStreamUtil.java | 17 +- .../impl/RestconfDataServiceImpl.java | 15 +- .../RestconfInvokeOperationsServiceImpl.java | 8 +- ...estconfStreamsSubscriptionServiceImpl.java | 2 +- .../transactions/BatchedExistenceCheck.java | 4 +- .../transactions/MdsalRestconfStrategy.java | 4 +- .../MdsalRestconfTransaction.java | 22 +- .../transactions/NetconfRestconfStrategy.java | 6 +- .../NetconfRestconfTransaction.java | 17 +- .../rests/transactions/RestconfStrategy.java | 4 +- .../transactions/RestconfTransaction.java | 6 +- .../rests/utils/NormalizedNodeFactory.java | 12 +- .../rests/utils/PatchDataTransactionUtil.java | 9 +- .../utils/PlainPatchDataTransactionUtil.java | 2 +- .../rests/utils/PostDataTransactionUtil.java | 33 ++- .../rests/utils/PutDataTransactionUtil.java | 44 +-- .../rests/utils/ReadDataTransactionUtil.java | 189 ++++++------- .../utils/RestconfInvokeOperationsUtil.java | 7 +- .../rests/utils/RestconfStreamsConstants.java | 8 +- .../rfc8040/rests/utils/TransactionUtil.java | 2 +- .../listeners/AbstractNotificationsData.java | 2 +- .../mapping/RestconfMappingNodeUtil.java | 21 +- .../YangInstanceIdentifierDeserializer.java | 6 +- .../nb/rfc8040/TestRestconfUtils.java | 8 +- .../restconf/nb/rfc8040/TestUtils.java | 14 +- ...terAwareNormalizedNodeWriterDepthTest.java | 23 +- ...erAwareNormalizedNodeWriterFieldsTest.java | 25 +- ...areNormalizedNodeWriterParametersTest.java | 25 +- .../XmlBodyReaderMountPointTest.java | 28 +- ...RestconfDocumentedExceptionMapperTest.java | 4 +- .../providers/test/JsonBodyReaderTest.java | 8 +- .../providers/test/XmlBodyReaderTest.java | 28 +- .../services/impl/CreateStreamUtilTest.java | 34 +-- .../impl/RestconfDataServiceImplTest.java | 38 ++- .../rests/services/impl/RestconfImplTest.java | 2 +- ...stconfInvokeOperationsServiceImplTest.java | 17 +- .../impl/RestconfOperationsServiceTest.java | 20 +- .../utils/PostDataTransactionUtilTest.java | 6 +- .../utils/ReadDataTransactionUtilTest.java | 42 ++- .../nb/rfc8040/rests/utils/TestData.java | 9 +- .../JsonNotificationListenerTest.java | 70 ++--- .../XmlNotificationListenerTest.java | 80 ++---- .../mapping/RestconfMappingNodeUtilTest.java | 45 ++-- .../parser/ParserFieldsParameterTest.java | 11 +- .../notifications/notifi-module.yang | 4 +- restconf/sal-rest-connector-config/pom.xml | 2 +- .../doc/impl/BaseYangSwaggerGenerator.java | 49 ++-- .../impl/BaseYangSwaggerGeneratorRFC8040.java | 4 +- .../rest/doc/impl/DefinitionGenerator.java | 80 +++--- .../doc/mountpoints/MountPointSwagger.java | 4 +- .../sal/rest/doc/util/RestDocgenUtil.java | 7 +- .../rest/doc/impl/ApiDocGeneratorTest.java | 11 +- .../sal/rest/doc/impl/DocGenTestHelper.java | 5 +- .../sal/rest/doc/impl/SwaggerObjectTest.java | 4 +- 282 files changed, 2443 insertions(+), 2539 deletions(-) create mode 100644 netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/ProxyEffectiveModelContext.java create mode 100644 netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/ProxyMountPointContext.java diff --git a/artifacts/pom.xml b/artifacts/pom.xml index c384e6ec6b..10d9327b35 100644 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -14,7 +14,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/features/netconf-connector/features-netconf-connector/pom.xml b/features/netconf-connector/features-netconf-connector/pom.xml index 4ffe9df0b8..8e494e4a81 100644 --- a/features/netconf-connector/features-netconf-connector/pom.xml +++ b/features/netconf-connector/features-netconf-connector/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent feature-repo-parent - 8.1.2 + 9.0.2 diff --git a/features/netconf-connector/odl-netconf-connector/src/main/feature/feature.xml b/features/netconf-connector/odl-netconf-connector/src/main/feature/feature.xml index e5384f3293..0d46b33181 100644 --- a/features/netconf-connector/odl-netconf-connector/src/main/feature/feature.xml +++ b/features/netconf-connector/odl-netconf-connector/src/main/feature/feature.xml @@ -8,8 +8,8 @@ --> - odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal - odl-mdsal-broker - odl-aaa-encryption-service + odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal + odl-mdsal-broker + odl-aaa-encryption-service diff --git a/features/netconf-connector/pom.xml b/features/netconf-connector/pom.xml index 1476bd2281..ac765af225 100644 --- a/features/netconf-connector/pom.xml +++ b/features/netconf-connector/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/features/netconf/features-netconf-testing/pom.xml b/features/netconf/features-netconf-testing/pom.xml index 7be3774aff..3a3694227d 100644 --- a/features/netconf/features-netconf-testing/pom.xml +++ b/features/netconf/features-netconf-testing/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent feature-repo-parent - 8.1.2 + 9.0.2 diff --git a/features/netconf/features-netconf/pom.xml b/features/netconf/features-netconf/pom.xml index ac9e98fd7e..5f3fe3e65e 100644 --- a/features/netconf/features-netconf/pom.xml +++ b/features/netconf/features-netconf/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent feature-repo-parent - 8.1.2 + 9.0.2 diff --git a/features/netconf/odl-aaa-netconf-plugin-no-cluster/src/main/feature/feature.xml b/features/netconf/odl-aaa-netconf-plugin-no-cluster/src/main/feature/feature.xml index cbe01b7202..55dfe1a4db 100644 --- a/features/netconf/odl-aaa-netconf-plugin-no-cluster/src/main/feature/feature.xml +++ b/features/netconf/odl-aaa-netconf-plugin-no-cluster/src/main/feature/feature.xml @@ -7,6 +7,6 @@ --> - odl-aaa-shiro + odl-aaa-shiro diff --git a/features/netconf/odl-aaa-netconf-plugin/src/main/feature/feature.xml b/features/netconf/odl-aaa-netconf-plugin/src/main/feature/feature.xml index 42e7919d3f..dd7218c1fc 100644 --- a/features/netconf/odl-aaa-netconf-plugin/src/main/feature/feature.xml +++ b/features/netconf/odl-aaa-netconf-plugin/src/main/feature/feature.xml @@ -7,6 +7,6 @@ --> - odl-aaa-shiro + odl-aaa-shiro diff --git a/features/netconf/odl-netconf-api/src/main/feature/feature.xml b/features/netconf/odl-netconf-api/src/main/feature/feature.xml index c8f87ad921..2a6994a557 100644 --- a/features/netconf/odl-netconf-api/src/main/feature/feature.xml +++ b/features/netconf/odl-netconf-api/src/main/feature/feature.xml @@ -8,9 +8,9 @@ --> - odl-netty-4 - odl-yangtools-parser-api - odl-mdsal-model-rfc8525 - odl-mdsal-model-rfc8342 + odl-netty-4 + odl-yangtools-parser-api + odl-mdsal-model-rfc8525 + odl-mdsal-model-rfc8342 diff --git a/features/netconf/odl-netconf-client/src/main/feature/feature.xml b/features/netconf/odl-netconf-client/src/main/feature/feature.xml index 24c41673d6..74fa2d4d93 100644 --- a/features/netconf/odl-netconf-client/src/main/feature/feature.xml +++ b/features/netconf/odl-netconf-client/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-controller-exp-netty-config + odl-controller-exp-netty-config diff --git a/features/netconf/odl-netconf-impl/src/main/feature/feature.xml b/features/netconf/odl-netconf-impl/src/main/feature/feature.xml index c333a5c8c6..edd5f581e8 100644 --- a/features/netconf/odl-netconf-impl/src/main/feature/feature.xml +++ b/features/netconf/odl-netconf-impl/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-controller-exp-netty-config + odl-controller-exp-netty-config diff --git a/features/netconf/odl-netconf-netty-util/src/main/feature/feature.xml b/features/netconf/odl-netconf-netty-util/src/main/feature/feature.xml index 3c5c131340..863373ac9b 100644 --- a/features/netconf/odl-netconf-netty-util/src/main/feature/feature.xml +++ b/features/netconf/odl-netconf-netty-util/src/main/feature/feature.xml @@ -1,7 +1,7 @@ - odl-netty-4 - odl-aaa-encryption-service + odl-netty-4 + odl-aaa-encryption-service diff --git a/features/netconf/odl-netconf-notifications-impl/src/main/feature/feature.xml b/features/netconf/odl-netconf-notifications-impl/src/main/feature/feature.xml index 9e2627b9ba..1cdfa41b26 100644 --- a/features/netconf/odl-netconf-notifications-impl/src/main/feature/feature.xml +++ b/features/netconf/odl-netconf-notifications-impl/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-mdsal-binding-runtime + odl-mdsal-binding-runtime diff --git a/features/netconf/odl-netconf-util/src/main/feature/feature.xml b/features/netconf/odl-netconf-util/src/main/feature/feature.xml index df8956296f..850d23b4f5 100644 --- a/features/netconf/odl-netconf-util/src/main/feature/feature.xml +++ b/features/netconf/odl-netconf-util/src/main/feature/feature.xml @@ -11,6 +11,6 @@ mvn:org.opendaylight.netconf/netconf-util/${project.version}/cfg/config - odl-yangtools-codec + odl-yangtools-codec diff --git a/features/netconf/pom.xml b/features/netconf/pom.xml index eae2b0ade8..983d2735ec 100644 --- a/features/netconf/pom.xml +++ b/features/netconf/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/features/parent/pom.xml b/features/parent/pom.xml index 6710e493dc..216caccc0c 100644 --- a/features/parent/pom.xml +++ b/features/parent/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent single-feature-parent - 8.1.2 + 9.0.2 diff --git a/features/pom.xml b/features/pom.xml index 41def4d6d6..567a299a2a 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/features/restconf/features-restconf/pom.xml b/features/restconf/features-restconf/pom.xml index 97d8319d77..31906711e6 100644 --- a/features/restconf/features-restconf/pom.xml +++ b/features/restconf/features-restconf/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent feature-repo-parent - 8.1.2 + 9.0.2 diff --git a/features/restconf/odl-mdsal-apidocs/src/main/feature/feature.xml b/features/restconf/odl-mdsal-apidocs/src/main/feature/feature.xml index 3e66f79bcb..50b97a6254 100644 --- a/features/restconf/odl-mdsal-apidocs/src/main/feature/feature.xml +++ b/features/restconf/odl-mdsal-apidocs/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-jackson-2.11 + odl-jackson-2.11 diff --git a/features/restconf/odl-restconf-common/src/main/feature/feature.xml b/features/restconf/odl-restconf-common/src/main/feature/feature.xml index 7457d253a8..f3f95be347 100644 --- a/features/restconf/odl-restconf-common/src/main/feature/feature.xml +++ b/features/restconf/odl-restconf-common/src/main/feature/feature.xml @@ -8,10 +8,10 @@ --> - odl-karaf-feat-jetty - odl-yangtools-export - odl-mdsal-model-rfc8525 - odl-mdsal-broker - odl-aaa-shiro + odl-karaf-feat-jetty + odl-yangtools-export + odl-mdsal-model-rfc8525 + odl-mdsal-broker + odl-aaa-shiro diff --git a/features/restconf/odl-restconf-nb-rfc8040/src/main/feature/feature.xml b/features/restconf/odl-restconf-nb-rfc8040/src/main/feature/feature.xml index 855cd0c764..d2f052b616 100644 --- a/features/restconf/odl-restconf-nb-rfc8040/src/main/feature/feature.xml +++ b/features/restconf/odl-restconf-nb-rfc8040/src/main/feature/feature.xml @@ -8,7 +8,7 @@ --> - odl-controller-exp-netty-config + odl-controller-exp-netty-config mvn:org.opendaylight.netconf/restconf-nb-rfc8040/${project.version}/cfg/config diff --git a/features/restconf/pom.xml b/features/restconf/pom.xml index a2b11b9a2b..90ef078925 100644 --- a/features/restconf/pom.xml +++ b/features/restconf/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/features/yanglib/features-yanglib/pom.xml b/features/yanglib/features-yanglib/pom.xml index a39d48076b..37741030a3 100644 --- a/features/yanglib/features-yanglib/pom.xml +++ b/features/yanglib/features-yanglib/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent feature-repo-parent - 8.1.2 + 9.0.2 diff --git a/features/yanglib/odl-yanglib/src/main/feature/feature.xml b/features/yanglib/odl-yanglib/src/main/feature/feature.xml index 4de8cebfb4..237635cd28 100644 --- a/features/yanglib/odl-yanglib/src/main/feature/feature.xml +++ b/features/yanglib/odl-yanglib/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-karaf-feat-jetty + odl-karaf-feat-jetty diff --git a/features/yanglib/pom.xml b/features/yanglib/pom.xml index 976f2f78e2..5f9d78bc78 100644 --- a/features/yanglib/pom.xml +++ b/features/yanglib/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/karaf-static/pom.xml b/karaf-static/pom.xml index 7380230ad3..89be05e672 100644 --- a/karaf-static/pom.xml +++ b/karaf-static/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent karaf-dist-static - 8.1.2 + 9.0.2 diff --git a/karaf/pom.xml b/karaf/pom.xml index d87f2244b3..65523419ec 100644 --- a/karaf/pom.xml +++ b/karaf/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent karaf4-parent - 8.1.2 + 9.0.2 org.opendaylight.netconf diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java index acf55aab5b..c3e888c165 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java @@ -9,7 +9,6 @@ package org.opendaylight.netconf.mdsal.connector.ops; import com.google.common.collect.ImmutableMap; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.util.Iterator; import java.util.Map; @@ -24,12 +23,14 @@ import org.opendaylight.netconf.api.NetconfDocumentedException; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Element; @@ -48,7 +49,7 @@ abstract class AbstractEdit extends AbstractConfigOperation { } protected void parseIntoNormalizedNode(final DataSchemaNode schemaNode, final XmlElement element, - final NormalizedNodeStreamWriter writer) throws DocumentedException { + final NormalizedNodeStreamWriter writer) throws DocumentedException { if (!(schemaNode instanceof ContainerSchemaNode) && !(schemaNode instanceof ListSchemaNode)) { // This should never happen since any edit operation on any other node type // should not be possible nor makes sense @@ -56,7 +57,8 @@ abstract class AbstractEdit extends AbstractConfigOperation { throw new UnsupportedOperationException("implement exception if parse fails"); } - final XmlParserStream xmlParser = XmlParserStream.create(writer, schemaContext.getCurrentContext(), schemaNode); + final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.ofInstantiatedPath( + schemaContext.getCurrentContext(), schemaNode.getPath()).toInference()); try { xmlParser.traverse(new DOMSource(element.getDomElement())); } catch (final XMLStreamException | URISyntaxException | IOException | SAXException ex) { @@ -71,8 +73,8 @@ abstract class AbstractEdit extends AbstractConfigOperation { try { // Returns module with newest revision since findModuleByNamespace returns a set of modules and we only // need the newest one - it = schemaContext.getCurrentContext().findModules(new URI(namespace)).iterator(); - } catch (final URISyntaxException e) { + it = schemaContext.getCurrentContext().findModules(XMLNamespace.of(namespace)).iterator(); + } catch (final IllegalArgumentException e) { throw new NetconfDocumentedException("Unable to create URI for namespace : " + namespace, e, ErrorType.APPLICATION, ErrorTag.INVALID_VALUE, ErrorSeverity.ERROR); } diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/ComponentNormalizedNodeStreamWriter.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/ComponentNormalizedNodeStreamWriter.java index 7c42300802..7a1bcf0e71 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/ComponentNormalizedNodeStreamWriter.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/ComponentNormalizedNodeStreamWriter.java @@ -23,7 +23,7 @@ final class ComponentNormalizedNodeStreamWriter extends ImmutableMetadataNormali super(result); } - NormalizedNode build() { + NormalizedNode build() { return popState().getDataBuilder().build(); } } diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfig.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfig.java index 341f84bb3a..5d9c043c71 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfig.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfig.java @@ -112,7 +112,7 @@ public final class CopyConfig extends AbstractEdit { final DataSchemaNode schemaNode = getSchemaNodeFromNamespace(ns, element); final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); parseIntoNormalizedNode(schemaNode, element, ImmutableNormalizedNodeStreamWriter.from(resultHolder)); - final NormalizedNode data = resultHolder.getResult(); + final NormalizedNode data = resultHolder.getResult(); final YangInstanceIdentifier path = YangInstanceIdentifier.create(data.getIdentifier()); // Doing merge instead of put to support top-level list: rwTx.merge(LogicalDatastoreType.CONFIGURATION, path, data); @@ -171,7 +171,7 @@ public final class CopyConfig extends AbstractEdit { final DOMDataTreeReadWriteTransaction rwTx = getTransaction(sourceDatastore); final YangInstanceIdentifier dataRoot = YangInstanceIdentifier.empty(); try { - final Optional> normalizedNodeOptional = rwTx.read( + final Optional normalizedNodeOptional = rwTx.read( LogicalDatastoreType.CONFIGURATION, dataRoot).get(); if (sourceDatastore == Datastore.running) { transactionProvider.abortRunningTransaction(rwTx); @@ -212,7 +212,7 @@ public final class CopyConfig extends AbstractEdit { schemaContext.getCurrentContext(), SchemaPath.ROOT); final NormalizedNodeWriter nnWriter = NormalizedNodeWriter.forStreamWriter(nnStreamWriter, true); - for (DataContainerChild child : data.getValue()) { + for (DataContainerChild child : data.body()) { nnWriter.write(child); } nnWriter.flush(); diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/DataTreeChange.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/DataTreeChange.java index d455a3cef8..4d811151ec 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/DataTreeChange.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/DataTreeChange.java @@ -19,11 +19,11 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public final class DataTreeChange { - private final NormalizedNode changeRoot; + private final NormalizedNode changeRoot; private final YangInstanceIdentifier path; private final ModifyAction action; - DataTreeChange(final NormalizedNode changeRoot, final ModifyAction action, final Deque path) { + DataTreeChange(final NormalizedNode changeRoot, final ModifyAction action, final Deque path) { this.changeRoot = requireNonNull(changeRoot); this.action = requireNonNull(action); @@ -32,7 +32,7 @@ public final class DataTreeChange { this.path = YangInstanceIdentifier.create(builder.build()); } - public NormalizedNode getChangeRoot() { + public NormalizedNode getChangeRoot() { return changeRoot; } diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/EditConfig.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/EditConfig.java index 35e25bcdda..9e85e5cccf 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/EditConfig.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/EditConfig.java @@ -11,7 +11,6 @@ import com.google.common.base.Preconditions; import java.util.List; import java.util.ListIterator; import java.util.concurrent.ExecutionException; -import java.util.stream.Collectors; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.netconf.api.DocumentedException; @@ -29,10 +28,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -95,7 +93,7 @@ public final class EditConfig extends AbstractEdit { private void executeChange(final DOMDataTreeReadWriteTransaction rwtx, final DataTreeChange change) throws DocumentedException { final YangInstanceIdentifier path = change.getPath(); - final NormalizedNode changeData = change.getChangeRoot(); + final NormalizedNode changeData = change.getChangeRoot(); switch (change.getAction()) { case NONE: return; @@ -139,16 +137,13 @@ public final class EditConfig extends AbstractEdit { } private void mergeParentMixin(final DOMDataTreeReadWriteTransaction rwtx, final YangInstanceIdentifier path, - final NormalizedNode change) { + final NormalizedNode change) { final YangInstanceIdentifier parentNodeYid = path.getParent(); if (change instanceof MapEntryNode) { - final SchemaNode schemaNode = SchemaContextUtil.findNodeInSchemaContext( - schemaContext.getCurrentContext(), - parentNodeYid.getPathArguments().stream() - // filter out identifiers not present in the schema tree - .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates)) - .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier)) - .map(YangInstanceIdentifier.PathArgument::getNodeType).collect(Collectors.toList())); + final DataSchemaNode schemaNode = DataSchemaContextTree.from(schemaContext.getCurrentContext()) + .findChild(parentNodeYid) + .orElseThrow(() -> new IllegalStateException("Cannot find schema for " + parentNodeYid)) + .getDataSchemaNode(); // we should have the schema node that points to the parent list now, enforce it Preconditions.checkState(schemaNode instanceof ListSchemaNode, "Schema node is not pointing to a list."); diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java index 37d48cfa06..b84098d93a 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java @@ -8,9 +8,7 @@ package org.opendaylight.netconf.mdsal.connector.ops; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; -import java.util.Collection; import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; @@ -34,8 +32,8 @@ import org.opendaylight.netconf.mapping.api.HandlingPriority; import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.util.mapping.AbstractSingletonNetconfOperation; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter; @@ -43,10 +41,11 @@ import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.data.impl.schema.SchemaOrderedNormalizedNodeWriter; -import org.opendaylight.yangtools.yang.model.api.InputSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Attr; @@ -78,7 +77,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { @Override protected HandlingPriority canHandle(final String netconfOperationName, final String namespace) { - final URI namespaceURI = createNsUri(namespace); + final XMLNamespace namespaceURI = createNsUri(namespace); final Optional module = getModule(namespaceURI); if (module.isEmpty()) { @@ -96,21 +95,20 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { throw new UnsupportedOperationException("Runtime rpc does not have a stable name"); } - private static URI createNsUri(final String namespace) { + private static XMLNamespace createNsUri(final String namespace) { // May throw IllegalArgumentException, but that should never happen, as the namespace comes from parsed XML - return URI.create(namespace); + return XMLNamespace.of(namespace); } //this returns module with the newest revision if more then 1 module with same namespace is found - private Optional getModule(final URI namespaceURI) { - return schemaContext.getCurrentContext().findModules(namespaceURI).stream().findFirst(); + private Optional getModule(final XMLNamespace namespace) { + return schemaContext.getCurrentContext().findModules(namespace).stream().findFirst(); } - private static Optional getRpcDefinitionFromModule(final Module module, final URI namespaceURI, + private static Optional getRpcDefinitionFromModule(final Module module, final XMLNamespace namespace, final String name) { for (final RpcDefinition rpcDef : module.getRpcs()) { - if (rpcDef.getQName().getNamespace().equals(namespaceURI) - && rpcDef.getQName().getLocalName().equals(name)) { + if (rpcDef.getQName().getNamespace().equals(namespace) && rpcDef.getQName().getLocalName().equals(name)) { return Optional.of(rpcDef); } } @@ -131,7 +129,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { ErrorType.PROTOCOL, ErrorTag.UNKNOWN_NAMESPACE, ErrorSeverity.ERROR); } - final URI namespaceURI = createNsUri(netconfOperationNamespace); + final XMLNamespace namespaceURI = createNsUri(netconfOperationNamespace); final Optional moduleOptional = getModule(namespaceURI); if (moduleOptional.isEmpty()) { @@ -151,7 +149,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { } final RpcDefinition rpcDefinition = rpcDefinitionOptional.get(); - final ContainerNode inputNode = rpcToNNode(operationElement, rpcDefinition.getInput()); + final ContainerNode inputNode = rpcToNNode(operationElement, rpcDefinition); final DOMRpcResult result; try { @@ -201,7 +199,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { return document; } - private Element transformNormalizedNode(final Document document, final NormalizedNode data, + private Element transformNormalizedNode(final Document document, final NormalizedNode data, final SchemaPath rpcOutputPath) { final DOMResult result = new DOMResult(document.createElement(XmlNetconfConstants.RPC_REPLY_KEY)); @@ -235,8 +233,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { private static void writeRootElement(final XMLStreamWriter xmlWriter, final SchemaOrderedNormalizedNodeWriter nnWriter, final ContainerNode data) { try { - final Collection> value = data.getValue(); - nnWriter.write(value); + nnWriter.write(data.body()); nnWriter.flush(); xmlWriter.flush(); } catch (XMLStreamException | IOException e) { @@ -248,14 +245,16 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { * Parses xml element rpc input into normalized node or null if rpc does not take any input. * * @param element rpc xml element - * @param input input container schema node, or null if rpc does not take any input + * @param rpcDefinition input container schema node, or null if rpc does not take any input * @return parsed rpc into normalized node, or null if input schema is null */ private @Nullable ContainerNode rpcToNNode(final XmlElement element, - final @Nullable InputSchemaNode input) throws DocumentedException { + final RpcDefinition rpcDefinition) throws DocumentedException { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final XmlParserStream xmlParser = XmlParserStream.create(writer, schemaContext.getCurrentContext(), input); + final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.of( + schemaContext.getCurrentContext(), + Absolute.of(rpcDefinition.getQName(), rpcDefinition.getInput().getQName())).toInference()); try { xmlParser.traverse(new DOMSource(element.getDomElement())); diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/SplittingNormalizedNodeMetadataStreamWriter.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/SplittingNormalizedNodeMetadataStreamWriter.java index d00f365813..39c7fe7ec8 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/SplittingNormalizedNodeMetadataStreamWriter.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/SplittingNormalizedNodeMetadataStreamWriter.java @@ -184,12 +184,6 @@ final class SplittingNormalizedNodeMetadataStreamWriter implements NormalizedNod return ret; } - @Override - public void startYangModeledAnyXmlNode(final NodeIdentifier name, final int childSizeHint) throws IOException { - writer.startYangModeledAnyXmlNode(name, childSizeHint); - pushPath(name); - } - @Override public void endNode() throws IOException { final ModifyAction prevAction = actions.peek(); diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java index af319616da..6264c624a2 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java @@ -60,7 +60,7 @@ public abstract class AbstractGet extends AbstractSingletonNetconfOperation { this.validator = new FilterContentValidator(schemaContext); } - protected Node transformNormalizedNode(final Document document, final NormalizedNode data, + protected Node transformNormalizedNode(final Document document, final NormalizedNode data, final YangInstanceIdentifier dataRoot) { final DOMResult result = new DOMResult(document.createElement(XmlNetconfConstants.DATA_KEY)); @@ -98,10 +98,10 @@ public abstract class AbstractGet extends AbstractSingletonNetconfOperation { } private static void writeRootElement(final XMLStreamWriter xmlWriter, final NormalizedNodeWriter nnWriter, - final ContainerNode data) { + final ContainerNode data) { try { - if (data.getNodeType().equals(SchemaContext.NAME)) { - for (final DataContainerChild child : data.getValue()) { + if (data.getIdentifier().getNodeType().equals(SchemaContext.NAME)) { + for (final DataContainerChild child : data.body()) { nnWriter.write(child); } } else { @@ -117,8 +117,8 @@ public abstract class AbstractGet extends AbstractSingletonNetconfOperation { private static void writeRootElement(final XMLStreamWriter xmlWriter, final NormalizedNodeWriter nnWriter, final MapNode data) { try { - if (data.getNodeType().equals(SchemaContext.NAME)) { - for (final MapEntryNode child : data.getValue()) { + if (data.getIdentifier().getNodeType().equals(SchemaContext.NAME)) { + for (final MapEntryNode child : data.body()) { nnWriter.write(child); } } else { @@ -132,7 +132,7 @@ public abstract class AbstractGet extends AbstractSingletonNetconfOperation { } protected Element serializeNodeWithParentStructure(final Document document, final YangInstanceIdentifier dataRoot, - final NormalizedNode node) { + final NormalizedNode node) { if (!dataRoot.equals(ROOT)) { return (Element) transformNormalizedNode(document, ImmutableNodes.fromInstanceId(schemaContext.getCurrentContext(), dataRoot, node), diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java index afd31e3cfd..c4ae3d9899 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java @@ -11,8 +11,6 @@ import static org.opendaylight.yangtools.yang.data.util.ParserStreamUtils.findSc import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; -import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -28,6 +26,7 @@ import org.opendaylight.netconf.api.xml.MissingNameSpaceException; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder; import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory; @@ -35,12 +34,14 @@ import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec; import org.opendaylight.yangtools.yang.data.util.codec.TypeAwareCodec; import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -66,15 +67,19 @@ public class FilterContentValidator { * @throws DocumentedException if filter content validation failed */ public YangInstanceIdentifier validate(final XmlElement filterContent) throws DocumentedException { + final XMLNamespace namespace; + try { + namespace = XMLNamespace.of(filterContent.getNamespace()); + } catch (final IllegalArgumentException e) { + throw new RuntimeException("Wrong namespace in element + " + filterContent.toString(), e); + } + try { - final URI namespace = new URI(filterContent.getNamespace()); final Module module = schemaContext.getCurrentContext().findModules(namespace).iterator().next(); final DataSchemaNode schema = getRootDataSchemaNode(module, namespace, filterContent.getName()); final FilterTree filterTree = validateNode( filterContent, schema, new FilterTree(schema.getQName(), Type.OTHER, schema)); return getFilterDataRoot(filterTree, filterContent, YangInstanceIdentifier.builder()); - } catch (final URISyntaxException e) { - throw new RuntimeException("Wrong namespace in element + " + filterContent.toString(), e); } catch (final ValidationException e) { LOG.debug("Filter content isn't valid", e); throw new DocumentedException("Validation failed. Cause: " + e.getMessage(), e, @@ -93,7 +98,7 @@ public class FilterContentValidator { * @return child data node schema * @throws DocumentedException if child with given name is not present */ - private DataSchemaNode getRootDataSchemaNode(final Module module, final URI nameSpace, final String name) + private DataSchemaNode getRootDataSchemaNode(final Module module, final XMLNamespace nameSpace, final String name) throws DocumentedException { for (final DataSchemaNode childNode : module.getChildNodes()) { final QName qName = childNode.getQName(); @@ -123,7 +128,7 @@ public class FilterContentValidator { for (final XmlElement childElement : childElements) { try { final Deque path = findSchemaNodeByNameAndNamespace(parentNodeSchema, - childElement.getName(), new URI(childElement.getNamespace())); + childElement.getName(), XMLNamespace.of(childElement.getNamespace())); if (path.isEmpty()) { throw new ValidationException(element, childElement); } @@ -133,7 +138,7 @@ public class FilterContentValidator { } final DataSchemaNode childSchema = path.getLast(); validateNode(childElement, childSchema, subtree); - } catch (URISyntaxException | MissingNameSpaceException e) { + } catch (IllegalArgumentException | MissingNameSpaceException e) { throw new RuntimeException("Wrong namespace in element + " + childElement.toString(), e); } } @@ -214,10 +219,10 @@ public class FilterContentValidator { if (keyType instanceof IdentityrefTypeDefinition || keyType instanceof LeafrefTypeDefinition) { final Document document = filterContent.getDomElement().getOwnerDocument(); final NamespaceContext nsContext = new UniversalNamespaceContextImpl(document, false); - final XmlCodecFactory xmlCodecFactory = - XmlCodecFactory.create(schemaContext.getCurrentContext()); - final TypeAwareCodec typeCodec = - xmlCodecFactory.codecFor(listKey); + final EffectiveModelContext modelContext = schemaContext.getCurrentContext(); + final XmlCodecFactory xmlCodecFactory = XmlCodecFactory.create(modelContext); + final TypeAwareCodec typeCodec = xmlCodecFactory.codecFor( + listKey, SchemaInferenceStack.ofInstantiatedPath(modelContext, listKey.getPath())); final Object deserializedKeyValue = typeCodec.parseValue(nsContext, keyValue.get()); keys.put(qualifiedName, deserializedKeyValue); } else { diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/Get.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/Get.java index 4751c3323b..ffdb56261f 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/Get.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/Get.java @@ -53,7 +53,7 @@ public class Get extends AbstractGet { final DOMDataTreeReadWriteTransaction rwTx = getTransaction(Datastore.running); try { - final Optional> normalizedNodeOptional = rwTx.read( + final Optional normalizedNodeOptional = rwTx.read( LogicalDatastoreType.OPERATIONAL, dataRoot).get(); transactionProvider.abortRunningTransaction(rwTx); diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/GetConfig.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/GetConfig.java index aadf1b9a88..59006806e7 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/GetConfig.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/GetConfig.java @@ -65,7 +65,7 @@ public class GetConfig extends AbstractGet { final DOMDataTreeReadWriteTransaction rwTx = getTransaction(getConfigExecution.getDatastore().get()); try { - final Optional> normalizedNodeOptional = rwTx.read( + final Optional normalizedNodeOptional = rwTx.read( LogicalDatastoreType.CONFIGURATION, dataRoot).get(); if (getConfigExecution.getDatastore().get() == Datastore.running) { transactionProvider.abortRunningTransaction(rwTx); diff --git a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java index f169076572..684e2e995a 100644 --- a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java +++ b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java @@ -19,9 +19,8 @@ import com.google.common.base.Preconditions; import com.google.common.io.ByteSource; import com.google.common.util.concurrent.FluentFuture; import java.io.IOException; -import java.net.URI; import java.util.Collection; -import java.util.Collections; +import java.util.List; import javax.xml.parsers.ParserConfigurationException; import org.custommonkey.xmlunit.DetailedDiff; import org.custommonkey.xmlunit.Diff; @@ -53,8 +52,8 @@ import org.opendaylight.netconf.util.test.XmlFileLoader; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.NoOpListenerRegistration; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; 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.NormalizedNode; @@ -90,8 +89,8 @@ public class RuntimeRpcTest { private static final DOMRpcService RPC_SERVICE_VOID_INVOKER = new DOMRpcService() { @Override - public FluentFuture invokeRpc(final QName type, final NormalizedNode input) { - return immediateFluentFuture(new DefaultDOMRpcResult(null, Collections.emptyList())); + public FluentFuture invokeRpc(final QName type, final NormalizedNode input) { + return immediateFluentFuture(new DefaultDOMRpcResult(null, List.of())); } @Override @@ -102,7 +101,7 @@ public class RuntimeRpcTest { private static final DOMRpcService RPC_SERVICE_FAILED_INVOCATION = new DOMRpcService() { @Override - public FluentFuture invokeRpc(final QName type, final NormalizedNode input) { + public FluentFuture invokeRpc(final QName type, final NormalizedNode input) { return immediateFailedFluentFuture(new DOMRpcException("rpc invocation not implemented yet") { private static final long serialVersionUID = 1L; }); @@ -116,9 +115,8 @@ public class RuntimeRpcTest { private final DOMRpcService rpcServiceSuccessfulInvocation = new DOMRpcService() { @Override - public FluentFuture invokeRpc(final QName type, final NormalizedNode input) { - final Collection> children = - ((ContainerNode) input).getValue(); + public FluentFuture invokeRpc(final QName type, final NormalizedNode input) { + final Collection children = ((ContainerNode) input).body(); final Module module = SCHEMA_CONTEXT.findModules(type.getNamespace()).stream() .findFirst().orElse(null); final RpcDefinition rpcDefinition = getRpcDefinitionFromModule(module, module.getNamespace(), @@ -278,7 +276,7 @@ public class RuntimeRpcTest { assertTrue(dd.identical()); } - private static RpcDefinition getRpcDefinitionFromModule(final Module module, final URI namespaceURI, + private static RpcDefinition getRpcDefinitionFromModule(final Module module, final XMLNamespace namespaceURI, final String name) { for (final RpcDefinition rpcDef : module.getRpcs()) { if (rpcDef.getQName().getNamespace().equals(namespaceURI) diff --git a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/get/Netconf538Test.java b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/get/Netconf538Test.java index 24a68d905c..546e73b684 100644 --- a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/get/Netconf538Test.java +++ b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/get/Netconf538Test.java @@ -72,7 +72,7 @@ public class Netconf538Test { Assert.assertEquals(data.getIdentifier().getNodeType().getLocalName(), nodeUser.getLocalName()); Node nodeName = nodeUser.getFirstChild(); Assert.assertEquals(leafNode.getIdentifier().getNodeType().getLocalName(), nodeName.getLocalName()); - Assert.assertEquals(leafNode.getValue(), nodeName.getFirstChild().getNodeValue()); + Assert.assertEquals(leafNode.body(), nodeName.getFirstChild().getNodeValue()); } } diff --git a/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/ops/NotificationsTransformUtil.java b/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/ops/NotificationsTransformUtil.java index e04d2ec7ae..10c8bc331f 100644 --- a/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/ops/NotificationsTransformUtil.java +++ b/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/ops/NotificationsTransformUtil.java @@ -31,8 +31,8 @@ import org.opendaylight.yangtools.yang.binding.Notification; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; +import org.opendaylight.yangtools.yang.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.w3c.dom.Document; @Singleton diff --git a/netconf/mdsal-netconf-notification/src/main/resources/OSGI-INF/blueprint/mdsal-netconf-notification.xml b/netconf/mdsal-netconf-notification/src/main/resources/OSGI-INF/blueprint/mdsal-netconf-notification.xml index 8b632cc929..477eb6b2c3 100644 --- a/netconf/mdsal-netconf-notification/src/main/resources/OSGI-INF/blueprint/mdsal-netconf-notification.xml +++ b/netconf/mdsal-netconf-notification/src/main/resources/OSGI-INF/blueprint/mdsal-netconf-notification.xml @@ -21,7 +21,7 @@ + interface="org.opendaylight.yangtools.yang.parser.api.YangParserFactory"/> org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/netconf/netconf-config/pom.xml b/netconf/netconf-config/pom.xml index 22986aa6da..ff1d0f9243 100644 --- a/netconf/netconf-config/pom.xml +++ b/netconf/netconf-config/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent bundle-parent - 8.1.2 + 9.0.2 diff --git a/netconf/netconf-dom-api/src/main/java/org/opendaylight/netconf/dom/api/NetconfDataTreeService.java b/netconf/netconf-dom-api/src/main/java/org/opendaylight/netconf/dom/api/NetconfDataTreeService.java index 728daef37e..67659745ab 100644 --- a/netconf/netconf-dom-api/src/main/java/org/opendaylight/netconf/dom/api/NetconfDataTreeService.java +++ b/netconf/netconf-dom-api/src/main/java/org/opendaylight/netconf/dom/api/NetconfDataTreeService.java @@ -58,7 +58,7 @@ public interface NetconfDataTreeService extends DOMService { * * @return result of <get> operation */ - ListenableFuture>> get(YangInstanceIdentifier path); + ListenableFuture> get(YangInstanceIdentifier path); /** * The <get> operation with specific fields that are read from device. @@ -67,8 +67,7 @@ public interface NetconfDataTreeService extends DOMService { * @param fields list of fields (paths relative to parent path) * @return result of <get> operation */ - ListenableFuture>> get(YangInstanceIdentifier path, - List fields); + ListenableFuture> get(YangInstanceIdentifier path, List fields); /** * The <get-config> operation. @@ -76,15 +75,15 @@ public interface NetconfDataTreeService extends DOMService { * * @return result of <get-config> operation */ - ListenableFuture>> getConfig(YangInstanceIdentifier path); + ListenableFuture> getConfig(YangInstanceIdentifier path); /** * The <get-config> operation with specified fields that are read from device. * * @return result of <get-config> operation */ - ListenableFuture>> getConfig(YangInstanceIdentifier path, - List fields); + ListenableFuture> getConfig(YangInstanceIdentifier path, + List fields); /** * The <edit-config> operation with "merge" attribute. @@ -94,8 +93,7 @@ public interface NetconfDataTreeService extends DOMService { * @return result of <edit-config> operation */ ListenableFuture merge(LogicalDatastoreType store, YangInstanceIdentifier path, - NormalizedNode data, - Optional defaultOperation); + NormalizedNode data, Optional defaultOperation); /** * The <edit-config> operation with "replace" attribute. @@ -105,8 +103,7 @@ public interface NetconfDataTreeService extends DOMService { * @return result of <edit-config> operation */ ListenableFuture replace(LogicalDatastoreType store, YangInstanceIdentifier path, - NormalizedNode data, - Optional defaultOperation); + NormalizedNode data, Optional defaultOperation); /** * The <edit-config> operation with "create" attribute. @@ -116,8 +113,7 @@ public interface NetconfDataTreeService extends DOMService { * @return result of <edit-config> operation */ ListenableFuture create(LogicalDatastoreType store, YangInstanceIdentifier path, - NormalizedNode data, - Optional defaultOperation); + NormalizedNode data, Optional defaultOperation); /** * The <edit-config> operation with "create" attribute. @@ -152,4 +148,4 @@ public interface NetconfDataTreeService extends DOMService { * @return Device's identifier, must not be null. */ @NonNull Object getDeviceId(); -} \ No newline at end of file +} diff --git a/netconf/netconf-dom-api/src/main/java/org/opendaylight/netconf/dom/api/tx/NetconfDOMFieldsReadOperations.java b/netconf/netconf-dom-api/src/main/java/org/opendaylight/netconf/dom/api/tx/NetconfDOMFieldsReadOperations.java index cab35ddcde..fd05cceb19 100644 --- a/netconf/netconf-dom-api/src/main/java/org/opendaylight/netconf/dom/api/tx/NetconfDOMFieldsReadOperations.java +++ b/netconf/netconf-dom-api/src/main/java/org/opendaylight/netconf/dom/api/tx/NetconfDOMFieldsReadOperations.java @@ -29,6 +29,6 @@ public interface NetconfDOMFieldsReadOperations { * also next fields that are required to successfully build output {@link NormalizedNode}. * @throws NullPointerException if any argument is null */ - @NonNull FluentFuture>> read(LogicalDatastoreType store, YangInstanceIdentifier path, - List fields); + @NonNull FluentFuture> read(LogicalDatastoreType store, YangInstanceIdentifier path, + List fields); } diff --git a/netconf/netconf-impl/src/test/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringServiceTest.java b/netconf/netconf-impl/src/test/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringServiceTest.java index 96aaeebcb7..31c5d8b498 100644 --- a/netconf/netconf-impl/src/test/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringServiceTest.java +++ b/netconf/netconf-impl/src/test/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringServiceTest.java @@ -18,7 +18,6 @@ import static org.mockito.Mockito.verify; import static org.opendaylight.netconf.api.xml.XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0; import static org.opendaylight.netconf.api.xml.XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_URL_1_0; -import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -48,6 +47,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.mon import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.Module; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -88,14 +88,14 @@ public class NetconfCapabilityMonitoringServiceTest { @Before public void setUp() throws Exception { - doReturn(new URI(TEST_MODULE_NAMESPACE.getValue())).when(moduleMock).getNamespace(); + doReturn(XMLNamespace.of(TEST_MODULE_NAMESPACE.getValue())).when(moduleMock).getNamespace(); doReturn(TEST_MODULE_NAME).when(moduleMock).getName(); doReturn(Optional.of(TEST_MODULE_DATE)).when(moduleMock).getRevision(); moduleCapability1 = new YangModuleCapability(moduleMock, TEST_MODULE_CONTENT); capabilities.add(moduleCapability1); - doReturn(new URI(TEST_MODULE_NAMESPACE.getValue())).when(moduleMock2).getNamespace(); + doReturn(XMLNamespace.of(TEST_MODULE_NAMESPACE.getValue())).when(moduleMock2).getNamespace(); doReturn(TEST_MODULE_NAME).when(moduleMock2).getName(); doReturn(Optional.of(TEST_MODULE_DATE2)).when(moduleMock2).getRevision(); moduleCapability2 = new YangModuleCapability(moduleMock2, TEST_MODULE_CONTENT2); diff --git a/netconf/netconf-topology-impl/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java b/netconf/netconf-topology-impl/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java index 7607189c3b..d83ffef3b7 100644 --- a/netconf/netconf-topology-impl/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java +++ b/netconf/netconf-topology-impl/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java @@ -77,8 +77,8 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableIt import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; -import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl; +import org.opendaylight.yangtools.yang.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class NetconfTopologyImplTest { @@ -282,7 +282,7 @@ public class NetconfTopologyImplTest { static { try { - BASE_SCHEMAS = new DefaultBaseNetconfSchemas(new YangParserFactoryImpl()); + BASE_SCHEMAS = new DefaultBaseNetconfSchemas(new DefaultYangParserFactory()); } catch (YangParserException e) { throw new ExceptionInInitializerError(e); } diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyDOMRpcService.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyDOMRpcService.java index 40041b7aca..e4a1bb268d 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyDOMRpcService.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyDOMRpcService.java @@ -53,7 +53,7 @@ public class ProxyDOMRpcService implements DOMRpcService { } @Override - public FluentFuture invokeRpc(final QName type, final NormalizedNode input) { + public FluentFuture invokeRpc(final QName type, final NormalizedNode input) { LOG.trace("{}: Rpc operation invoked with schema type: {} and node: {}.", id, type, input); final NormalizedNodeMessage normalizedNodeMessage = input != null diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyNetconfDataTreeService.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyNetconfDataTreeService.java index 435b843940..af4eeb3bdd 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyNetconfDataTreeService.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyNetconfDataTreeService.java @@ -71,14 +71,14 @@ public class ProxyNetconfDataTreeService implements NetconfDataTreeService { } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path) { + public ListenableFuture> get(final YangInstanceIdentifier path) { final Future masterActor = Patterns.ask(masterNode, new NetconfDataTreeServiceRequest(), askTimeout); ProxyNetconfService netconfService = new ProxyNetconfService(id, masterActor, executionContext, askTimeout); return netconfService.get(path); } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path, + public ListenableFuture> get(final YangInstanceIdentifier path, final List fields) { final Future masterActor = Patterns.ask(masterNode, new NetconfDataTreeServiceRequest(), askTimeout); ProxyNetconfService netconfService = new ProxyNetconfService(id, masterActor, executionContext, askTimeout); @@ -86,14 +86,14 @@ public class ProxyNetconfDataTreeService implements NetconfDataTreeService { } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path) { + public ListenableFuture> getConfig(final YangInstanceIdentifier path) { final Future masterActor = Patterns.ask(masterNode, new NetconfDataTreeServiceRequest(), askTimeout); ProxyNetconfService netconfService = new ProxyNetconfService(id, masterActor, executionContext, askTimeout); return netconfService.getConfig(path); } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path, + public ListenableFuture> getConfig(final YangInstanceIdentifier path, final List fields) { final Future masterActor = Patterns.ask(masterNode, new NetconfDataTreeServiceRequest(), askTimeout); ProxyNetconfService netconfService = new ProxyNetconfService(id, masterActor, executionContext, askTimeout); @@ -102,7 +102,7 @@ public class ProxyNetconfDataTreeService implements NetconfDataTreeService { @Override public ListenableFuture merge(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { isLocked(); return proxyNetconfService.merge(store, path, data, defaultOperation); @@ -110,7 +110,7 @@ public class ProxyNetconfDataTreeService implements NetconfDataTreeService { @Override public ListenableFuture replace(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { isLocked(); return proxyNetconfService.replace(store, path, data, defaultOperation); @@ -118,7 +118,7 @@ public class ProxyNetconfDataTreeService implements NetconfDataTreeService { @Override public ListenableFuture create(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { isLocked(); return proxyNetconfService.create(store, path, data, defaultOperation); diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfDataTreeServiceActor.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfDataTreeServiceActor.java index 7f007d146f..7c91756b2d 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfDataTreeServiceActor.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfDataTreeServiceActor.java @@ -67,27 +67,27 @@ public final class NetconfDataTreeServiceActor extends UntypedAbstractActor { if (message instanceof GetWithFieldsRequest) { final GetWithFieldsRequest getRequest = (GetWithFieldsRequest) message; final YangInstanceIdentifier path = getRequest.getPath(); - final ListenableFuture>> future = netconfService.get( + final ListenableFuture> future = netconfService.get( getRequest.getPath(), getRequest.getFields()); context().stop(self()); sendResult(future, path, sender(), self()); } else if (message instanceof GetRequest) { final GetRequest getRequest = (GetRequest) message; final YangInstanceIdentifier path = getRequest.getPath(); - final ListenableFuture>> future = netconfService.get(path); + final ListenableFuture> future = netconfService.get(path); context().stop(self()); sendResult(future, path, sender(), self()); } else if (message instanceof GetConfigWithFieldsRequest) { final GetConfigWithFieldsRequest getConfigRequest = (GetConfigWithFieldsRequest) message; final YangInstanceIdentifier path = getConfigRequest.getPath(); - final ListenableFuture>> future = netconfService.getConfig( + final ListenableFuture> future = netconfService.getConfig( path, getConfigRequest.getFields()); context().stop(self()); sendResult(future, path, sender(), self()); } else if (message instanceof GetConfigRequest) { final GetConfigRequest getConfigRequest = (GetConfigRequest) message; final YangInstanceIdentifier path = getConfigRequest.getPath(); - final ListenableFuture>> future = netconfService.getConfig(path); + final ListenableFuture> future = netconfService.getConfig(path); context().stop(self()); sendResult(future, path, sender(), self()); } else if (message instanceof LockRequest) { @@ -182,11 +182,11 @@ public final class NetconfDataTreeServiceActor extends UntypedAbstractActor { }, MoreExecutors.directExecutor()); } - private static void sendResult(final ListenableFuture>> feature, + private static void sendResult(final ListenableFuture> feature, final YangInstanceIdentifier path, final ActorRef sender, final ActorRef self) { Futures.addCallback(feature, new FutureCallback<>() { @Override - public void onSuccess(final Optional> result) { + public void onSuccess(final Optional result) { if (result.isEmpty()) { sender.tell(new EmptyReadResponse(), self); return; diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadAdapter.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadAdapter.java index 2a56fe7e2a..3e1b4ffb9c 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadAdapter.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadAdapter.java @@ -48,9 +48,9 @@ class ReadAdapter { private void read(final YangInstanceIdentifier path, final LogicalDatastoreType store, final ActorRef sender, final ActorRef self) { - tx.read(store, path).addCallback(new FutureCallback>>() { + tx.read(store, path).addCallback(new FutureCallback>() { @Override - public void onSuccess(final Optional> result) { + public void onSuccess(final Optional result) { if (result.isEmpty()) { sender.tell(new EmptyReadResponse(), self); return; diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ActorProxyNetconfServiceFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ActorProxyNetconfServiceFacade.java index f6195e3d8b..a0180302e1 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ActorProxyNetconfServiceFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ActorProxyNetconfServiceFacade.java @@ -135,14 +135,14 @@ public class ActorProxyNetconfServiceFacade implements ProxyNetconfServiceFacade } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path) { + public ListenableFuture> get(final YangInstanceIdentifier path) { LOG.debug("{}: Get {} {} via actor {}", id, OPERATIONAL, path, masterActor); final Future future = Patterns.ask(masterActor, new GetRequest(path), askTimeout); return read(future, OPERATIONAL, path); } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path, + public ListenableFuture> get(final YangInstanceIdentifier path, final List fields) { LOG.debug("{}: Get {} {} with fields {} via actor {}", id, OPERATIONAL, path, fields, masterActor); final Future future = Patterns.ask(masterActor, new GetWithFieldsRequest(path, fields), askTimeout); @@ -150,14 +150,14 @@ public class ActorProxyNetconfServiceFacade implements ProxyNetconfServiceFacade } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path) { + public ListenableFuture> getConfig(final YangInstanceIdentifier path) { LOG.debug("{}: GetConfig {} {} via actor {}", id, CONFIGURATION, path, masterActor); final Future future = Patterns.ask(masterActor, new GetConfigRequest(path), askTimeout); return read(future, CONFIGURATION, path); } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path, + public ListenableFuture> getConfig(final YangInstanceIdentifier path, final List fields) { LOG.debug("{}: GetConfig {} {} with fields {} via actor {}", id, CONFIGURATION, path, fields, masterActor); final Future future = Patterns.ask(masterActor, @@ -167,7 +167,7 @@ public class ActorProxyNetconfServiceFacade implements ProxyNetconfServiceFacade @Override public ListenableFuture merge(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Merge {} {} via actor {}", id, store, path, masterActor); masterActor.tell(new MergeEditConfigRequest( @@ -178,7 +178,7 @@ public class ActorProxyNetconfServiceFacade implements ProxyNetconfServiceFacade @Override public ListenableFuture replace(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Replace {} {} via actor {}", id, store, path, masterActor); @@ -189,7 +189,7 @@ public class ActorProxyNetconfServiceFacade implements ProxyNetconfServiceFacade @Override public ListenableFuture create(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Create {} {} via actor {}", id, store, path, masterActor); masterActor.tell(new CreateEditConfigRequest( @@ -248,10 +248,9 @@ public class ActorProxyNetconfServiceFacade implements ProxyNetconfServiceFacade return id; } - private SettableFuture>> read(final Future future, - final LogicalDatastoreType store, - final YangInstanceIdentifier path) { - final SettableFuture>> settableFuture = SettableFuture.create(); + private SettableFuture> read(final Future future, final LogicalDatastoreType store, + final YangInstanceIdentifier path) { + final SettableFuture> settableFuture = SettableFuture.create(); future.onComplete(new OnComplete<>() { @Override public void onComplete(final Throwable failure, final Object response) { diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/FailedProxyNetconfServiceFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/FailedProxyNetconfServiceFacade.java index 64fe6d8856..b2778a20ba 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/FailedProxyNetconfServiceFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/FailedProxyNetconfServiceFacade.java @@ -56,26 +56,26 @@ public class FailedProxyNetconfServiceFacade implements ProxyNetconfServiceFacad } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path) { + public ListenableFuture> get(final YangInstanceIdentifier path) { LOG.debug("{}: Get {} {} - failure", id, OPERATIONAL, path, failure); return readFailed("get"); } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path, + public ListenableFuture> get(final YangInstanceIdentifier path, final List fields) { LOG.debug("{}: Get {} {} with fields {} - failure", id, OPERATIONAL, path, fields, failure); return readFailed("get"); } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path) { + public ListenableFuture> getConfig(final YangInstanceIdentifier path) { LOG.debug("{}: GetConfig {} {} - failure", id, CONFIGURATION, path, failure); return readFailed("getConfig"); } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path, + public ListenableFuture> getConfig(final YangInstanceIdentifier path, final List fields) { LOG.debug("{}: GetConfig {} {} with fields {} - failure", id, CONFIGURATION, path, fields, failure); return readFailed("getConfig"); @@ -83,7 +83,7 @@ public class FailedProxyNetconfServiceFacade implements ProxyNetconfServiceFacad @Override public ListenableFuture merge(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Merge {} {} - failure", id, store, path, failure); return serviceFailed("merge"); @@ -91,7 +91,7 @@ public class FailedProxyNetconfServiceFacade implements ProxyNetconfServiceFacad @Override public ListenableFuture replace(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Replace {} {} - failure", id, store, path, failure); return serviceFailed("replace"); @@ -99,7 +99,7 @@ public class FailedProxyNetconfServiceFacade implements ProxyNetconfServiceFacad @Override public ListenableFuture create(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Create {} {} - failure", id, store, path, failure); return serviceFailed("create"); diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfService.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfService.java index da748a1b91..7ecc5e0d2b 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfService.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfService.java @@ -93,42 +93,42 @@ public class ProxyNetconfService implements NetconfDataTreeService { } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path) { + public ListenableFuture> get(final YangInstanceIdentifier path) { LOG.debug("{}: Get {} {}", id, OPERATIONAL, path); - final SettableFuture>> returnFuture = SettableFuture.create(); + final SettableFuture> returnFuture = SettableFuture.create(); processNetconfOperation(facade -> returnFuture.setFuture(facade.get(path))); return returnFuture; } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path, - final List fields) { + public ListenableFuture> get(final YangInstanceIdentifier path, + final List fields) { LOG.debug("{}: Get {} {} with fields: {}", id, OPERATIONAL, path, fields); - final SettableFuture>> returnFuture = SettableFuture.create(); + final SettableFuture> returnFuture = SettableFuture.create(); processNetconfOperation(facade -> returnFuture.setFuture(facade.get(path, fields))); return returnFuture; } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path) { + public ListenableFuture> getConfig(final YangInstanceIdentifier path) { LOG.debug("{}: Get config {} {}", id, CONFIGURATION, path); - final SettableFuture>> returnFuture = SettableFuture.create(); + final SettableFuture> returnFuture = SettableFuture.create(); processNetconfOperation(facade -> returnFuture.setFuture(facade.getConfig(path))); return returnFuture; } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path, - final List fields) { + public ListenableFuture> getConfig(final YangInstanceIdentifier path, + final List fields) { LOG.debug("{}: Get config {} {} with fields: {}", id, CONFIGURATION, path, fields); - final SettableFuture>> returnFuture = SettableFuture.create(); + final SettableFuture> returnFuture = SettableFuture.create(); processNetconfOperation(facade -> returnFuture.setFuture(facade.getConfig(path, fields))); return returnFuture; } @Override public ListenableFuture merge(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Merge {} {}", id, store, path); final SettableFuture returnFuture = SettableFuture.create(); @@ -138,7 +138,7 @@ public class ProxyNetconfService implements NetconfDataTreeService { @Override public ListenableFuture replace(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Replace {} {}", id, store, path); final SettableFuture returnFuture = SettableFuture.create(); @@ -148,7 +148,7 @@ public class ProxyNetconfService implements NetconfDataTreeService { @Override public ListenableFuture create(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { LOG.debug("{}: Create {} {}", id, store, path); final SettableFuture returnFuture = SettableFuture.create(); diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ActorProxyTransactionFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ActorProxyTransactionFacade.java index d41ef11747..b7182801f3 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ActorProxyTransactionFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ActorProxyTransactionFacade.java @@ -71,7 +71,7 @@ class ActorProxyTransactionFacade implements ProxyTransactionFacade { final Future future = Patterns.ask(masterTxActor, new CancelRequest(), askTimeout); - future.onComplete(new OnComplete() { + future.onComplete(new OnComplete<>() { @Override public void onComplete(final Throwable failure, final Object response) { if (failure != null) { @@ -87,14 +87,14 @@ class ActorProxyTransactionFacade implements ProxyTransactionFacade { } @Override - public FluentFuture>> read(final LogicalDatastoreType store, + public FluentFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { LOG.debug("{}: Read {} {} via actor {}", id, store, path, masterTxActor); final Future future = Patterns.ask(masterTxActor, new ReadRequest(store, path), askTimeout); - final SettableFuture>> settableFuture = SettableFuture.create(); - future.onComplete(new OnComplete() { + final SettableFuture> settableFuture = SettableFuture.create(); + future.onComplete(new OnComplete<>() { @Override public void onComplete(final Throwable failure, final Object response) { if (failure != null) { @@ -134,7 +134,7 @@ class ActorProxyTransactionFacade implements ProxyTransactionFacade { final Future future = Patterns.ask(masterTxActor, new ExistsRequest(store, path), askTimeout); final SettableFuture settableFuture = SettableFuture.create(); - future.onComplete(new OnComplete() { + future.onComplete(new OnComplete<>() { @Override public void onComplete(final Throwable failure, final Object response) { if (failure != null) { @@ -166,15 +166,13 @@ class ActorProxyTransactionFacade implements ProxyTransactionFacade { } @Override - public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { LOG.debug("{}: Put {} {} via actor {}", id, store, path, masterTxActor); masterTxActor.tell(new PutRequest(store, new NormalizedNodeMessage(path, data)), ActorRef.noSender()); } @Override - public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { LOG.debug("{}: Merge {} {} via actor {}", id, store, path, masterTxActor); masterTxActor.tell(new MergeRequest(store, new NormalizedNodeMessage(path, data)), ActorRef.noSender()); } @@ -186,7 +184,7 @@ class ActorProxyTransactionFacade implements ProxyTransactionFacade { final Future future = Patterns.ask(masterTxActor, new SubmitRequest(), askTimeout); final SettableFuture settableFuture = SettableFuture.create(); - future.onComplete(new OnComplete() { + future.onComplete(new OnComplete<>() { @Override public void onComplete(final Throwable failure, final Object response) { if (failure != null) { diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/FailedProxyTransactionFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/FailedProxyTransactionFacade.java index 8cf76f675d..5ad5d9d907 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/FailedProxyTransactionFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/FailedProxyTransactionFacade.java @@ -49,7 +49,7 @@ class FailedProxyTransactionFacade implements ProxyTransactionFacade { } @Override - public FluentFuture>> read(final LogicalDatastoreType store, + public FluentFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { LOG.debug("{}: Read {} {} - failure", id, store, path, failure); return FluentFutures.immediateFailedFluentFuture(ReadFailedException.MAPPER.apply( @@ -70,14 +70,12 @@ class FailedProxyTransactionFacade implements ProxyTransactionFacade { } @Override - public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { LOG.debug("{}: Put {} {} - failure", id, store, path, failure); } @Override - public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { LOG.debug("{}: Merge {} {} - failure", id, store, path, failure); } diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransaction.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransaction.java index 99cb14a82e..83db0ff7dd 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransaction.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransaction.java @@ -53,7 +53,7 @@ public class ProxyReadWriteTransaction implements DOMDataTreeReadWriteTransactio final ExecutionContext executionContext, final Timeout askTimeout) { this.id = id; - masterTxActorFuture.onComplete(new OnComplete() { + masterTxActorFuture.onComplete(new OnComplete<>() { @Override public void onComplete(final Throwable failure, final Object masterTxActor) { final ProxyTransactionFacade newTransactionFacade; @@ -82,11 +82,11 @@ public class ProxyReadWriteTransaction implements DOMDataTreeReadWriteTransactio } @Override - public FluentFuture>> read(final LogicalDatastoreType store, + public FluentFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { LOG.debug("{}: Read {} {}", id, store, path); - final SettableFuture>> returnFuture = SettableFuture.create(); + final SettableFuture> returnFuture = SettableFuture.create(); processTransactionOperation(facade -> returnFuture.setFuture(facade.read(store, path))); return FluentFuture.from(returnFuture); } @@ -109,16 +109,14 @@ public class ProxyReadWriteTransaction implements DOMDataTreeReadWriteTransactio } @Override - public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { checkOpen(); LOG.debug("{}: Put {} {}", id, store, path); processTransactionOperation(facade -> facade.put(store, path, data)); } @Override - public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { checkOpen(); LOG.debug("{}: Merge {} {}", id, store, path); processTransactionOperation(facade -> facade.merge(store, path, data)); diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/messages/NormalizedNodeMessage.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/messages/NormalizedNodeMessage.java index 711ecacbfa..a9c8ab9fc2 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/messages/NormalizedNodeMessage.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/messages/NormalizedNodeMessage.java @@ -23,13 +23,13 @@ public class NormalizedNodeMessage implements Externalizable { private static final long serialVersionUID = 1L; private YangInstanceIdentifier identifier; - private NormalizedNode node; + private NormalizedNode node; public NormalizedNodeMessage() { // empty constructor needed for Externalizable } - public NormalizedNodeMessage(final YangInstanceIdentifier identifier, final NormalizedNode node) { + public NormalizedNodeMessage(final YangInstanceIdentifier identifier, final NormalizedNode node) { this.identifier = identifier; this.node = node; } @@ -38,7 +38,7 @@ public class NormalizedNodeMessage implements Externalizable { return identifier; } - public NormalizedNode getNode() { + public NormalizedNode getNode() { return node; } diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/AbstractBaseSchemasTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/AbstractBaseSchemasTest.java index df1cf00744..cb897dba08 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/AbstractBaseSchemasTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/AbstractBaseSchemasTest.java @@ -11,15 +11,15 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.BaseNetconfSchemas; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.DefaultBaseNetconfSchemas; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; -import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl; +import org.opendaylight.yangtools.yang.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; public abstract class AbstractBaseSchemasTest { protected static BaseNetconfSchemas BASE_SCHEMAS; @BeforeClass public static void initBaseSchemas() throws YangParserException { - BASE_SCHEMAS = new DefaultBaseNetconfSchemas(new YangParserFactoryImpl()); + BASE_SCHEMAS = new DefaultBaseNetconfSchemas(new DefaultYangParserFactory()); } @AfterClass diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java index 83bd1d80ea..2bccd69783 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java @@ -133,7 +133,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; @@ -156,7 +156,7 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; -import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl; +import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -228,7 +228,7 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { public void setUp() throws Exception { deleteCacheDir(); - resourceManager = new DefaultSchemaResourceManager(new YangParserFactoryImpl(), TEST_ROOT_DIRECTORY, + resourceManager = new DefaultSchemaResourceManager(new DefaultYangParserFactory(), TEST_ROOT_DIRECTORY, TEST_DEFAULT_SUBDIR); topModuleInfo = BindingReflections.getModuleInfo(Top.class); @@ -503,7 +503,7 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { private void testDOMRpcService(final DOMRpcService domRpcService) throws InterruptedException, ExecutionException, TimeoutException { - testPutTopRpc(domRpcService, new DefaultDOMRpcResult((NormalizedNode)null)); + testPutTopRpc(domRpcService, new DefaultDOMRpcResult((NormalizedNode)null)); testPutTopRpc(domRpcService, null); testPutTopRpc(domRpcService, new DefaultDOMRpcResult(ImmutableList.of( RpcResultBuilder.newError(ErrorType.APPLICATION, "tag1", "error1"), @@ -532,9 +532,8 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { testRpc(domRpcService, getTopRpcSchemaPath, getTopInput, result); } - private void testRpc(final DOMRpcService domRpcService, final QName qname, - final NormalizedNode input, final DOMRpcResult result) throws InterruptedException, - ExecutionException, TimeoutException { + private void testRpc(final DOMRpcService domRpcService, final QName qname, final NormalizedNode input, + final DOMRpcResult result) throws InterruptedException, ExecutionException, TimeoutException { final FluentFuture future = result == null ? FluentFutures.immediateNullFluentFuture() : FluentFutures.immediateFluentFuture(result); final DOMRpcResult actual = invokeRpc(domRpcService, qname, input, future); @@ -561,8 +560,8 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { } } - private void testFailedRpc(final DOMRpcService domRpcService, final QName qname, - final NormalizedNode input) throws InterruptedException, TimeoutException { + private void testFailedRpc(final DOMRpcService domRpcService, final QName qname, final NormalizedNode input) + throws InterruptedException, TimeoutException { try { invokeRpc(domRpcService, qname, input, FluentFutures.immediateFailedFluentFuture( new ClusteringRpcException("mock"))); @@ -573,9 +572,9 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { } } - private DOMRpcResult invokeRpc(final DOMRpcService domRpcService, final QName qname, - final NormalizedNode input, final FluentFuture returnFuture) - throws InterruptedException, ExecutionException, TimeoutException { + private DOMRpcResult invokeRpc(final DOMRpcService domRpcService, final QName qname, final NormalizedNode input, + final FluentFuture returnFuture) + throws InterruptedException, ExecutionException, TimeoutException { topRpcImplementation.init(returnFuture); final ListenableFuture resultFuture = domRpcService.invokeRpc(qname, input); @@ -644,8 +643,8 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { } private static void verifyDataInStore(final DOMDataTreeReadOperations readTx, final YangInstanceIdentifier path, - final NormalizedNode expNode) throws InterruptedException, ExecutionException, TimeoutException { - final Optional> read = readTx.read(LogicalDatastoreType.CONFIGURATION, path) + final NormalizedNode expNode) throws InterruptedException, ExecutionException, TimeoutException { + final Optional read = readTx.read(LogicalDatastoreType.CONFIGURATION, path) .get(5, TimeUnit.SECONDS); assertTrue(read.isPresent()); assertEquals(expNode, read.get()); @@ -728,12 +727,11 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { } private static class TopDOMRpcImplementation implements DOMRpcImplementation { - private volatile SettableFuture>> rpcInvokedFuture; + private volatile SettableFuture> rpcInvokedFuture; private volatile FluentFuture returnFuture; @Override - public FluentFuture invokeRpc(final DOMRpcIdentifier rpc, - final NormalizedNode input) { + public FluentFuture invokeRpc(final DOMRpcIdentifier rpc, final NormalizedNode input) { rpcInvokedFuture.set(new SimpleEntry<>(rpc, input)); return returnFuture; } @@ -743,9 +741,9 @@ public class MountPointEndToEndTest extends AbstractBaseSchemasTest { rpcInvokedFuture = SettableFuture.create(); } - void verify(final DOMRpcIdentifier expRpc, final NormalizedNode expInput) + void verify(final DOMRpcIdentifier expRpc, final NormalizedNode expInput) throws InterruptedException, ExecutionException, TimeoutException { - final Entry> actual = rpcInvokedFuture.get(5, TimeUnit.SECONDS); + final Entry actual = rpcInvokedFuture.get(5, TimeUnit.SECONDS); assertEquals(expRpc, actual.getKey()); assertEquals(expInput, actual.getValue()); } diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java index 2c4ad28519..3954e6622d 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java @@ -494,7 +494,7 @@ public class NetconfNodeActorTest extends AbstractBaseSchemasTest { assertTrue(slaveDomRPCService instanceof ProxyDOMRpcService); final QName testQName = QName.create("", "TestQname"); - final NormalizedNode outputNode = ImmutableContainerNodeBuilder.create() + final NormalizedNode outputNode = ImmutableContainerNodeBuilder.create() .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(testQName)) .withChild(ImmutableNodes.leafNode(testQName, "foo")).build(); final RpcError rpcError = RpcResultBuilder.newError(RpcError.ErrorType.RPC, null, "Rpc invocation failed."); @@ -641,8 +641,9 @@ public class NetconfNodeActorTest extends AbstractBaseSchemasTest { final YangInstanceIdentifier PATH = YangInstanceIdentifier.empty(); final LogicalDatastoreType STORE = LogicalDatastoreType.CONFIGURATION; - final NormalizedNode NODE = Builders.containerBuilder() - .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("", "cont"))).build(); + final ContainerNode NODE = Builders.containerBuilder() + .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("", "cont"))) + .build(); final FluentFuture> result = immediateFluentFuture(Optional.of(NODE)); doReturn(result).when(netconfService).get(PATH); diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java index a4a013f0d7..b670d638b1 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java @@ -83,7 +83,7 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.common.Uint16; -import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl; +import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class NetconfTopologyManagerTest extends AbstractBaseSchemasTest { @@ -135,7 +135,7 @@ public class NetconfTopologyManagerTest extends AbstractBaseSchemasTest { actionProviderRegistry, clusterSingletonServiceProvider, keepaliveExecutor, processingThreadPool, actorSystemProvider, eventExecutor, clientDispatcher, TOPOLOGY_ID, config, mountPointService, encryptionService, rpcProviderService, deviceActionFactory, - new DefaultSchemaResourceManager(new YangParserFactoryImpl())) { + new DefaultSchemaResourceManager(new DefaultYangParserFactory())) { @Override protected NetconfTopologyContext newNetconfTopologyContext(final NetconfTopologySetup setup, final ServiceGroupIdentifier serviceGroupIdent, final Timeout actorResponseWaitTime, diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/ProxyNetconfDataTreeServiceTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/ProxyNetconfDataTreeServiceTest.java index fbcad37e22..e45d05cb84 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/ProxyNetconfDataTreeServiceTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/ProxyNetconfDataTreeServiceTest.java @@ -44,7 +44,8 @@ import org.opendaylight.netconf.topology.singleton.messages.netconf.UnlockReques import org.opendaylight.netconf.topology.singleton.messages.rpc.InvokeRpcMessageReply; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import scala.concurrent.duration.Duration; import scala.concurrent.duration.FiniteDuration; @@ -55,8 +56,9 @@ public class ProxyNetconfDataTreeServiceTest { new RemoteDeviceId("dev1", InetSocketAddress.createUnresolved("localhost", 17830)); private static final YangInstanceIdentifier PATH = YangInstanceIdentifier.empty(); private static final LogicalDatastoreType STORE = LogicalDatastoreType.CONFIGURATION; - private static final NormalizedNode NODE = Builders.containerBuilder() - .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("", "cont"))).build(); + private static final ContainerNode NODE = Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(QName.create("", "cont"))) + .build(); private static ActorSystem system = ActorSystem.apply(); diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java index 3d26a86067..051e2aae1b 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java @@ -57,7 +57,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; -import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl; +import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; import scala.concurrent.duration.Duration; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -172,7 +172,7 @@ public class RemoteDeviceConnectorImplTest extends AbstractBaseSchemasTest { final Node node = new NodeBuilder().setNodeId(NODE_ID).addAugmentation(netconfNode).build(); - builder.setSchemaResourceDTO(new DefaultSchemaResourceManager(new YangParserFactoryImpl()) + builder.setSchemaResourceDTO(new DefaultSchemaResourceManager(new DefaultYangParserFactory()) .getSchemaResources(netconfNode, "foo")); final RemoteDeviceConnectorImpl remoteDeviceConnection = diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfDataTreeServiceActorTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfDataTreeServiceActorTest.java index 53fd4897c9..918527e7b1 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfDataTreeServiceActorTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfDataTreeServiceActorTest.java @@ -56,7 +56,8 @@ import org.opendaylight.yangtools.yang.common.QName; 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.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import scala.concurrent.duration.Duration; @@ -65,8 +66,9 @@ public class NetconfDataTreeServiceActorTest { static final YangInstanceIdentifier PATH = YangInstanceIdentifier.empty(); static final LogicalDatastoreType STORE = LogicalDatastoreType.CONFIGURATION; static final Timeout TIMEOUT = Timeout.apply(5, TimeUnit.SECONDS); - static final NormalizedNode NODE = Builders.containerBuilder() - .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("", "cont"))).build(); + static final ContainerNode NODE = Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(QName.create("", "cont"))) + .build(); private static ActorSystem system = ActorSystem.apply(); diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadTransactionActorTestAdapter.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadTransactionActorTestAdapter.java index cb1324b472..937dfdbc09 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadTransactionActorTestAdapter.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadTransactionActorTestAdapter.java @@ -31,7 +31,8 @@ import org.opendaylight.netconf.topology.singleton.messages.transactions.ExistsR import org.opendaylight.netconf.topology.singleton.messages.transactions.ReadRequest; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; /** @@ -43,8 +44,9 @@ public abstract class ReadTransactionActorTestAdapter { static final YangInstanceIdentifier PATH = YangInstanceIdentifier.empty(); static final LogicalDatastoreType STORE = LogicalDatastoreType.CONFIGURATION; static final Timeout TIMEOUT = Timeout.apply(5, TimeUnit.SECONDS); - static final NormalizedNode NODE = Builders.containerBuilder() - .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("", "cont"))).build(); + static final ContainerNode NODE = Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(QName.create("", "cont"))) + .build(); private DOMDataTreeReadOperations mockReadTx; private TestProbe probe; diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfServiceTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfServiceTest.java index eccac33ba5..688ff46266 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfServiceTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfServiceTest.java @@ -109,12 +109,12 @@ public class ProxyNetconfServiceTest { @Test public void testGet() throws Exception { ProxyNetconfService netconf = newSuccessfulProxyNetconfService(); - final ListenableFuture>> get = netconf.get(PATH); + final ListenableFuture> get = netconf.get(PATH); final GetRequest getRequest = masterActor.expectMsgClass(GetRequest.class); assertEquals(PATH, getRequest.getPath()); masterActor.reply(new NormalizedNodeMessage(PATH, node)); - final Optional> result = get.get(5, TimeUnit.SECONDS); + final Optional result = get.get(5, TimeUnit.SECONDS); assertTrue(result.isPresent()); assertEquals(node, result.get()); } @@ -123,7 +123,7 @@ public class ProxyNetconfServiceTest { public void testGetFailure() throws InterruptedException, TimeoutException { ProxyNetconfService netconf = newSuccessfulProxyNetconfService(); - final ListenableFuture>> get = netconf.get(PATH); + final ListenableFuture> get = netconf.get(PATH); masterActor.expectMsgClass(GetRequest.class); final RuntimeException mockEx = new RuntimeException("fail"); masterActor.reply(new Status.Failure(mockEx)); @@ -141,22 +141,22 @@ public class ProxyNetconfServiceTest { @Test public void testGetEmpty() throws Exception { ProxyNetconfService netconf = newSuccessfulProxyNetconfService(); - final ListenableFuture>> get = netconf.get(PATH); + final ListenableFuture> get = netconf.get(PATH); masterActor.expectMsgClass(GetRequest.class); masterActor.reply(new EmptyReadResponse()); - final Optional> result = get.get(5, TimeUnit.SECONDS); + final Optional result = get.get(5, TimeUnit.SECONDS); assertFalse(result.isPresent()); } @Test public void testGetConfig() throws Exception { ProxyNetconfService netconf = newSuccessfulProxyNetconfService(); - final ListenableFuture>> getConfig = netconf.getConfig(PATH); + final ListenableFuture> getConfig = netconf.getConfig(PATH); final GetConfigRequest getRequest = masterActor.expectMsgClass(GetConfigRequest.class); assertEquals(PATH, getRequest.getPath()); masterActor.reply(new NormalizedNodeMessage(PATH, node)); - final Optional> result = getConfig.get(5, TimeUnit.SECONDS); + final Optional result = getConfig.get(5, TimeUnit.SECONDS); assertTrue(result.isPresent()); assertEquals(node, result.get()); } @@ -165,7 +165,7 @@ public class ProxyNetconfServiceTest { public void testGetConfigFailure() throws InterruptedException, TimeoutException { ProxyNetconfService netconf = newSuccessfulProxyNetconfService(); - final ListenableFuture>> getConfig = netconf.getConfig(PATH); + final ListenableFuture> getConfig = netconf.getConfig(PATH); masterActor.expectMsgClass(GetConfigRequest.class); final RuntimeException mockEx = new RuntimeException("fail"); masterActor.reply(new Status.Failure(mockEx)); @@ -183,10 +183,10 @@ public class ProxyNetconfServiceTest { @Test public void testGetConfigEmpty() throws Exception { ProxyNetconfService netconf = newSuccessfulProxyNetconfService(); - final ListenableFuture>> getConfig = netconf.getConfig(PATH); + final ListenableFuture> getConfig = netconf.getConfig(PATH); masterActor.expectMsgClass(GetConfigRequest.class); masterActor.reply(new EmptyReadResponse()); - final Optional> result = getConfig.get(5, TimeUnit.SECONDS); + final Optional result = getConfig.get(5, TimeUnit.SECONDS); assertFalse(result.isPresent()); } diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransactionTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransactionTest.java index 591b57067a..8cbfb26268 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransactionTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransactionTest.java @@ -203,13 +203,13 @@ public class ProxyReadWriteTransactionTest { public void testRead() throws Exception { ProxyReadWriteTransaction tx = newSuccessfulProxyTx(); - final ListenableFuture>> read = tx.read(STORE, PATH); + final ListenableFuture> read = tx.read(STORE, PATH); final ReadRequest readRequest = masterActor.expectMsgClass(ReadRequest.class); assertEquals(STORE, readRequest.getStore()); assertEquals(PATH, readRequest.getPath()); masterActor.reply(new NormalizedNodeMessage(PATH, node)); - final Optional> result = read.get(5, TimeUnit.SECONDS); + final Optional result = read.get(5, TimeUnit.SECONDS); assertTrue(result.isPresent()); assertEquals(node, result.get()); } @@ -218,10 +218,10 @@ public class ProxyReadWriteTransactionTest { public void testReadEmpty() throws Exception { ProxyReadWriteTransaction tx = newSuccessfulProxyTx(); - final ListenableFuture>> read = tx.read(STORE, PATH); + final ListenableFuture> read = tx.read(STORE, PATH); masterActor.expectMsgClass(ReadRequest.class); masterActor.reply(new EmptyReadResponse()); - final Optional> result = read.get(5, TimeUnit.SECONDS); + final Optional result = read.get(5, TimeUnit.SECONDS); assertFalse(result.isPresent()); } @@ -229,7 +229,7 @@ public class ProxyReadWriteTransactionTest { public void testReadFailure() throws InterruptedException, TimeoutException { ProxyReadWriteTransaction tx = newSuccessfulProxyTx(); - final ListenableFuture>> read = tx.read(STORE, PATH); + final ListenableFuture> read = tx.read(STORE, PATH); masterActor.expectMsgClass(ReadRequest.class); final RuntimeException mockEx = new RuntimeException("fail"); masterActor.reply(new Failure(mockEx)); @@ -327,7 +327,7 @@ public class ProxyReadWriteTransactionTest { ProxyReadWriteTransaction tx = new ProxyReadWriteTransaction(DEVICE_ID, promise.future(), system.dispatcher(), Timeout.apply(5, TimeUnit.SECONDS)); - final ListenableFuture>> read = tx.read(STORE, PATH); + final ListenableFuture> read = tx.read(STORE, PATH); final ListenableFuture exists = tx.exists(STORE, PATH); tx.put(STORE, PATH, node); diff --git a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java index 24d73643ea..3ad497cc98 100644 --- a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java +++ b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java @@ -26,10 +26,10 @@ import org.opendaylight.netconf.api.DocumentedException; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.api.xml.XmlUtil; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata; import org.opendaylight.yangtools.rfc7952.data.util.NormalizedMetadataWriter; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; @@ -40,11 +40,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; -import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; @@ -137,7 +135,7 @@ public final class NetconfUtil { } @SuppressWarnings("checkstyle:IllegalCatch") - public static void writeNormalizedNode(final NormalizedNode normalized, final DOMResult result, + public static void writeNormalizedNode(final NormalizedNode normalized, final DOMResult result, final SchemaPath schemaPath, final EffectiveModelContext context) throws IOException, XMLStreamException { final XMLStreamWriter writer = XML_FACTORY.createXMLStreamWriter(result); @@ -161,7 +159,7 @@ public final class NetconfUtil { } @SuppressWarnings("checkstyle:IllegalCatch") - public static void writeNormalizedNode(final NormalizedNode normalized, + public static void writeNormalizedNode(final NormalizedNode normalized, final @Nullable NormalizedMetadata metadata, final DOMResult result, final SchemaPath schemaPath, final EffectiveModelContext context) throws IOException, XMLStreamException { @@ -353,22 +351,16 @@ public final class NetconfUtil { return rootTreeNode; } - public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final MountPointContext mountContext, + public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final MountPointContext mount, final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final XmlCodecFactory codecs = XmlCodecFactory.create(mountContext); - - // FIXME: we probably need to propagate MountPointContext here and not just the child nodes - final ContainerSchemaNode dataRead = new NodeContainerProxy(NETCONF_DATA_QNAME, - mountContext.getEffectiveModelContext().getChildNodes()); - try (XmlParserStream xmlParserStream = XmlParserStream.create(writer, codecs, dataRead)) { + try (XmlParserStream xmlParserStream = XmlParserStream.create(writer, new ProxyMountPointContext(mount))) { xmlParserStream.traverse(value); } return resultHolder; } - // FIXME: document this interface contract. Does it support RFC8528/RFC8542? How? public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final EffectiveModelContext schemaContext, final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException { diff --git a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java index 760409824a..f32706242f 100644 --- a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java +++ b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java @@ -14,6 +14,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ActionDefinition; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; @@ -31,7 +32,10 @@ import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBo /** * Simple proxy for container like schema nodes, where user provides a collection of children schema nodes. + * + * @deprecated This class is no longer used anywhere and is scheduled for removal. */ +@Deprecated(since = "2.0.0", forRemoval = true) public final class NodeContainerProxy implements ContainerSchemaNode { private final Map childNodes; @@ -74,8 +78,8 @@ public final class NodeContainerProxy implements ContainerSchemaNode { } @Override - public Optional findDataChildByName(final QName name) { - return Optional.ofNullable(childNodes.get(name)); + public DataSchemaNode dataChildByName(final QName name) { + return childNodes.get(name); } @Override @@ -106,7 +110,7 @@ public final class NodeContainerProxy implements ContainerSchemaNode { } @Override - public boolean isConfiguration() { + public Optional effectiveConfig() { throw new UnsupportedOperationException(); } @@ -152,7 +156,7 @@ public final class NodeContainerProxy implements ContainerSchemaNode { } @Override - public Collection getMustConstraints() { + public Collection getMustConstraints() { return Collections.emptySet(); } diff --git a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/ProxyEffectiveModelContext.java b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/ProxyEffectiveModelContext.java new file mode 100644 index 0000000000..c0c701d808 --- /dev/null +++ b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/ProxyEffectiveModelContext.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.netconf.util; + +import static java.util.Objects.requireNonNull; + +import java.util.Collection; +import java.util.Map; +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.common.XMLNamespace; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; +import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; +import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; +import org.opendaylight.yangtools.yang.model.api.RpcDefinition; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; + +/** + * A simple proxy, overriding #getQName() to a value containing revision. + */ +final class ProxyEffectiveModelContext implements EffectiveModelContext, Delegator { + private final @NonNull EffectiveModelContext delegate; + + ProxyEffectiveModelContext(final EffectiveModelContext delegate) { + this.delegate = requireNonNull(delegate); + } + + @Override + public EffectiveModelContext getDelegate() { + return delegate; + } + + @Override + @Deprecated + public QName getQName() { + return NetconfUtil.NETCONF_DATA_QNAME; + } + + @Override + public Optional> findSchemaTreeNode(final SchemaNodeIdentifier path) { + return delegate.findSchemaTreeNode(path); + } + + @Override + public Optional findSchemaTreeNode(final Class type, final SchemaNodeIdentifier path) { + return delegate.findSchemaTreeNode(type, path); + } + + @Override + public Map getModuleStatements() { + return delegate.getModuleStatements(); + } + + @Override + public Optional findModuleStatement(final QNameModule moduleName) { + return delegate.findModuleStatement(moduleName); + } + + @Override + public Optional findModuleStatement(final QName moduleName) { + return delegate.findModuleStatement(moduleName); + } + + @Override + public ModuleEffectiveStatement getModuleStatement(final QNameModule moduleName) { + return delegate.getModuleStatement(moduleName); + } + + @Override + public ModuleEffectiveStatement getModuleStatement(final QName moduleName) { + return delegate.getModuleStatement(moduleName); + } + + @Override + public Collection getDataDefinitions() { + return delegate.getDataDefinitions(); + } + + @Override + public Collection getModules() { + return delegate.getModules(); + } + + @Override + public Collection getOperations() { + return delegate.getOperations(); + } + + @Override + public Collection getExtensions() { + return delegate.getExtensions(); + } + + @Override + public Optional findModule(final QNameModule qnameModule) { + return delegate.findModule(qnameModule); + } + + @Override + public Collection findModules(final XMLNamespace namespace) { + return delegate.findModules(namespace); + } + + @Override + public Optional findNotification(final QName qname) { + return delegate.findNotification(qname); + } + + @Override + public Optional findDataTreeChild(final QName name) { + return delegate.findDataTreeChild(name); + } + + @Override + public Collection getDerivedIdentities(final IdentitySchemaNode identity) { + return delegate.getDerivedIdentities(identity); + } + + @Override + public Collection getUnknownSchemaNodes() { + return delegate.getUnknownSchemaNodes(); + } + + @Override + public Collection> getTypeDefinitions() { + return delegate.getTypeDefinitions(); + } + + @Override + public Collection getChildNodes() { + return delegate.getChildNodes(); + } + + @Override + public Collection getGroupings() { + return delegate.getGroupings(); + } + + @Override + public DataSchemaNode dataChildByName(final QName name) { + return delegate.dataChildByName(name); + } + + @Override + public Collection getNotifications() { + return delegate.getNotifications(); + } +} diff --git a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/ProxyMountPointContext.java b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/ProxyMountPointContext.java new file mode 100644 index 0000000000..5de5546f7a --- /dev/null +++ b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/ProxyMountPointContext.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.netconf.util; + +import static java.util.Objects.requireNonNull; + +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; +import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; +import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; + +/** + * A simple proxy, masking the model context towards ProxyEffectiveModelContext. + */ +final class ProxyMountPointContext implements Delegator, MountPointContext { + private final @NonNull MountPointContext delegate; + + ProxyMountPointContext(final MountPointContext delegate) { + this.delegate = requireNonNull(delegate); + } + + @Override + public MountPointContext getDelegate() { + return delegate; + } + + @Override + public EffectiveModelContext getEffectiveModelContext() { + return new ProxyEffectiveModelContext(delegate.getEffectiveModelContext()); + } + + @Override + public Optional findMountPoint(final MountPointIdentifier label) { + return delegate.findMountPoint(label); + } +} diff --git a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/StreamingContext.java b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/StreamingContext.java index 023ce4d0ae..2f1fc44bda 100644 --- a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/StreamingContext.java +++ b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/StreamingContext.java @@ -23,6 +23,7 @@ import java.util.Optional; import java.util.stream.Collectors; import javax.xml.transform.dom.DOMSource; import org.opendaylight.yangtools.concepts.Identifiable; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -62,7 +63,7 @@ abstract class StreamingContext implements Identifiable< // We try to look up if this node was added by augmentation if (schema instanceof DataSchemaNode && result.isAugmenting()) { for (final AugmentationSchemaNode aug : ((AugmentationTarget)schema).getAvailableAugmentations()) { - if (aug.findDataChildByName(result.getQName()).isPresent()) { + if (aug.dataChildByName(result.getQName()) != null) { return new Augmentation(aug, schema); } } @@ -366,7 +367,7 @@ abstract class StreamingContext implements Identifiable< private static final class LeafListEntry extends AbstractSimple> { LeafListEntry(final LeafListSchemaNode potential) { - super(new NodeWithValue<>(potential.getQName(), null)); + super(new NodeWithValue<>(potential.getQName(), Empty.getInstance())); } @Override diff --git a/netconf/pom.xml b/netconf/pom.xml index 42e97bd76c..524aae6aa7 100644 --- a/netconf/pom.xml +++ b/netconf/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/netconf/sal-netconf-connector/pom.xml b/netconf/sal-netconf-connector/pom.xml index ba7c091deb..9c523e565e 100644 --- a/netconf/sal-netconf-connector/pom.xml +++ b/netconf/sal-netconf-connector/pom.xml @@ -80,6 +80,10 @@ org.opendaylight.yangtools yang-parser-impl + + org.opendaylight.yangtools + yang-repo-fs + org.opendaylight.yangtools yang-data-codec-gson diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/MessageTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/MessageTransformer.java index 4f37fe6094..6074b8fe2e 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/MessageTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/MessageTransformer.java @@ -19,7 +19,7 @@ public interface MessageTransformer { DOMNotification toNotification(M message); - M toRpcRequest(QName rpc, NormalizedNode node); + M toRpcRequest(QName rpc, NormalizedNode node); DOMRpcResult toRpcResult(M message, QName rpc); @@ -32,7 +32,7 @@ public interface MessageTransformer { * @return message */ default M toActionRequest(final Absolute action, final DOMDataTreeIdentifier domDataTreeIdentifier, - final NormalizedNode payload) { + final NormalizedNode payload) { throw new UnsupportedOperationException(); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/DefaultSchemaResourceManager.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/DefaultSchemaResourceManager.java index 04eb9d8f87..3b18ac4b45 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/DefaultSchemaResourceManager.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/DefaultSchemaResourceManager.java @@ -22,11 +22,11 @@ import org.opendaylight.netconf.sal.connect.api.SchemaResourceManager; import org.opendaylight.netconf.sal.connect.netconf.NetconfDevice.SchemaResourcesDTO; import org.opendaylight.netconf.sal.connect.netconf.NetconfStateSchemasResolverImpl; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang.model.repo.util.FilesystemSchemaSourceCache; -import org.opendaylight.yangtools.yang.model.repo.util.InMemorySchemaSourceCache; +import org.opendaylight.yangtools.yang.model.repo.fs.FilesystemSchemaSourceCache; +import org.opendaylight.yangtools.yang.model.repo.spi.GuavaSchemaSourceCache; +import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository; import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; @@ -108,7 +108,7 @@ public final class DefaultSchemaResourceManager implements SchemaResourceManager // helps establishing different sets of contexts, as they can share this pre-made cache. repository.registerSchemaSourceListener( // FIXME: add knobs to control cache lifetime explicitly - InMemorySchemaSourceCache.createSoftCache(repository, IRSchemaSource.class)); + GuavaSchemaSourceCache.createSoftCache(repository, IRSchemaSource.class)); // Attach the filesystem cache, providing persistence capability, so that restarts do not require us to // re-populate the cache. This also acts as a side-load capability, as anything pre-populated into that diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/OSGiSchemaResourceManager.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/OSGiSchemaResourceManager.java index e6056778c9..428252c5d7 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/OSGiSchemaResourceManager.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/OSGiSchemaResourceManager.java @@ -11,7 +11,7 @@ import com.google.common.annotations.Beta; import org.opendaylight.netconf.sal.connect.api.SchemaResourceManager; import org.opendaylight.netconf.sal.connect.netconf.NetconfDevice.SchemaResourcesDTO; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; +import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java index 9c0828a91a..6f48d89bde 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java @@ -9,24 +9,17 @@ package org.opendaylight.netconf.sal.connect.netconf; import static java.util.Objects.requireNonNull; -import com.google.common.collect.ClassToInstanceMap; -import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import javax.inject.Singleton; -import org.opendaylight.mdsal.dom.api.DOMActionResult; import org.opendaylight.mdsal.dom.api.DOMActionService; -import org.opendaylight.mdsal.dom.api.DOMActionServiceExtension; -import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.sal.connect.api.DeviceActionFactory; import org.opendaylight.netconf.sal.connect.api.MessageTransformer; import org.opendaylight.netconf.sal.connect.api.RemoteDeviceCommunicator; import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,33 +38,24 @@ public class DeviceActionFactoryImpl implements DeviceActionFactory { @Override public DOMActionService createDeviceAction(final MessageTransformer messageTransformer, final RemoteDeviceCommunicator listener, final SchemaContext schemaContext) { - - return new DOMActionService() { - @Override - public ListenableFuture invokeAction(final Absolute schemaPath, - final DOMDataTreeIdentifier dataTreeIdentifier, final ContainerNode input) { - requireNonNull(schemaPath); - requireNonNull(dataTreeIdentifier); - requireNonNull(input); - - final ListenableFuture> actionResultFuture = listener.sendRequest( - messageTransformer.toActionRequest(schemaPath, dataTreeIdentifier, input), input.getNodeType()); - - return Futures.transform(actionResultFuture, netconfMessageRpcResult -> { - if (netconfMessageRpcResult != null) { - return messageTransformer.toActionResult(schemaPath, netconfMessageRpcResult.getResult()); - } else { - final String message = "Missing action result of action on schema path: " + schemaPath; - LOG.error(message); - throw new IllegalStateException(message); - } - }, MoreExecutors.directExecutor()); - } - - @Override - public ClassToInstanceMap getExtensions() { - return ImmutableClassToInstanceMap.of(); - } + return (schemaPath, dataTreeIdentifier, input) -> { + requireNonNull(schemaPath); + requireNonNull(dataTreeIdentifier); + requireNonNull(input); + + final ListenableFuture> actionResultFuture = listener.sendRequest( + messageTransformer.toActionRequest(schemaPath, dataTreeIdentifier, input), + input.getIdentifier().getNodeType()); + + return Futures.transform(actionResultFuture, netconfMessageRpcResult -> { + if (netconfMessageRpcResult != null) { + return messageTransformer.toActionResult(schemaPath, netconfMessageRpcResult.getResult()); + } + + final String message = "Missing action result of action on schema path: " + schemaPath; + LOG.error(message); + throw new IllegalStateException(message); + }, MoreExecutors.directExecutor()); }; } -} \ No newline at end of file +} diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceMountPointContext.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceMountPointContext.java index bc8703d7d5..e0b4c97dae 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceMountPointContext.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceMountPointContext.java @@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.util.AbstractEffectiveModelContextProvider; +import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,21 +66,21 @@ final class DeviceMountPointContext extends AbstractEffectiveModelContextProvide } static MountPointContext create(final MountPointContext emptyContext, final ContainerNode mountData) { - final Optional> optMountPoint = mountData.getChild(MOUNT_POINT); + final Optional optMountPoint = mountData.findChildByArg(MOUNT_POINT); if (optMountPoint.isEmpty()) { LOG.debug("mount-point list not present in {}", mountData); return emptyContext; } final EffectiveModelContext schemaContext = emptyContext.getEffectiveModelContext(); - final DataContainerChild mountPoint = optMountPoint.get(); + final DataContainerChild mountPoint = optMountPoint.get(); checkArgument(mountPoint instanceof MapNode, "mount-point list %s is not a MapNode", mountPoint); final Map mountPoints = new HashMap<>(); - for (MapEntryNode entry : ((MapNode) mountPoint).getValue()) { - final String moduleName = entry.getChild(MODULE).map(mod -> { + for (MapEntryNode entry : ((MapNode) mountPoint).body()) { + final String moduleName = entry.findChildByArg(MODULE).map(mod -> { checkArgument(mod instanceof LeafNode, "Unexpected module leaf %s", mod); - final Object value = mod.getValue(); + final Object value = mod.body(); checkArgument(value instanceof String, "Unexpected module leaf value %s", value); return (String) value; }).orElseThrow(() -> new IllegalArgumentException("Mount module missing in " + entry)); @@ -89,19 +89,19 @@ final class DeviceMountPointContext extends AbstractEffectiveModelContextProvide final QNameModule module = it.next().getQNameModule(); final MountPointIdentifier mountId = MountPointIdentifier.of(QName.create(module, - entry.getChild(LABEL).map(lbl -> { + entry.findChildByArg(LABEL).map(lbl -> { checkArgument(lbl instanceof LeafNode, "Unexpected label leaf %s", lbl); - final Object value = lbl.getValue(); + final Object value = lbl.body(); checkArgument(value instanceof String, "Unexpected label leaf value %s", value); return (String) value; }).orElseThrow(() -> new IllegalArgumentException("Mount module missing in " + entry)))); - final DataContainerChild child = entry.getChild(SCHEMA_REF).orElseThrow( + final DataContainerChild child = entry.findChildByArg(SCHEMA_REF).orElseThrow( () -> new IllegalArgumentException("Missing schema-ref choice in " + entry)); checkArgument(child instanceof ChoiceNode, "Unexpected schema-ref choice %s", child); final ChoiceNode schemaRef = (ChoiceNode) child; - final Optional> maybeShared = schemaRef.getChild(SHARED_SCHEMA); + final Optional maybeShared = schemaRef.findChildByArg(SHARED_SCHEMA); if (maybeShared.isEmpty()) { LOG.debug("Ignoring non-shared mountpoint entry {}", entry); continue; diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/LibraryModulesSchemas.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/LibraryModulesSchemas.java index 6ef8577429..fcdf01a692 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/LibraryModulesSchemas.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/LibraryModulesSchemas.java @@ -22,7 +22,6 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; -import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; @@ -55,6 +54,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.librar import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -74,6 +74,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -91,6 +93,8 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { private static final Pattern DATE_PATTERN = Pattern.compile("(\\d{4}-\\d{2}-\\d{2})"); private static final EffectiveModelContext LIBRARY_CONTEXT = BindingRuntimeHelpers.createEffectiveModel( YangLibrary.class); + private static final Inference MODULES_STATE_INFERENCE = + SchemaInferenceStack.ofDataTreePath(LIBRARY_CONTEXT, ModulesState.QNAME).toInference(); // FIXME: this is legacy RFC7895, add support for RFC8525 containers, too private static final NodeIdentifier MODULES_STATE_NID = NodeIdentifier.create(ModulesState.QNAME); @@ -179,10 +183,10 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { return new LibraryModulesSchemas(ImmutableMap.of()); } - final Optional> modulesStateNode = + final Optional modulesStateNode = findModulesStateNode(moduleListNodeResult.getResult()); if (modulesStateNode.isPresent()) { - final NormalizedNode node = modulesStateNode.get(); + final DataContainerChild node = modulesStateNode.get(); checkState(node instanceof ContainerNode, "Expecting container containing schemas, but was %s", node); return create((ContainerNode) node); } @@ -192,14 +196,14 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { } private static LibraryModulesSchemas create(final ContainerNode modulesStateNode) { - final Optional> moduleListNode = modulesStateNode.getChild(MODULE_NID); + final Optional moduleListNode = modulesStateNode.findChildByArg(MODULE_NID); checkState(moduleListNode.isPresent(), "Unable to find list: %s in %s", MODULE_NID, modulesStateNode); - final DataContainerChild node = moduleListNode.get(); + final DataContainerChild node = moduleListNode.get(); checkState(node instanceof MapNode, "Unexpected structure for container: %s in : %s. Expecting a list", MODULE_NID, modulesStateNode); final MapNode moduleList = (MapNode) node; - final Collection modules = moduleList.getValue(); + final Collection modules = moduleList.body(); final ImmutableMap.Builder schemasMapping = ImmutableMap.builderWithExpectedSize(modules.size()); for (final MapEntryNode moduleNode : modules) { final Entry entry = createFromEntry(moduleNode); @@ -231,17 +235,16 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { return createFromURLConnection(connection); } - private static Optional> findModulesStateNode(final NormalizedNode result) { + private static Optional findModulesStateNode(final NormalizedNode result) { if (result == null) { return Optional.empty(); } - final Optional> dataNode = - ((DataContainerNode) result).getChild(NETCONF_DATA_NODEID); - if (dataNode.isPresent() == false) { + final Optional dataNode = ((DataContainerNode) result).findChildByArg(NETCONF_DATA_NODEID); + if (dataNode.isEmpty()) { return Optional.empty(); } - return ((DataContainerNode) dataNode.get()).getChild(MODULES_STATE_NID); + return ((DataContainerNode) dataNode.get()).findChildByArg(MODULES_STATE_NID); } private static LibraryModulesSchemas createFromURLConnection(final URLConnection connection) { @@ -257,7 +260,7 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { checkState(contentType.equals("application/json") || contentType.equals("application/xml"), "Only XML and JSON types are supported."); - Optional> optionalModulesStateNode = Optional.empty(); + Optional optionalModulesStateNode = Optional.empty(); try (InputStream in = connection.getInputStream()) { optionalModulesStateNode = contentType.equals("application/json") ? readJson(in) : readXml(in); } catch (final IOException e) { @@ -268,7 +271,7 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { return new LibraryModulesSchemas(ImmutableMap.of()); } - final NormalizedNode modulesStateNode = optionalModulesStateNode.get(); + final NormalizedNode modulesStateNode = optionalModulesStateNode.get(); checkState(modulesStateNode instanceof ContainerNode, "Expecting container containing module list, but was %s", modulesStateNode); final ContainerNode modulesState = (ContainerNode) modulesStateNode; @@ -283,7 +286,7 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { return i != 1 && ".json".equalsIgnoreCase(fileName.substring(i)); } - private static Optional> readJson(final InputStream in) { + private static Optional readJson(final InputStream in) { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); @@ -295,7 +298,7 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { return resultHolder.isFinished() ? Optional.of(resultHolder.getResult()) : Optional.empty(); } - private static Optional> readXml(final InputStream in) { + private static Optional readXml(final InputStream in) { try { final DocumentBuilder docBuilder = UntrustedXML.newDocumentBuilder(); @@ -318,11 +321,9 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final XmlParserStream xmlParser = XmlParserStream.create(writer, LIBRARY_CONTEXT, - LIBRARY_CONTEXT.findDataChildByName(ModulesState.QNAME).orElseThrow()); + final XmlParserStream xmlParser = XmlParserStream.create(writer, MODULES_STATE_INFERENCE); xmlParser.traverse(new DOMSource(doc.getDocumentElement())); - final NormalizedNode parsed = resultHolder.getResult(); - return Optional.of(parsed); + return Optional.of(resultHolder.getResult()); } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) { LOG.warn("Unable to parse yang library xml content", e); } @@ -331,7 +332,8 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { } private static @Nullable Entry createFromEntry(final MapEntryNode moduleNode) { - checkArgument(moduleNode.getNodeType().equals(Module.QNAME), "Wrong QName %s", moduleNode.getNodeType()); + final QName moduleNodeId = moduleNode.getIdentifier().getNodeType(); + checkArgument(moduleNodeId.equals(Module.QNAME), "Wrong QName %s", moduleNodeId); final String moduleName = getSingleChildNodeValue(moduleNode, NAME_NID).get(); final Optional revision = getSingleChildNodeValue(moduleNode, REVISION_NID); @@ -349,7 +351,7 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { final QName moduleQName = revision.isPresent() ? QName.create(moduleNameSpace, revision.get(), moduleName) - : QName.create(URI.create(moduleNameSpace), moduleName); + : QName.create(XMLNamespace.of(moduleNameSpace), moduleName); try { return new SimpleImmutableEntry<>(moduleQName, new URL(schemaUriAsString.get())); @@ -360,15 +362,15 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas { } } - private static Optional getSingleChildNodeValue(final DataContainerNode schemaNode, + private static Optional getSingleChildNodeValue(final DataContainerNode schemaNode, final NodeIdentifier childNodeId) { - final Optional> node = schemaNode.getChild(childNodeId); + final Optional node = schemaNode.findChildByArg(childNodeId); checkArgument(node.isPresent(), "Child node %s not present", childNodeId.getNodeType()); return getValueOfSimpleNode(node.get()); } - private static Optional getValueOfSimpleNode(final NormalizedNode node) { - final String valueStr = node.getValue().toString(); + private static Optional getValueOfSimpleNode(final NormalizedNode node) { + final String valueStr = node.body().toString(); return Strings.isNullOrEmpty(valueStr) ? Optional.empty() : Optional.of(valueStr.trim()); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java index ecbee257ce..63cf187675 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java @@ -58,8 +58,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev19 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.unavailable.capabilities.UnavailableCapability; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.rfc8528.model.api.SchemaMountConstants; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcError; @@ -223,7 +223,7 @@ public class NetconfDevice @Override public void onSuccess(final DOMRpcResult domRpcResult) { notificationHandler.addNotificationFilter(notification -> { - if (NetconfCapabilityChange.QNAME.equals(notification.getBody().getNodeType())) { + if (NetconfCapabilityChange.QNAME.equals(notification.getBody().getIdentifier().getNodeType())) { LOG.info("{}: Schemas change detected, reconnecting", id); // Only disconnect is enough, // the reconnecting nature of the connector will take care of reconnecting @@ -333,7 +333,7 @@ public class NetconfDevice if (!errors.isEmpty()) { LOG.warn("{}: Schema-mounts acquisition resulted in errors {}", id, errors); } - final NormalizedNode schemaMounts = rpcResult.getResult(); + final NormalizedNode schemaMounts = rpcResult.getResult(); if (schemaMounts == null) { LOG.debug("{}: device does not define any schema mounts", id); return emptyContext; diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfMountPointContextFactory.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfMountPointContextFactory.java index 6b314a4750..7beaac7535 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfMountPointContextFactory.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfMountPointContextFactory.java @@ -8,13 +8,13 @@ package org.opendaylight.netconf.sal.connect.netconf; import java.util.Map; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.rfc8528.data.api.MountPointChild; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; import org.opendaylight.yangtools.rfc8528.data.api.YangLibraryConstants.ContainerName; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.parser.api.YangParserException; // TODO: this should really come from mdsal-yanglib-rfc8525 final class NetconfMountPointContextFactory implements MountPointContextFactory { diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java index 496809cf68..7baf4c371f 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java @@ -22,7 +22,6 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.util.HashSet; import java.util.Optional; @@ -44,6 +43,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.mon import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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.DOMSourceAnyxmlNode; @@ -143,14 +143,14 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas { return EMPTY; } - final Optional> optSchemasNode = findSchemasNode(schemasNodeResult.getResult(), + final Optional optSchemasNode = findSchemasNode(schemasNodeResult.getResult(), schemaContext); if (optSchemasNode.isEmpty()) { LOG.warn("{}: Unable to detect available schemas, get to {} was empty", id, STATE_SCHEMAS_IDENTIFIER); return EMPTY; } - final NormalizedNode schemasNode = optSchemasNode.get(); + final NormalizedNode schemasNode = optSchemasNode.get(); checkState(schemasNode instanceof ContainerNode, "Expecting container containing schemas, but was %s", schemasNode); return create(id, (ContainerNode) schemasNode); @@ -163,15 +163,15 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas { protected static NetconfStateSchemas create(final RemoteDeviceId id, final ContainerNode schemasNode) { final Set availableYangSchemas = new HashSet<>(); - final Optional> child = - schemasNode.getChild(toId(Schema.QNAME)); + final Optional child = + schemasNode.findChildByArg(toId(Schema.QNAME)); checkState(child.isPresent(), "Unable to find list: %s in response: %s", Schema.QNAME.withoutRevision(), schemasNode); checkState(child.get() instanceof MapNode, "Unexpected structure for container: %s in response: %s. Expecting a list", Schema.QNAME.withoutRevision(), schemasNode); - for (final MapEntryNode schemaNode : ((MapNode) child.get()).getValue()) { + for (final MapEntryNode schemaNode : ((MapNode) child.get()).body()) { final Optional fromCompositeNode = RemoteYangSchema.createFromNormalizedNode(id, schemaNode); fromCompositeNode.ifPresent(availableYangSchemas::add); @@ -180,35 +180,35 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas { return new NetconfStateSchemas(availableYangSchemas); } - private static Optional> findSchemasNode(final NormalizedNode result, + private static Optional findSchemasNode(final NormalizedNode result, final EffectiveModelContext schemaContext) { if (result == null) { return Optional.empty(); } - final Optional> rpcResultOpt = ((ContainerNode)result).getChild(NETCONF_DATA_NODEID); + final Optional rpcResultOpt = ((ContainerNode)result).findChildByArg(NETCONF_DATA_NODEID); if (rpcResultOpt.isEmpty()) { return Optional.empty(); } - final DataContainerChild rpcResult = rpcResultOpt.get(); + final DataContainerChild rpcResult = rpcResultOpt.get(); verify(rpcResult instanceof DOMSourceAnyxmlNode, "Unexpected result %s", rpcResult); - final NormalizedNode dataNode; + final NormalizedNode dataNode; try { dataNode = NetconfUtil.transformDOMSourceToNormalizedNode(schemaContext, - ((DOMSourceAnyxmlNode) rpcResult).getValue()).getResult(); + ((DOMSourceAnyxmlNode) rpcResult).body()).getResult(); } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) { LOG.warn("Failed to transform {}", rpcResult, e); return Optional.empty(); } - final Optional> nStateNode = ((DataContainerNode) dataNode).getChild( + final Optional nStateNode = ((DataContainerNode) dataNode).findChildByArg( toId(NetconfState.QNAME)); if (nStateNode.isEmpty()) { return Optional.empty(); } - return ((DataContainerNode) nStateNode.get()).getChild(toId(Schemas.QNAME)); + return ((DataContainerNode) nStateNode.get()).findChildByArg(toId(Schemas.QNAME)); } public static final class RemoteYangSchema { @@ -224,7 +224,8 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas { static Optional createFromNormalizedNode(final RemoteDeviceId id, final MapEntryNode schemaNode) { - checkArgument(schemaNode.getNodeType().equals(Schema.QNAME), "Wrong QName %s", schemaNode.getNodeType()); + final QName schemaNodeId = schemaNode.getIdentifier().getNodeType(); + checkArgument(schemaNodeId.equals(Schema.QNAME), "Wrong QName %s", schemaNodeId); QName childNode = NetconfMessageTransformUtil.IETF_NETCONF_MONITORING_SCHEMA_FORMAT; @@ -259,7 +260,7 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas { final QName moduleQName = revisionAsString.isPresent() ? QName.create(namespaceAsString, revisionAsString.get(), moduleNameAsString) - : QName.create(URI.create(namespaceAsString), moduleNameAsString); + : QName.create(XMLNamespace.of(namespaceAsString), moduleNameAsString); return Optional.of(new RemoteYangSchema(moduleQName)); } @@ -267,23 +268,21 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas { /** * Extracts all values of a leaf-list node as a set of strings. */ - private static Set getAllChildNodeValues(final DataContainerNode schemaNode, + private static Set getAllChildNodeValues(final DataContainerNode schemaNode, final QName childNodeQName) { final Set extractedValues = new HashSet<>(); - final Optional> child = - schemaNode.getChild(toId(childNodeQName)); + final Optional child = schemaNode.findChildByArg(toId(childNodeQName)); checkArgument(child.isPresent(), "Child nodes %s not present", childNodeQName); checkArgument(child.get() instanceof LeafSetNode, "Child nodes %s not present", childNodeQName); - for (final LeafSetEntryNode childNode : ((LeafSetNode) child.get()).getValue()) { + for (final LeafSetEntryNode childNode : ((LeafSetNode) child.get()).body()) { extractedValues.add(getValueOfSimpleNode(childNode).get()); } return extractedValues; } - private static Optional getSingleChildNodeValue(final DataContainerNode schemaNode, + private static Optional getSingleChildNodeValue(final DataContainerNode schemaNode, final QName childNode) { - final Optional> node = - schemaNode.getChild(toId(childNode)); + final Optional node = schemaNode.findChildByArg(toId(childNode)); if (node.isPresent()) { return getValueOfSimpleNode(node.get()); } @@ -291,9 +290,8 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas { return Optional.empty(); } - private static Optional getValueOfSimpleNode( - final NormalizedNode node) { - final String valueStr = node.getValue().toString(); + private static Optional getValueOfSimpleNode(final NormalizedNode node) { + final String valueStr = node.body().toString(); return Strings.isNullOrEmpty(valueStr) ? Optional.empty() : Optional.of(valueStr.trim()); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java index d69acefef3..ba03a603ee 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java @@ -17,7 +17,6 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; -import java.net.URI; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -26,6 +25,7 @@ import org.opendaylight.netconf.client.NetconfClientSession; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability.CapabilityOrigin; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -206,7 +206,7 @@ public final class NetconfSessionPreferences { } private static QName cachedQName(final String namespace, final String moduleName) { - return QName.create(URI.create(namespace), moduleName).withoutRevision().intern(); + return QName.create(XMLNamespace.of(namespace), moduleName).withoutRevision().intern(); } public static NetconfSessionPreferences fromStrings(final Collection capabilities) { diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/AbstractNetconfDataTreeService.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/AbstractNetconfDataTreeService.java index 6e10f11ada..6fa2dc244b 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/AbstractNetconfDataTreeService.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/AbstractNetconfDataTreeService.java @@ -66,7 +66,7 @@ public abstract class AbstractNetconfDataTreeService implements NetconfDataTreeS } @Override - ListenableFuture editConfig(final DataContainerChild editStructure, + ListenableFuture editConfig(final DataContainerChild editStructure, final ModifyAction defaultOperation) { final NetconfRpcFutureCallback callback = new NetconfRpcFutureCallback("Edit candidate", id); return defaultOperation == null ? netconfOps.editConfigCandidate(callback, editStructure, rollbackSupport) @@ -96,7 +96,7 @@ public abstract class AbstractNetconfDataTreeService implements NetconfDataTreeS } @Override - ListenableFuture editConfig(final DataContainerChild editStructure, + ListenableFuture editConfig(final DataContainerChild editStructure, final ModifyAction defaultOperation) { final NetconfRpcFutureCallback callback = new NetconfRpcFutureCallback("Edit running", id); return defaultOperation == null ? netconfOps.editConfigRunning(callback, editStructure, rollbackSupport) @@ -136,11 +136,10 @@ public abstract class AbstractNetconfDataTreeService implements NetconfDataTreeS } @Override - ListenableFuture editConfig(final DataContainerChild editStructure, + ListenableFuture editConfig(final DataContainerChild editStructure, final ModifyAction defaultOperation) { return candidate.editConfig(editStructure, defaultOperation); } - } private static final Logger LOG = LoggerFactory.getLogger(AbstractNetconfDataTreeService.class); @@ -256,24 +255,24 @@ public abstract class AbstractNetconfDataTreeService implements NetconfDataTreeS abstract List> unlockImpl(); @Override - public ListenableFuture>> get(final YangInstanceIdentifier path) { + public ListenableFuture> get(final YangInstanceIdentifier path) { return netconfOps.getData(new NetconfRpcFutureCallback("Data read", id), Optional.ofNullable(path)); } @Override - public ListenableFuture>> get(final YangInstanceIdentifier path, + public ListenableFuture> get(final YangInstanceIdentifier path, final List fields) { return netconfOps.getData(new NetconfRpcFutureCallback("Data read", id), Optional.ofNullable(path), fields); } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path) { + public ListenableFuture> getConfig(final YangInstanceIdentifier path) { return netconfOps.getConfigRunningData(new NetconfRpcFutureCallback("Data read", id), Optional.ofNullable(path)); } @Override - public ListenableFuture>> getConfig(final YangInstanceIdentifier path, + public ListenableFuture> getConfig(final YangInstanceIdentifier path, final List fields) { return netconfOps.getConfigRunningData(new NetconfRpcFutureCallback("Data read", id), Optional.ofNullable(path), fields); @@ -281,7 +280,7 @@ public abstract class AbstractNetconfDataTreeService implements NetconfDataTreeS @Override public synchronized ListenableFuture merge(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { checkEditable(store); return editConfig( @@ -291,7 +290,7 @@ public abstract class AbstractNetconfDataTreeService implements NetconfDataTreeS @Override public synchronized ListenableFuture replace(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { checkEditable(store); return editConfig( @@ -301,7 +300,7 @@ public abstract class AbstractNetconfDataTreeService implements NetconfDataTreeS @Override public synchronized ListenableFuture create(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final NormalizedNode data, + final YangInstanceIdentifier path, final NormalizedNode data, final Optional defaultOperation) { checkEditable(store); return editConfig( @@ -337,7 +336,7 @@ public abstract class AbstractNetconfDataTreeService implements NetconfDataTreeS this.isLockAllowed = isLockAllowedOrig; } - abstract ListenableFuture editConfig(DataContainerChild editStructure, + abstract ListenableFuture editConfig(DataContainerChild editStructure, @Nullable ModifyAction defaultOperation); private static void checkEditable(final LogicalDatastoreType store) { diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java index 3d94482d8e..0ac809c153 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java @@ -325,7 +325,7 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler invokeRpc(final QName type, final NormalizedNode input) { + public ListenableFuture invokeRpc(final QName type, final NormalizedNode input) { keepaliveTask.disableKeepalive(); final ListenableFuture deviceFuture = deviceRpc.invokeRpc(type, input); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java index 1d34bee1f5..6c7ecc1fd1 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java @@ -50,7 +50,7 @@ public final class NetconfDeviceRpc implements DOMRpcService { @Override @SuppressWarnings("checkstyle:IllegalCatch") - public ListenableFuture invokeRpc(final QName type, final NormalizedNode input) { + public ListenableFuture invokeRpc(final QName type, final NormalizedNode input) { final ListenableFuture> delegateFuture = communicator.sendRequest( transformer.toRpcRequest(type, input), type); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java index afdec81767..0bbff2a2f7 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java @@ -52,7 +52,7 @@ public final class SchemalessNetconfDeviceRpc implements DOMRpcService { } @Override - public ListenableFuture invokeRpc(final QName type, final NormalizedNode input) { + public ListenableFuture invokeRpc(final QName type, final NormalizedNode input) { final MessageTransformer transformer; if (input instanceof DOMSourceAnyxmlNode) { transformer = schemalessTransformer; @@ -65,8 +65,7 @@ public final class SchemalessNetconfDeviceRpc implements DOMRpcService { return handleRpc(type, input, transformer); } - private ListenableFuture handleRpc( - final @NonNull QName type, final @NonNull NormalizedNode input, + private ListenableFuture handleRpc(final @NonNull QName type, final @NonNull NormalizedNode input, final MessageTransformer transformer) { final ListenableFuture> delegateFuture = listener.sendRequest( transformer.toRpcRequest(type, input), type); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractReadOnlyTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractReadOnlyTx.java index 2340a85f33..f08cf919dc 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractReadOnlyTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractReadOnlyTx.java @@ -37,13 +37,13 @@ abstract class AbstractReadOnlyTx implements DOMDataTreeReadTransaction { this.id = id; } - private FluentFuture>> readConfigurationData( + private FluentFuture> readConfigurationData( final YangInstanceIdentifier path) { return remapException(netconfOps.getConfigRunningData( new NetconfRpcFutureCallback("Data read", id), Optional.ofNullable(path))); } - private FluentFuture>> readOperationalData( + private FluentFuture> readOperationalData( final YangInstanceIdentifier path) { return remapException(netconfOps.getData( new NetconfRpcFutureCallback("Data read", id), Optional.ofNullable(path))); @@ -73,7 +73,7 @@ abstract class AbstractReadOnlyTx implements DOMDataTreeReadTransaction { } @Override - public final FluentFuture>> read(final LogicalDatastoreType store, + public final FluentFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { switch (store) { case CONFIGURATION: diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java index 426b894989..595f536593 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java @@ -98,7 +98,7 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { @Override public synchronized void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + final NormalizedNode data) { checkEditable(store); // Trying to write only mixin nodes (not visible when serialized). @@ -108,14 +108,14 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { return; } - final DataContainerChild editStructure = netOps.createEditConfigStrcture(Optional.ofNullable(data), + final DataContainerChild editStructure = netOps.createEditConfigStrcture(Optional.ofNullable(data), Optional.of(ModifyAction.REPLACE), path); editConfig(path, Optional.ofNullable(data), editStructure, Optional.empty(), "put"); } @Override public synchronized void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + final NormalizedNode data) { checkEditable(store); // Trying to write only mixin nodes (not visible when serialized). @@ -125,7 +125,7 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { return; } - final DataContainerChild editStructure = netOps.createEditConfigStrcture(Optional.ofNullable(data), + final DataContainerChild editStructure = netOps.createEditConfigStrcture(Optional.ofNullable(data), Optional.empty(), path); editConfig(path, Optional.ofNullable(data), editStructure, Optional.empty(), "merge"); } @@ -133,8 +133,7 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { /** * Check whether the data to be written consists only from mixins. */ - private static boolean containsOnlyNonVisibleData(final YangInstanceIdentifier path, - final NormalizedNode data) { + private static boolean containsOnlyNonVisibleData(final YangInstanceIdentifier path, final NormalizedNode data) { // There's only one such case:top level list (pathArguments == 1 && data is Mixin) // any other mixin nodes are contained by a "regular" node thus visible when serialized return path.getPathArguments().size() == 1 && data instanceof MixinNode; @@ -143,7 +142,7 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { @Override public synchronized void delete(final LogicalDatastoreType store, final YangInstanceIdentifier path) { checkEditable(store); - final DataContainerChild editStructure = netOps.createEditConfigStrcture(Optional.empty(), + final DataContainerChild editStructure = netOps.createEditConfigStrcture(Optional.empty(), Optional.of(ModifyAction.DELETE), path); editConfig(path, Optional.empty(), editStructure, Optional.of(ModifyAction.NONE), "delete"); } @@ -209,8 +208,8 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { "Can edit only configuration data, not %s", store); } - protected abstract void editConfig(YangInstanceIdentifier path, Optional> data, - DataContainerChild editStructure, + protected abstract void editConfig(YangInstanceIdentifier path, Optional data, + DataContainerChild editStructure, Optional defaultOperation, String operation); protected ListenableFuture> resultsToTxStatus() { diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadOnlyTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadOnlyTx.java index 9f6caa7cef..c944813a5a 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadOnlyTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadOnlyTx.java @@ -29,7 +29,7 @@ public final class FieldsAwareReadOnlyTx extends AbstractReadOnlyTx implements N } @Override - public FluentFuture>> read(final LogicalDatastoreType store, + public FluentFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path, final List fields) { switch (store) { case CONFIGURATION: @@ -44,13 +44,13 @@ public final class FieldsAwareReadOnlyTx extends AbstractReadOnlyTx implements N } } - private @NonNull FluentFuture>> readConfigurationData( + private @NonNull FluentFuture> readConfigurationData( final YangInstanceIdentifier path, final List fields) { return remapException(netconfOps.getConfigRunningData( new NetconfRpcFutureCallback("Data read", id), Optional.ofNullable(path), fields)); } - private @NonNull FluentFuture>> readOperationalData(final YangInstanceIdentifier path, + private @NonNull FluentFuture> readOperationalData(final YangInstanceIdentifier path, final List fields) { return remapException(netconfOps.getData( new NetconfRpcFutureCallback("Data read", id), Optional.ofNullable(path), fields)); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadWriteTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadWriteTx.java index 49ce08f46d..0e47971af6 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadWriteTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadWriteTx.java @@ -26,7 +26,7 @@ public final class FieldsAwareReadWriteTx extends ReadWriteTx>> read(final LogicalDatastoreType store, + public FluentFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path, final List fields) { return delegateReadTx.read(store, path, fields); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadWriteTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadWriteTx.java index 73cd03f6a0..9397c8671f 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadWriteTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadWriteTx.java @@ -35,13 +35,13 @@ public class ReadWriteTx implements DOMDat @Override public final void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + final NormalizedNode data) { delegateWriteTx.put(store, path, data); } @Override public final void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + final NormalizedNode data) { delegateWriteTx.merge(store, path, data); } @@ -56,7 +56,7 @@ public class ReadWriteTx implements DOMDat } @Override - public final FluentFuture>> read(final LogicalDatastoreType store, + public final FluentFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { return delegateReadTx.read(store, path); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateTx.java index 9bdf7e9974..3ea7045ff0 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateTx.java @@ -53,8 +53,8 @@ public class WriteCandidateTx extends AbstractWriteTx { this(id, netconfOps, rollbackSupport, true); } - public WriteCandidateTx(RemoteDeviceId id, NetconfBaseOps netconfOps, boolean rollbackSupport, - boolean isLockAllowed) { + public WriteCandidateTx(final RemoteDeviceId id, final NetconfBaseOps netconfOps, final boolean rollbackSupport, + final boolean isLockAllowed) { super(id, netconfOps, rollbackSupport, isLockAllowed); } @@ -69,7 +69,7 @@ public class WriteCandidateTx extends AbstractWriteTx { LOG.trace("Lock is not allowed."); return; } - final FutureCallback lockCandidateCallback = new FutureCallback() { + final FutureCallback lockCandidateCallback = new FutureCallback<>() { @Override public void onSuccess(final DOMRpcResult result) { if (isSuccess(result)) { @@ -131,10 +131,8 @@ public class WriteCandidateTx extends AbstractWriteTx { } @Override - protected void editConfig(final YangInstanceIdentifier path, - final Optional> data, - final DataContainerChild editStructure, - final Optional defaultOperation, + protected void editConfig(final YangInstanceIdentifier path, final Optional data, + final DataContainerChild editStructure, final Optional defaultOperation, final String operation) { final NetconfRpcFutureCallback editConfigCallback = new NetconfRpcFutureCallback("Edit candidate", id); @@ -158,5 +156,4 @@ public class WriteCandidateTx extends AbstractWriteTx { LOG.trace("Unlock is not allowed: {}", id); } } - } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTx.java index 5cfdd213f5..a24d955d83 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTx.java @@ -83,9 +83,8 @@ public class WriteRunningTx extends AbstractWriteTx { } @Override - protected void editConfig(final YangInstanceIdentifier path, - final Optional> data, - final DataContainerChild editStructure, + protected void editConfig(final YangInstanceIdentifier path, final Optional data, + final DataContainerChild editStructure, final Optional defaultOperation, final String operation) { changes.add(new Change(editStructure, defaultOperation)); @@ -101,10 +100,10 @@ public class WriteRunningTx extends AbstractWriteTx { private static final class Change { - private final DataContainerChild editStructure; + private final DataContainerChild editStructure; private final Optional defaultOperation; - Change(final DataContainerChild editStructure, final Optional defaultOperation) { + Change(final DataContainerChild editStructure, final Optional defaultOperation) { this.editStructure = editStructure; this.defaultOperation = defaultOperation; } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java index cfa40c7c08..94af0ce587 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java @@ -34,9 +34,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; 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.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; @@ -80,17 +80,17 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource return builder.build(); } - private static Optional getSchemaFromRpc(final RemoteDeviceId id, final NormalizedNode result) { + private static Optional getSchemaFromRpc(final RemoteDeviceId id, final NormalizedNode result) { if (result == null) { return Optional.empty(); } - final Optional> child = ((ContainerNode) result).getChild(NETCONF_DATA_PATHARG); + final Optional child = ((ContainerNode) result).findChildByArg(NETCONF_DATA_PATHARG); checkState(child.isPresent() && child.get() instanceof DOMSourceAnyxmlNode, "%s Unexpected response to get-schema, expected response with one child %s, but was %s", id, NETCONF_DATA, result); - final DOMSource wrappedNode = ((DOMSourceAnyxmlNode) child.get()).getValue(); + final DOMSource wrappedNode = ((DOMSourceAnyxmlNode) child.get()).body(); final Element dataNode = (Element) requireNonNull(wrappedNode.getNode()); return Optional.of(dataNode.getTextContent().trim()); @@ -112,7 +112,8 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource "%s: Unexpected response to get-schema, schema not present in message for: %s", id, sourceIdentifier); LOG.debug("{}: YANG Schema successfully retrieved for {}:{}", id, moduleName, revision); - return new NetconfYangTextSchemaSource(id, sourceIdentifier, schemaString); + return new NetconfYangTextSchemaSource(id, sourceIdentifier, moduleName, + schemaString.get().getBytes(StandardCharsets.UTF_8)); } LOG.warn("{}: YANG schema was not successfully retrieved for {}. Errors: {}", id, sourceIdentifier, @@ -125,13 +126,15 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource static class NetconfYangTextSchemaSource extends YangTextSchemaSource { private final RemoteDeviceId id; - private final Optional schemaString; + private final byte[] schemaBytes; + private final String symbolicName; NetconfYangTextSchemaSource(final RemoteDeviceId id, final SourceIdentifier sourceIdentifier, - final Optional schemaString) { + final String symbolicName, final byte[] schemaBytes) { super(sourceIdentifier); + this.symbolicName = requireNonNull(symbolicName); this.id = id; - this.schemaString = schemaString; + this.schemaBytes = schemaBytes.clone(); } @Override @@ -141,7 +144,12 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource @Override public InputStream openStream() { - return new ByteArrayInputStream(schemaString.get().getBytes(StandardCharsets.UTF_8)); + return new ByteArrayInputStream(schemaBytes); + } + + @Override + public Optional getSymbolicName() { + return Optional.of(symbolicName); } } } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/YangLibrarySchemaYangSourceProvider.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/YangLibrarySchemaYangSourceProvider.java index f425129659..fa22513359 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/YangLibrarySchemaYangSourceProvider.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/YangLibrarySchemaYangSourceProvider.java @@ -11,15 +11,12 @@ import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableMap; -import com.google.common.io.ByteStreams; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; import java.io.InputStream; import java.net.URL; -import java.nio.charset.Charset; import java.util.Map; -import java.util.Optional; import org.opendaylight.netconf.sal.connect.netconf.schema.NetconfRemoteSchemaYangSourceProvider.NetconfYangTextSchemaSource; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; @@ -33,7 +30,6 @@ import org.slf4j.LoggerFactory; * Provides YANG schema sources from yang library. */ public final class YangLibrarySchemaYangSourceProvider implements SchemaSourceProvider { - private static final Logger LOG = LoggerFactory.getLogger(YangLibrarySchemaYangSourceProvider.class); private final Map availableSources; @@ -50,10 +46,9 @@ public final class YangLibrarySchemaYangSourceProvider implements SchemaSourcePr final URL url = availableSources.get(requireNonNull(sourceIdentifier)); checkArgument(url != null); try (InputStream in = url.openStream()) { - // FIXME: defaultCharset() seems to be wrong here - final String schemaContent = new String(ByteStreams.toByteArray(in), Charset.defaultCharset()); + final byte[] schemaContent = in.readAllBytes(); final NetconfYangTextSchemaSource yangSource = new NetconfYangTextSchemaSource(id, sourceIdentifier, - Optional.of(schemaContent)); + url.toString(), schemaContent); LOG.debug("Source {} downloaded from a yang library's url {}", sourceIdentifier, url); return Futures.immediateFuture(yangSource); } catch (IOException e) { diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java index f3c3641c2a..57e0c2a72e 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java @@ -54,7 +54,7 @@ public class BaseRpcSchemalessTransformer implements MessageTransformer payload) { + public NetconfMessage toRpcRequest(final QName rpc, final NormalizedNode payload) { // In case no input for rpc is defined, we can simply construct the payload here final RpcDefinition mappedRpc = Preconditions.checkNotNull(mappedRpcs.get(rpc), @@ -83,7 +83,7 @@ public class BaseRpcSchemalessTransformer implements MessageTransformer normalizedNode; + final NormalizedNode normalizedNode; if (NetconfMessageTransformUtil.isDataRetrievalOperation(rpc)) { final Element xmlData = NetconfMessageTransformUtil.getDataSubtree(message.getDocument()); final Document data = XmlUtil.newDocument(); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseSchema.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseSchema.java index 5466e069e3..c4fdf9d474 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseSchema.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseSchema.java @@ -11,7 +11,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/DefaultBaseNetconfSchemas.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/DefaultBaseNetconfSchemas.java index 1a3cc1eaaf..0409e68b0c 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/DefaultBaseNetconfSchemas.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/DefaultBaseNetconfSchemas.java @@ -14,8 +14,8 @@ import javax.inject.Singleton; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; +import org.opendaylight.yangtools.yang.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; @Beta @Singleton diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java index 46f206f6d9..1d9ad98eff 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java @@ -23,7 +23,6 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import com.google.common.collect.Streams; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.time.Instant; import java.util.AbstractMap; @@ -59,6 +58,7 @@ import org.opendaylight.netconf.sal.connect.util.MessageCounter; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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.NormalizedNode; @@ -85,6 +85,7 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -96,7 +97,7 @@ import org.xml.sax.SAXException; public class NetconfMessageTransformer implements MessageTransformer { private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageTransformer.class); - private static final ImmutableSet BASE_OR_NOTIFICATION_NS = ImmutableSet.of( + private static final ImmutableSet BASE_OR_NOTIFICATION_NS = ImmutableSet.of( NETCONF_URI, IETF_NETCONF_NOTIFICATIONS.getNamespace(), CREATE_SUBSCRIPTION_RPC_QNAME.getNamespace()); @@ -185,15 +186,13 @@ public class NetconfMessageTransformer implements MessageTransformer findNestedNotification(final NetconfMessage message, final Element element) { final Iterator modules = mountContext.getEffectiveModelContext() - .findModules(URI.create(element.getNamespaceURI())).iterator(); + .findModules(XMLNamespace.of(element.getNamespaceURI())).iterator(); if (!modules.hasNext()) { throw new IllegalArgumentException( "Unable to parse notification " + message + ", cannot find top level module"); @@ -323,7 +322,7 @@ public class NetconfMessageTransformer implements MessageTransformer payload) { + public NetconfMessage toRpcRequest(final QName rpc, final NormalizedNode payload) { // In case no input for rpc is defined, we can simply construct the payload here // Determine whether a base netconf operation is being invoked @@ -368,7 +367,7 @@ public class NetconfMessageTransformer implements MessageTransformer payload) { + final NormalizedNode payload) { final ActionDefinition actionDef = actions.get(action); Preconditions.checkArgument(actionDef != null, "Action does not exist: %s", action); @@ -400,7 +399,7 @@ public class NetconfMessageTransformer implements MessageTransformer normalizedNode; + final NormalizedNode normalizedNode; if (NetconfMessageTransformUtil.isDataRetrievalOperation(rpc)) { normalizedNode = Builders.containerBuilder() .withNodeIdentifier(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_NODEID) @@ -443,8 +442,7 @@ public class NetconfMessageTransformer implements MessageTransformer parseResult(final NetconfMessage message, - final OperationDefinition operationDefinition) { + private NormalizedNode parseResult(final NetconfMessage message, final OperationDefinition operationDefinition) { final Optional okResponseElement = XmlElement.fromDomDocument(message.getDocument()) .getOnlyChildElementWithSameNamespaceOptionally("ok"); if (operationDefinition.getOutput().getChildNodes().isEmpty()) { @@ -462,7 +460,9 @@ public class NetconfMessageTransformer implements MessageTransformer input) { - final DOMSource payload = (DOMSource) input.getValue(); + public NetconfMessage toRpcRequest(final QName rpc, final NormalizedNode input) { + final DOMSource payload = (DOMSource) input.body(); wrapPayload((Document) payload.getNode()); - return new NetconfMessage((Document) ((DOMSourceAnyxmlNode) input).getValue().getNode()); + return new NetconfMessage((Document) ((DOMSourceAnyxmlNode) input).body().getNode()); } /** diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java index 8df170e8fc..46832b2386 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java @@ -67,9 +67,9 @@ 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.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; /** * Provides base operations for netconf e.g. get, get-config, edit-config, (un)lock, commit etc. @@ -202,7 +202,7 @@ public final class NetconfBaseOps { final ListenableFuture future; if (isFilterPresent(filterPath)) { - final DataContainerChild node = transformer.toFilterStructure(filterPath.get()); + final DataContainerChild node = transformer.toFilterStructure(filterPath.get()); future = rpc.invokeRpc(NETCONF_GET_CONFIG_QNAME, NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, getSourceNode(datastore), node)); } else { @@ -220,15 +220,15 @@ public final class NetconfBaseOps { requireNonNull(callback); requireNonNull(datastore); - final NormalizedNode rpcInput; + final NormalizedNode rpcInput; if (isFilterPresent(filterPath)) { - final DataContainerChild node = transformer.toFilterStructure( + final DataContainerChild node = transformer.toFilterStructure( Collections.singletonList(FieldsFilter.of(filterPath.get(), fields))); rpcInput = NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, getSourceNode(datastore), node); } else if (containsEmptyPath(fields)) { rpcInput = NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, getSourceNode(datastore)); } else { - final DataContainerChild subtreeFilter = getSubtreeFilterFromRootFields(fields); + final DataContainerChild subtreeFilter = getSubtreeFilterFromRootFields(fields); rpcInput = NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, getSourceNode(datastore), subtreeFilter); } @@ -244,8 +244,8 @@ public final class NetconfBaseOps { * @param filterPath path to requested data * @return asynchronous completion token with read {@link NormalizedNode} wrapped in {@link Optional} instance */ - public ListenableFuture>> getConfigRunningData( - final FutureCallback callback, final Optional filterPath) { + public ListenableFuture> getConfigRunningData(final FutureCallback callback, + final Optional filterPath) { return extractData(filterPath, getConfigRunning(callback, filterPath)); } @@ -258,7 +258,7 @@ public final class NetconfBaseOps { * @param fields paths to specific fields that are selected under parent path * @return asynchronous completion token with read {@link NormalizedNode} wrapped in {@link Optional} instance */ - public ListenableFuture>> getConfigRunningData( + public ListenableFuture> getConfigRunningData( final FutureCallback callback, final Optional filterPath, final List fields) { if (fields.isEmpty()) { @@ -278,8 +278,8 @@ public final class NetconfBaseOps { * @param filterPath path to requested data * @return asynchronous completion token with read {@link NormalizedNode} wrapped in {@link Optional} instance */ - public ListenableFuture>> getData(final FutureCallback callback, - final Optional filterPath) { + public ListenableFuture> getData(final FutureCallback callback, + final Optional filterPath) { return extractData(filterPath, get(callback, filterPath)); } @@ -292,7 +292,7 @@ public final class NetconfBaseOps { * @param fields paths to specific fields that are selected under parent path * @return asynchronous completion token with read {@link NormalizedNode} wrapped in {@link Optional} instance */ - public ListenableFuture>> getData(final FutureCallback callback, + public ListenableFuture> getData(final FutureCallback callback, final Optional filterPath, final List fields) { if (fields.isEmpty()) { // RFC doesn't allow to build subtree filter that would expect just empty element in response @@ -303,13 +303,13 @@ public final class NetconfBaseOps { return extractData(filterPath, response); } - private ListenableFuture>> extractData( - final Optional path, final ListenableFuture configRunning) { + private ListenableFuture> extractData(final Optional path, + final ListenableFuture configRunning) { return Futures.transform(configRunning, result -> { checkArgument(result.getErrors().isEmpty(), "Unable to read data: %s, errors: %s", path, result.getErrors()); - final DataContainerChild dataNode = ((ContainerNode) result.getResult()) - .getChild(NetconfMessageTransformUtil.NETCONF_DATA_NODEID).get(); + final DataContainerChild dataNode = ((ContainerNode) result.getResult()) + .findChildByArg(NetconfMessageTransformUtil.NETCONF_DATA_NODEID).get(); return transformer.selectFromDataStructure(dataNode, path.get()); }, MoreExecutors.directExecutor()); } @@ -346,14 +346,14 @@ public final class NetconfBaseOps { final Optional filterPath, final List fields) { requireNonNull(callback); - final NormalizedNode rpcInput; + final NormalizedNode rpcInput; if (isFilterPresent(filterPath)) { rpcInput = NetconfMessageTransformUtil.wrap(NETCONF_GET_NODEID, transformer.toFilterStructure( Collections.singletonList(FieldsFilter.of(filterPath.get(), fields)))); } else if (containsEmptyPath(fields)) { rpcInput = GET_RPC_CONTENT; } else { - final DataContainerChild subtreeFilter = getSubtreeFilterFromRootFields(fields); + final DataContainerChild subtreeFilter = getSubtreeFilterFromRootFields(fields); rpcInput = NetconfMessageTransformUtil.wrap(NETCONF_GET_NODEID, subtreeFilter); } final ListenableFuture response = rpc.invokeRpc(NETCONF_GET_QNAME, rpcInput); @@ -365,7 +365,7 @@ public final class NetconfBaseOps { return fields.stream().anyMatch(YangInstanceIdentifier::isEmpty); } - private DataContainerChild getSubtreeFilterFromRootFields(final List fields) { + private DataContainerChild getSubtreeFilterFromRootFields(final List fields) { final Map> getConfigEntries = fields.stream() .map(fieldPath -> { final YangInstanceIdentifier rootPath = YangInstanceIdentifier.create( @@ -387,32 +387,32 @@ public final class NetconfBaseOps { } public ListenableFuture editConfigCandidate( - final FutureCallback callback, final DataContainerChild editStructure, + final FutureCallback callback, final DataContainerChild editStructure, final ModifyAction modifyAction, final boolean rollback) { return editConfig(callback, NETCONF_CANDIDATE_QNAME, editStructure, Optional.of(modifyAction), rollback); } public ListenableFuture editConfigCandidate( - final FutureCallback callback, final DataContainerChild editStructure, + final FutureCallback callback, final DataContainerChild editStructure, final boolean rollback) { return editConfig(callback, NETCONF_CANDIDATE_QNAME, editStructure, Optional.empty(), rollback); } public ListenableFuture editConfigRunning( - final FutureCallback callback, final DataContainerChild editStructure, + final FutureCallback callback, final DataContainerChild editStructure, final ModifyAction modifyAction, final boolean rollback) { return editConfig(callback, NETCONF_RUNNING_QNAME, editStructure, Optional.of(modifyAction), rollback); } public ListenableFuture editConfigRunning( - final FutureCallback callback, final DataContainerChild editStructure, + final FutureCallback callback, final DataContainerChild editStructure, final boolean rollback) { return editConfig(callback, NETCONF_RUNNING_QNAME, editStructure, Optional.empty(), rollback); } public ListenableFuture editConfig( final FutureCallback callback, final QName datastore, - final DataContainerChild editStructure, final Optional modifyAction, + final DataContainerChild editStructure, final Optional modifyAction, final boolean rollback) { requireNonNull(callback); @@ -423,7 +423,7 @@ public final class NetconfBaseOps { return future; } - public ChoiceNode createEditConfigStrcture(final Optional> lastChild, + public ChoiceNode createEditConfigStrcture(final Optional lastChild, final Optional operation, final YangInstanceIdentifier dataPath) { return Builders.choiceBuilder() @@ -432,8 +432,7 @@ public final class NetconfBaseOps { .build(); } - private static ContainerNode getEditConfigContent( - final QName datastore, final DataContainerChild editStructure, + private static ContainerNode getEditConfigContent(final QName datastore, final DataContainerChild editStructure, final Optional defaultOperation, final boolean rollback) { final DataContainerNodeBuilder editBuilder = Builders.containerBuilder().withNodeIdentifier(NETCONF_EDIT_CONFIG_NODEID); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java index 7dcf80e4ad..1753029fb6 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java @@ -43,7 +43,6 @@ import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.notifications.NetconfNotification; import org.opendaylight.netconf.sal.connect.util.MessageCounter; import org.opendaylight.netconf.util.NetconfUtil; -import org.opendaylight.netconf.util.NodeContainerProxy; import org.opendaylight.netconf.util.messages.NetconfMessageUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.edit.config.input.EditContent; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput; @@ -57,12 +56,14 @@ import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcError.ErrorSeverity; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangConstants; 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; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -74,10 +75,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.SchemaOrderedNormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; -import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.slf4j.Logger; @@ -122,7 +120,7 @@ public final class NetconfMessageTransformUtil { public static final @NonNull QName IETF_NETCONF_NOTIFICATIONS = QName.create(NetconfCapabilityChange.QNAME, "ietf-netconf-notifications").intern(); - public static final URI NETCONF_URI = NETCONF_QNAME.getNamespace(); + public static final XMLNamespace NETCONF_URI = NETCONF_QNAME.getNamespace(); public static final @NonNull NodeIdentifier NETCONF_DATA_NODEID = NodeIdentifier.create(NETCONF_DATA_QNAME); @@ -223,12 +221,7 @@ public final class NetconfMessageTransformUtil { public static final @NonNull NodeIdentifier NETCONF_FILTER_NODEID = NodeIdentifier.create(NETCONF_FILTER_QNAME); - public static final @NonNull DataContainerChild EMPTY_FILTER; - - static { - final Element element = getNetconfFilterElement(); - EMPTY_FILTER = buildFilterStructure(element); - } + public static final @NonNull AnyxmlNode EMPTY_FILTER = buildFilterStructure(getNetconfFilterElement()); /** * Creation of the subtree filter structure using {@link YangInstanceIdentifier} path. @@ -237,8 +230,8 @@ public final class NetconfMessageTransformUtil { * @param ctx mountpoint schema context * @return created DOM structure with subtree filter */ - public static DataContainerChild toFilterStructure(final YangInstanceIdentifier identifier, - final EffectiveModelContext ctx) { + public static AnyxmlNode toFilterStructure(final YangInstanceIdentifier identifier, + final EffectiveModelContext ctx) { final Element element = getNetconfFilterElement(); try { NetconfUtil.writeFilter(identifier, new DOMResult(element), SchemaPath.ROOT, ctx); @@ -256,8 +249,8 @@ public final class NetconfMessageTransformUtil { * @param ctx mountpoint schema context * @return created DOM structure with subtree filter */ - public static DataContainerChild toFilterStructure(final List fieldsFilters, - final EffectiveModelContext ctx) { + public static AnyxmlNode toFilterStructure(final List fieldsFilters, + final EffectiveModelContext ctx) { Preconditions.checkState(!fieldsFilters.isEmpty(), "An empty list of subtree filters is not allowed"); final Element element = getNetconfFilterElement(); @@ -281,7 +274,7 @@ public final class NetconfMessageTransformUtil { return element; } - private static DataContainerChild buildFilterStructure(final Element element) { + private static AnyxmlNode buildFilterStructure(final Element element) { return Builders.anyXmlBuilder() .withNodeIdentifier(NETCONF_FILTER_NODEID) .withValue(new DOMSource(element)) @@ -372,33 +365,24 @@ public final class NetconfMessageTransformUtil { || NETCONF_GET_QNAME.getLocalName().equals(rpc.getLocalName())); } - public static @NonNull ContainerSchemaNode createSchemaForDataRead(final SchemaContext schemaContext) { - return new NodeContainerProxy(NETCONF_DATA_QNAME, schemaContext.getChildNodes()); - } - - public static @NonNull ContainerSchemaNode createSchemaForNotification(final NotificationDefinition next) { - return new NodeContainerProxy(next.getQName(), next.getChildNodes(), next.getAvailableAugmentations()); - } - @Deprecated - public static @NonNull ContainerNode wrap(final QName name, final DataContainerChild... node) { + public static @NonNull ContainerNode wrap(final QName name, final DataContainerChild... node) { return wrap(toId(name), node); } - public static @NonNull ContainerNode wrap(final NodeIdentifier name, final DataContainerChild... node) { + public static @NonNull ContainerNode wrap(final NodeIdentifier name, final DataContainerChild... node) { return Builders.containerBuilder().withNodeIdentifier(name).withValue(ImmutableList.copyOf(node)).build(); } public static DOMSourceAnyxmlNode createEditConfigAnyxml( final EffectiveModelContext ctx, final YangInstanceIdentifier dataPath, - final Optional operation, - final Optional> lastChildOverride) { - final NormalizedNode configContent; + final Optional operation, final Optional lastChildOverride) { + final NormalizedNode configContent; final NormalizedMetadata metadata; if (dataPath.isEmpty()) { Preconditions.checkArgument(lastChildOverride.isPresent(), "Data has to be present when creating structure for top level element"); - Preconditions.checkArgument(lastChildOverride.get() instanceof DataContainerChild, + Preconditions.checkArgument(lastChildOverride.get() instanceof DataContainerChild, "Data has to be either container or a list node when creating structure for top level element, " + "but was: %s", lastChildOverride.get()); configContent = lastChildOverride.get(); @@ -445,9 +429,9 @@ public final class NetconfMessageTransformUtil { } } - public static DataContainerChild createEditConfigStructure(final EffectiveModelContext ctx, + public static DataContainerChild createEditConfigStructure(final EffectiveModelContext ctx, final YangInstanceIdentifier dataPath, final Optional operation, - final Optional> lastChildOverride) { + final Optional lastChildOverride) { return Builders.choiceBuilder().withNodeIdentifier(EDIT_CONTENT_NODEID) .withChild(createEditConfigAnyxml(ctx, dataPath, operation, lastChildOverride)).build(); } @@ -570,7 +554,7 @@ public final class NetconfMessageTransformUtil { XMLStreamNormalizedNodeStreamWriter.create(writer, baseNetconfCtx, inputPath)) { try (SchemaOrderedNormalizedNodeWriter normalizedNodeWriter = new SchemaOrderedNormalizedNodeWriter(normalizedNodeStreamWriter, baseNetconfCtx, inputPath)) { - final Collection> value = normalized.getValue(); + final Collection value = normalized.body(); normalizedNodeWriter.write(value); normalizedNodeWriter.flush(); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfRpcStructureTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfRpcStructureTransformer.java index d7d39039fa..613a5e7da7 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfRpcStructureTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfRpcStructureTransformer.java @@ -16,6 +16,7 @@ import org.opendaylight.netconf.api.ModifyAction; import org.opendaylight.netconf.util.NetconfUtil; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -38,14 +39,13 @@ class NetconfRpcStructureTransformer implements RpcStructureTransformer { } @Override - public Optional> selectFromDataStructure( - final DataContainerChild data, + public Optional selectFromDataStructure(final DataContainerChild data, final YangInstanceIdentifier path) { if (data instanceof DOMSourceAnyxmlNode) { final NormalizedNodeResult node; try { node = NetconfUtil.transformDOMSourceToNormalizedNode(mountContext, - ((DOMSourceAnyxmlNode)data).getValue()); + ((DOMSourceAnyxmlNode)data).body()); return NormalizedNodes.findNode(node.getResult(), path.getPathArguments()); } catch (final XMLStreamException | URISyntaxException | IOException | SAXException e) { LOG.error("Cannot parse anyxml.", e); @@ -57,7 +57,7 @@ class NetconfRpcStructureTransformer implements RpcStructureTransformer { } @Override - public DOMSourceAnyxmlNode createEditConfigStructure(final Optional> data, + public DOMSourceAnyxmlNode createEditConfigStructure(final Optional data, final YangInstanceIdentifier dataPath, final Optional operation) { // FIXME: propagate MountPointContext @@ -66,13 +66,13 @@ class NetconfRpcStructureTransformer implements RpcStructureTransformer { } @Override - public DataContainerChild toFilterStructure(final YangInstanceIdentifier path) { + public AnyxmlNode toFilterStructure(final YangInstanceIdentifier path) { // FIXME: propagate MountPointContext return NetconfMessageTransformUtil.toFilterStructure(path, mountContext.getEffectiveModelContext()); } @Override - public DataContainerChild toFilterStructure(final List fieldsFilters) { + public AnyxmlNode toFilterStructure(final List fieldsFilters) { // FIXME: propagate MountPointContext return NetconfMessageTransformUtil.toFilterStructure(fieldsFilters, mountContext.getEffectiveModelContext()); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/RpcStructureTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/RpcStructureTransformer.java index 26e6159faa..fe14154b14 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/RpcStructureTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/RpcStructureTransformer.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Optional; import org.opendaylight.netconf.api.ModifyAction; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -19,7 +20,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * Transforms rpc structures to normalized nodes and vice versa. */ interface RpcStructureTransformer { - /** * Transforms data and path to the config element structure. It means creating of parent xml structure * specified by path and appending data to the structure. Operation is set as attribute on data element. @@ -29,8 +29,8 @@ interface RpcStructureTransformer { * @param operation operation * @return config structure */ - DOMSourceAnyxmlNode createEditConfigStructure(Optional> data, - YangInstanceIdentifier dataPath, Optional operation); + DOMSourceAnyxmlNode createEditConfigStructure(Optional data, YangInstanceIdentifier dataPath, + Optional operation); /** * Transforms path to filter structure. @@ -38,7 +38,7 @@ interface RpcStructureTransformer { * @param path path * @return filter structure */ - DataContainerChild toFilterStructure(YangInstanceIdentifier path); + AnyxmlNode toFilterStructure(YangInstanceIdentifier path); /** * Transforms list of fields filters to filter structure. @@ -47,7 +47,7 @@ interface RpcStructureTransformer { * @param fieldsFilters list of: parent path and selection fields * @return filter structure */ - DataContainerChild toFilterStructure(List fieldsFilters); + AnyxmlNode toFilterStructure(List fieldsFilters); /** * Selects data specified by path from data node. Data must be product of get-config rpc with filter created by @@ -57,6 +57,5 @@ interface RpcStructureTransformer { * @param path path to select * @return selected data */ - Optional> selectFromDataStructure( - DataContainerChild data, YangInstanceIdentifier path); + Optional selectFromDataStructure(DataContainerChild data, YangInstanceIdentifier path); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/SchemalessRpcStructureTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/SchemalessRpcStructureTransformer.java index f177ab6178..45058eb17c 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/SchemalessRpcStructureTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/SchemalessRpcStructureTransformer.java @@ -32,6 +32,7 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -54,11 +55,11 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer { * @return selected data */ @Override - public Optional> selectFromDataStructure( - final DataContainerChild data, final YangInstanceIdentifier path) { + public Optional selectFromDataStructure(final DataContainerChild data, + final YangInstanceIdentifier path) { Preconditions.checkArgument(data instanceof DOMSourceAnyxmlNode); final List xmlElements = selectMatchingNodes( - getSourceElement(((DOMSourceAnyxmlNode)data).getValue()), path); + getSourceElement(((DOMSourceAnyxmlNode)data).body()), path); final Document result = XmlUtil.newDocument(); final Element dataElement = result.createElementNS(NETCONF_DATA_QNAME.getNamespace().toString(), NETCONF_DATA_QNAME.getLocalName()); @@ -82,14 +83,14 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer { * @return config structure */ @Override - public DOMSourceAnyxmlNode createEditConfigStructure(final Optional> data, + public DOMSourceAnyxmlNode createEditConfigStructure(final Optional data, final YangInstanceIdentifier dataPath, final Optional operation) { Preconditions.checkArgument(data.isPresent()); Preconditions.checkArgument(data.get() instanceof DOMSourceAnyxmlNode); final DOMSourceAnyxmlNode anxmlData = (DOMSourceAnyxmlNode) data.get(); final Document document = XmlUtil.newDocument(); - final Element dataNode = (Element) document.importNode(getSourceElement(anxmlData.getValue()), true); + final Element dataNode = (Element) document.importNode(getSourceElement(anxmlData.body()), true); checkDataValidForPath(dataPath, dataNode); final Element configElement = document.createElementNS(NETCONF_CONFIG_QNAME.getNamespace().toString(), @@ -121,7 +122,7 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer { * @return filter structure */ @Override - public DataContainerChild toFilterStructure(final YangInstanceIdentifier path) { + public AnyxmlNode toFilterStructure(final YangInstanceIdentifier path) { final Document document = XmlUtil.newDocument(); final Element filterElement = prepareFilterElement(document); instanceIdToXmlStructure(path.getPathArguments(), filterElement); @@ -129,7 +130,7 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer { } @Override - public DataContainerChild toFilterStructure(final List fieldsFilters) { + public AnyxmlNode toFilterStructure(final List fieldsFilters) { final Document document = XmlUtil.newDocument(); final Element filterElement = prepareFilterElement(document); for (final FieldsFilter filter : fieldsFilters) { @@ -148,7 +149,7 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer { return filter; } - private static DataContainerChild buildFilterXmlNode(final Document document) { + private static AnyxmlNode buildFilterXmlNode(final Document document) { return Builders.anyXmlBuilder() .withNodeIdentifier(NETCONF_FILTER_NODEID) .withValue(new DOMSource(document.getDocumentElement())) diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/AbstractBaseSchemasTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/AbstractBaseSchemasTest.java index bcf455ea79..3b6fc1a9df 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/AbstractBaseSchemasTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/AbstractBaseSchemasTest.java @@ -11,15 +11,15 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.BaseNetconfSchemas; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.DefaultBaseNetconfSchemas; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; -import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl; +import org.opendaylight.yangtools.yang.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; public abstract class AbstractBaseSchemasTest { protected static BaseNetconfSchemas BASE_SCHEMAS; @BeforeClass public static void initBaseSchemas() throws YangParserException { - BASE_SCHEMAS = new DefaultBaseNetconfSchemas(new YangParserFactoryImpl()); + BASE_SCHEMAS = new DefaultBaseNetconfSchemas(new DefaultYangParserFactory()); } @AfterClass diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfNestedNotificationTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfNestedNotificationTest.java index 487b672cfb..c83c5bb085 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfNestedNotificationTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfNestedNotificationTest.java @@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -import com.google.common.collect.Iterables; import java.io.IOException; import java.io.InputStream; import java.util.Collection; @@ -23,7 +22,7 @@ import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.notifications.NetconfNotification; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -51,8 +50,8 @@ public class NetconfNestedNotificationTest extends AbstractBaseSchemasTest { final DOMNotification domNotification = messageTransformer.toNotification(notificationMessage); final ContainerNode root = domNotification.getBody(); assertNotNull(root); - assertEquals(1, Iterables.size(root.getValue())); - assertEquals("interface-enabled", root.getNodeType().getLocalName()); + assertEquals(1, root.body().size()); + assertEquals("interface-enabled", root.getIdentifier().getNodeType().getLocalName()); assertEquals(NetconfNotification.RFC3339_DATE_PARSER.apply("2008-07-08T00:01:00Z").toInstant(), ((DOMEvent) domNotification).getEventInstant()); assertEquals(Absolute.of(INTERFACES_QNAME, INTERFACE_QNAME, INTERFACE_ENABLED_NOTIFICATION_QNAME), diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java index e6c05f3bbf..67a3019d84 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java @@ -10,6 +10,8 @@ package org.opendaylight.netconf.sal.connect.netconf; import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; @@ -28,7 +30,6 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -55,9 +56,8 @@ import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; -import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; -import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -81,18 +81,15 @@ public class NetconfStateSchemasTest extends AbstractBaseSchemasTest { @Before public void setUp() throws Exception { schemaContext = BASE_SCHEMAS.getBaseSchemaWithNotifications().getEffectiveModelContext(); - final DataSchemaNode schemasNode = - ((ContainerSchemaNode) schemaContext.findDataChildByName(NetconfState.QNAME).orElseThrow()) - .findDataChildByName(Schemas.QNAME).orElseThrow(); final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final XmlParserStream xmlParser = XmlParserStream.create(writer, schemaContext, schemasNode, false); + final XmlParserStream xmlParser = XmlParserStream.create(writer, + SchemaInferenceStack.ofDataTreePath(schemaContext, NetconfState.QNAME, Schemas.QNAME).toInference(), false); xmlParser.parse(UntrustedXML.createXMLStreamReader(getClass().getResourceAsStream( "/netconf-state.schemas.payload.xml"))); compositeNodeSchemas = (ContainerNode) resultHolder.getResult(); - } @Test @@ -137,7 +134,7 @@ public class NetconfStateSchemasTest extends AbstractBaseSchemasTest { final NetconfSessionPreferences caps = NetconfSessionPreferences.fromStrings(Collections.emptySet()); final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, caps, deviceId, schemaContext); final Set availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames(); - Assert.assertTrue(availableYangSchemasQNames.isEmpty()); + assertTrue(availableYangSchemasQNames.isEmpty()); } @Test @@ -146,7 +143,7 @@ public class NetconfStateSchemasTest extends AbstractBaseSchemasTest { immediateFailedFluentFuture(new DOMRpcImplementationNotAvailableException("not available"))); final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext); final Set availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames(); - Assert.assertTrue(availableYangSchemasQNames.isEmpty()); + assertTrue(availableYangSchemasQNames.isEmpty()); } @Test @@ -156,7 +153,7 @@ public class NetconfStateSchemasTest extends AbstractBaseSchemasTest { .invokeRpc(eq(NETCONF_GET_QNAME), any()); final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext); final Set availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames(); - Assert.assertTrue(availableYangSchemasQNames.isEmpty()); + assertTrue(availableYangSchemasQNames.isEmpty()); } @SuppressWarnings({ "checkstyle:IllegalThrows", "checkstyle:avoidHidingCauseException" }) @@ -190,9 +187,9 @@ public class NetconfStateSchemasTest extends AbstractBaseSchemasTest { new NetconfStateSchemas.RemoteYangSchema(NetconfState.QNAME); final NetconfStateSchemas.RemoteYangSchema schema3 = new NetconfStateSchemas.RemoteYangSchema(Schemas.QNAME); - Assert.assertEquals(schema1, schema2); - Assert.assertEquals(schema2, schema1); - Assert.assertNotEquals(schema1, schema3); - Assert.assertNotEquals(schema2, schema3); + assertEquals(schema1, schema2); + assertEquals(schema2, schema1); + assertNotEquals(schema1, schema3); + assertNotEquals(schema2, schema3); } } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToNotificationTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToNotificationTest.java index 365acb668b..2bf7bc4b4a 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToNotificationTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToNotificationTest.java @@ -9,9 +9,9 @@ package org.opendaylight.netconf.sal.connect.netconf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import com.google.common.collect.Iterables; import java.io.InputStream; import java.util.Collection; import org.junit.Before; @@ -22,7 +22,7 @@ import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.notifications.NetconfNotification; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; @@ -62,12 +62,12 @@ public class NetconfToNotificationTest extends AbstractBaseSchemasTest { return context; } - @Test(expected = IllegalArgumentException.class) + @Test public void testMostRecentWrongYangModel() throws Exception { final EffectiveModelContext schemaContext = getNotificationSchemaContext(getClass(), true); messageTransformer = new NetconfMessageTransformer(new EmptyMountPointContext(schemaContext), true, BASE_SCHEMAS.getBaseSchema()); - messageTransformer.toNotification(userNotification); + assertThrows(IllegalArgumentException.class, () -> messageTransformer.toNotification(userNotification)); } @Test @@ -78,8 +78,8 @@ public class NetconfToNotificationTest extends AbstractBaseSchemasTest { final DOMNotification domNotification = messageTransformer.toNotification(userNotification); final ContainerNode root = domNotification.getBody(); assertNotNull(root); - assertEquals(6, Iterables.size(root.getValue())); - assertEquals("user-visited-page", root.getNodeType().getLocalName()); + assertEquals(6, root.body().size()); + assertEquals("user-visited-page", root.getIdentifier().getNodeType().getLocalName()); assertEquals(NetconfNotification.RFC3339_DATE_PARSER.apply("2015-10-23T09:42:27.67175+00:00").toInstant(), ((DOMEvent) domNotification).getEventInstant()); } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToRpcRequestTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToRpcRequestTest.java index aad35a667d..90863ef90d 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToRpcRequestTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToRpcRequestTest.java @@ -19,7 +19,7 @@ import org.junit.Test; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDataTreeServiceImplTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDataTreeServiceImplTest.java index eb148f9852..5a14226aa8 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDataTreeServiceImplTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDataTreeServiceImplTest.java @@ -42,7 +42,7 @@ import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransform import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.IetfNetconfService; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBrokerTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBrokerTest.java index b4480433e5..11725a7454 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBrokerTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBrokerTest.java @@ -47,7 +47,7 @@ import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransform import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.IetfNetconfService; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210.NetconfTcp; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceNotificationServiceTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceNotificationServiceTest.java index f21e1d6faf..4bcaf407e5 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceNotificationServiceTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceNotificationServiceTest.java @@ -12,7 +12,6 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import java.net.URI; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -43,15 +42,14 @@ public class NetconfDeviceNotificationServiceTest { @Before public void setUp() throws Exception { - final Absolute path1 = Absolute.of(QName.create(new URI("namespace1"), "path1")); - final Absolute path2 = Absolute.of(QName.create(new URI("namespace2"), "path2")); + final Absolute path1 = Absolute.of(QName.create("namespace1", "path1")); + final Absolute path2 = Absolute.of(QName.create("namespace2", "path2")); service = new NetconfDeviceNotificationService(); service.registerNotificationListener(listener1, path1); registration = service.registerNotificationListener(listener2, path2); doReturn(path1).when(notification1).getType(); doReturn(path2).when(notification2).getType(); - } @Test diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java index cd9a86dc1c..defaee1d16 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java @@ -40,7 +40,7 @@ import org.opendaylight.netconf.sal.connect.netconf.AbstractBaseSchemasTest; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.IetfNetconfService; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -118,9 +118,9 @@ public class NetconfDeviceRpcTest extends AbstractBaseSchemasTest { } private static Node resolveNode(final DOMRpcResult result) { - DataContainerChild value = ((ContainerNode) result.getResult()) - .getChild(NetconfMessageTransformUtil.NETCONF_DATA_NODEID).get(); - Node node = ((DOMSourceAnyxmlNode)value).getValue().getNode(); + DataContainerChild value = ((ContainerNode) result.getResult()) + .findChildByArg(NetconfMessageTransformUtil.NETCONF_DATA_NODEID).get(); + Node node = ((DOMSourceAnyxmlNode)value).body().getNode(); assertNotNull(node); return node; } @@ -138,7 +138,6 @@ public class NetconfDeviceRpcTest extends AbstractBaseSchemasTest { for (RpcDefinition operation : operations) { final DOMRpcIdentifier domRpcIdentifier = DOMRpcIdentifier.create(operation.getQName()); assertTrue(argValue.contains(domRpcIdentifier)); - } } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java index ba18e1bd51..0d3cfbedb8 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java @@ -34,7 +34,7 @@ import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabi import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @RunWith(MockitoJUnitRunner.StrictStubs.class) diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceTopologyAdapterTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceTopologyAdapterTest.java index 4e5a498fb3..8bb3f8d437 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceTopologyAdapterTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceTopologyAdapterTest.java @@ -8,6 +8,7 @@ package org.opendaylight.netconf.sal.connect.netconf.sal; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -165,7 +166,7 @@ public class NetconfDeviceTopologyAdapterTest { .nodeWithKey(Node.QNAME, QName.create(Node.QNAME, "node-id"), "test") .node(netconfTestLeafQname).build(); - NormalizedNode augmentNode = ImmutableLeafNodeBuilder.create().withValue(dataTestId) + NormalizedNode augmentNode = ImmutableLeafNodeBuilder.create().withValue(dataTestId) .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(netconfTestLeafQname)).build(); DOMDataTreeWriteTransaction wtx = domDataBroker.newWriteOnlyTransaction(); @@ -173,11 +174,11 @@ public class NetconfDeviceTopologyAdapterTest { wtx.commit().get(5, TimeUnit.SECONDS); adapter.updateDeviceData(true, new NetconfDeviceCapabilities()); - Optional> testNode = domDataBroker.newReadOnlyTransaction() + Optional testNode = domDataBroker.newReadOnlyTransaction() .read(LogicalDatastoreType.OPERATIONAL, pathToAugmentedLeaf).get(2, TimeUnit.SECONDS); - assertEquals("Augmented node data should be still present after device update.", true, testNode.isPresent()); - assertEquals("Augmented data should be the same as before update node.", dataTestId, testNode.get().getValue()); + assertTrue("Augmented node data should be still present after device update.", testNode.isPresent()); + assertEquals("Augmented data should be the same as before update node.", dataTestId, testNode.get().body()); adapter.setDeviceAsFailed(null); testNode = domDataBroker.newReadOnlyTransaction() @@ -185,7 +186,7 @@ public class NetconfDeviceTopologyAdapterTest { assertEquals("Augmented node data should be still present after device failed.", true, testNode.isPresent()); assertEquals("Augmented data should be the same as before failed device.", - dataTestId, testNode.get().getValue()); + dataTestId, testNode.get().body()); } @Test @@ -199,5 +200,4 @@ public class NetconfDeviceTopologyAdapterTest { verify(writeTx).delete(LogicalDatastoreType.OPERATIONAL, id.getTopologyBindingPath()); verify(writeTx, times(2)).commit(); } - } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpcTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpcTest.java index 26635b5a71..47378ca92d 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpcTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpcTest.java @@ -32,7 +32,7 @@ import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,7 +73,7 @@ public class SchemalessNetconfDeviceRpcTest extends AbstractBaseSchemasTest { + " \n" + " \n" + " ")); - NormalizedNode input = Builders.anyXmlBuilder() + AnyxmlNode input = Builders.anyXmlBuilder() .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(qName)) .withValue(src) .build(); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadOnlyTxTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadOnlyTxTest.java index dc07c9483e..b9d72762a8 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadOnlyTxTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/FieldsAwareReadOnlyTxTest.java @@ -38,7 +38,7 @@ public class FieldsAwareReadOnlyTxTest { @Mock private DOMRpcService rpc; @Mock - private NormalizedNode mockedNode; + private NormalizedNode mockedNode; @Test public void testReadWithFields() { diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/NetconfDeviceWriteOnlyTxTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/NetconfDeviceWriteOnlyTxTest.java index 54c1b7d074..c7268ebb12 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/NetconfDeviceWriteOnlyTxTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/NetconfDeviceWriteOnlyTxTest.java @@ -63,7 +63,7 @@ public class NetconfDeviceWriteOnlyTxTest extends AbstractBaseSchemasTest { @Before public void setUp() { final FluentFuture successFuture = - FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null)); + FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null)); doReturn(successFuture) .doReturn(FluentFutures.immediateFailedFluentFuture(new IllegalStateException("Failed tx"))) @@ -88,7 +88,7 @@ public class NetconfDeviceWriteOnlyTxTest extends AbstractBaseSchemasTest { @Test public void testDiscardChanges() throws InterruptedException { - doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) + doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) .when(rpc).invokeRpc(any(QName.class), isNull()); final WriteCandidateTx tx = new WriteCandidateTx(id, new NetconfBaseOps(rpc, mock(MountPointContext.class)), @@ -117,7 +117,7 @@ public class NetconfDeviceWriteOnlyTxTest extends AbstractBaseSchemasTest { final FluentFuture rpcErrorFuture = FluentFutures.immediateFluentFuture( new DefaultDOMRpcResult(RpcResultBuilder.newError(RpcError.ErrorType.APPLICATION, "a", "m"))); - doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) + doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) .doReturn(rpcErrorFuture).when(rpc).invokeRpc(any(QName.class), any(ContainerNode.class)); final WriteCandidateTx tx = new WriteCandidateTx(id, new NetconfBaseOps(rpc, mock(MountPointContext.class)), @@ -133,7 +133,7 @@ public class NetconfDeviceWriteOnlyTxTest extends AbstractBaseSchemasTest { @Test public void testDiscardChangesNotSentWithoutCandidate() { - doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) + doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) .doReturn(FluentFutures.immediateFailedFluentFuture(new IllegalStateException("Failed tx"))) .when(rpc).invokeRpc(any(QName.class), any(ContainerNode.class)); @@ -154,7 +154,7 @@ public class NetconfDeviceWriteOnlyTxTest extends AbstractBaseSchemasTest { @Test public void testListenerSuccess() throws Exception { - doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) + doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) .when(rpc).invokeRpc(any(QName.class), any(ContainerNode.class)); final WriteCandidateTx tx = new WriteCandidateTx( id, new NetconfBaseOps(rpc, BASE_SCHEMAS.getBaseSchema().getMountPointContext()), false); @@ -170,7 +170,7 @@ public class NetconfDeviceWriteOnlyTxTest extends AbstractBaseSchemasTest { @Test public void testListenerCancellation() throws Exception { - doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) + doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode) null))) .when(rpc).invokeRpc(any(QName.class), isNull()); final WriteCandidateTx tx = new WriteCandidateTx( id, new NetconfBaseOps(rpc, BASE_SCHEMAS.getBaseSchema().getMountPointContext()), false); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadOnlyTxTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadOnlyTxTest.java index e0656abe42..f3dc37586b 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadOnlyTxTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadOnlyTxTest.java @@ -38,7 +38,7 @@ public class ReadOnlyTxTest { @Mock private DOMRpcService rpc; @Mock - private NormalizedNode mockedNode; + private NormalizedNode mockedNode; @Before public void setUp() { diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateRunningTxTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateRunningTxTest.java index 2b60be978b..1af16dec4b 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateRunningTxTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateRunningTxTest.java @@ -31,7 +31,7 @@ import org.opendaylight.netconf.sal.connect.netconf.util.NetconfBaseOps; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.copy.config.input.target.ConfigTarget; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateTxTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateTxTest.java index e3f62d1587..1c7586d132 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateTxTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteCandidateTxTest.java @@ -26,7 +26,7 @@ import org.opendaylight.netconf.sal.connect.netconf.AbstractTestModelTest; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfBaseOps; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.util.concurrent.FluentFutures; @RunWith(MockitoJUnitRunner.StrictStubs.class) diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTxTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTxTest.java index ac6d3d9463..79b5f94a27 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTxTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTxTest.java @@ -27,7 +27,7 @@ import org.opendaylight.netconf.sal.connect.netconf.AbstractTestModelTest; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfBaseOps; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.util.concurrent.FluentFutures; @RunWith(MockitoJUnitRunner.StrictStubs.class) diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProviderTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProviderTest.java index 62245f7683..ee0f78aac6 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProviderTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProviderTest.java @@ -7,16 +7,16 @@ */ package org.opendaylight.netconf.sal.connect.netconf.schema; +import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import com.google.common.util.concurrent.FluentFuture; import java.net.InetSocketAddress; -import java.util.Collections; +import java.util.Set; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.dom.DOMSource; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,8 +33,6 @@ 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.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAnyXmlNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; @@ -53,7 +51,7 @@ public class NetconfRemoteSchemaYangSourceProviderTest { @Before public void setUp() throws Exception { - final DOMRpcResult value = new DefaultDOMRpcResult(getNode(), Collections.emptySet()); + final DOMRpcResult value = new DefaultDOMRpcResult(getNode(), Set.of()); final FluentFuture response = FluentFutures.immediateFluentFuture(value); doReturn(response).when(service).invokeRpc(any(QName.class), any(ContainerNode.class)); @@ -65,14 +63,14 @@ public class NetconfRemoteSchemaYangSourceProviderTest { public void testGetSource() throws Exception { final SourceIdentifier identifier = RevisionSourceIdentifier.create("test", Revision.of("2016-02-08")); final YangTextSchemaSource source = provider.getSource(identifier).get(); - Assert.assertEquals(identifier, source.getIdentifier()); + assertEquals(identifier, source.getIdentifier()); verify(service).invokeRpc(NetconfMessageTransformUtil.GET_SCHEMA_QNAME, NetconfRemoteSchemaYangSourceProvider.createGetSchemaRequest(identifier.getName(), identifier.getRevision().map(Revision::toString)) ); } - private static NormalizedNode getNode() throws ParserConfigurationException { + private static ContainerNode getNode() throws ParserConfigurationException { final YangInstanceIdentifier.NodeIdentifier id = YangInstanceIdentifier.NodeIdentifier.create( QName.create("urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring", "2010-10-04", "output") ); @@ -82,9 +80,12 @@ public class NetconfRemoteSchemaYangSourceProviderTest { Document xmlDoc = UntrustedXML.newDocumentBuilder().newDocument(); Element root = xmlDoc.createElement("data"); root.setTextContent("module test {}"); - final DOMSource v = new DOMSource(root); - DataContainerChild child = - ImmutableAnyXmlNodeBuilder.create().withNodeIdentifier(childId).withValue(v).build(); - return ImmutableContainerNodeBuilder.create().withNodeIdentifier(id).withChild(child).build(); + return ImmutableContainerNodeBuilder.create() + .withNodeIdentifier(id) + .withChild(ImmutableAnyXmlNodeBuilder.create() + .withNodeIdentifier(childId) + .withValue(new DOMSource(root)) + .build()) + .build(); } } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformerTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformerTest.java index fb216b96ff..1506fb1446 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformerTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformerTest.java @@ -7,12 +7,15 @@ */ package org.opendaylight.netconf.sal.connect.netconf.schema.mapping; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import java.io.InputStream; import java.util.Optional; import javax.xml.transform.dom.DOMSource; import org.custommonkey.xmlunit.Diff; import org.custommonkey.xmlunit.XMLUnit; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.opendaylight.mdsal.dom.api.DOMRpcResult; @@ -29,7 +32,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; 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.DOMSourceAnyxmlNode; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -90,7 +92,7 @@ public class BaseRpcSchemalessTransformerTest extends AbstractBaseSchemasTest { new YangInstanceIdentifier.NodeIdentifier(Candidate.QNAME)) .withValue(Empty.getInstance()).build()) .build(); - final DataContainerChild target = Builders.containerBuilder() + final ContainerNode target = Builders.containerBuilder() .withNodeIdentifier( new YangInstanceIdentifier.NodeIdentifier(NetconfMessageTransformUtil.NETCONF_TARGET_QNAME)) .withChild(candidate) @@ -104,7 +106,7 @@ public class BaseRpcSchemalessTransformerTest extends AbstractBaseSchemasTest { final NetconfMessage msg = transformer.toRpcRequest( NetconfMessageTransformUtil.NETCONF_EDIT_CONFIG_QNAME, editConfig); final Diff diff = XMLUnit.compareXML(EXP_RPC, XmlUtil.toString(msg.getDocument())); - Assert.assertTrue(diff.toString(), diff.similar()); + assertTrue(diff.toString(), diff.similar()); } @Test @@ -117,14 +119,13 @@ public class BaseRpcSchemalessTransformerTest extends AbstractBaseSchemasTest { doc.getDocumentElement().appendChild(element); final NetconfMessage msg = new NetconfMessage(doc); final DOMRpcResult result = transformer.toRpcResult(msg, NetconfMessageTransformUtil.NETCONF_GET_CONFIG_QNAME); - Assert.assertNotNull(result.getResult()); + assertNotNull(result.getResult()); final ContainerNode rpcReply = (ContainerNode) result.getResult(); - Assert.assertEquals(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_QNAME, rpcReply.getNodeType()); - final Optional dataOpt = rpcReply.getChild(NetconfMessageTransformUtil.NETCONF_DATA_NODEID); - Assert.assertTrue(dataOpt.isPresent()); + assertEquals(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_QNAME, rpcReply.getIdentifier().getNodeType()); + final Optional dataOpt = rpcReply.findChildByArg(NetconfMessageTransformUtil.NETCONF_DATA_NODEID); + assertTrue(dataOpt.isPresent()); final DOMSourceAnyxmlNode data = (DOMSourceAnyxmlNode) dataOpt.get(); - final Diff diff = XMLUnit.compareXML(dataElement.getOwnerDocument(), (Document) data.getValue().getNode()); - Assert.assertTrue(diff.toString(), diff.similar()); + final Diff diff = XMLUnit.compareXML(dataElement.getOwnerDocument(), (Document) data.body().getNode()); + assertTrue(diff.toString(), diff.similar()); } - } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java index dc5d85d5af..81329abf6b 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java @@ -71,7 +71,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.mon import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.datastores.datastore.locks.lock.type.partial.lock.PartialLock; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; @@ -79,17 +79,17 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; 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; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder; import org.opendaylight.yangtools.yang.model.api.ActionDefinition; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; @@ -286,7 +286,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { assertTrue(compositeNodeRpcResult.getErrors().isEmpty()); assertNotNull(compositeNodeRpcResult.getResult()); final DOMSource schemaContent = ((DOMSourceAnyxmlNode) ((ContainerNode) compositeNodeRpcResult.getResult()) - .getValue().iterator().next()).getValue(); + .body().iterator().next()).body(); assertThat(schemaContent.getNode().getTextContent(), CoreMatchers.containsString("Random YANG SCHEMA")); } @@ -313,13 +313,13 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { assertTrue(compositeNodeRpcResult.getErrors().isEmpty()); assertNotNull(compositeNodeRpcResult.getResult()); - final List> values = Lists.newArrayList( + final List values = Lists.newArrayList( NetconfRemoteSchemaYangSourceProvider - .createGetSchemaRequest("module", Optional.of("2012-12-12")).getValue()); + .createGetSchemaRequest("module", Optional.of("2012-12-12")).body()); final Map keys = new HashMap<>(); - for (final DataContainerChild value : values) { - keys.put(value.getNodeType(), value.getValue()); + for (final DataContainerChild value : values) { + keys.put(value.getIdentifier().getNodeType(), value.body()); } final NodeIdentifierWithPredicates identifierWithPredicates = @@ -328,27 +328,27 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { Builders.mapEntryBuilder().withNodeIdentifier(identifierWithPredicates).withValue(values).build(); final DOMSourceAnyxmlNode data = (DOMSourceAnyxmlNode) ((ContainerNode) compositeNodeRpcResult.getResult()) - .getChild(toId(NETCONF_DATA_QNAME)).get(); + .findChildByArg(toId(NETCONF_DATA_QNAME)).get(); NormalizedNodeResult nodeResult = - NetconfUtil.transformDOMSourceToNormalizedNode(SCHEMA, data.getValue()); + NetconfUtil.transformDOMSourceToNormalizedNode(SCHEMA, data.body()); ContainerNode result = (ContainerNode) nodeResult.getResult(); - final ContainerNode state = (ContainerNode) result.getChild(toId(NetconfState.QNAME)).get(); - final ContainerNode schemas = (ContainerNode) state.getChild(toId(Schemas.QNAME)).get(); - final MapNode schemaParent = (MapNode) schemas.getChild(toId(Schema.QNAME)).get(); - assertEquals(1, Iterables.size(schemaParent.getValue())); + final ContainerNode state = (ContainerNode) result.findChildByArg(toId(NetconfState.QNAME)).get(); + final ContainerNode schemas = (ContainerNode) state.findChildByArg(toId(Schemas.QNAME)).get(); + final MapNode schemaParent = (MapNode) schemas.findChildByArg(toId(Schema.QNAME)).get(); + assertEquals(1, Iterables.size(schemaParent.body())); - assertEquals(schemaNode, schemaParent.getValue().iterator().next()); + assertEquals(schemaNode, schemaParent.body().iterator().next()); } @Test public void testGetConfigLeafRequest() throws Exception { - final DataContainerChild filter = toFilterStructure( + final AnyxmlNode filter = toFilterStructure( YangInstanceIdentifier.create(toId(NetconfState.QNAME), toId(Schemas.QNAME), toId(Schema.QNAME), NodeIdentifierWithPredicates.of(Schema.QNAME), toId(QName.create(Schemas.QNAME, "version"))), SCHEMA); - final DataContainerChild source = NetconfBaseOps.getSourceNode(NETCONF_RUNNING_QNAME); + final ContainerNode source = NetconfBaseOps.getSourceNode(NETCONF_RUNNING_QNAME); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_CONFIG_QNAME, NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_QNAME, source, filter)); @@ -373,10 +373,10 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { @Test public void testGetConfigRequest() throws Exception { - final DataContainerChild filter = toFilterStructure( + final AnyxmlNode filter = toFilterStructure( YangInstanceIdentifier.create(toId(NetconfState.QNAME), toId(Schemas.QNAME)), SCHEMA); - final DataContainerChild source = NetconfBaseOps.getSourceNode(NETCONF_RUNNING_QNAME); + final ContainerNode source = NetconfBaseOps.getSourceNode(NETCONF_RUNNING_QNAME); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_CONFIG_QNAME, NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_QNAME, source, filter)); @@ -397,13 +397,13 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { @Test public void testEditConfigRequest() throws Exception { - final List> values = Lists.newArrayList( + final List values = Lists.newArrayList( NetconfRemoteSchemaYangSourceProvider - .createGetSchemaRequest("module", Optional.of("2012-12-12")).getValue()); + .createGetSchemaRequest("module", Optional.of("2012-12-12")).body()); final Map keys = new HashMap<>(); - for (final DataContainerChild value : values) { - keys.put(value.getNodeType(), value.getValue()); + for (final DataContainerChild value : values) { + keys.put(value.getIdentifier().getNodeType(), value.body()); } final NodeIdentifierWithPredicates identifierWithPredicates = @@ -414,11 +414,11 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { final YangInstanceIdentifier id = YangInstanceIdentifier.builder() .node(NetconfState.QNAME).node(Schemas.QNAME).node(Schema.QNAME) .nodeWithKey(Schema.QNAME, keys).build(); - final DataContainerChild editConfigStructure = + final DataContainerChild editConfigStructure = createEditConfigStructure(BASE_SCHEMAS.getBaseSchemaWithNotifications().getEffectiveModelContext(), id, Optional.empty(), Optional.ofNullable(schemaNode)); - final DataContainerChild target = NetconfBaseOps.getTargetNode(NETCONF_CANDIDATE_QNAME); + final DataContainerChild target = NetconfBaseOps.getTargetNode(NETCONF_CANDIDATE_QNAME); final ContainerNode wrap = NetconfMessageTransformUtil.wrap(NETCONF_EDIT_CONFIG_QNAME, editConfigStructure, target); @@ -455,7 +455,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { public void testGetRequest() throws Exception { final QName capability = QName.create(Capabilities.QNAME, "capability"); - final DataContainerChild filter = toFilterStructure( + final DataContainerChild filter = toFilterStructure( YangInstanceIdentifier.create(toId(NetconfState.QNAME), toId(Capabilities.QNAME), toId(capability), new NodeWithValue<>(capability, "a:b:c")), SCHEMA); @@ -481,7 +481,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { toId(NetconfState.QNAME), toId(Capabilities.QNAME), toId(QName.create(Capabilities.QNAME, "capability"))); - final DataContainerChild filter = toFilterStructure(path, SCHEMA); + final DataContainerChild filter = toFilterStructure(path, SCHEMA); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_QNAME, NetconfMessageTransformUtil.wrap(toId(NETCONF_GET_QNAME), filter)); @@ -504,7 +504,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { toId(NetconfState.QNAME), toId(Datastores.QNAME), toId(QName.create(Datastores.QNAME, "datastore"))); - final DataContainerChild filter = toFilterStructure(path, SCHEMA); + final DataContainerChild filter = toFilterStructure(path, SCHEMA); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_QNAME, NetconfMessageTransformUtil.wrap(toId(NETCONF_GET_QNAME), filter)); @@ -591,7 +591,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { List nodeIdentifiers = List.of(NodeIdentifier.create(DEVICE_QNAME)); DOMDataTreeIdentifier domDataTreeIdentifier = prepareDataTreeId(nodeIdentifiers); - NormalizedNode payload = initInputAction(QName.create(DEVICE_QNAME, "start-at"), "now"); + ContainerNode payload = initInputAction(QName.create(DEVICE_QNAME, "start-at"), "now"); NetconfMessage actionRequest = actionNetconfMessageTransformer.toActionRequest( START_DEVICE_PATH, domDataTreeIdentifier, payload); @@ -611,7 +611,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { DOMDataTreeIdentifier domDataTreeIdentifier = prepareDataTreeId(nodeIdentifiers); - NormalizedNode payload = initInputAction(QName.create(BOX_OUT_QNAME, "start-at"), "now"); + ContainerNode payload = initInputAction(QName.create(BOX_OUT_QNAME, "start-at"), "now"); NetconfMessage actionRequest = actionNetconfMessageTransformer.toActionRequest( OPEN_BOXES_PATH, domDataTreeIdentifier, payload); @@ -638,7 +638,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { DOMDataTreeIdentifier domDataTreeIdentifier = prepareDataTreeId(nodeIdentifiers); - NormalizedNode payload = initEmptyInputAction(INTERFACE_QNAME); + ContainerNode payload = initEmptyInputAction(INTERFACE_QNAME); NetconfMessage actionRequest = actionNetconfMessageTransformer.toActionRequest( ENABLE_INTERFACE_PATH, domDataTreeIdentifier, payload); @@ -677,7 +677,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { DOMDataTreeIdentifier domDataTreeIdentifier = prepareDataTreeId(nodeIdentifiers); - NormalizedNode payload = initEmptyInputAction(APPLICATION_QNAME); + ContainerNode payload = initEmptyInputAction(APPLICATION_QNAME); NetconfMessage actionRequest = actionNetconfMessageTransformer.toActionRequest( KILL_SERVER_APP_PATH, domDataTreeIdentifier, payload); @@ -722,11 +722,10 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { DOMDataTreeIdentifier domDataTreeIdentifier = prepareDataTreeId(nodeIdentifiers); - ImmutableLeafNodeBuilder immutableLeafNodeBuilder = new ImmutableLeafNodeBuilder<>(); - DataContainerChild build = immutableLeafNodeBuilder.withNodeIdentifier( - NodeIdentifier.create(barInputQname)).withValue(barInput).build(); - NormalizedNode payload = ImmutableContainerNodeBuilder.create().withNodeIdentifier(NodeIdentifier.create( - QName.create(barInputQname, "input"))).withChild(build).build(); + ContainerNode payload = ImmutableContainerNodeBuilder.create() + .withNodeIdentifier(NodeIdentifier.create(QName.create(barInputQname, "input"))) + .withChild(ImmutableNodes.leafNode(barInputQname, barInput)) + .build(); NetconfMessage actionRequest = actionNetconfMessageTransformer.toActionRequest( XYZZY_BAR_PATH, domDataTreeIdentifier, payload); @@ -754,7 +753,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { List nodeIdentifiers = new ArrayList<>(); nodeIdentifiers.add(NodeIdentifier.create(FOO_QNAME)); DOMDataTreeIdentifier domDataTreeIdentifier = prepareDataTreeId(nodeIdentifiers); - NormalizedNode payload = initInputAction(fooInputQname, "test"); + ContainerNode payload = initInputAction(fooInputQname, "test"); NetconfMessage actionRequest = actionNetconfMessageTransformer.toActionRequest( XYZZY_FOO_PATH, domDataTreeIdentifier, payload); @@ -775,7 +774,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { nodeIdentifiers.add(NodeIdentifier.create(CONFLICT_CHOICE_QNAME)); nodeIdentifiers.add(NodeIdentifier.create(CHOICE_CONT_QNAME)); DOMDataTreeIdentifier domDataTreeIdentifier = prepareDataTreeId(nodeIdentifiers); - NormalizedNode payload = initEmptyInputAction(CHOICE_ACTION_QNAME); + NormalizedNode payload = initEmptyInputAction(CHOICE_ACTION_QNAME); NetconfMessage actionRequest = actionNetconfMessageTransformer.toActionRequest( CHOICE_ACTION_PATH, domDataTreeIdentifier, payload); @@ -801,7 +800,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { DOMDataTreeIdentifier domDataTreeIdentifier = prepareDataTreeId(nodeIdentifiers); - NormalizedNode payload = initEmptyInputAction(INTERFACE_QNAME); + NormalizedNode payload = initEmptyInputAction(INTERFACE_QNAME); NetconfMessage actionRequest = actionNetconfMessageTransformer.toActionRequest( DISABLE_INTERFACE_PATH, domDataTreeIdentifier, payload); @@ -824,7 +823,6 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { DISABLE_QNAME.getNamespace().toString()); } - @SuppressWarnings({ "rawtypes", "unchecked" }) @Test public void toActionResultTest() throws Exception { NetconfMessage message = new NetconfMessage(XmlUtil.readXmlToDocument( @@ -837,8 +835,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { assertNotNull(actionResult); ContainerNode containerNode = actionResult.getOutput().get(); assertNotNull(containerNode); - LeafNode leaf = (LeafNode) containerNode.getValue().iterator().next(); - assertEquals("now", leaf.getValue()); + assertEquals("now", containerNode.body().iterator().next().body()); } @Test @@ -874,7 +871,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { final YangInstanceIdentifier datastoresField = YangInstanceIdentifier.create(toId(Datastores.QNAME)); // building filter structure and NETCONF message - final DataContainerChild filterStructure = toFilterStructure( + final AnyxmlNode filterStructure = toFilterStructure( List.of(FieldsFilter.of(parentYiid, List.of(netconfStartTimeField, datastoresField))), SCHEMA); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_QNAME, NetconfMessageTransformUtil.wrap(toId(NETCONF_GET_QNAME), filterStructure)); @@ -906,7 +903,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { toId(Datastore.QNAME), NodeIdentifierWithPredicates.of(Datastore.QNAME), toId(Locks.QNAME)); // building filter structure and NETCONF message - final DataContainerChild filterStructure = toFilterStructure( + final AnyxmlNode filterStructure = toFilterStructure( List.of(FieldsFilter.of(parentYiid, List.of(capabilitiesField, capabilityField, datastoreField, locksFields))), SCHEMA); @@ -933,7 +930,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { final YangInstanceIdentifier capabilitiesField = YangInstanceIdentifier.create(toId(Capabilities.QNAME)); // building filter structure and NETCONF message - final DataContainerChild filterStructure = toFilterStructure( + final AnyxmlNode filterStructure = toFilterStructure( List.of(FieldsFilter.of(parentYiid, List.of(capabilitiesField, YangInstanceIdentifier.empty()))), SCHEMA); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_QNAME, @@ -960,7 +957,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { toId(QName.create(Schema.QNAME, "namespace").intern())); // building filter structure and NETCONF message - final DataContainerChild filterStructure = toFilterStructure( + final AnyxmlNode filterStructure = toFilterStructure( List.of(FieldsFilter.of(parentYiid, List.of(versionField, identifierField))), SCHEMA); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_QNAME, NetconfMessageTransformUtil.wrap(toId(NETCONF_GET_QNAME), filterStructure)); @@ -1000,7 +997,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { QName.create(Locks.QNAME, "locked-by-session").intern()); // building filter structure and NETCONF message - final DataContainerChild filterStructure = toFilterStructure( + final AnyxmlNode filterStructure = toFilterStructure( List.of(FieldsFilter.of(parentYiid, List.of(lockedTimeField, lockedBySessionField))), SCHEMA); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_QNAME, @@ -1039,7 +1036,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { toId(Session.QNAME), NodeIdentifierWithPredicates.of(Session.QNAME)); // building filter structure and NETCONF message - final DataContainerChild filterStructure = toFilterStructure( + final AnyxmlNode filterStructure = toFilterStructure( List.of(FieldsFilter.of(parentYiid, List.of(datastoreListField, sessionListField))), SCHEMA); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_QNAME, NetconfMessageTransformUtil.wrap(toId(NETCONF_GET_QNAME), filterStructure)); @@ -1074,7 +1071,7 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { toId(QName.create(Session.QNAME, "transport").intern())); // building filter structure and NETCONF message - final DataContainerChild filterStructure = toFilterStructure( + final AnyxmlNode filterStructure = toFilterStructure( List.of(FieldsFilter.of(parentYiid, List.of(session1Field, session2TransportField))), SCHEMA); final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(NETCONF_GET_QNAME, NetconfMessageTransformUtil.wrap(toId(NETCONF_GET_QNAME), filterStructure)); @@ -1136,17 +1133,16 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { } private static ContainerNode initInputAction(final QName qname, final String value) { - ImmutableLeafNodeBuilder immutableLeafNodeBuilder = new ImmutableLeafNodeBuilder<>(); - DataContainerChild build = immutableLeafNodeBuilder.withNodeIdentifier( - NodeIdentifier.create(qname)).withValue(value).build(); - ContainerNode data = ImmutableContainerNodeBuilder.create().withNodeIdentifier(NodeIdentifier.create( - QName.create(qname, "input"))).withChild(build).build(); - return data; + return ImmutableContainerNodeBuilder.create() + .withNodeIdentifier(NodeIdentifier.create(QName.create(qname, "input"))) + .withChild(ImmutableNodes.leafNode(qname, value)) + .build(); } private static ContainerNode initEmptyInputAction(final QName qname) { - return ImmutableContainerNodeBuilder.create().withNodeIdentifier(NodeIdentifier.create( - QName.create(qname, "input"))).build(); + return ImmutableContainerNodeBuilder.create() + .withNodeIdentifier(NodeIdentifier.create(QName.create(qname, "input"))) + .build(); } private static void checkNode(final Node childServer, final String expectedLocalName, final String expectedNodeName, diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/SchemalessMessageTransformerTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/SchemalessMessageTransformerTest.java index 43c86d24ed..75c99ebb27 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/SchemalessMessageTransformerTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/SchemalessMessageTransformerTest.java @@ -7,10 +7,14 @@ */ package org.opendaylight.netconf.sal.connect.netconf.schema.mapping; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import javax.xml.transform.dom.DOMSource; import org.custommonkey.xmlunit.Diff; import org.custommonkey.xmlunit.XMLUnit; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.opendaylight.mdsal.dom.api.DOMNotification; @@ -20,7 +24,7 @@ import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.netconf.sal.connect.util.MessageCounter; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.w3c.dom.Document; @@ -61,14 +65,14 @@ public class SchemalessMessageTransformerTest { final Document payload = XmlUtil.readXmlToDocument(getClass().getResourceAsStream("/notification-payload.xml")); final NetconfMessage netconfMessage = new NetconfMessage(payload); final DOMNotification domNotification = transformer.toNotification(netconfMessage); - Assert.assertEquals(domNotification.getType().lastNodeIdentifier(), + assertEquals(domNotification.getType().lastNodeIdentifier(), SchemalessMessageTransformer.SCHEMALESS_NOTIFICATION_PAYLOAD.getNodeType()); final QName qName = QName.create("org:opendaylight:notification:test:ns:yang:user-notification", "user-visited-page"); final DOMSourceAnyxmlNode dataContainerChild = (DOMSourceAnyxmlNode) domNotification.getBody() - .getChild(new YangInstanceIdentifier.NodeIdentifier(qName)).get(); - final Diff diff = XMLUnit.compareXML(payload, dataContainerChild.getValue().getNode().getOwnerDocument()); - Assert.assertTrue(diff.toString(), diff.similar()); + .findChildByArg(new NodeIdentifier(qName)).get(); + final Diff diff = XMLUnit.compareXML(payload, dataContainerChild.body().getNode().getOwnerDocument()); + assertTrue(diff.toString(), diff.similar()); } @@ -76,12 +80,12 @@ public class SchemalessMessageTransformerTest { public void toRpcRequest() throws Exception { final Node src = XmlUtil.readXmlToDocument("aaa"); final DOMSourceAnyxmlNode input = Builders.anyXmlBuilder() - .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TEST_RPC)) + .withNodeIdentifier(new NodeIdentifier(TEST_RPC)) .withValue(new DOMSource(src)) .build(); final NetconfMessage netconfMessage = transformer.toRpcRequest(TEST_RPC, input); final Diff diff = XMLUnit.compareXML(XmlUtil.readXmlToDocument(EXP_REQUEST), netconfMessage.getDocument()); - Assert.assertTrue(diff.toString(), diff.similar()); + assertTrue(diff.toString(), diff.similar()); } @Test @@ -89,11 +93,11 @@ public class SchemalessMessageTransformerTest { final Document doc = XmlUtil.readXmlToDocument(EXP_REPLY); final NetconfMessage netconfMessage = new NetconfMessage(doc); final DOMRpcResult result = transformer.toRpcResult(netconfMessage, TEST_RPC); - final DOMSource value = (DOMSource) result.getResult().getValue(); - Assert.assertNotNull(result.getResult()); + final DOMSource value = (DOMSource) result.getResult().body(); + assertNotNull(result.getResult()); final Document domSourceDoc = (Document) value.getNode(); final Diff diff = XMLUnit.compareXML(XmlUtil.readXmlToDocument(EXP_REPLY), domSourceDoc); - Assert.assertTrue(diff.toString(), diff.similar()); + assertTrue(diff.toString(), diff.similar()); } @Test @@ -101,7 +105,6 @@ public class SchemalessMessageTransformerTest { final Document doc = XmlUtil.readXmlToDocument(OK_REPLY); final DOMRpcResult result = transformer.toRpcResult( new NetconfMessage(doc), NetconfMessageTransformUtil.NETCONF_COMMIT_QNAME); - Assert.assertNull(result.getResult()); + assertNull(result.getResult()); } - } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/FieldsSchemalessRpcStructureTransformerTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/FieldsSchemalessRpcStructureTransformerTest.java index 9ca0b99c2b..1ba38eab03 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/FieldsSchemalessRpcStructureTransformerTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/FieldsSchemalessRpcStructureTransformerTest.java @@ -11,7 +11,6 @@ import static org.junit.Assert.assertTrue; import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.toId; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; @@ -24,6 +23,7 @@ import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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; @@ -66,7 +66,7 @@ public class FieldsSchemalessRpcStructureTransformerTest { * } */ private static final QNameModule TEST_MODULE = QNameModule.create( - URI.create("test-namespace"), Revision.of("2020-10-25")); + XMLNamespace.of("test-namespace"), Revision.of("2020-10-25")); private static final NodeIdentifier C1_NID = toId(QName.create(TEST_MODULE, "c-1")); private static final NodeIdentifier C2_NID = toId(QName.create(TEST_MODULE, "c-2")); @@ -120,7 +120,7 @@ public class FieldsSchemalessRpcStructureTransformerTest { private static Diff getDiff(final String filterFileName, final DOMSourceAnyxmlNode filterStructure) throws IOException, SAXException, URISyntaxException { - final String body = XmlUtil.toString((Element) filterStructure.getValue().getNode()); + final String body = XmlUtil.toString((Element) filterStructure.body().getNode()); final String expectedBody = new String(Files.readAllBytes(Paths.get(FieldsSchemalessRpcStructureTransformerTest .class.getResource("/schemaless/filter/" + filterFileName).toURI()))); return new Diff(expectedBody, body); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOpsTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOpsTest.java index f027faa72c..9bfbe7223b 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOpsTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOpsTest.java @@ -19,7 +19,6 @@ import static org.mockito.Mockito.when; import java.io.IOException; import java.io.InputStream; import java.net.InetSocketAddress; -import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -44,11 +43,12 @@ import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.netconf.util.NetconfUtil; -import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -63,7 +63,7 @@ import org.xml.sax.SAXException; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class NetconfBaseOpsTest extends AbstractTestModelTest { private static final QNameModule TEST_MODULE = QNameModule.create( - URI.create("test:namespace"), Revision.of("2013-07-22")); + XMLNamespace.of("test:namespace"), Revision.of("2013-07-22")); private static final QName CONTAINER_C_QNAME = QName.create(TEST_MODULE, "c"); private static final NodeIdentifier CONTAINER_C_NID = NodeIdentifier.create(CONTAINER_C_QNAME); @@ -198,21 +198,20 @@ public class NetconfBaseOpsTest extends AbstractTestModelTest { verifyMessageSent("copy-config", NetconfMessageTransformUtil.NETCONF_COPY_CONFIG_QNAME); } - @Test public void testGetConfigRunningData() throws Exception { - final Optional> dataOpt = + final Optional dataOpt = baseOps.getConfigRunningData(callback, Optional.of(YangInstanceIdentifier.empty())).get(); assertTrue(dataOpt.isPresent()); - assertEquals(NetconfUtil.NETCONF_DATA_QNAME, dataOpt.get().getNodeType()); + assertEquals(NetconfUtil.NETCONF_DATA_QNAME, dataOpt.get().getIdentifier().getNodeType()); } @Test public void testGetData() throws Exception { - final Optional> dataOpt = + final Optional dataOpt = baseOps.getData(callback, Optional.of(YangInstanceIdentifier.empty())).get(); assertTrue(dataOpt.isPresent()); - assertEquals(NetconfUtil.NETCONF_DATA_QNAME, dataOpt.get().getNodeType()); + assertEquals(NetconfUtil.NETCONF_DATA_QNAME, dataOpt.get().getIdentifier().getNodeType()); } @Test @@ -252,7 +251,7 @@ public class NetconfBaseOpsTest extends AbstractTestModelTest { .node(CONTAINER_C_QNAME) .node(LEAF_A_NID) .build(); - final DataContainerChild structure = baseOps.createEditConfigStrcture(Optional.of(leaf), + final DataContainerChild structure = baseOps.createEditConfigStrcture(Optional.of(leaf), Optional.of(ModifyAction.REPLACE), leafId); baseOps.editConfigCandidate(callback, structure, true); verifyMessageSent("edit-config-test-module", NetconfMessageTransformUtil.NETCONF_EDIT_CONFIG_QNAME); @@ -268,7 +267,7 @@ public class NetconfBaseOpsTest extends AbstractTestModelTest { .node(CONTAINER_C_NID) .node(LEAF_A_NID) .build(); - final DataContainerChild structure = baseOps.createEditConfigStrcture(Optional.of(leaf), + final DataContainerChild structure = baseOps.createEditConfigStrcture(Optional.of(leaf), Optional.of(ModifyAction.REPLACE), leafId); baseOps.editConfigRunning(callback, structure, ModifyAction.MERGE, true); verifyMessageSent("edit-config-test-module-running", NetconfMessageTransformUtil.NETCONF_EDIT_CONFIG_QNAME); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/SchemalessRpcStructureTransformerTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/SchemalessRpcStructureTransformerTest.java index 8e607a8c46..cc1a381d42 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/SchemalessRpcStructureTransformerTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/SchemalessRpcStructureTransformerTest.java @@ -119,7 +119,7 @@ public class SchemalessRpcStructureTransformerTest { final DOMSourceAnyxmlNode anyXmlNode = adapter.createEditConfigStructure(Optional.of(data), path, Optional.of(ModifyAction.REPLACE)); - final String s = XmlUtil.toString((Element) anyXmlNode.getValue().getNode()); + final String s = XmlUtil.toString((Element) anyXmlNode.body().getNode()); Diff diff = new Diff(expectedConfig, s); assertTrue(String.format("Input %s: %s", testDataset, diff.toString()), diff.similar()); } @@ -127,7 +127,7 @@ public class SchemalessRpcStructureTransformerTest { @Test public void testToFilterStructure() throws Exception { final DOMSourceAnyxmlNode anyXmlNode = (DOMSourceAnyxmlNode) adapter.toFilterStructure(path); - final String s = XmlUtil.toString((Element) anyXmlNode.getValue().getNode()); + final String s = XmlUtil.toString((Element) anyXmlNode.body().getNode()); Diff diff = new Diff(expectedFilter, s); assertTrue(String.format("Input %s: %s", testDataset, diff.toString()), diff.similar()); } @@ -140,7 +140,7 @@ public class SchemalessRpcStructureTransformerTest { .build(); final DOMSourceAnyxmlNode dataStructure = (DOMSourceAnyxmlNode) adapter.selectFromDataStructure(data, path) .get(); - final XmlElement s = XmlElement.fromDomDocument((Document) dataStructure.getValue().getNode()); + final XmlElement s = XmlElement.fromDomDocument((Document) dataStructure.body().getNode()); final String dataFromReply = XmlUtil.toString(s.getOnlyChildElement().getDomElement()); final String expectedData = XmlUtil.toString((Element) source.getNode()); Diff diff = new Diff(expectedData, dataFromReply); diff --git a/netconf/shaded-exificient-jar/pom.xml b/netconf/shaded-exificient-jar/pom.xml index 4a1f04d11a..bf49c2a8df 100644 --- a/netconf/shaded-exificient-jar/pom.xml +++ b/netconf/shaded-exificient-jar/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent - 8.1.2 + 9.0.2 diff --git a/netconf/shaded-exificient/pom.xml b/netconf/shaded-exificient/pom.xml index 1e2a786913..ed294ba3c4 100644 --- a/netconf/shaded-exificient/pom.xml +++ b/netconf/shaded-exificient/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent bundle-parent - 8.1.2 + 9.0.2 diff --git a/netconf/shaded-sshd-jar/pom.xml b/netconf/shaded-sshd-jar/pom.xml index 48528790df..3cbf8790dc 100644 --- a/netconf/shaded-sshd-jar/pom.xml +++ b/netconf/shaded-sshd-jar/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent - 8.1.2 + 9.0.2 diff --git a/netconf/shaded-sshd/pom.xml b/netconf/shaded-sshd/pom.xml index 757d396cc0..e50532b09c 100644 --- a/netconf/shaded-sshd/pom.xml +++ b/netconf/shaded-sshd/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent bundle-parent - 8.1.2 + 9.0.2 diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java index 5a27953a05..78ad231ec2 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java @@ -54,9 +54,9 @@ 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.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; 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.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -173,13 +173,13 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory { final QName location = QName.create(Schema.QNAME, "location"); final QName namespace = QName.create(Schema.QNAME, "namespace"); - CollectionNodeBuilder schemaMapEntryNodeMapNodeCollectionNodeBuilder = Builders - .mapBuilder().withNodeIdentifier(new NodeIdentifier(Schema.QNAME)); + CollectionNodeBuilder schemaMapEntryNodeMapNodeCollectionNodeBuilder = + Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(Schema.QNAME)); LeafSetEntryNode locationLeafSetEntryNode = Builders.leafSetEntryBuilder().withNodeIdentifier( new NodeWithValue<>(location, "NETCONF")).withValue("NETCONF").build(); Map keyValues = new HashMap<>(); - for (final Schema schema : monitor.getSchemas().getSchema().values()) { + for (final Schema schema : monitor.getSchemas().nonnullSchema().values()) { keyValues.put(identifier, schema.getIdentifier()); keyValues.put(version, schema.getVersion()); keyValues.put(format, Yang.QNAME); @@ -194,7 +194,7 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory { .withValue(Yang.QNAME).build()) .withChild(Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(namespace)) .withValue(schema.getNamespace().getValue()).build()) - .withChild((DataContainerChild) Builders.leafSetBuilder().withNodeIdentifier( + .withChild((DataContainerChild) Builders.leafSetBuilder().withNodeIdentifier( new NodeIdentifier(location)) .withChild(locationLeafSetEntryNode).build()) .build(); @@ -202,7 +202,7 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory { schemaMapEntryNodeMapNodeCollectionNodeBuilder.withChild(schemaMapEntryNode); } - DataContainerChild schemaList = schemaMapEntryNodeMapNodeCollectionNodeBuilder.build(); + DataContainerChild schemaList = schemaMapEntryNodeMapNodeCollectionNodeBuilder.build(); ContainerNode schemasContainer = Builders.containerBuilder().withNodeIdentifier( new NodeIdentifier(Schemas.QNAME)).withChild(schemaList).build(); diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java index a4a541b1a6..3cb2e19222 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java @@ -7,7 +7,6 @@ */ package org.opendaylight.netconf.test.tool; -import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.collect.Collections2; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -19,7 +18,6 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.util.HashedWheelTimer; import java.io.Closeable; import java.io.IOException; -import java.io.InputStream; import java.net.BindException; import java.net.Inet4Address; import java.net.InetSocketAddress; @@ -66,10 +64,10 @@ import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.repo.fs.FilesystemSchemaSourceCache; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceListener; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; -import org.opendaylight.yangtools.yang.model.repo.util.FilesystemSchemaSourceCache; import org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; import org.slf4j.Logger; @@ -362,19 +360,11 @@ public class NetconfDeviceSimulator implements Closeable { } private static void registerSource(final SharedSchemaRepository consumer, final String resource, - final SourceIdentifier sourceId) { - consumer.registerSchemaSource(sourceIdentifier -> Futures.immediateFuture(new YangTextSchemaSource(sourceId) { - @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return toStringHelper; - } - - @Override - public InputStream openStream() { - return getClass().getResourceAsStream(resource); - } - }), PotentialSchemaSource.create(sourceId, YangTextSchemaSource.class, - PotentialSchemaSource.Costs.IMMEDIATE.getValue())); + final SourceIdentifier sourceId) { + consumer.registerSchemaSource(sourceIdentifier -> Futures.immediateFuture( + YangTextSchemaSource.forResource(NetconfDeviceSimulator.class, resource)), + PotentialSchemaSource.create(sourceId, YangTextSchemaSource.class, + PotentialSchemaSource.Costs.IMMEDIATE.getValue())); } private static InetSocketAddress getAddress(final String ip, final int port) { diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java index 2d115f4991..2dd3882c91 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/schemacache/SchemaSourceCache.java @@ -20,9 +20,9 @@ import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.repo.spi.AbstractSchemaSourceCache; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource.Costs; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; -import org.opendaylight.yangtools.yang.model.repo.util.AbstractSchemaSourceCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/netconf/tools/pom.xml b/netconf/tools/pom.xml index ff6d82720c..c94f078134 100644 --- a/netconf/tools/pom.xml +++ b/netconf/tools/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/netconf/yanglib/pom.xml b/netconf/yanglib/pom.xml index c4fa612f0c..f228bb7884 100644 --- a/netconf/yanglib/pom.xml +++ b/netconf/yanglib/pom.xml @@ -60,6 +60,10 @@ org.opendaylight.yangtools yang-model-api + + org.opendaylight.yangtools + yang-repo-fs + org.opendaylight.aaa.web web-api diff --git a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java index 049c50e73f..7f9873a576 100644 --- a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java +++ b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java @@ -39,15 +39,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll import org.opendaylight.yanglib.api.YangLibService; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.repo.fs.FilesystemSchemaSourceCache; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaListenerRegistration; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceListener; -import org.opendaylight.yangtools.yang.model.repo.util.FilesystemSchemaSourceCache; +import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/netconf/yanglib/src/main/resources/OSGI-INF/blueprint/yanglib.xml b/netconf/yanglib/src/main/resources/OSGI-INF/blueprint/yanglib.xml index 2f6c00511c..be4b5cf3ed 100644 --- a/netconf/yanglib/src/main/resources/OSGI-INF/blueprint/yanglib.xml +++ b/netconf/yanglib/src/main/resources/OSGI-INF/blueprint/yanglib.xml @@ -17,7 +17,7 @@ - + diff --git a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java b/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java index e78e8195d5..f3c2aff7d2 100644 --- a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java +++ b/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java @@ -55,7 +55,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YinSchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; -import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl; +import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRSchemaSource; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -94,7 +94,7 @@ public class YangLibProviderTest { final YanglibConfig yanglibConfig = new YanglibConfigBuilder().setBindingAddr("www.fake.com") .setBindingPort(Uint32.valueOf(300)).setCacheFolder(CACHE_DIR.getAbsolutePath()).build(); - yangLibProvider = new YangLibProvider(yanglibConfig, dataBroker, new YangParserFactoryImpl()); + yangLibProvider = new YangLibProvider(yanglibConfig, dataBroker, new DefaultYangParserFactory()); } @Test diff --git a/parent/pom.xml b/parent/pom.xml index 58f0d378af..3c8295d299 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.mdsal binding-parent - 7.0.7 + 8.0.0-SNAPSHOT @@ -25,21 +25,21 @@ org.opendaylight.aaa aaa-artifacts - 0.13.3 + 0.14.0-SNAPSHOT pom import org.opendaylight.controller bundle-parent - 3.0.8 + 4.0.0-SNAPSHOT pom import org.opendaylight.infrautils infrautils-artifacts - 1.9.8 + 2.0.2 pom import diff --git a/pom.xml b/pom.xml index b5f962bc07..aeade9b28c 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/restconf/pom.xml b/restconf/pom.xml index 5a38c9d5ea..254ae20e65 100644 --- a/restconf/pom.xml +++ b/restconf/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/NormalizedNodeContext.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/NormalizedNodeContext.java index b908e52c5a..3b13372abb 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/NormalizedNodeContext.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/NormalizedNodeContext.java @@ -15,20 +15,20 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode; public class NormalizedNodeContext { private final InstanceIdentifierContext context; - private final NormalizedNode data; private final WriterParameters writerParameters; + private final NormalizedNode data; + private Map headers = new HashMap<>(); public NormalizedNodeContext(final InstanceIdentifierContext context, - final NormalizedNode data, final WriterParameters writerParameters) { + final NormalizedNode data, final WriterParameters writerParameters) { this.context = context; this.data = data; this.writerParameters = writerParameters; } public NormalizedNodeContext(final InstanceIdentifierContext context, - final NormalizedNode data, final WriterParameters writerParameters, - final Map headers) { + final NormalizedNode data, final WriterParameters writerParameters, final Map headers) { this.context = context; this.data = data; this.writerParameters = writerParameters; @@ -36,7 +36,7 @@ public class NormalizedNodeContext { } public NormalizedNodeContext(final InstanceIdentifierContext context, - final NormalizedNode data) { + final NormalizedNode data) { this.context = context; this.data = data; // default writer parameters @@ -44,7 +44,7 @@ public class NormalizedNodeContext { } public NormalizedNodeContext(final InstanceIdentifierContext context, - final NormalizedNode data, final Map headers) { + final NormalizedNode data, final Map headers) { this.context = context; this.data = data; // default writer parameters @@ -52,12 +52,11 @@ public class NormalizedNodeContext { this.headers = headers; } - public InstanceIdentifierContext getInstanceIdentifierContext() { return this.context; } - public NormalizedNode getData() { + public NormalizedNode getData() { return this.data; } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/patch/PatchEntity.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/patch/PatchEntity.java index a57698ce93..d5f79d582d 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/patch/PatchEntity.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/patch/PatchEntity.java @@ -17,7 +17,7 @@ public class PatchEntity { private final PatchEditOperation operation; private final String editId; private final YangInstanceIdentifier targetNode; - private final NormalizedNode node; + private final NormalizedNode node; /** * Constructor to create PatchEntity for Patch operations which require value leaf representing data to be present. @@ -27,7 +27,7 @@ public class PatchEntity { * @param node Data defined by value leaf used by edit operation */ public PatchEntity(final String editId, final PatchEditOperation operation, final YangInstanceIdentifier targetNode, - final NormalizedNode node) { + final NormalizedNode node) { this.editId = requireNonNull(editId); this.operation = requireNonNull(operation); this.targetNode = requireNonNull(targetNode); @@ -61,7 +61,7 @@ public class PatchEntity { return targetNode; } - public NormalizedNode getNode() { + public NormalizedNode getNode() { return node; } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/serializer/AbstractWebsocketSerializer.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/serializer/AbstractWebsocketSerializer.java index 91880092b5..131216036a 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/serializer/AbstractWebsocketSerializer.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/serializer/AbstractWebsocketSerializer.java @@ -28,7 +28,8 @@ public abstract class AbstractWebsocketSerializer { private static final Logger LOG = LoggerFactory.getLogger(AbstractWebsocketSerializer.class); - public void serialize(DataTreeCandidate candidate, boolean leafNodesOnly, boolean skipData) throws T { + public void serialize(final DataTreeCandidate candidate, final boolean leafNodesOnly, final boolean skipData) + throws T { final Deque path = new ArrayDeque<>(); path.addAll(candidate.getRootPath().getPathArguments()); if (leafNodesOnly) { @@ -39,9 +40,9 @@ public abstract class AbstractWebsocketSerializer { serializeData(path, candidate.getRootNode(), skipData); } - void serializeLeafNodesOnly(Deque path, DataTreeCandidateNode candidate, boolean skipData) - throws T { - NormalizedNode node = null; + void serializeLeafNodesOnly(final Deque path, final DataTreeCandidateNode candidate, + final boolean skipData) throws T { + NormalizedNode node = null; switch (candidate.getModificationType()) { case UNMODIFIED: // no reason to do anything with an unmodified node @@ -84,7 +85,7 @@ public abstract class AbstractWebsocketSerializer { abstract void serializeOperation(DataTreeCandidateNode candidate) throws T; - String convertPath(Collection path) { + String convertPath(final Collection path) { final StringBuilder pathBuilder = new StringBuilder(); for (PathArgument pathArgument : path) { @@ -112,7 +113,7 @@ public abstract class AbstractWebsocketSerializer { return pathBuilder.toString(); } - String modificationTypeToOperation(DataTreeCandidateNode candidate, ModificationType modificationType) { + String modificationTypeToOperation(final DataTreeCandidateNode candidate, final ModificationType modificationType) { switch (modificationType) { case UNMODIFIED: // shouldn't ever happen since the root of a modification is only triggered by some event diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationDataSchemaNode.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationDataSchemaNode.java index 1a1ddc82d6..02dc370964 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationDataSchemaNode.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationDataSchemaNode.java @@ -19,18 +19,16 @@ abstract class AbstractOperationDataSchemaNode implements DataSchemaNode { } @Override - public final boolean isConfiguration() { - return false; + public final Optional effectiveConfig() { + return Optional.empty(); } @Override - @Deprecated public final boolean isAugmenting() { return false; } @Override - @Deprecated public final boolean isAddedByUses() { return false; } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationsModule.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationsModule.java index bf8b7ae336..f18a80090f 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationsModule.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationsModule.java @@ -11,6 +11,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.UnqualifiedQName; @@ -31,7 +32,7 @@ import org.opendaylight.yangtools.yang.model.api.UsesNode; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; -import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; +import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; @@ -47,8 +48,8 @@ abstract class AbstractOperationsModule implements Module, ModuleEffectiveStatem } @Override - public final StatementSource getStatementSource() { - return StatementSource.CONTEXT; + public final StatementOrigin statementOrigin() { + return StatementOrigin.CONTEXT; } @Override @@ -73,7 +74,7 @@ abstract class AbstractOperationsModule implements Module, ModuleEffectiveStatem } @Override - public final Collection getImports() { + public final Collection getImports() { // Yeah, not accurate, but this should not be needed return Collections.emptySet(); } @@ -129,37 +130,37 @@ abstract class AbstractOperationsModule implements Module, ModuleEffectiveStatem } @Override - public final Collection getSubmodules() { + public final Collection getSubmodules() { return Collections.emptySet(); } @Override - public final Collection getFeatures() { + public final Collection getFeatures() { return Collections.emptySet(); } @Override - public final Collection getAugmentations() { + public final Collection getAugmentations() { return Collections.emptySet(); } @Override - public final Collection getRpcs() { + public final Collection getRpcs() { return Collections.emptySet(); } @Override - public final Collection getDeviations() { + public final Collection getDeviations() { return Collections.emptySet(); } @Override - public final Collection getIdentities() { + public final Collection getIdentities() { return Collections.emptySet(); } @Override - public final Collection getExtensionSchemaNodes() { + public final Collection getExtensionSchemaNodes() { return Collections.emptyList(); } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsContainerSchemaNode.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsContainerSchemaNode.java index 0e1c98736c..f732e9d2cf 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsContainerSchemaNode.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsContainerSchemaNode.java @@ -13,7 +13,6 @@ import com.google.common.collect.Maps; import java.util.Collection; import java.util.Collections; import java.util.Map; -import java.util.Optional; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; @@ -31,7 +30,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatemen final class OperationsContainerSchemaNode extends AbstractOperationDataSchemaNode implements ContainerSchemaNode { // There is no need to intern this nor add a revision, as we are providing the corresponding context anyway - private static final @NonNull QName QNAME = QName.create(OperationsRestconfModule.NAMESPACE, "operations"); + static final @NonNull QName QNAME = QName.create(OperationsRestconfModule.NAMESPACE, "operations"); static final @NonNull SchemaPath PATH = SchemaPath.create(true, QNAME); private final Map children; @@ -58,8 +57,8 @@ final class OperationsContainerSchemaNode extends AbstractOperationDataSchemaNod } @Override - public Optional findDataChildByName(final QName name) { - return Optional.ofNullable(children.get(requireNonNull(name))); + public DataSchemaNode dataChildByName(final QName name) { + return children.get(requireNonNull(name)); } @Override @@ -93,7 +92,7 @@ final class OperationsContainerSchemaNode extends AbstractOperationDataSchemaNod } @Override - public Collection getMustConstraints() { + public Collection<@NonNull MustDefinition> getMustConstraints() { return Collections.emptySet(); } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsEffectiveModuleContext.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsEffectiveModuleContext.java index db9c2699db..35fffa052b 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsEffectiveModuleContext.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsEffectiveModuleContext.java @@ -17,7 +17,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; -import org.opendaylight.yangtools.yang.model.util.SimpleSchemaContext; +import org.opendaylight.yangtools.yang.model.spi.SimpleSchemaContext; final class OperationsEffectiveModuleContext extends SimpleSchemaContext implements EffectiveModelContext { private final Map modules; diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsImportedModule.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsImportedModule.java index 5733be7d1f..800e7753de 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsImportedModule.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsImportedModule.java @@ -10,9 +10,7 @@ package org.opendaylight.restconf.common.util; import static java.util.Objects.requireNonNull; import java.util.Collection; -import java.util.Collections; import java.util.List; -import java.util.Optional; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -43,12 +41,12 @@ final class OperationsImportedModule extends AbstractOperationsModule { @Override public Collection getChildNodes() { - return Collections.emptySet(); + return List.of(); } @Override - public Optional findDataChildByName(final QName name) { - return Optional.empty(); + public DataSchemaNode dataChildByName(final QName name) { + return null; } @Override diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsLeafSchemaNode.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsLeafSchemaNode.java index b042a45450..ded653b7e1 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsLeafSchemaNode.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsLeafSchemaNode.java @@ -9,6 +9,7 @@ package org.opendaylight.restconf.common.util; import java.util.Collection; import java.util.Collections; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.MustDefinition; @@ -16,7 +17,7 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement; -import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; +import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; final class OperationsLeafSchemaNode extends AbstractOperationDataSchemaNode implements LeafSchemaNode { private final QName qname; @@ -48,7 +49,7 @@ final class OperationsLeafSchemaNode extends AbstractOperationDataSchemaNode imp } @Override - public Collection getMustConstraints() { + public Collection<@NonNull MustDefinition> getMustConstraints() { return Collections.emptySet(); } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsResourceUtils.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsResourceUtils.java index 443cf4a466..c1fbab30b1 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsResourceUtils.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsResourceUtils.java @@ -18,9 +18,9 @@ import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -52,8 +52,8 @@ public final class OperationsResourceUtils { modules.add(new OperationsRestconfModule(operatationsSchema)); // Now build the operations container and combine it with the context - final DataContainerNodeBuilder operationsBuilder = - Builders.containerBuilder(operatationsSchema); + final DataContainerNodeBuilder operationsBuilder = Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(OperationsContainerSchemaNode.QNAME)); for (final OperationsLeafSchemaNode leaf : rpcLeafSchemas) { operationsBuilder.withChild(ImmutableNodes.leafNode(leaf.getQName(), Empty.getInstance())); } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsRestconfModule.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsRestconfModule.java index e4f0754385..e9e2ad960d 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsRestconfModule.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsRestconfModule.java @@ -9,21 +9,19 @@ package org.opendaylight.restconf.common.util; import static java.util.Objects.requireNonNull; -import java.net.URI; import java.util.Collection; -import java.util.Collections; import java.util.List; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; final class OperationsRestconfModule extends AbstractOperationsModule { // There is no need to intern this nor add a revision, as we are providing the corresponding context anyway static final @NonNull QNameModule NAMESPACE = - QNameModule.create(URI.create("urn:ietf:params:xml:ns:yang:ietf-restconf")); + QNameModule.create(XMLNamespace.of("urn:ietf:params:xml:ns:yang:ietf-restconf")); private final OperationsContainerSchemaNode operations; @@ -48,12 +46,12 @@ final class OperationsRestconfModule extends AbstractOperationsModule { @Override public Collection getChildNodes() { - return Collections.singleton(operations); + return List.of(operations); } @Override - public Optional findDataChildByName(final QName name) { - return operations.getQName().equals(requireNonNull(name)) ? Optional.of(operations) : Optional.empty(); + public DataSchemaNode dataChildByName(final QName name) { + return operations.getQName().equals(requireNonNull(name)) ? operations : null; } @Override diff --git a/restconf/restconf-models/pom.xml b/restconf/restconf-models/pom.xml index ca5044a422..0e656573bd 100644 --- a/restconf/restconf-models/pom.xml +++ b/restconf/restconf-models/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/restconf/restconf-nb-bierman02/pom.xml b/restconf/restconf-nb-bierman02/pom.xml index 84bab39bd4..d283f926e9 100644 --- a/restconf/restconf-nb-bierman02/pom.xml +++ b/restconf/restconf-nb-bierman02/pom.xml @@ -159,10 +159,6 @@ jersey-test-framework-provider-grizzly2 test - - org.hamcrest - hamcrest-core - org.opendaylight.aaa aaa-shiro-api diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/md/sal/rest/schema/SchemaExportContentYangBodyWriter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/md/sal/rest/schema/SchemaExportContentYangBodyWriter.java index 130c61ede7..c377650c29 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/md/sal/rest/schema/SchemaExportContentYangBodyWriter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/md/sal/rest/schema/SchemaExportContentYangBodyWriter.java @@ -39,7 +39,6 @@ public class SchemaExportContentYangBodyWriter implements MessageBodyWriter type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/api/RestconfNormalizedNodeWriter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/api/RestconfNormalizedNodeWriter.java index e3951d3ffc..eb160bdb4b 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/api/RestconfNormalizedNodeWriter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/api/RestconfNormalizedNodeWriter.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.sal.rest.api; import java.io.Closeable; @@ -15,5 +14,5 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public interface RestconfNormalizedNodeWriter extends Flushable, Closeable { - RestconfNormalizedNodeWriter write(NormalizedNode node) throws IOException; + RestconfNormalizedNodeWriter write(NormalizedNode node) throws IOException; } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/DepthAwareNormalizedNodeWriter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/DepthAwareNormalizedNodeWriter.java index 283abe845b..b9d7a7a61a 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/DepthAwareNormalizedNodeWriter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/DepthAwareNormalizedNodeWriter.java @@ -30,10 +30,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -101,7 +101,7 @@ public class DepthAwareNormalizedNodeWriter implements RestconfNormalizedNodeWri * @throws IOException when thrown from the backing writer. */ @Override - public final DepthAwareNormalizedNodeWriter write(final NormalizedNode node) throws IOException { + public final DepthAwareNormalizedNodeWriter write(final NormalizedNode node) throws IOException { if (wasProcessedAsCompositeNode(node)) { return this; } @@ -136,29 +136,29 @@ public class DepthAwareNormalizedNodeWriter implements RestconfNormalizedNodeWri return children instanceof Collection ? ((Collection) children).size() : UNKNOWN_SIZE; } - private boolean wasProcessAsSimpleNode(final NormalizedNode node) throws IOException { + private boolean wasProcessAsSimpleNode(final NormalizedNode node) throws IOException { if (node instanceof LeafSetEntryNode) { if (currentDepth < maxDepth) { final LeafSetEntryNode nodeAsLeafList = (LeafSetEntryNode) node; writer.startLeafSetEntryNode(nodeAsLeafList.getIdentifier()); - writer.scalarValue(nodeAsLeafList.getValue()); + writer.scalarValue(nodeAsLeafList.body()); writer.endNode(); } return true; } else if (node instanceof LeafNode) { final LeafNode nodeAsLeaf = (LeafNode)node; writer.startLeafNode(nodeAsLeaf.getIdentifier()); - writer.scalarValue(nodeAsLeaf.getValue()); + writer.scalarValue(nodeAsLeaf.body()); writer.endNode(); return true; } else if (node instanceof AnyxmlNode) { final AnyxmlNode anyxmlNode = (AnyxmlNode)node; - final Class objectModel = anyxmlNode.getValueObjectModel(); + final Class objectModel = anyxmlNode.bodyObjectModel(); if (writer.startAnyxmlNode(anyxmlNode.getIdentifier(), objectModel)) { if (DOMSource.class.isAssignableFrom(objectModel)) { - writer.domSourceValue((DOMSource) anyxmlNode.getValue()); + writer.domSourceValue((DOMSource) anyxmlNode.body()); } else { - writer.scalarValue(anyxmlNode.getValue()); + writer.scalarValue(anyxmlNode.body()); } writer.endNode(); } @@ -175,9 +175,9 @@ public class DepthAwareNormalizedNodeWriter implements RestconfNormalizedNodeWri * @return True * @throws IOException when the writer reports it */ - protected final boolean writeChildren(final Iterable> children) throws IOException { + protected final boolean writeChildren(final Iterable children) throws IOException { if (currentDepth < maxDepth) { - for (final NormalizedNode child : children) { + for (final NormalizedNode child : children) { write(child); } } @@ -187,7 +187,7 @@ public class DepthAwareNormalizedNodeWriter implements RestconfNormalizedNodeWri protected boolean writeMapEntryChildren(final MapEntryNode mapEntryNode) throws IOException { if (currentDepth < maxDepth) { - writeChildren(mapEntryNode.getValue()); + writeChildren(mapEntryNode.body()); } else if (currentDepth == maxDepth) { writeOnlyKeys(mapEntryNode.getIdentifier().entrySet()); } @@ -204,58 +204,58 @@ public class DepthAwareNormalizedNodeWriter implements RestconfNormalizedNodeWri } protected boolean writeMapEntryNode(final MapEntryNode node) throws IOException { - writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.getValue())); + writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.body())); currentDepth++; writeMapEntryChildren(node); currentDepth--; return true; } - private boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { + private boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { boolean processedAsCompositeNode = false; if (node instanceof ContainerNode) { final ContainerNode n = (ContainerNode) node; - writer.startContainerNode(n.getIdentifier(), childSizeHint(n.getValue())); + writer.startContainerNode(n.getIdentifier(), childSizeHint(n.body())); currentDepth++; - processedAsCompositeNode = writeChildren(n.getValue()); + processedAsCompositeNode = writeChildren(n.body()); currentDepth--; } else if (node instanceof MapEntryNode) { processedAsCompositeNode = writeMapEntryNode((MapEntryNode) node); } else if (node instanceof UnkeyedListEntryNode) { final UnkeyedListEntryNode n = (UnkeyedListEntryNode) node; - writer.startUnkeyedListItem(n.getIdentifier(), childSizeHint(n.getValue())); + writer.startUnkeyedListItem(n.getIdentifier(), childSizeHint(n.body())); currentDepth++; - processedAsCompositeNode = writeChildren(n.getValue()); + processedAsCompositeNode = writeChildren(n.body()); currentDepth--; } else if (node instanceof ChoiceNode) { final ChoiceNode n = (ChoiceNode) node; - writer.startChoiceNode(n.getIdentifier(), childSizeHint(n.getValue())); - processedAsCompositeNode = writeChildren(n.getValue()); + writer.startChoiceNode(n.getIdentifier(), childSizeHint(n.body())); + processedAsCompositeNode = writeChildren(n.body()); } else if (node instanceof AugmentationNode) { final AugmentationNode n = (AugmentationNode) node; writer.startAugmentationNode(n.getIdentifier()); - processedAsCompositeNode = writeChildren(n.getValue()); + processedAsCompositeNode = writeChildren(n.body()); } else if (node instanceof UnkeyedListNode) { final UnkeyedListNode n = (UnkeyedListNode) node; - writer.startUnkeyedList(n.getIdentifier(), childSizeHint(n.getValue())); - processedAsCompositeNode = writeChildren(n.getValue()); - } else if (node instanceof OrderedMapNode) { - final OrderedMapNode n = (OrderedMapNode) node; - writer.startOrderedMapNode(n.getIdentifier(), childSizeHint(n.getValue())); - processedAsCompositeNode = writeChildren(n.getValue()); + writer.startUnkeyedList(n.getIdentifier(), childSizeHint(n.body())); + processedAsCompositeNode = writeChildren(n.body()); + } else if (node instanceof UserMapNode) { + final UserMapNode n = (UserMapNode) node; + writer.startOrderedMapNode(n.getIdentifier(), childSizeHint(n.body())); + processedAsCompositeNode = writeChildren(n.body()); } else if (node instanceof MapNode) { final MapNode n = (MapNode) node; - writer.startMapNode(n.getIdentifier(), childSizeHint(n.getValue())); - processedAsCompositeNode = writeChildren(n.getValue()); + writer.startMapNode(n.getIdentifier(), childSizeHint(n.body())); + processedAsCompositeNode = writeChildren(n.body()); } else if (node instanceof LeafSetNode) { final LeafSetNode n = (LeafSetNode) node; - if (node instanceof OrderedLeafSetNode) { - writer.startOrderedLeafSet(n.getIdentifier(), childSizeHint(n.getValue())); + if (node instanceof UserLeafSetNode) { + writer.startOrderedLeafSet(n.getIdentifier(), childSizeHint(n.body())); } else { - writer.startLeafSet(n.getIdentifier(), childSizeHint(n.getValue())); + writer.startLeafSet(n.getIdentifier(), childSizeHint(n.body())); } currentDepth++; - processedAsCompositeNode = writeChildren(n.getValue()); + processedAsCompositeNode = writeChildren(n.body()); currentDepth--; } @@ -272,12 +272,12 @@ public class DepthAwareNormalizedNodeWriter implements RestconfNormalizedNodeWri @Override protected boolean writeMapEntryNode(final MapEntryNode node) throws IOException { final NormalizedNodeStreamWriter writer = getWriter(); - writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.getValue())); + writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.body())); final Set qnames = node.getIdentifier().keySet(); // Write out all the key children for (final QName qname : qnames) { - final Optional> child = node.getChild(new NodeIdentifier(qname)); + final Optional child = node.findChildByArg(new NodeIdentifier(qname)); if (child.isPresent()) { write(child.get()); } else { @@ -287,11 +287,11 @@ public class DepthAwareNormalizedNodeWriter implements RestconfNormalizedNodeWri // Write all the rest currentDepth++; - final boolean result = writeChildren(Iterables.filter(node.getValue(), input -> { + final boolean result = writeChildren(Iterables.filter(node.body(), input -> { if (input instanceof AugmentationNode) { return true; } - if (!qnames.contains(input.getNodeType())) { + if (!qnames.contains(input.getIdentifier().getNodeType())) { return true; } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java index 5d3e1da407..efa534d1ce 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java @@ -49,7 +49,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetExceptio import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +64,7 @@ public class JsonNormalizedNodeBodyReader private static final Logger LOG = LoggerFactory.getLogger(JsonNormalizedNodeBodyReader.class); - public JsonNormalizedNodeBodyReader(ControllerContext controllerContext) { + public JsonNormalizedNodeBodyReader(final ControllerContext controllerContext) { super(controllerContext); } @@ -110,49 +110,47 @@ public class JsonNormalizedNodeBodyReader final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final SchemaNode parentSchema; + final SchemaInferenceStack parentSchema; if (isPost) { // FIXME: We need dispatch for RPC. - parentSchema = path.getSchemaNode(); - } else if (path.getSchemaNode() instanceof SchemaContext) { - parentSchema = path.getSchemaContext(); + parentSchema = SchemaInferenceStack.ofSchemaPath(path.getSchemaContext(), path.getSchemaNode().getPath()); + } else if (path.getSchemaNode() instanceof SchemaContext + || SchemaPath.ROOT.equals(path.getSchemaNode().getPath().getParent())) { + parentSchema = SchemaInferenceStack.of(path.getSchemaContext()); } else { - if (SchemaPath.ROOT.equals(path.getSchemaNode().getPath().getParent())) { - parentSchema = path.getSchemaContext(); - } else { - parentSchema = SchemaContextUtil - .findDataSchemaNode(path.getSchemaContext(), path.getSchemaNode().getPath().getParent()); - } + parentSchema = SchemaInferenceStack.ofSchemaPath(path.getSchemaContext(), + path.getSchemaNode().getPath().getParent()); } final JsonParserStream jsonParser = JsonParserStream.create(writer, - JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(path.getSchemaContext()), parentSchema); + JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(path.getSchemaContext()), + parentSchema.toInference()); final JsonReader reader = new JsonReader(new InputStreamReader(nonEmptyInputStreamOptional.get(), StandardCharsets.UTF_8)); jsonParser.parse(reader); - NormalizedNode result = resultHolder.getResult(); + NormalizedNode result = resultHolder.getResult(); final List iiToDataList = new ArrayList<>(); InstanceIdentifierContext newIIContext; while (result instanceof AugmentationNode || result instanceof ChoiceNode) { - final Object childNode = ((DataContainerNode) result).getValue().iterator().next(); + final Object childNode = ((DataContainerNode) result).body().iterator().next(); if (isPost) { iiToDataList.add(result.getIdentifier()); } - result = (NormalizedNode) childNode; + result = (NormalizedNode) childNode; } if (isPost) { if (result instanceof MapEntryNode) { - iiToDataList.add(new YangInstanceIdentifier.NodeIdentifier(result.getNodeType())); + iiToDataList.add(new YangInstanceIdentifier.NodeIdentifier(result.getIdentifier().getNodeType())); iiToDataList.add(result.getIdentifier()); } else { iiToDataList.add(result.getIdentifier()); } } else { if (result instanceof MapNode) { - result = Iterables.getOnlyElement(((MapNode) result).getValue()); + result = Iterables.getOnlyElement(((MapNode) result).body()); } } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonToPatchBodyReader.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonToPatchBodyReader.java index de744eeef8..bee6e05f2a 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonToPatchBodyReader.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonToPatchBodyReader.java @@ -7,6 +7,8 @@ */ package org.opendaylight.netconf.sal.rest.impl; +import static com.google.common.base.Verify.verify; + import com.google.common.collect.ImmutableList; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; @@ -49,8 +51,10 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,7 +71,7 @@ public class JsonToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider private static final Logger LOG = LoggerFactory.getLogger(JsonToPatchBodyReader.class); - public JsonToPatchBodyReader(ControllerContext controllerContext) { + public JsonToPatchBodyReader(final ControllerContext controllerContext) { super(controllerContext); } @@ -250,9 +254,14 @@ public class JsonToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider edit.setTargetSchemaNode(path.getSchemaContext()); } else { edit.setTarget(codec.deserialize(codec.serialize(path.getInstanceIdentifier()).concat(target))); - edit.setTargetSchemaNode(SchemaContextUtil.findDataSchemaNode(path.getSchemaContext(), - codec.getDataContextTree().findChild(edit.getTarget()).orElseThrow().getDataSchemaNode() - .getPath().getParent())); + + final EffectiveStatement parentStmt = SchemaInferenceStack.ofInstantiatedPath( + path.getSchemaContext(), + codec.getDataContextTree().findChild(edit.getTarget()).orElseThrow().getDataSchemaNode() + .getPath().getParent()) + .currentStatement(); + verify(parentStmt instanceof SchemaNode, "Unexpected parent %s", parentStmt); + edit.setTargetSchemaNode((SchemaNode) parentStmt); } break; @@ -368,13 +377,14 @@ public class JsonToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider * @param in reader JsonReader reader * @return NormalizedNode representing data */ - private static NormalizedNode readEditData(final @NonNull JsonReader in, + private static NormalizedNode readEditData(final @NonNull JsonReader in, final @NonNull SchemaNode targetSchemaNode, final @NonNull InstanceIdentifierContext path) { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - JsonParserStream.create(writer, - JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(path.getSchemaContext()), - targetSchemaNode).parse(in); + final EffectiveModelContext context = path.getSchemaContext(); + JsonParserStream.create(writer, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(context), + SchemaInferenceStack.ofInstantiatedPath(context, targetSchemaNode.getPath()).toInference()) + .parse(in); return resultHolder.getResult(); } @@ -424,7 +434,7 @@ public class JsonToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider private PatchEditOperation operation; private YangInstanceIdentifier target; private SchemaNode targetSchemaNode; - private NormalizedNode data; + private NormalizedNode data; public String getId() { return this.id; @@ -458,11 +468,11 @@ public class JsonToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider this.targetSchemaNode = targetSchemaNode; } - public NormalizedNode getData() { + public NormalizedNode getData() { return this.data; } - public void setData(final NormalizedNode data) { + public void setData(final NormalizedNode data) { this.data = data; } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java index b671833c25..5d85ba1444 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java @@ -13,7 +13,6 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.Map.Entry; @@ -31,7 +30,7 @@ import org.opendaylight.netconf.sal.rest.api.RestconfService; import org.opendaylight.netconf.util.NetconfUtil; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.context.NormalizedNodeContext; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -88,7 +87,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter data = context.getData(); + NormalizedNode data = context.getData(); if (data == null) { return; } @@ -97,33 +96,32 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter identifierCtx = (InstanceIdentifierContext) context.getInstanceIdentifierContext(); - final SchemaPath path = identifierCtx.getSchemaNode().getPath(); try (JsonWriter jsonWriter = createJsonWriter(entityStream, context.getWriterParameters().isPrettyPrint())) { jsonWriter.beginObject(); - writeNormalizedNode( - jsonWriter, path, identifierCtx, data, context.getWriterParameters().getDepth()); + writeNormalizedNode(jsonWriter, identifierCtx, data, context.getWriterParameters().getDepth()); jsonWriter.endObject(); jsonWriter.flush(); } } - private static void writeNormalizedNode(final JsonWriter jsonWriter, SchemaPath path, - final InstanceIdentifierContext context, NormalizedNode data, + private static void writeNormalizedNode(final JsonWriter jsonWriter, + final InstanceIdentifierContext context, NormalizedNode data, final @Nullable Integer depth) throws IOException { + SchemaPath path = context.getSchemaNode().getPath(); final RestconfNormalizedNodeWriter nnWriter; if (SchemaPath.ROOT.equals(path)) { /* * Creates writer without initialNs and we write children of root data container * which is not visible in restconf */ - nnWriter = createNormalizedNodeWriter(context,path,jsonWriter, depth); + nnWriter = createNormalizedNodeWriter(context, path, jsonWriter, depth); if (data instanceof ContainerNode) { writeChildren(nnWriter,(ContainerNode) data); } else if (data instanceof DOMSourceAnyxmlNode) { try { writeChildren(nnWriter, (ContainerNode) NetconfUtil.transformDOMSourceToNormalizedNode( - context.getSchemaContext(), ((DOMSourceAnyxmlNode)data).getValue()).getResult()); + context.getSchemaContext(), ((DOMSourceAnyxmlNode)data).body()).getResult()); } catch (XMLStreamException | URISyntaxException | SAXException e) { throw new IOException("Cannot write anyxml.", e); } @@ -134,7 +132,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter child : data.getValue()) { + for (final DataContainerChild child : data.body()) { nnWriter.write(child); } } @@ -165,7 +165,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter data = context.getData(); + final NormalizedNode data = context.getData(); final SchemaPath schemaPath = pathContext.getSchemaNode().getPath(); writeNormalizedNode(xmlWriter, schemaPath, pathContext, data, context.getWriterParameters().getDepth()); } private static void writeNormalizedNode(final XMLStreamWriter xmlWriter, final SchemaPath schemaPath, - final InstanceIdentifierContext pathContext, NormalizedNode data, final @Nullable Integer depth) + final InstanceIdentifierContext pathContext, NormalizedNode data, final @Nullable Integer depth) throws IOException { final RestconfNormalizedNodeWriter nnWriter; final EffectiveModelContext schemaCtx = pathContext.getSchemaContext(); @@ -120,7 +120,7 @@ public class NormalizedNodeXmlBodyWriter implements MessageBodyWriter child : data.getValue()) { + for (final NormalizedNode child : data.body()) { nnWriter.write(child); } nnWriter.flush(); diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDelegatingNormalizedNodeWriter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDelegatingNormalizedNodeWriter.java index 38e3c13000..aaa1ccc79a 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDelegatingNormalizedNodeWriter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDelegatingNormalizedNodeWriter.java @@ -17,9 +17,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWrit * This class just delegates all of the functionality to Yangtools normalized node writer. */ public final class RestconfDelegatingNormalizedNodeWriter implements RestconfNormalizedNodeWriter { - private NormalizedNodeWriter delegNNWriter; + private final NormalizedNodeWriter delegNNWriter; - private RestconfDelegatingNormalizedNodeWriter(NormalizedNodeStreamWriter streamWriter, final boolean + private RestconfDelegatingNormalizedNodeWriter(final NormalizedNodeStreamWriter streamWriter, final boolean orderKeyLeaves) { this.delegNNWriter = NormalizedNodeWriter.forStreamWriter(streamWriter, orderKeyLeaves); } @@ -33,7 +33,8 @@ public final class RestconfDelegatingNormalizedNodeWriter implements RestconfNor return new RestconfDelegatingNormalizedNodeWriter(writer, orderKeyLeaves); } - public RestconfDelegatingNormalizedNodeWriter write(final NormalizedNode node) throws IOException { + @Override + public RestconfDelegatingNormalizedNodeWriter write(final NormalizedNode node) throws IOException { delegNNWriter.write(node); return this; } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java index 7005968be8..b99110ee42 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java @@ -16,7 +16,6 @@ import com.google.gson.stream.JsonWriter; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; -import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -38,14 +37,16 @@ import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.common.errors.RestconfError; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; 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.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.api.schema.stream.ForwardingNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; @@ -53,10 +54,8 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory; import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; 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.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -130,13 +129,13 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper errContBuild = - Builders.containerBuilder((ContainerSchemaNode) errorsSchemaNode); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) errorsSchemaNode); final List schemaList = ControllerContext.findInstanceDataChildrenByName(errorsSchemaNode, Draft02.RestConfModule.ERROR_LIST_SCHEMA_NODE); final DataSchemaNode errListSchemaNode = Iterables.getFirst(schemaList, null); checkState(errListSchemaNode instanceof ListSchemaNode, "Found Error SchemaNode isn't ListSchemaNode"); - final CollectionNodeBuilder listErorsBuilder = Builders + final CollectionNodeBuilder listErorsBuilder = SchemaAwareBuilders .mapBuilder((ListSchemaNode) errListSchemaNode); @@ -162,21 +161,21 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper errNodeValues = Builders + final DataContainerNodeBuilder errNodeValues = SchemaAwareBuilders .mapEntryBuilder(listStreamSchemaNode); List lsChildDataSchemaNode = ControllerContext.findInstanceDataChildrenByName( listStreamSchemaNode, "error-type"); final DataSchemaNode errTypSchemaNode = Iterables.getFirst(lsChildDataSchemaNode, null); checkState(errTypSchemaNode instanceof LeafSchemaNode); - errNodeValues.withChild(Builders.leafBuilder((LeafSchemaNode) errTypSchemaNode) + errNodeValues.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) errTypSchemaNode) .withValue(error.getErrorType().getErrorTypeTag()).build()); lsChildDataSchemaNode = ControllerContext.findInstanceDataChildrenByName( listStreamSchemaNode, "error-tag"); final DataSchemaNode errTagSchemaNode = Iterables.getFirst(lsChildDataSchemaNode, null); checkState(errTagSchemaNode instanceof LeafSchemaNode); - errNodeValues.withChild(Builders.leafBuilder((LeafSchemaNode) errTagSchemaNode) + errNodeValues.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) errTagSchemaNode) .withValue(error.getErrorTag().getTagValue()).build()); if (error.getErrorAppTag() != null) { @@ -184,7 +183,7 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper data = errorsNode.getData(); + NormalizedNode data = errorsNode.getData(); final InstanceIdentifierContext context = errorsNode.getInstanceIdentifierContext(); final DataSchemaNode schema = (DataSchemaNode) context.getSchemaNode(); @@ -222,7 +221,7 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper data = errorsNode.getData(); + NormalizedNode data = errorsNode.getData(); SchemaPath schemaPath = pathContext.getSchemaNode().getPath(); boolean isDataRoot = false; @@ -394,7 +395,9 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper child : data.getValue()) { + for (final DataContainerChild child : data.body()) { nnWriter.write(child); } nnWriter.flush(); @@ -424,7 +427,7 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper child : data.getValue()) { + for (final DataContainerChild child : data.body()) { nnWriter.write(child); nnWriter.flush(); } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/StringModuleInstanceIdentifierCodec.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/StringModuleInstanceIdentifierCodec.java index 318ddea533..b61ed58168 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/StringModuleInstanceIdentifierCodec.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/StringModuleInstanceIdentifierCodec.java @@ -9,8 +9,8 @@ package org.opendaylight.netconf.sal.rest.impl; import static java.util.Objects.requireNonNull; -import java.net.URI; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -56,7 +56,7 @@ public final class StringModuleInstanceIdentifierCodec extends AbstractModuleStr } @Override - protected String prefixForNamespace(final URI namespace) { + protected String prefixForNamespace(final XMLNamespace namespace) { return this.context.findModules(namespace).stream().findFirst().map(Module::getName).orElse(null); } } \ No newline at end of file diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java index 8246d3bc9f..c4a86585c4 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java @@ -58,6 +58,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -155,19 +156,19 @@ public class XmlNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsPro final QName scQName = schemaNode.getQName(); Preconditions.checkState( docRootElm.equals(scQName.getLocalName()) - && docRootNamespace.equals(scQName.getNamespace().toASCIIString()), + && docRootNamespace.equals(scQName.getNamespace().toString()), String.format("Not correct message root element \"%s\", should be \"%s\"", docRootElm, scQName)); } - NormalizedNode parsed; + NormalizedNode parsed; final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); if (schemaNode instanceof ContainerLike || schemaNode instanceof ListSchemaNode || schemaNode instanceof LeafSchemaNode) { - final XmlParserStream xmlParser = XmlParserStream.create(writer, pathContext.getSchemaContext(), - schemaNode); + final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.ofSchemaPath( + pathContext.getSchemaContext(), schemaNode.getPath()).toInference()); xmlParser.traverse(new DOMSource(doc.getDocumentElement())); parsed = resultHolder.getResult(); @@ -178,7 +179,7 @@ public class XmlNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsPro if (parsed instanceof MapNode) { final MapNode mapNode = (MapNode) parsed; // extracting the MapEntryNode - parsed = mapNode.getValue().iterator().next(); + parsed = mapNode.body().iterator().next(); } if (schemaNode instanceof ListSchemaNode && isPost()) { @@ -242,12 +243,10 @@ public class XmlNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsPro } private static AugmentationSchemaNode findCorrespondingAugment(final DataSchemaNode parent, - final DataSchemaNode child) { + final DataSchemaNode child) { if (parent instanceof AugmentationTarget && !(parent instanceof ChoiceSchemaNode)) { - for (final AugmentationSchemaNode augmentation : - ((AugmentationTarget) parent).getAvailableAugmentations()) { - final DataSchemaNode childInAugmentation = augmentation.getDataChildByName(child.getQName()); - if (childInAugmentation != null) { + for (AugmentationSchemaNode augmentation : ((AugmentationTarget) parent).getAvailableAugmentations()) { + if (augmentation.dataChildByName(child.getQName()) != null) { return augmentation; } } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlToPatchBodyReader.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlToPatchBodyReader.java index ef5be04b77..c87e204ca4 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlToPatchBodyReader.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlToPatchBodyReader.java @@ -7,13 +7,15 @@ */ package org.opendaylight.netconf.sal.rest.impl; +import static com.google.common.base.Verify.verify; +import static com.google.common.base.Verify.verifyNotNull; + import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; import java.io.IOException; import java.io.InputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Iterator; @@ -44,6 +46,7 @@ import org.opendaylight.restconf.common.util.RestUtil; import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -57,7 +60,8 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -79,7 +83,7 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i private static final Logger LOG = LoggerFactory.getLogger(XmlToPatchBodyReader.class); - public XmlToPatchBodyReader(ControllerContext controllerContext) { + public XmlToPatchBodyReader(final ControllerContext controllerContext) { super(controllerContext); } @@ -138,7 +142,8 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i ? schemaNode.getQName().getNamespace().toString() : firstValueElement.getNamespaceURI(); // find module according to namespace - final Module module = pathContext.getSchemaContext().findModules(URI.create(namespace)).iterator().next(); + final Module module = pathContext.getSchemaContext().findModules(XMLNamespace.of(namespace)).iterator() + .next(); // initialize codec + set default prefix derived from module name final StringModuleInstanceIdentifierCodec codec = new StringModuleInstanceIdentifierCodec( @@ -156,14 +161,14 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i .concat(prepareNonCondXpath(schemaNode, target.replaceFirst("/", ""), firstValueElement, namespace, module.getQNameModule().getRevision().map(Revision::toString).orElse(null)))); - - targetNode = SchemaContextUtil.findDataSchemaNode(pathContext.getSchemaContext(), - codec.getDataContextTree().findChild(targetII).orElseThrow().getDataSchemaNode().getPath() - .getParent()); - // move schema node - schemaNode = (DataSchemaNode) SchemaContextUtil.findDataSchemaNode(pathContext.getSchemaContext(), - codec.getDataContextTree().findChild(targetII).orElseThrow().getDataSchemaNode().getPath()); + schemaNode = verifyNotNull(codec.getDataContextTree().findChild(targetII).orElseThrow() + .getDataSchemaNode()); + + final EffectiveStatement parentStmt = SchemaInferenceStack.ofInstantiatedPath( + pathContext.getSchemaContext(), schemaNode.getPath().getParent()).currentStatement(); + verify(parentStmt instanceof SchemaNode, "Unexpected parent %s", parentStmt); + targetNode = (SchemaNode) parentStmt; } if (targetNode == null) { @@ -173,12 +178,13 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i } if (oper.isWithValue()) { - final NormalizedNode parsed; + final NormalizedNode parsed; if (schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode) { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final XmlParserStream xmlParser = XmlParserStream.create(writer, pathContext.getSchemaContext(), - schemaNode); + final XmlParserStream xmlParser = XmlParserStream.create(writer, + SchemaInferenceStack.ofInstantiatedPath(pathContext.getSchemaContext(), schemaNode.getPath()) + .toInference()); xmlParser.traverse(new DOMSource(firstValueElement)); parsed = resultHolder.getResult(); } else { @@ -254,8 +260,7 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i while (args.hasNext()) { final String s = args.next(); - nonCondXpath.append("/"); - nonCondXpath.append(s); + nonCondXpath.append('/').append(s); childNode = ((DataNodeContainer) childNode).getDataChildByName(QName.create(namespace, revision, s)); if (childNode instanceof ListSchemaNode && args.hasNext()) { diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java index 843e9edb8c..8842ddb078 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java @@ -37,9 +37,9 @@ final class BatchedExistenceCheck { static BatchedExistenceCheck start(final DOMDataTreeReadOperations readTx, final LogicalDatastoreType datastore, final YangInstanceIdentifier parentPath, - final Collection> children) { + final Collection children) { final BatchedExistenceCheck ret = new BatchedExistenceCheck(children.size()); - for (NormalizedNode child : children) { + for (NormalizedNode child : children) { final YangInstanceIdentifier path = parentPath.node(child.getIdentifier()); readTx.exists(datastore, path).addCallback(new FutureCallback() { @Override diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java index f67167ff5e..9ba30e5da8 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java @@ -76,13 +76,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeBuilder; 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.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; @@ -142,7 +143,7 @@ public class BrokerFacade implements Closeable { * path of data * @return read date */ - public NormalizedNode readConfigurationData(final YangInstanceIdentifier path) { + public NormalizedNode readConfigurationData(final YangInstanceIdentifier path) { return readConfigurationData(path, null); } @@ -155,7 +156,7 @@ public class BrokerFacade implements Closeable { * value of with-defaults parameter * @return read date */ - public NormalizedNode readConfigurationData(final YangInstanceIdentifier path, final String withDefa) { + public NormalizedNode readConfigurationData(final YangInstanceIdentifier path, final String withDefa) { try (DOMDataTreeReadTransaction tx = this.domDataBroker.newReadOnlyTransaction()) { return readDataViaTransaction(tx, CONFIGURATION, path, withDefa); } @@ -170,8 +171,7 @@ public class BrokerFacade implements Closeable { * path of data * @return read data */ - public NormalizedNode readConfigurationData(final DOMMountPoint mountPoint, - final YangInstanceIdentifier path) { + public NormalizedNode readConfigurationData(final DOMMountPoint mountPoint, final YangInstanceIdentifier path) { return readConfigurationData(mountPoint, path, null); } @@ -186,7 +186,7 @@ public class BrokerFacade implements Closeable { * value of with-defaults parameter * @return read data */ - public NormalizedNode readConfigurationData(final DOMMountPoint mountPoint, final YangInstanceIdentifier path, + public NormalizedNode readConfigurationData(final DOMMountPoint mountPoint, final YangInstanceIdentifier path, final String withDefa) { final Optional domDataBrokerService = mountPoint.getService(DOMDataBroker.class); if (domDataBrokerService.isPresent()) { @@ -204,7 +204,7 @@ public class BrokerFacade implements Closeable { * path of data * @return read data */ - public NormalizedNode readOperationalData(final YangInstanceIdentifier path) { + public NormalizedNode readOperationalData(final YangInstanceIdentifier path) { try (DOMDataTreeReadTransaction tx = this.domDataBroker.newReadOnlyTransaction()) { return readDataViaTransaction(tx, OPERATIONAL, path); } @@ -219,7 +219,7 @@ public class BrokerFacade implements Closeable { * path of data * @return read data */ - public NormalizedNode readOperationalData(final DOMMountPoint mountPoint, final YangInstanceIdentifier path) { + public NormalizedNode readOperationalData(final DOMMountPoint mountPoint, final YangInstanceIdentifier path) { final Optional domDataBrokerService = mountPoint.getService(DOMDataBroker.class); if (domDataBrokerService.isPresent()) { try (DOMDataTreeReadTransaction tx = domDataBrokerService.get().newReadOnlyTransaction()) { @@ -248,9 +248,8 @@ public class BrokerFacade implements Closeable { * insert * @return wrapper of status and future of PUT */ - public PutResult commitConfigurationDataPut( - final EffectiveModelContext globalSchema, final YangInstanceIdentifier path, - final NormalizedNode payload, final String insert, final String point) { + public PutResult commitConfigurationDataPut(final EffectiveModelContext globalSchema, + final YangInstanceIdentifier path, final NormalizedNode payload, final String insert, final String point) { requireNonNull(globalSchema); requireNonNull(path); requireNonNull(payload); @@ -285,9 +284,8 @@ public class BrokerFacade implements Closeable { * insert * @return wrapper of status and future of PUT */ - public PutResult commitMountPointDataPut( - final DOMMountPoint mountPoint, final YangInstanceIdentifier path, final NormalizedNode payload, - final String insert, final String point) { + public PutResult commitMountPointDataPut(final DOMMountPoint mountPoint, final YangInstanceIdentifier path, + final NormalizedNode payload, final String insert, final String point) { requireNonNull(mountPoint); requireNonNull(path); requireNonNull(payload); @@ -467,7 +465,7 @@ public class BrokerFacade implements Closeable { // POST configuration public FluentFuture commitConfigurationDataPost( final EffectiveModelContext globalSchema, final YangInstanceIdentifier path, - final NormalizedNode payload, final String insert, final String point) { + final NormalizedNode payload, final String insert, final String point) { isMounted.set(false); FluentFuture future = postDataViaTransaction(this.domDataBroker.newReadWriteTransaction(), CONFIGURATION, path, payload, @@ -477,7 +475,7 @@ public class BrokerFacade implements Closeable { } public FluentFuture commitConfigurationDataPost( - final DOMMountPoint mountPoint, final YangInstanceIdentifier path, final NormalizedNode payload, + final DOMMountPoint mountPoint, final YangInstanceIdentifier path, final NormalizedNode payload, final String insert, final String point) { isMounted.set(true); final Optional domDataBrokerService = mountPoint.getService(DOMDataBroker.class); @@ -508,7 +506,7 @@ public class BrokerFacade implements Closeable { // RPC public ListenableFuture invokeRpc(final @NonNull QName type, - final @NonNull NormalizedNode input) { + final @NonNull NormalizedNode input) { if (this.rpcService == null) { throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE); } @@ -535,17 +533,17 @@ public class BrokerFacade implements Closeable { listener.setRegistration(registration); } - private NormalizedNode readDataViaTransaction(final DOMDataTreeReadOperations transaction, + private NormalizedNode readDataViaTransaction(final DOMDataTreeReadOperations transaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path) { return readDataViaTransaction(transaction, datastore, path, null); } - private NormalizedNode readDataViaTransaction(final DOMDataTreeReadOperations transaction, + private NormalizedNode readDataViaTransaction(final DOMDataTreeReadOperations transaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final String withDefa) { LOG.trace("Read {} via Restconf: {}", datastore.name(), path); try { - final Optional> optional = transaction.read(datastore, path).get(); + final Optional optional = transaction.read(datastore, path).get(); return optional.map(normalizedNode -> withDefa == null ? normalizedNode : prepareDataByParamWithDef(normalizedNode, path, withDefa)).orElse(null); } catch (InterruptedException e) { @@ -558,7 +556,7 @@ public class BrokerFacade implements Closeable { } } - private NormalizedNode prepareDataByParamWithDef(final NormalizedNode result, + private NormalizedNode prepareDataByParamWithDef(final NormalizedNode result, final YangInstanceIdentifier path, final String withDefa) { boolean trim; switch (withDefa) { @@ -577,13 +575,13 @@ public class BrokerFacade implements Closeable { final DataSchemaNode baseSchemaNode = baseSchemaCtxTree.findChild(path).orElseThrow().getDataSchemaNode(); if (result instanceof ContainerNode) { final DataContainerNodeBuilder builder = - Builders.containerBuilder((ContainerSchemaNode) baseSchemaNode); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) baseSchemaNode); buildCont(builder, (ContainerNode) result, baseSchemaCtxTree, path, trim); return builder.build(); } final DataContainerNodeBuilder builder = - Builders.mapEntryBuilder((ListSchemaNode) baseSchemaNode); + SchemaAwareBuilders.mapEntryBuilder((ListSchemaNode) baseSchemaNode); buildMapEntryBuilder(builder, (MapEntryNode) result, baseSchemaCtxTree, path, trim, ((ListSchemaNode) baseSchemaNode).getKeyDefinition()); return builder.build(); @@ -593,37 +591,37 @@ public class BrokerFacade implements Closeable { final DataContainerNodeBuilder builder, final MapEntryNode result, final DataSchemaContextTree baseSchemaCtxTree, final YangInstanceIdentifier actualPath, final boolean trim, final List keys) { - for (final DataContainerChild child : result.getValue()) { + for (final DataContainerChild child : result.body()) { final YangInstanceIdentifier path = actualPath.node(child.getIdentifier()); final DataSchemaNode childSchema = baseSchemaCtxTree.findChild(path).orElseThrow().getDataSchemaNode(); if (child instanceof ContainerNode) { final DataContainerNodeBuilder childBuilder = - Builders.containerBuilder((ContainerSchemaNode) childSchema); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) childSchema); buildCont(childBuilder, (ContainerNode) child, baseSchemaCtxTree, path, trim); builder.withChild(childBuilder.build()); } else if (child instanceof MapNode) { - final CollectionNodeBuilder childBuilder = - Builders.mapBuilder((ListSchemaNode) childSchema); + final CollectionNodeBuilder childBuilder = + SchemaAwareBuilders.mapBuilder((ListSchemaNode) childSchema); buildList(childBuilder, (MapNode) child, baseSchemaCtxTree, path, trim, ((ListSchemaNode) childSchema).getKeyDefinition()); builder.withChild(childBuilder.build()); } else if (child instanceof LeafNode) { final Object defaultVal = ((LeafSchemaNode) childSchema).getType().getDefaultValue().orElse(null); - final Object nodeVal = child.getValue(); + final Object nodeVal = child.body(); final NormalizedNodeBuilder> leafBuilder = - Builders.leafBuilder((LeafSchemaNode) childSchema); - if (keys.contains(child.getNodeType())) { - leafBuilder.withValue(child.getValue()); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) childSchema); + if (keys.contains(child.getIdentifier().getNodeType())) { + leafBuilder.withValue(child.body()); builder.withChild(leafBuilder.build()); } else { if (trim) { if (defaultVal == null || !defaultVal.equals(nodeVal)) { - leafBuilder.withValue(child.getValue()); + leafBuilder.withValue(child.body()); builder.withChild(leafBuilder.build()); } } else { if (defaultVal != null && defaultVal.equals(nodeVal)) { - leafBuilder.withValue(child.getValue()); + leafBuilder.withValue(child.body()); builder.withChild(leafBuilder.build()); } } @@ -632,15 +630,15 @@ public class BrokerFacade implements Closeable { } } - private void buildList(final CollectionNodeBuilder builder, final MapNode result, + private void buildList(final CollectionNodeBuilder builder, final MapNode result, final DataSchemaContextTree baseSchemaCtxTree, final YangInstanceIdentifier path, final boolean trim, final List keys) { - for (final MapEntryNode mapEntryNode : result.getValue()) { + for (final MapEntryNode mapEntryNode : result.body()) { final YangInstanceIdentifier actualNode = path.node(mapEntryNode.getIdentifier()); final DataSchemaNode childSchema = baseSchemaCtxTree.findChild(actualNode).orElseThrow() .getDataSchemaNode(); final DataContainerNodeBuilder mapEntryBuilder = - Builders.mapEntryBuilder((ListSchemaNode) childSchema); + SchemaAwareBuilders.mapEntryBuilder((ListSchemaNode) childSchema); buildMapEntryBuilder(mapEntryBuilder, mapEntryNode, baseSchemaCtxTree, actualNode, trim, keys); builder.withChild(mapEntryBuilder.build()); } @@ -649,33 +647,33 @@ public class BrokerFacade implements Closeable { private void buildCont(final DataContainerNodeBuilder builder, final ContainerNode result, final DataSchemaContextTree baseSchemaCtxTree, final YangInstanceIdentifier actualPath, final boolean trim) { - for (final DataContainerChild child : result.getValue()) { + for (final DataContainerChild child : result.body()) { final YangInstanceIdentifier path = actualPath.node(child.getIdentifier()); final DataSchemaNode childSchema = baseSchemaCtxTree.findChild(path).orElseThrow().getDataSchemaNode(); if (child instanceof ContainerNode) { final DataContainerNodeBuilder builderChild = - Builders.containerBuilder((ContainerSchemaNode) childSchema); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) childSchema); buildCont(builderChild, result, baseSchemaCtxTree, actualPath, trim); builder.withChild(builderChild.build()); } else if (child instanceof MapNode) { - final CollectionNodeBuilder childBuilder = - Builders.mapBuilder((ListSchemaNode) childSchema); + final CollectionNodeBuilder childBuilder = + SchemaAwareBuilders.mapBuilder((ListSchemaNode) childSchema); buildList(childBuilder, (MapNode) child, baseSchemaCtxTree, path, trim, ((ListSchemaNode) childSchema).getKeyDefinition()); builder.withChild(childBuilder.build()); } else if (child instanceof LeafNode) { final Object defaultVal = ((LeafSchemaNode) childSchema).getType().getDefaultValue().orElse(null); - final Object nodeVal = child.getValue(); + final Object nodeVal = child.body(); final NormalizedNodeBuilder> leafBuilder = - Builders.leafBuilder((LeafSchemaNode) childSchema); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) childSchema); if (trim) { if (defaultVal == null || !defaultVal.equals(nodeVal)) { - leafBuilder.withValue(child.getValue()); + leafBuilder.withValue(child.body()); builder.withChild(leafBuilder.build()); } } else { if (defaultVal != null && defaultVal.equals(nodeVal)) { - leafBuilder.withValue(child.getValue()); + leafBuilder.withValue(child.body()); builder.withChild(leafBuilder.build()); } } @@ -688,7 +686,7 @@ public class BrokerFacade implements Closeable { */ private FluentFuture postDataViaTransaction( final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, + final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext, final String insert, final String point) { LOG.trace("POST {} via Restconf: {} with payload {}", datastore.name(), path, payload); postData(rwTransaction, datastore, path, payload, schemaContext, insert, point); @@ -700,14 +698,14 @@ public class BrokerFacade implements Closeable { */ private void postDataWithinTransaction( final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, + final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext) { LOG.trace("POST {} within Restconf Patch: {} with payload {}", datastore.name(), path, payload); postData(rwTransaction, datastore, path, payload, schemaContext, null, null); } private void postData(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, + final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext, final String insert, final String point) { if (insert == null) { makeNormalPost(rwTransaction, datastore, path, payload, schemaContext); @@ -719,9 +717,9 @@ public class BrokerFacade implements Closeable { switch (insert) { case "first": if (schemaNode instanceof ListSchemaNode) { - final OrderedMapNode readList = - (OrderedMapNode) this.readConfigurationData(path.getParent().getParent()); - if (readList == null || readList.getValue().isEmpty()) { + final UserMapNode readList = + (UserMapNode) this.readConfigurationData(path.getParent().getParent()); + if (readList == null || readList.isEmpty()) { simplePostPut(rwTransaction, datastore, path, payload, schemaContext); } else { rwTransaction.delete(datastore, path.getParent().getParent()); @@ -730,9 +728,9 @@ public class BrokerFacade implements Closeable { schemaContext); } } else { - final OrderedLeafSetNode readLeafList = - (OrderedLeafSetNode) readConfigurationData(path.getParent()); - if (readLeafList == null || readLeafList.getValue().isEmpty()) { + final UserLeafSetNode readLeafList = + (UserLeafSetNode) readConfigurationData(path.getParent()); + if (readLeafList == null || readLeafList.isEmpty()) { simplePostPut(rwTransaction, datastore, path, payload, schemaContext); } else { rwTransaction.delete(datastore, path.getParent()); @@ -747,9 +745,9 @@ public class BrokerFacade implements Closeable { break; case "before": if (schemaNode instanceof ListSchemaNode) { - final OrderedMapNode readList = - (OrderedMapNode) this.readConfigurationData(path.getParent().getParent()); - if (readList == null || readList.getValue().isEmpty()) { + final UserMapNode readList = + (UserMapNode) this.readConfigurationData(path.getParent().getParent()); + if (readList == null || readList.isEmpty()) { simplePostPut(rwTransaction, datastore, path, payload, schemaContext); } else { insertWithPointListPost(rwTransaction, datastore, path, payload, schemaContext, point, @@ -757,9 +755,9 @@ public class BrokerFacade implements Closeable { true); } } else { - final OrderedLeafSetNode readLeafList = - (OrderedLeafSetNode) readConfigurationData(path.getParent()); - if (readLeafList == null || readLeafList.getValue().isEmpty()) { + final UserLeafSetNode readLeafList = + (UserLeafSetNode) readConfigurationData(path.getParent()); + if (readLeafList == null || readLeafList.isEmpty()) { simplePostPut(rwTransaction, datastore, path, payload, schemaContext); } else { insertWithPointLeafListPost(rwTransaction, datastore, path, payload, schemaContext, point, @@ -769,9 +767,9 @@ public class BrokerFacade implements Closeable { break; case "after": if (schemaNode instanceof ListSchemaNode) { - final OrderedMapNode readList = - (OrderedMapNode) this.readConfigurationData(path.getParent().getParent()); - if (readList == null || readList.getValue().isEmpty()) { + final UserMapNode readList = + (UserMapNode) this.readConfigurationData(path.getParent().getParent()); + if (readList == null || readList.isEmpty()) { simplePostPut(rwTransaction, datastore, path, payload, schemaContext); } else { insertWithPointListPost(rwTransaction, datastore, path, payload, schemaContext, point, @@ -779,9 +777,9 @@ public class BrokerFacade implements Closeable { false); } } else { - final OrderedLeafSetNode readLeafList = - (OrderedLeafSetNode) readConfigurationData(path.getParent()); - if (readLeafList == null || readLeafList.getValue().isEmpty()) { + final UserLeafSetNode readLeafList = + (UserLeafSetNode) readConfigurationData(path.getParent()); + if (readLeafList == null || readLeafList.isEmpty()) { simplePostPut(rwTransaction, datastore, path, payload, schemaContext); } else { insertWithPointLeafListPost(rwTransaction, datastore, path, payload, schemaContext, point, @@ -797,13 +795,13 @@ public class BrokerFacade implements Closeable { } private void insertWithPointLeafListPost(final DOMDataTreeReadWriteTransaction rwTransaction, - final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, - final SchemaContext schemaContext, final String point, final OrderedLeafSetNode readLeafList, + final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, + final SchemaContext schemaContext, final String point, final UserLeafSetNode readLeafList, final boolean before) { rwTransaction.delete(datastore, path.getParent().getParent()); final InstanceIdentifierContext instanceIdentifier = controllerContext.toInstanceIdentifier(point); int lastItemPosition = 0; - for (final LeafSetEntryNode nodeChild : readLeafList.getValue()) { + for (final LeafSetEntryNode nodeChild : readLeafList.body()) { if (nodeChild.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) { break; } @@ -813,10 +811,9 @@ public class BrokerFacade implements Closeable { lastItemPosition++; } int lastInsertedPosition = 0; - final NormalizedNode emptySubtree = - ImmutableNodes.fromInstanceId(schemaContext, path.getParent().getParent()); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path.getParent().getParent()); rwTransaction.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); - for (final LeafSetEntryNode nodeChild : readLeafList.getValue()) { + for (final LeafSetEntryNode nodeChild : readLeafList.body()) { if (lastInsertedPosition == lastItemPosition) { checkItemDoesNotExists(rwTransaction, datastore, path); simplePostPut(rwTransaction, datastore, path, payload, schemaContext); @@ -830,12 +827,12 @@ public class BrokerFacade implements Closeable { private void insertWithPointListPost(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, + final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String point, final MapNode readList, final boolean before) { rwTransaction.delete(datastore, path.getParent().getParent()); final InstanceIdentifierContext instanceIdentifier = controllerContext.toInstanceIdentifier(point); int lastItemPosition = 0; - for (final MapEntryNode mapEntryNode : readList.getValue()) { + for (final MapEntryNode mapEntryNode : readList.body()) { if (mapEntryNode.getIdentifier() .equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) { break; @@ -846,10 +843,9 @@ public class BrokerFacade implements Closeable { lastItemPosition++; } int lastInsertedPosition = 0; - final NormalizedNode emptySubtree = - ImmutableNodes.fromInstanceId(schemaContext, path.getParent().getParent()); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path.getParent().getParent()); rwTransaction.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); - for (final MapEntryNode mapEntryNode : readList.getValue()) { + for (final MapEntryNode mapEntryNode : readList.body()) { if (lastInsertedPosition == lastItemPosition) { checkItemDoesNotExists(rwTransaction, datastore, path); simplePostPut(rwTransaction, datastore, path, payload, schemaContext); @@ -884,19 +880,19 @@ public class BrokerFacade implements Closeable { } private void makeNormalPost(final DOMDataTreeReadWriteTransaction rwTransaction, - final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, + final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { - final Collection> children; + final Collection children; if (payload instanceof MapNode) { - children = ((MapNode) payload).getValue(); + children = ((MapNode) payload).body(); } else if (payload instanceof LeafSetNode) { - children = ((LeafSetNode) payload).getValue(); + children = ((LeafSetNode) payload).body(); } else { simplePostPut(rwTransaction, datastore, path, payload, schemaContext); return; } - final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path); if (children.isEmpty()) { if (isMounted != null && !isMounted.get()) { @@ -917,7 +913,7 @@ public class BrokerFacade implements Closeable { rwTransaction.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); ensureParentsByMerge(datastore, path, rwTransaction, schemaContext); } - for (final NormalizedNode child : children) { + for (final NormalizedNode child : children) { // FIXME: we really want a create(YangInstanceIdentifier, NormalizedNode) method in the transaction, // as that would allow us to skip the existence checks rwTransaction.put(datastore, path.node(child.getIdentifier()), child); @@ -946,7 +942,7 @@ public class BrokerFacade implements Closeable { } private void simplePostPut(final DOMDataTreeReadWriteTransaction rwTransaction, - final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, + final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { checkItemDoesNotExists(rwTransaction, datastore, path); if (isMounted != null && !isMounted.get()) { @@ -1011,7 +1007,7 @@ public class BrokerFacade implements Closeable { */ private FluentFuture putDataViaTransaction( final DOMDataTreeReadWriteTransaction readWriteTransaction, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, + final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext, final String insert, final String point) { LOG.trace("Put {} via Restconf: {} with payload {}", datastore.name(), path, payload); putData(readWriteTransaction, datastore, path, payload, schemaContext, insert, point); @@ -1023,7 +1019,7 @@ public class BrokerFacade implements Closeable { */ private void putDataWithinTransaction( final DOMDataTreeReadWriteTransaction writeTransaction, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, + final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext) { LOG.trace("Put {} within Restconf Patch: {} with payload {}", datastore.name(), path, payload); putData(writeTransaction, datastore, path, payload, schemaContext, null, null); @@ -1031,7 +1027,7 @@ public class BrokerFacade implements Closeable { // FIXME: This is doing correct put for container and list children, not sure if this will work for choice case private void putData(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, + final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext, final String insert, final String point) { if (insert == null) { makePut(rwTransaction, datastore, path, payload, schemaContext); @@ -1043,9 +1039,8 @@ public class BrokerFacade implements Closeable { switch (insert) { case "first": if (schemaNode instanceof ListSchemaNode) { - final OrderedMapNode readList = - (OrderedMapNode) this.readConfigurationData(path.getParent()); - if (readList == null || readList.getValue().isEmpty()) { + final UserMapNode readList = (UserMapNode) this.readConfigurationData(path.getParent()); + if (readList == null || readList.isEmpty()) { simplePut(datastore, path, rwTransaction, schemaContext, payload); } else { rwTransaction.delete(datastore, path.getParent()); @@ -1053,9 +1048,9 @@ public class BrokerFacade implements Closeable { makePut(rwTransaction, datastore, path.getParent(), readList, schemaContext); } } else { - final OrderedLeafSetNode readLeafList = - (OrderedLeafSetNode) readConfigurationData(path.getParent()); - if (readLeafList == null || readLeafList.getValue().isEmpty()) { + final UserLeafSetNode readLeafList = + (UserLeafSetNode) readConfigurationData(path.getParent()); + if (readLeafList == null || readLeafList.isEmpty()) { simplePut(datastore, path, rwTransaction, schemaContext, payload); } else { rwTransaction.delete(datastore, path.getParent()); @@ -1070,18 +1065,17 @@ public class BrokerFacade implements Closeable { break; case "before": if (schemaNode instanceof ListSchemaNode) { - final OrderedMapNode readList = - (OrderedMapNode) this.readConfigurationData(path.getParent()); - if (readList == null || readList.getValue().isEmpty()) { + final UserMapNode readList = (UserMapNode) this.readConfigurationData(path.getParent()); + if (readList == null || readList.isEmpty()) { simplePut(datastore, path, rwTransaction, schemaContext, payload); } else { insertWithPointListPut(rwTransaction, datastore, path, payload, schemaContext, point, readList, true); } } else { - final OrderedLeafSetNode readLeafList = - (OrderedLeafSetNode) readConfigurationData(path.getParent()); - if (readLeafList == null || readLeafList.getValue().isEmpty()) { + final UserLeafSetNode readLeafList = + (UserLeafSetNode) readConfigurationData(path.getParent()); + if (readLeafList == null || readLeafList.isEmpty()) { simplePut(datastore, path, rwTransaction, schemaContext, payload); } else { insertWithPointLeafListPut(rwTransaction, datastore, path, payload, schemaContext, point, @@ -1091,18 +1085,17 @@ public class BrokerFacade implements Closeable { break; case "after": if (schemaNode instanceof ListSchemaNode) { - final OrderedMapNode readList = - (OrderedMapNode) this.readConfigurationData(path.getParent()); - if (readList == null || readList.getValue().isEmpty()) { + final UserMapNode readList = (UserMapNode) this.readConfigurationData(path.getParent()); + if (readList == null || readList.isEmpty()) { simplePut(datastore, path, rwTransaction, schemaContext, payload); } else { insertWithPointListPut(rwTransaction, datastore, path, payload, schemaContext, point, readList, false); } } else { - final OrderedLeafSetNode readLeafList = - (OrderedLeafSetNode) readConfigurationData(path.getParent()); - if (readLeafList == null || readLeafList.getValue().isEmpty()) { + final UserLeafSetNode readLeafList = + (UserLeafSetNode) readConfigurationData(path.getParent()); + if (readLeafList == null || readLeafList.isEmpty()) { simplePut(datastore, path, rwTransaction, schemaContext, payload); } else { insertWithPointLeafListPut(rwTransaction, datastore, path, payload, schemaContext, point, @@ -1118,13 +1111,13 @@ public class BrokerFacade implements Closeable { } private void insertWithPointLeafListPut(final DOMDataTreeWriteTransaction tx, - final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, - final SchemaContext schemaContext, final String point, final OrderedLeafSetNode readLeafList, + final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, + final SchemaContext schemaContext, final String point, final UserLeafSetNode readLeafList, final boolean before) { tx.delete(datastore, path.getParent()); final InstanceIdentifierContext instanceIdentifier = controllerContext.toInstanceIdentifier(point); int index1 = 0; - for (final LeafSetEntryNode nodeChild : readLeafList.getValue()) { + for (final LeafSetEntryNode nodeChild : readLeafList.body()) { if (nodeChild.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) { break; } @@ -1134,10 +1127,9 @@ public class BrokerFacade implements Closeable { index1++; } int index2 = 0; - final NormalizedNode emptySubtree = - ImmutableNodes.fromInstanceId(schemaContext, path.getParent()); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path.getParent()); tx.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); - for (final LeafSetEntryNode nodeChild : readLeafList.getValue()) { + for (final LeafSetEntryNode nodeChild : readLeafList.body()) { if (index2 == index1) { simplePut(datastore, path, tx, schemaContext, payload); } @@ -1148,12 +1140,12 @@ public class BrokerFacade implements Closeable { } private void insertWithPointListPut(final DOMDataTreeWriteTransaction tx, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, - final String point, final OrderedMapNode readList, final boolean before) { + final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, + final String point, final UserMapNode readList, final boolean before) { tx.delete(datastore, path.getParent()); final InstanceIdentifierContext instanceIdentifier = controllerContext.toInstanceIdentifier(point); int index1 = 0; - for (final MapEntryNode mapEntryNode : readList.getValue()) { + for (final MapEntryNode mapEntryNode : readList.body()) { if (mapEntryNode.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) { break; } @@ -1163,10 +1155,9 @@ public class BrokerFacade implements Closeable { index1++; } int index2 = 0; - final NormalizedNode emptySubtree = - ImmutableNodes.fromInstanceId(schemaContext, path.getParent()); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path.getParent()); tx.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); - for (final MapEntryNode mapEntryNode : readList.getValue()) { + for (final MapEntryNode mapEntryNode : readList.body()) { if (index2 == index1) { simplePut(datastore, path, tx, schemaContext, payload); } @@ -1177,14 +1168,14 @@ public class BrokerFacade implements Closeable { } private void makePut(final DOMDataTreeWriteTransaction tx, final LogicalDatastoreType datastore, - final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { + final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { if (payload instanceof MapNode) { - final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path); if (isMounted != null && !isMounted.get()) { tx.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); ensureParentsByMerge(datastore, path, tx, schemaContext); } - for (final MapEntryNode child : ((MapNode) payload).getValue()) { + for (final MapEntryNode child : ((MapNode) payload).body()) { final YangInstanceIdentifier childPath = path.node(child.getIdentifier()); tx.put(datastore, childPath, child); } @@ -1194,8 +1185,7 @@ public class BrokerFacade implements Closeable { } private void simplePut(final LogicalDatastoreType datastore, final YangInstanceIdentifier path, - final DOMDataTreeWriteTransaction tx, final SchemaContext schemaContext, - final NormalizedNode payload) { + final DOMDataTreeWriteTransaction tx, final SchemaContext schemaContext, final NormalizedNode payload) { if (isMounted != null && !isMounted.get()) { ensureParentsByMerge(datastore, path, tx, schemaContext); } @@ -1218,7 +1208,7 @@ public class BrokerFacade implements Closeable { } private static void mergeDataWithinTransaction(final DOMDataTreeWriteTransaction tx, - final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, + final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { LOG.trace("Merge {} within Restconf Patch: {} with payload {}", datastore.name(), path, payload); ensureParentsByMerge(datastore, path, tx, schemaContext); @@ -1264,10 +1254,8 @@ public class BrokerFacade implements Closeable { } checkArgument(rootNormalizedPath != null, "Empty path received"); - - final NormalizedNode parentStructure = ImmutableNodes.fromInstanceId(schemaContext, - YangInstanceIdentifier.create(normalizedPathWithoutChildArgs)); - tx.merge(store, rootNormalizedPath, parentStructure); + tx.merge(store, rootNormalizedPath, ImmutableNodes.fromInstanceId(schemaContext, + YangInstanceIdentifier.create(normalizedPathWithoutChildArgs))); } private static RestconfDocumentedException dataBrokerUnavailable(final YangInstanceIdentifier path) { diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java index f2b3d64ad8..bf0f2ebbb0 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java @@ -18,7 +18,6 @@ import com.google.common.collect.Iterables; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.Closeable; import java.io.UnsupportedEncodingException; -import java.net.URI; import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -52,6 +51,7 @@ import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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.InstanceIdentifierBuilder; @@ -72,11 +72,10 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -231,32 +230,26 @@ public final class ControllerContext implements EffectiveModelContextListener, C return this.globalSchema.findModules(moduleName).stream().findFirst().orElse(null); } - public Module findModuleByName(final DOMMountPoint mountPoint, final String moduleName) { + public static Module findModuleByName(final DOMMountPoint mountPoint, final String moduleName) { checkArgument(moduleName != null && mountPoint != null); - final SchemaContext mountPointSchema = getModelContext(mountPoint); - if (mountPointSchema == null) { - return null; - } - - return mountPointSchema.findModules(moduleName).stream().findFirst().orElse(null); + final EffectiveModelContext mountPointSchema = getModelContext(mountPoint); + return mountPointSchema == null ? null + : mountPointSchema.findModules(moduleName).stream().findFirst().orElse(null); } - public Module findModuleByNamespace(final URI namespace) { + public Module findModuleByNamespace(final XMLNamespace namespace) { checkPreconditions(); checkArgument(namespace != null); return this.globalSchema.findModules(namespace).stream().findFirst().orElse(null); } - public Module findModuleByNamespace(final DOMMountPoint mountPoint, final URI namespace) { + public static Module findModuleByNamespace(final DOMMountPoint mountPoint, final XMLNamespace namespace) { checkArgument(namespace != null && mountPoint != null); - final SchemaContext mountPointSchema = getModelContext(mountPoint); - if (mountPointSchema == null) { - return null; - } - - return mountPointSchema.findModules(namespace).stream().findFirst().orElse(null); + final EffectiveModelContext mountPointSchema = getModelContext(mountPoint); + return mountPointSchema == null ? null + : mountPointSchema.findModules(namespace).stream().findFirst().orElse(null); } public Module findModuleByNameAndRevision(final String name, final Revision revision) { @@ -271,7 +264,7 @@ public final class ControllerContext implements EffectiveModelContextListener, C checkPreconditions(); checkArgument(name != null && revision != null && mountPoint != null); - final SchemaContext schemaContext = getModelContext(mountPoint); + final EffectiveModelContext schemaContext = getModelContext(mountPoint); return schemaContext == null ? null : schemaContext.findModule(name, revision).orElse(null); } @@ -302,7 +295,7 @@ public final class ControllerContext implements EffectiveModelContextListener, C final StringBuilder builder = new StringBuilder(); final PathArgument head = elements.iterator().next(); final QName startQName = head.getNodeType(); - final SchemaContext schemaContext; + final EffectiveModelContext schemaContext; if (mount != null) { schemaContext = getModelContext(mount); } else { @@ -327,24 +320,24 @@ public final class ControllerContext implements EffectiveModelContextListener, C return builder.toString(); } - public String findModuleNameByNamespace(final URI namespace) { + public String findModuleNameByNamespace(final XMLNamespace namespace) { checkPreconditions(); final Module module = this.findModuleByNamespace(namespace); return module == null ? null : module.getName(); } - public String findModuleNameByNamespace(final DOMMountPoint mountPoint, final URI namespace) { + public String findModuleNameByNamespace(final DOMMountPoint mountPoint, final XMLNamespace namespace) { final Module module = this.findModuleByNamespace(mountPoint, namespace); return module == null ? null : module.getName(); } - public URI findNamespaceByModuleName(final String moduleName) { + public XMLNamespace findNamespaceByModuleName(final String moduleName) { final Module module = this.findModuleByName(moduleName); return module == null ? null : module.getNamespace(); } - public URI findNamespaceByModuleName(final DOMMountPoint mountPoint, final String moduleName) { + public XMLNamespace findNamespaceByModuleName(final DOMMountPoint mountPoint, final String moduleName) { final Module module = this.findModuleByName(mountPoint, moduleName); return module == null ? null : module.getNamespace(); } @@ -352,7 +345,7 @@ public final class ControllerContext implements EffectiveModelContextListener, C public Collection getAllModules(final DOMMountPoint mountPoint) { checkPreconditions(); - final SchemaContext schemaContext = mountPoint == null ? null : getModelContext(mountPoint); + final EffectiveModelContext schemaContext = mountPoint == null ? null : getModelContext(mountPoint); return schemaContext == null ? null : schemaContext.getModules(); } @@ -361,35 +354,24 @@ public final class ControllerContext implements EffectiveModelContextListener, C return this.globalSchema.getModules(); } - private static CharSequence toRestconfIdentifier(final SchemaContext context, final QName qname) { + private static String toRestconfIdentifier(final EffectiveModelContext context, final QName qname) { final Module schema = context.findModule(qname.getModule()).orElse(null); return schema == null ? null : schema.getName() + ':' + qname.getLocalName(); } - public CharSequence toRestconfIdentifier(final QName qname, final DOMMountPoint mount) { - final SchemaContext schema; - if (mount != null) { - schema = getModelContext(mount); - } else { - checkPreconditions(); - schema = this.globalSchema; - } - - return toRestconfIdentifier(schema, qname); + public String toRestconfIdentifier(final QName qname, final DOMMountPoint mountPoint) { + return mountPoint != null ? toRestconfIdentifier(getModelContext(mountPoint), qname) + : toRestconfIdentifier(qname); } - public CharSequence toRestconfIdentifier(final QName qname) { + public String toRestconfIdentifier(final QName qname) { checkPreconditions(); return toRestconfIdentifier(this.globalSchema, qname); } - public CharSequence toRestconfIdentifier(final DOMMountPoint mountPoint, final QName qname) { - if (mountPoint == null) { - return null; - } - - return toRestconfIdentifier(getModelContext(mountPoint), qname); + public static String toRestconfIdentifier(final DOMMountPoint mountPoint, final QName qname) { + return mountPoint == null ? null : toRestconfIdentifier(getModelContext(mountPoint), qname); } public Module getRestconfModule() { @@ -743,7 +725,7 @@ public final class ControllerContext implements EffectiveModelContextListener, C } public static DataSchemaNode findInstanceDataChildByNameAndNamespace(final DataNodeContainer container, - final String name, final URI namespace) { + final String name, final XMLNamespace namespace) { requireNonNull(namespace); final Iterable result = Iterables.filter(findInstanceDataChildrenByName(container, name), @@ -792,12 +774,13 @@ public final class ControllerContext implements EffectiveModelContextListener, C final DOMMountPoint mountPoint) { checkArgument(node instanceof LeafSchemaNode); - final SchemaContext schemaContext = mountPoint == null ? this.globalSchema : getModelContext(mountPoint); + final EffectiveModelContext schemaContext = mountPoint == null ? globalSchema : getModelContext(mountPoint); final String urlDecoded = urlPathArgDecode(requireNonNull(uriValue)); TypeDefinition typedef = ((LeafSchemaNode) node).getType(); final TypeDefinition baseType = RestUtil.resolveBaseTypeFrom(typedef); if (baseType instanceof LeafrefTypeDefinition) { - typedef = SchemaContextUtil.getBaseTypeForLeafRef((LeafrefTypeDefinition) baseType, schemaContext, node); + typedef = SchemaInferenceStack.ofInstantiatedPath(schemaContext, node.getPath()) + .resolveLeafref((LeafrefTypeDefinition) baseType); } final IllegalArgumentCodec codec = RestCodec.from(typedef, mountPoint, this); Object decoded = codec.deserialize(urlDecoded); @@ -846,7 +829,7 @@ public final class ControllerContext implements EffectiveModelContextListener, C return str.substring(idx + 1); } - private QName toQName(final SchemaContext schemaContext, final String name, + private QName toQName(final EffectiveModelContext schemaContext, final String name, final Optional revisionDate) { checkPreconditions(); final String module = toModuleName(name); @@ -855,7 +838,7 @@ public final class ControllerContext implements EffectiveModelContextListener, C return m == null ? null : QName.create(m.getQNameModule(), node); } - private QName toQName(final SchemaContext schemaContext, final String name) { + private QName toQName(final EffectiveModelContext schemaContext, final String name) { checkPreconditions(); final String module = toModuleName(name); final String node = toNodeName(name); diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/DataNormalizationOperation.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/DataNormalizationOperation.java index 19ccfe24e3..0499e21d60 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/DataNormalizationOperation.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/DataNormalizationOperation.java @@ -18,6 +18,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.Identifiable; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -92,7 +93,7 @@ abstract class DataNormalizationOperation implements Ide private static final class LeafListEntryNormalization extends SimpleTypeNormalization { LeafListEntryNormalization(final LeafListSchemaNode potential) { - super(new NodeWithValue(potential.getQName(), null)); + super(new NodeWithValue<>(potential.getQName(), Empty.getInstance())); } } @@ -368,7 +369,7 @@ abstract class DataNormalizationOperation implements Ide } private static @Nullable DataSchemaNode findChildSchemaNode(final DataNodeContainer parent, final QName child) { - final DataSchemaNode potential = parent.getDataChildByName(child); + final DataSchemaNode potential = parent.dataChildByName(child); return potential != null ? potential : findChoice(parent, child); } @@ -396,20 +397,12 @@ abstract class DataNormalizationOperation implements Ide justification = "https://github.com/spotbugs/spotbugs/issues/811") private static DataNormalizationOperation fromAugmentation(final DataNodeContainer parent, final AugmentationTarget parentAug, final DataSchemaNode child) { - AugmentationSchemaNode augmentation = null; for (final AugmentationSchemaNode aug : parentAug.getAvailableAugmentations()) { - final DataSchemaNode potential = aug.getDataChildByName(child.getQName()); - if (potential != null) { - augmentation = aug; - break; + if (aug.dataChildByName(child.getQName()) != null) { + return new AugmentationNormalization(aug, parent); } - - } - if (augmentation != null) { - return new AugmentationNormalization(augmentation, parent); - } else { - return fromDataSchemaNode(child); } + return fromDataSchemaNode(child); } static DataNormalizationOperation fromDataSchemaNode(final DataSchemaNode potential) { diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/NormalizedDataPrunner.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/NormalizedDataPrunner.java index f5f03af8ad..975da60b3d 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/NormalizedDataPrunner.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/NormalizedDataPrunner.java @@ -7,11 +7,9 @@ */ package org.opendaylight.netconf.sal.restconf.impl; -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; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; @@ -24,23 +22,22 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.MixinNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; 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.DataContainerNodeBuilder; class NormalizedDataPrunner { - public DataContainerChild pruneDataAtDepth(final DataContainerChild node, final Integer depth) { + public DataContainerChild pruneDataAtDepth(final DataContainerChild node, final Integer depth) { if (depth == null) { return node; } - if (node instanceof LeafNode || node instanceof LeafSetNode || node instanceof AnyxmlNode - || node instanceof OrderedLeafSetNode) { + if (node instanceof LeafNode || node instanceof LeafSetNode || node instanceof AnyxmlNode) { return node; } else if (node instanceof MixinNode) { return processMixinNode(node, depth); @@ -50,12 +47,12 @@ class NormalizedDataPrunner { throw new IllegalStateException("Unexpected Mixin node occured why pruning data to requested depth"); } - private DataContainerChild processMixinNode(final NormalizedNode node, final Integer depth) { + private DataContainerChild processMixinNode(final NormalizedNode node, final Integer depth) { if (node instanceof AugmentationNode) { return processAugmentationNode(node, depth); } else if (node instanceof ChoiceNode) { return processChoiceNode(node, depth); - } else if (node instanceof OrderedMapNode) { + } else if (node instanceof UserMapNode) { return processOrderedMapNode(node, depth); } else if (node instanceof MapNode) { return processMapNode(node, depth); @@ -65,57 +62,51 @@ class NormalizedDataPrunner { throw new IllegalStateException("Unexpected Mixin node occured why pruning data to requested depth"); } - private DataContainerChild processContainerNode(final NormalizedNode node, final Integer depth) { + private DataContainerChild processContainerNode(final NormalizedNode node, final Integer depth) { final ContainerNode containerNode = (ContainerNode) node; DataContainerNodeBuilder newContainerBuilder = Builders.containerBuilder() .withNodeIdentifier(containerNode.getIdentifier()); if (depth > 1) { - processDataContainerChild((DataContainerNode) node, depth, newContainerBuilder); + processDataContainerChild((DataContainerNode) node, depth, newContainerBuilder); } return newContainerBuilder.build(); } - private DataContainerChild processChoiceNode(final NormalizedNode node, final Integer depth) { + private DataContainerChild processChoiceNode(final NormalizedNode node, final Integer depth) { final ChoiceNode choiceNode = (ChoiceNode) node; DataContainerNodeBuilder newChoiceBuilder = Builders.choiceBuilder() .withNodeIdentifier(choiceNode.getIdentifier()); - processDataContainerChild((DataContainerNode) node, depth, newChoiceBuilder); + processDataContainerChild((DataContainerNode) node, depth, newChoiceBuilder); return newChoiceBuilder.build(); } - private DataContainerChild processAugmentationNode(final NormalizedNode node, final Integer depth) { + private DataContainerChild processAugmentationNode(final NormalizedNode node, final Integer depth) { final AugmentationNode augmentationNode = (AugmentationNode) node; - DataContainerNodeBuilder> newAugmentationBuilder = + DataContainerNodeBuilder newAugmentationBuilder = Builders.augmentationBuilder().withNodeIdentifier(augmentationNode.getIdentifier()); - processDataContainerChild((DataContainerNode) node, depth, newAugmentationBuilder); + processDataContainerChild((DataContainerNode) node, depth, newAugmentationBuilder); return newAugmentationBuilder.build(); } - private void processDataContainerChild( - final DataContainerNode node, - final Integer depth, - final DataContainerNodeBuilder> newBuilder) { - - for (DataContainerChild nodeValue : node.getValue()) { + private void processDataContainerChild(final DataContainerNode node, final Integer depth, + final DataContainerNodeBuilder newBuilder) { + for (DataContainerChild nodeValue : node.body()) { newBuilder.withChild(pruneDataAtDepth(nodeValue, depth - 1)); } - } - private DataContainerChild processUnkeyedListNode(final NormalizedNode node, final Integer depth) { + private DataContainerChild processUnkeyedListNode(final NormalizedNode node, final Integer depth) { CollectionNodeBuilder newUnkeyedListBuilder = Builders .unkeyedListBuilder(); if (depth > 1) { - for (UnkeyedListEntryNode oldUnkeyedListEntry : ((UnkeyedListNode) node).getValue()) { + for (UnkeyedListEntryNode oldUnkeyedListEntry : ((UnkeyedListNode) node).body()) { DataContainerNodeBuilder newUnkeyedListEntry = Builders .unkeyedListEntryBuilder().withNodeIdentifier(oldUnkeyedListEntry.getIdentifier()); - for (DataContainerChild oldUnkeyedListEntryValue : oldUnkeyedListEntry - .getValue()) { + for (DataContainerChild oldUnkeyedListEntryValue : oldUnkeyedListEntry.body()) { newUnkeyedListEntry.withChild(pruneDataAtDepth(oldUnkeyedListEntryValue, depth - 1)); } newUnkeyedListBuilder.addChild(newUnkeyedListEntry.build()); @@ -124,25 +115,25 @@ class NormalizedDataPrunner { return newUnkeyedListBuilder.build(); } - private DataContainerChild processOrderedMapNode(final NormalizedNode node, final Integer depth) { - CollectionNodeBuilder newOrderedMapNodeBuilder = Builders.orderedMapBuilder(); + private DataContainerChild processOrderedMapNode(final NormalizedNode node, final Integer depth) { + CollectionNodeBuilder newOrderedMapNodeBuilder = Builders.orderedMapBuilder(); processMapEntries(node, depth, newOrderedMapNodeBuilder); return newOrderedMapNodeBuilder.build(); } - private DataContainerChild processMapNode(final NormalizedNode node, final Integer depth) { - CollectionNodeBuilder newMapNodeBuilder = Builders.mapBuilder(); + private DataContainerChild processMapNode(final NormalizedNode node, final Integer depth) { + CollectionNodeBuilder newMapNodeBuilder = Builders.mapBuilder(); processMapEntries(node, depth, newMapNodeBuilder); return newMapNodeBuilder.build(); } - private void processMapEntries(final NormalizedNode node, final Integer depth, + private void processMapEntries(final NormalizedNode node, final Integer depth, final CollectionNodeBuilder newOrderedMapNodeBuilder) { if (depth > 1) { - for (MapEntryNode oldMapEntryNode : ((MapNode) node).getValue()) { + for (MapEntryNode oldMapEntryNode : ((MapNode) node).body()) { DataContainerNodeBuilder newMapEntryNodeBuilder = Builders.mapEntryBuilder().withNodeIdentifier(oldMapEntryNode.getIdentifier()); - for (DataContainerChild mapEntryNodeValue : oldMapEntryNode.getValue()) { + for (DataContainerChild mapEntryNodeValue : oldMapEntryNode.body()) { newMapEntryNodeBuilder.withChild(pruneDataAtDepth(mapEntryNodeValue, depth - 1)); } newOrderedMapNodeBuilder.withChild(newMapEntryNodeBuilder.build()); diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java index b42d45993b..0f9dfec67d 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java @@ -8,7 +8,6 @@ package org.opendaylight.netconf.sal.restconf.impl; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -23,6 +22,7 @@ import org.opendaylight.restconf.common.util.IdentityValuesDTO.Predicate; import org.opendaylight.restconf.common.util.RestUtil; import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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; @@ -255,7 +255,7 @@ public final class RestCodec { final List identities = data.getValuesWithNamespaces(); for (int i = 0; i < identities.size(); i++) { final IdentityValue identityValue = identities.get(i); - URI validNamespace = resolveValidNamespace(identityValue.getNamespace(), this.mountPoint, + XMLNamespace validNamespace = resolveValidNamespace(identityValue.getNamespace(), this.mountPoint, controllerContext); final DataSchemaNode node = ControllerContext.findInstanceDataChildByNameAndNamespace( parentContainer, identityValue.getValue(), validNamespace); @@ -337,7 +337,7 @@ public final class RestCodec { justification = "https://github.com/spotbugs/spotbugs/issues/811") private static Module getModuleByNamespace(final String namespace, final DOMMountPoint mountPoint, final ControllerContext controllerContext) { - final URI validNamespace = resolveValidNamespace(namespace, mountPoint, controllerContext); + final XMLNamespace validNamespace = resolveValidNamespace(namespace, mountPoint, controllerContext); Module module = null; if (mountPoint != null) { @@ -352,16 +352,16 @@ public final class RestCodec { return module; } - private static URI resolveValidNamespace(final String namespace, final DOMMountPoint mountPoint, + private static XMLNamespace resolveValidNamespace(final String namespace, final DOMMountPoint mountPoint, final ControllerContext controllerContext) { - URI validNamespace; + XMLNamespace validNamespace; if (mountPoint != null) { validNamespace = controllerContext.findNamespaceByModuleName(mountPoint, namespace); } else { validNamespace = controllerContext.findNamespaceByModuleName(namespace); } if (validNamespace == null) { - validNamespace = URI.create(namespace); + validNamespace = XMLNamespace.of(namespace); } return validNamespace; diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java index 57b7d0d94f..6d7333a493 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java @@ -86,6 +86,7 @@ import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; @@ -101,13 +102,15 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.ListNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeBuilder; import org.opendaylight.yangtools.yang.data.api.schema.tree.ModifiedNodeDoesNotExistException; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; 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.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; @@ -143,7 +146,8 @@ public final class RestconfImpl implements RestconfService { private static final LogicalDatastoreType DEFAULT_DATASTORE = LogicalDatastoreType.CONFIGURATION; - private static final URI NAMESPACE_EVENT_SUBSCRIPTION_AUGMENT = URI.create("urn:sal:restconf:event:subscription"); + private static final XMLNamespace NAMESPACE_EVENT_SUBSCRIPTION_AUGMENT = + XMLNamespace.of("urn:sal:restconf:event:subscription"); private static final String DATASTORE_PARAM_NAME = "datastore"; @@ -155,7 +159,7 @@ public final class RestconfImpl implements RestconfService { private static final String NETCONF_BASE_PAYLOAD_NAME = "data"; - private static final QName NETCONF_BASE_QNAME = QName.create(QNameModule.create(URI.create(NETCONF_BASE)), + private static final QName NETCONF_BASE_QNAME = QName.create(QNameModule.create(XMLNamespace.of(NETCONF_BASE)), NETCONF_BASE_PAYLOAD_NAME).intern(); private static final QNameModule SAL_REMOTE_AUGMENT = QNameModule.create(NAMESPACE_EVENT_SUBSCRIPTION_AUGMENT, @@ -215,7 +219,7 @@ public final class RestconfImpl implements RestconfService { checkState(modulesSchemaNode instanceof ContainerSchemaNode); final DataContainerNodeBuilder moduleContainerBuilder = - Builders.containerBuilder((ContainerSchemaNode) modulesSchemaNode); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) modulesSchemaNode); moduleContainerBuilder.withChild(allModuleMap); return new NormalizedNodeContext(new InstanceIdentifierContext<>(null, modulesSchemaNode, null, schemaContext), @@ -246,7 +250,7 @@ public final class RestconfImpl implements RestconfService { checkState(modulesSchemaNode instanceof ContainerSchemaNode); final DataContainerNodeBuilder moduleContainerBuilder = - Builders.containerBuilder((ContainerSchemaNode) modulesSchemaNode); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) modulesSchemaNode); moduleContainerBuilder.withChild(mountPointModulesMap); return new NormalizedNodeContext( @@ -303,8 +307,8 @@ public final class RestconfImpl implements RestconfService { .getRestconfModuleRestConfSchemaNode(restconfModule, Draft02.RestConfModule.STREAM_LIST_SCHEMA_NODE); checkState(streamSchemaNode instanceof ListSchemaNode); - final CollectionNodeBuilder listStreamsBuilder = - Builders.mapBuilder((ListSchemaNode) streamSchemaNode); + final CollectionNodeBuilder listStreamsBuilder = + SchemaAwareBuilders.mapBuilder((ListSchemaNode) streamSchemaNode); for (final String streamName : availableStreams) { listStreamsBuilder.withChild(toStreamEntryNode(streamName, streamSchemaNode)); @@ -315,7 +319,7 @@ public final class RestconfImpl implements RestconfService { checkState(streamsContainerSchemaNode instanceof ContainerSchemaNode); final DataContainerNodeBuilder streamsContainerBuilder = - Builders.containerBuilder((ContainerSchemaNode) streamsContainerSchemaNode); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) streamsContainerSchemaNode); streamsContainerBuilder.withChild(listStreamsBuilder.build()); return new NormalizedNodeContext( @@ -399,7 +403,7 @@ public final class RestconfImpl implements RestconfService { final SchemaNode schema = payload.getInstanceIdentifierContext().getSchemaNode(); final ListenableFuture response; final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint(); - final NormalizedNode input = nonnullInput(schema, payload.getData()); + final NormalizedNode input = nonnullInput(schema, payload.getData()); final EffectiveModelContext schemaContext; if (mountPoint != null) { @@ -411,7 +415,7 @@ public final class RestconfImpl implements RestconfService { schemaContext = modelContext(mountPoint); response = mountRpcServices.get().invokeRpc(schema.getQName(), input); } else { - final URI namespace = schema.getQName().getNamespace(); + final XMLNamespace namespace = schema.getQName().getNamespace(); if (namespace.toString().equals(SAL_REMOTE_NAMESPACE)) { if (identifier.contains(CREATE_DATA_SUBSCR)) { response = invokeSalRemoteRpcSubscribeRPC(payload); @@ -431,7 +435,7 @@ public final class RestconfImpl implements RestconfService { final DOMRpcResult result = checkRpcResponse(response); RpcDefinition resultNodeSchema = null; - final NormalizedNode resultData; + final NormalizedNode resultData; if (result != null && result.getResult() != null) { resultData = result.getResult(); resultNodeSchema = (RpcDefinition) payload.getInstanceIdentifierContext().getSchemaNode(); @@ -439,7 +443,7 @@ public final class RestconfImpl implements RestconfService { resultData = null; } - if (resultData != null && ((ContainerNode) resultData).getValue().isEmpty()) { + if (resultData != null && ((ContainerNode) resultData).isEmpty()) { throw new WebApplicationException(Response.Status.NO_CONTENT); } else { return new NormalizedNodeContext( @@ -506,8 +510,8 @@ public final class RestconfImpl implements RestconfService { response = this.broker.invokeRpc(rpc.getQName(), input); } - final NormalizedNode result = checkRpcResponse(response).getResult(); - if (result != null && ((ContainerNode) result).getValue().isEmpty()) { + final NormalizedNode result = checkRpcResponse(response).getResult(); + if (result != null && ((ContainerNode) result).isEmpty()) { throw new WebApplicationException(Response.Status.NO_CONTENT); } @@ -522,7 +526,7 @@ public final class RestconfImpl implements RestconfService { QueryParametersParser.parseWriterParameters(uriInfo)); } - private static @NonNull NormalizedNode nonnullInput(final SchemaNode rpc, final NormalizedNode input) { + private static @NonNull NormalizedNode nonnullInput(final SchemaNode rpc, final NormalizedNode input) { return input != null ? input : defaultInput(rpc.getQName()); } @@ -585,10 +589,9 @@ public final class RestconfImpl implements RestconfService { private ListenableFuture invokeSalRemoteRpcSubscribeRPC(final NormalizedNodeContext payload) { final ContainerNode value = (ContainerNode) payload.getData(); final QName rpcQName = payload.getInstanceIdentifierContext().getSchemaNode().getQName(); - final Optional> path = value.getChild( - new NodeIdentifier(QName.create(payload.getInstanceIdentifierContext().getSchemaNode().getQName(), - "path"))); - final Object pathValue = path.isPresent() ? path.get().getValue() : null; + final Optional path = + value.findChildByArg(new NodeIdentifier(QName.create(rpcQName, "path"))); + final Object pathValue = path.isPresent() ? path.get().body() : null; if (!(pathValue instanceof YangInstanceIdentifier)) { LOG.debug("Instance identifier {} was not normalized correctly", rpcQName); @@ -690,7 +693,7 @@ public final class RestconfImpl implements RestconfService { final InstanceIdentifierContext iiWithData = this.controllerContext.toInstanceIdentifier(identifier); final DOMMountPoint mountPoint = iiWithData.getMountPoint(); - NormalizedNode data = null; + NormalizedNode data = null; final YangInstanceIdentifier normalizedII = iiWithData.getInstanceIdentifier(); if (mountPoint != null) { data = this.broker.readConfigurationData(mountPoint, normalizedII, withDefa); @@ -708,7 +711,7 @@ public final class RestconfImpl implements RestconfService { public NormalizedNodeContext readOperationalData(final String identifier, final UriInfo uriInfo) { final InstanceIdentifierContext iiWithData = this.controllerContext.toInstanceIdentifier(identifier); final DOMMountPoint mountPoint = iiWithData.getMountPoint(); - NormalizedNode data = null; + NormalizedNode data = null; final YangInstanceIdentifier normalizedII = iiWithData.getInstanceIdentifier(); if (mountPoint != null) { data = this.broker.readOperationalData(mountPoint, normalizedII); @@ -835,12 +838,12 @@ public final class RestconfImpl implements RestconfService { private static void validateTopLevelNodeName(final NormalizedNodeContext node, final YangInstanceIdentifier identifier) { - final String payloadName = node.getData().getNodeType().getLocalName(); + final String payloadName = node.getData().getIdentifier().getNodeType().getLocalName(); // no arguments if (identifier.isEmpty()) { // no "data" payload - if (!node.getData().getNodeType().equals(NETCONF_BASE_QNAME)) { + if (!node.getData().getIdentifier().getNodeType().equals(NETCONF_BASE_QNAME)) { throw new RestconfDocumentedException("Instance identifier has to contain at least one path argument", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE); } @@ -868,7 +871,7 @@ public final class RestconfImpl implements RestconfService { final InstanceIdentifierContext iiWithData = payload.getInstanceIdentifierContext(); final PathArgument lastPathArgument = iiWithData.getInstanceIdentifier().getLastPathArgument(); final SchemaNode schemaNode = iiWithData.getSchemaNode(); - final NormalizedNode data = payload.getData(); + final NormalizedNode data = payload.getData(); if (schemaNode instanceof ListSchemaNode) { final List keyDefinitions = ((ListSchemaNode) schemaNode).getKeyDefinition(); if (lastPathArgument instanceof NodeIdentifierWithPredicates && data instanceof MapEntryNode) { @@ -1319,21 +1322,20 @@ public final class RestconfImpl implements RestconfService { */ private static T parseEnumTypeParameter(final ContainerNode value, final Class classDescriptor, final String paramName) { - final Optional> optAugNode = value.getChild( - SAL_REMOTE_AUG_IDENTIFIER); + final Optional optAugNode = value.findChildByArg(SAL_REMOTE_AUG_IDENTIFIER); if (optAugNode.isEmpty()) { return null; } - final DataContainerChild augNode = optAugNode.get(); + final DataContainerChild augNode = optAugNode.get(); if (!(augNode instanceof AugmentationNode)) { return null; } - final Optional> enumNode = ((AugmentationNode) augNode).getChild( + final Optional enumNode = ((AugmentationNode) augNode).findChildByArg( new NodeIdentifier(QName.create(SAL_REMOTE_AUGMENT, paramName))); if (enumNode.isEmpty()) { return null; } - final Object rawValue = enumNode.get().getValue(); + final Object rawValue = enumNode.get().body(); if (!(rawValue instanceof String)) { return null; } @@ -1386,8 +1388,8 @@ public final class RestconfImpl implements RestconfService { .getRestconfModuleRestConfSchemaNode(restconfModule, Draft02.RestConfModule.MODULE_LIST_SCHEMA_NODE); checkState(moduleSchemaNode instanceof ListSchemaNode); - final CollectionNodeBuilder listModuleBuilder = - Builders.mapBuilder((ListSchemaNode) moduleSchemaNode); + final CollectionNodeBuilder listModuleBuilder = + SchemaAwareBuilders.mapBuilder((ListSchemaNode) moduleSchemaNode); for (final Module module : modules) { listModuleBuilder.withChild(toModuleEntryNode(module, moduleSchemaNode)); @@ -1395,19 +1397,19 @@ public final class RestconfImpl implements RestconfService { return listModuleBuilder.build(); } - private MapEntryNode toModuleEntryNode(final Module module, final DataSchemaNode moduleSchemaNode) { + private static MapEntryNode toModuleEntryNode(final Module module, final DataSchemaNode moduleSchemaNode) { checkArgument(moduleSchemaNode instanceof ListSchemaNode, "moduleSchemaNode has to be of type ListSchemaNode"); final ListSchemaNode listModuleSchemaNode = (ListSchemaNode) moduleSchemaNode; final DataContainerNodeBuilder moduleNodeValues = - Builders.mapEntryBuilder(listModuleSchemaNode); + SchemaAwareBuilders.mapEntryBuilder(listModuleSchemaNode); List instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listModuleSchemaNode, "name"); final DataSchemaNode nameSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(nameSchemaNode instanceof LeafSchemaNode); - moduleNodeValues - .withChild(Builders.leafBuilder((LeafSchemaNode) nameSchemaNode).withValue(module.getName()).build()); + moduleNodeValues.withChild( + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) nameSchemaNode).withValue(module.getName()).build()); final QNameModule qNameModule = module.getQNameModule(); @@ -1416,24 +1418,24 @@ public final class RestconfImpl implements RestconfService { final DataSchemaNode revisionSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(revisionSchemaNode instanceof LeafSchemaNode); final Optional revision = qNameModule.getRevision(); - moduleNodeValues.withChild(Builders.leafBuilder((LeafSchemaNode) revisionSchemaNode) + moduleNodeValues.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) revisionSchemaNode) .withValue(revision.map(Revision::toString).orElse("")).build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listModuleSchemaNode, "namespace"); final DataSchemaNode namespaceSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(namespaceSchemaNode instanceof LeafSchemaNode); - moduleNodeValues.withChild(Builders.leafBuilder((LeafSchemaNode) namespaceSchemaNode) + moduleNodeValues.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) namespaceSchemaNode) .withValue(qNameModule.getNamespace().toString()).build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listModuleSchemaNode, "feature"); final DataSchemaNode featureSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(featureSchemaNode instanceof LeafListSchemaNode); - final ListNodeBuilder> featuresBuilder = - Builders.leafSetBuilder((LeafListSchemaNode) featureSchemaNode); + final ListNodeBuilder> featuresBuilder = + SchemaAwareBuilders.leafSetBuilder((LeafListSchemaNode) featureSchemaNode); for (final FeatureDefinition feature : module.getFeatures()) { - featuresBuilder.withChild(Builders.leafSetEntryBuilder((LeafListSchemaNode) featureSchemaNode) + featuresBuilder.withChild(SchemaAwareBuilders.leafSetEntryBuilder((LeafListSchemaNode) featureSchemaNode) .withValue(feature.getQName().getLocalName()).build()); } moduleNodeValues.withChild(featuresBuilder.build()); @@ -1446,26 +1448,28 @@ public final class RestconfImpl implements RestconfService { "streamSchemaNode has to be of type ListSchemaNode"); final ListSchemaNode listStreamSchemaNode = (ListSchemaNode) streamSchemaNode; final DataContainerNodeBuilder streamNodeValues = - Builders.mapEntryBuilder(listStreamSchemaNode); + SchemaAwareBuilders.mapEntryBuilder(listStreamSchemaNode); List instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "name"); final DataSchemaNode nameSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(nameSchemaNode instanceof LeafSchemaNode); - streamNodeValues.withChild(Builders.leafBuilder((LeafSchemaNode) nameSchemaNode).withValue(streamName).build()); + streamNodeValues.withChild( + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) nameSchemaNode).withValue(streamName).build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "description"); final DataSchemaNode descriptionSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(descriptionSchemaNode instanceof LeafSchemaNode); - streamNodeValues.withChild( - Builders.leafBuilder((LeafSchemaNode) nameSchemaNode).withValue("DESCRIPTION_PLACEHOLDER").build()); + streamNodeValues.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) nameSchemaNode) + .withValue("DESCRIPTION_PLACEHOLDER") + .build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "replay-support"); final DataSchemaNode replaySupportSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(replaySupportSchemaNode instanceof LeafSchemaNode); - streamNodeValues.withChild(Builders.leafBuilder((LeafSchemaNode) replaySupportSchemaNode) + streamNodeValues.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) replaySupportSchemaNode) .withValue(Boolean.TRUE).build()); instanceDataChildrenByName = @@ -1473,13 +1477,13 @@ public final class RestconfImpl implements RestconfService { final DataSchemaNode replayLogCreationTimeSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(replayLogCreationTimeSchemaNode instanceof LeafSchemaNode); streamNodeValues.withChild( - Builders.leafBuilder((LeafSchemaNode) replayLogCreationTimeSchemaNode).withValue("").build()); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) replayLogCreationTimeSchemaNode).withValue("").build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "events"); final DataSchemaNode eventsSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); checkState(eventsSchemaNode instanceof LeafSchemaNode); streamNodeValues.withChild( - Builders.leafBuilder((LeafSchemaNode) eventsSchemaNode).withValue(Empty.getInstance()).build()); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) eventsSchemaNode).withValue(Empty.getInstance()).build()); return streamNodeValues.build(); } @@ -1495,23 +1499,23 @@ public final class RestconfImpl implements RestconfService { final ContainerNode data = (ContainerNode) payload.getData(); LeafSetNode leafSet = null; String outputType = "XML"; - for (final DataContainerChild dataChild : data.getValue()) { + for (final DataContainerChild dataChild : data.body()) { if (dataChild instanceof LeafSetNode) { leafSet = (LeafSetNode) dataChild; } else if (dataChild instanceof AugmentationNode) { - outputType = (String) ((AugmentationNode) dataChild).getValue().iterator().next().getValue(); + outputType = (String) ((AugmentationNode) dataChild).body().iterator().next().body(); } } - final Collection entryNodes = leafSet.getValue(); + final Collection> entryNodes = leafSet.body(); final List paths = new ArrayList<>(); String streamName = CREATE_NOTIFICATION_STREAM + "/"; StringBuilder streamNameBuilder = new StringBuilder(streamName); - final Iterator iterator = entryNodes.iterator(); + final Iterator> iterator = entryNodes.iterator(); while (iterator.hasNext()) { - final QName valueQName = QName.create((String) iterator.next().getValue()); - final URI namespace = valueQName.getModule().getNamespace(); + final QName valueQName = QName.create((String) iterator.next().body()); + final XMLNamespace namespace = valueQName.getModule().getNamespace(); final Module module = controllerContext.findModuleByNamespace(namespace); checkNotNull(module, "Module for namespace %s does not exist", namespace); NotificationDefinition notifiDef = null; diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/AbstractNotificationsData.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/AbstractNotificationsData.java index df88d98e77..2224548952 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/AbstractNotificationsData.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/AbstractNotificationsData.java @@ -75,7 +75,7 @@ abstract class AbstractNotificationsData { * schema path of data * @return {@link DOMResult} */ - protected DOMResult writeNormalizedNode(final NormalizedNode normalized, final EffectiveModelContext context, + protected DOMResult writeNormalizedNode(final NormalizedNode normalized, final EffectiveModelContext context, final SchemaPath schemaPath) throws IOException, XMLStreamException { final Document doc = UntrustedXML.newDocumentBuilder().newDocument(); final DOMResult result = new DOMResult(doc); diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java index b9e738927a..eeeccc6cc4 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java @@ -193,7 +193,7 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster final YangInstanceIdentifier parentYiid, final EffectiveModelContext schemaContext, final DataSchemaContextTree dataSchemaContextTree) { - Optional> optionalNormalizedNode = Optional.empty(); + Optional optionalNormalizedNode = Optional.empty(); switch (candidateNode.getModificationType()) { case APPEARED: case SUBTREE_MODIFIED: @@ -214,7 +214,7 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster return; } - NormalizedNode normalizedNode = optionalNormalizedNode.get(); + NormalizedNode normalizedNode = optionalNormalizedNode.get(); YangInstanceIdentifier yiid = YangInstanceIdentifier.builder(parentYiid) .append(normalizedNode.getIdentifier()).build(); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java index a8ce9ea972..eec1376184 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java @@ -48,6 +48,7 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -114,7 +115,7 @@ public final class TestRestconfUtils { final InputStream inputStream = TestJsonBodyWriter.class.getResourceAsStream(pathToInputFile); try { final Document doc = UntrustedXML.newDocumentBuilder().parse(inputStream); - final NormalizedNode nn = parse(iiContext, doc); + final NormalizedNode nn = parse(iiContext, doc); return new NormalizedNodeContext(iiContext, nn); } catch (final Exception e) { LOG.error("Load xml file " + pathToInputFile + " fail.", e); @@ -122,7 +123,7 @@ public final class TestRestconfUtils { return null; } - private static NormalizedNode parse(final InstanceIdentifierContext iiContext, final Document doc) + private static NormalizedNode parse(final InstanceIdentifierContext iiContext, final Document doc) throws XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException { final SchemaNode schemaNodeContext = iiContext.getSchemaNode(); DataSchemaNode schemaNode = null; @@ -155,7 +156,8 @@ public final class TestRestconfUtils { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final XmlParserStream xmlParser = XmlParserStream.create(writer, iiContext.getSchemaContext(), schemaNode); + final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.ofInstantiatedPath( + iiContext.getSchemaContext(), schemaNode.getPath()).toInference()); if (schemaNode instanceof ContainerLike || schemaNode instanceof ListSchemaNode) { xmlParser.traverse(new DOMSource(doc.getDocumentElement())); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReader.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReader.java index d83bd512a0..54f65d7e67 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReader.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReader.java @@ -15,7 +15,6 @@ import static org.junit.Assert.assertTrue; import com.google.common.collect.Sets; import java.io.File; import java.io.InputStream; -import java.net.URI; import java.util.Collection; import java.util.Optional; import javax.ws.rs.core.MediaType; @@ -27,8 +26,8 @@ import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; 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.NormalizedNodes; @@ -44,7 +43,7 @@ public class TestJsonBodyReader extends AbstractBodyReaderTest { private static EffectiveModelContext schemaContext; private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create( - URI.create("instance:identifier:module"), Revision.of("2014-01-17")); + XMLNamespace.of("instance:identifier:module"), Revision.of("2014-01-17")); public TestJsonBodyReader() { super(schemaContext, null); @@ -116,7 +115,7 @@ public class TestJsonBodyReader extends AbstractBodyReaderTest { public void moduleSubContainerAugmentDataPostTest() throws Exception { final DataSchemaNode dataSchemaNode = schemaContext.getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); - final Module augmentModule = schemaContext.findModules(new URI("augment:module")).iterator().next(); + final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName contAugmentQName = QName.create(augmentModule.getQNameModule(), "cont-augment"); final YangInstanceIdentifier.AugmentationIdentifier augII = new YangInstanceIdentifier.AugmentationIdentifier( Sets.newHashSet(contAugmentQName)); @@ -137,7 +136,7 @@ public class TestJsonBodyReader extends AbstractBodyReaderTest { public void moduleSubContainerChoiceAugmentDataPostTest() throws Exception { final DataSchemaNode dataSchemaNode = schemaContext.getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); - final Module augmentModule = schemaContext.findModules(new URI("augment:module")).iterator().next(); + final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName augmentChoice1QName = QName.create(augmentModule.getQNameModule(), "augment-choice1"); final QName augmentChoice2QName = QName.create(augmentChoice1QName, "augment-choice2"); final QName containerQName = QName.create(augmentChoice1QName, "case-choice-case-container1"); @@ -168,24 +167,17 @@ public class TestJsonBodyReader extends AbstractBodyReaderTest { null, null, this.mediaType, null, inputStream); checkNormalizedNodeContext(returnValue); final ContainerNode inputNode = (ContainerNode) returnValue.getData(); - final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of(QName - .create(inputNode.getNodeType(), "cont")); - final Optional> contDataNode = inputNode - .getChild(yangCont.getLastPathArgument()); + final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of( + QName.create(inputNode.getIdentifier().getNodeType(), "cont")); + final Optional contDataNode = inputNode.findChildByArg(yangCont.getLastPathArgument()); assertTrue(contDataNode.isPresent()); assertTrue(contDataNode.get() instanceof ContainerNode); - final YangInstanceIdentifier yangleaf = YangInstanceIdentifier.of(QName - .create(inputNode.getNodeType(), "lf")); - final Optional> leafDataNode = ((ContainerNode) contDataNode - .get()).getChild(yangleaf.getLastPathArgument()); + final YangInstanceIdentifier yangleaf = YangInstanceIdentifier.of( + QName.create(inputNode.getIdentifier().getNodeType(), "lf")); + final Optional leafDataNode = ((ContainerNode) contDataNode.get()) + .findChildByArg(yangleaf.getLastPathArgument()); assertTrue(leafDataNode.isPresent()); - assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().getValue() - .toString())); - } - - private static void checkExpectValueNormalizeNodeContext(final DataSchemaNode dataSchemaNode, - final NormalizedNodeContext nnContext) { - checkExpectValueNormalizeNodeContext(dataSchemaNode, nnContext, null); + assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().body().toString())); } private static void checkExpectValueNormalizeNodeContext(final DataSchemaNode dataSchemaNode, diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java index befa969030..fbd9db2daa 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java @@ -13,7 +13,6 @@ import static org.mockito.Mockito.mock; import java.io.File; import java.io.InputStream; -import java.net.URI; import java.util.Collection; import java.util.Optional; import javax.ws.rs.core.MediaType; @@ -26,8 +25,8 @@ import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; 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.NormalizedNodes; @@ -42,7 +41,7 @@ public class TestJsonBodyReaderMountPoint extends AbstractBodyReaderTest { private static EffectiveModelContext schemaContext; private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create( - URI.create("instance:identifier:module"), Revision.of("2014-01-17")); + XMLNamespace.of("instance:identifier:module"), Revision.of("2014-01-17")); public TestJsonBodyReaderMountPoint() throws NoSuchFieldException, SecurityException { super(schemaContext, mock(DOMMountPoint.class)); @@ -114,21 +113,20 @@ public class TestJsonBodyReaderMountPoint extends AbstractBodyReaderTest { null, null, this.mediaType, null, inputStream); checkNormalizedNodeContext(returnValue); final ContainerNode inputNode = (ContainerNode) returnValue.getData(); - final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of(QName - .create(inputNode.getNodeType(), "cont")); - final Optional> contDataNode = inputNode - .getChild(yangCont.getLastPathArgument()); + final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of( + QName.create(inputNode.getIdentifier().getNodeType(), "cont")); + final Optional contDataNode = inputNode.findChildByArg(yangCont.getLastPathArgument()); assertTrue(contDataNode.isPresent()); assertTrue(contDataNode.get() instanceof ContainerNode); - final YangInstanceIdentifier yangleaf = YangInstanceIdentifier.of(QName.create(inputNode.getNodeType(), "lf")); - final Optional> leafDataNode = - ((ContainerNode) contDataNode.get()).getChild(yangleaf.getLastPathArgument()); + final YangInstanceIdentifier yangleaf = YangInstanceIdentifier.of( + QName.create(inputNode.getIdentifier().getNodeType(), "lf")); + final Optional leafDataNode = + ((ContainerNode) contDataNode.get()).findChildByArg(yangleaf.getLastPathArgument()); assertTrue(leafDataNode.isPresent()); - assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().getValue().toString())); + assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().body().toString())); } - private void checkExpectValueNormalizeNodeContext( - final DataSchemaNode dataSchemaNode, + private void checkExpectValueNormalizeNodeContext(final DataSchemaNode dataSchemaNode, final NormalizedNodeContext nnContext) { checkExpectValueNormalizeNodeContext(dataSchemaNode, nnContext, null); } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReader.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReader.java index 2486f02108..79f6a51085 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReader.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReader.java @@ -15,7 +15,6 @@ import static org.junit.Assert.fail; import com.google.common.collect.Sets; import java.io.File; import java.io.InputStream; -import java.net.URI; import java.util.Collection; import java.util.Optional; import javax.ws.rs.core.MediaType; @@ -30,8 +29,9 @@ import org.opendaylight.restconf.common.errors.RestconfError; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; 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.MapEntryNode; @@ -47,7 +47,7 @@ public class TestXmlBodyReader extends AbstractBodyReaderTest { private final XmlNormalizedNodeBodyReader xmlBodyReader; private static EffectiveModelContext schemaContext; private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create( - URI.create("instance:identifier:module"), Revision.of("2014-01-17")); + XMLNamespace.of("instance:identifier:module"), Revision.of("2014-01-17")); public TestXmlBodyReader() { super(schemaContext, null); @@ -85,15 +85,15 @@ public class TestXmlBodyReader extends AbstractBodyReaderTest { assertTrue(nnc.getData() instanceof MapEntryNode); final MapEntryNode data = (MapEntryNode) nnc.getData(); - assertTrue(data.getValue().size() == 2); - for (final DataContainerChild child : data.getValue()) { - switch (child.getNodeType().getLocalName()) { + assertEquals(2, data.size()); + for (final DataContainerChild child : data.body()) { + switch (child.getIdentifier().getNodeType().getLocalName()) { case "key-leaf": - assertEquals("key-value", child.getValue()); + assertEquals("key-value", child.body()); break; case "ordinary-leaf": - assertEquals("leaf-value", child.getValue()); + assertEquals("leaf-value", child.body()); break; default: fail(); @@ -153,7 +153,7 @@ public class TestXmlBodyReader extends AbstractBodyReaderTest { public void moduleSubContainerAugmentDataPostTest() throws Exception { final DataSchemaNode dataSchemaNode = schemaContext.getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); - final Module augmentModule = schemaContext.findModules(new URI("augment:module")).iterator().next(); + final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName contAugmentQName = QName.create(augmentModule.getQNameModule(), "cont-augment"); final YangInstanceIdentifier.AugmentationIdentifier augII = new YangInstanceIdentifier.AugmentationIdentifier( Sets.newHashSet(contAugmentQName)); @@ -173,7 +173,7 @@ public class TestXmlBodyReader extends AbstractBodyReaderTest { public void moduleSubContainerChoiceAugmentDataPostTest() throws Exception { final DataSchemaNode dataSchemaNode = schemaContext.getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); - final Module augmentModule = schemaContext.findModules(new URI("augment:module")).iterator().next(); + final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName augmentChoice1QName = QName.create(augmentModule.getQNameModule(), "augment-choice1"); final QName augmentChoice2QName = QName.create(augmentChoice1QName, "augment-choice2"); final QName containerQName = QName.create(augmentChoice1QName, "case-choice-case-container1"); @@ -198,28 +198,19 @@ public class TestXmlBodyReader extends AbstractBodyReaderTest { public void rpcModuleInputTest() throws Exception { final String uri = "invoke-rpc-module:rpc-test"; mockBodyReader(uri, this.xmlBodyReader, true); - final InputStream inputStream = TestXmlBodyReader.class - .getResourceAsStream("/invoke-rpc/xml/rpc-input.xml"); - final NormalizedNodeContext returnValue = this.xmlBodyReader - .readFrom(null, null, null, this.mediaType, null, inputStream); + final InputStream inputStream = TestXmlBodyReader.class.getResourceAsStream("/invoke-rpc/xml/rpc-input.xml"); + final NormalizedNodeContext returnValue = this.xmlBodyReader.readFrom(null, null, null, this.mediaType, null, + inputStream); checkNormalizedNodeContext(returnValue); final ContainerNode contNode = (ContainerNode) returnValue.getData(); - final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of(QName.create(contNode.getNodeType(), "cont")); - final Optional> contDataNodePotential = contNode - .getChild(yangCont.getLastPathArgument()); + final Optional contDataNodePotential = contNode.findChildByArg(new NodeIdentifier( + QName.create(contNode.getIdentifier().getNodeType(), "cont"))); assertTrue(contDataNodePotential.isPresent()); final ContainerNode contDataNode = (ContainerNode) contDataNodePotential.get(); - final YangInstanceIdentifier yangLeaf = - YangInstanceIdentifier.of(QName.create(contDataNode.getNodeType(), "lf")); - final Optional> leafDataNode = contDataNode.getChild( - yangLeaf.getLastPathArgument()); + final Optional leafDataNode = contDataNode.findChildByArg(new NodeIdentifier( + QName.create(contDataNode.getIdentifier().getNodeType(), "lf"))); assertTrue(leafDataNode.isPresent()); - assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().getValue().toString())); - } - - private static void checkExpectValueNormalizeNodeContext(final DataSchemaNode dataSchemaNode, - final NormalizedNodeContext nnContext) { - checkExpectValueNormalizeNodeContext(dataSchemaNode, nnContext, null); + assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().body().toString())); } private static void checkExpectValueNormalizeNodeContext(final DataSchemaNode dataSchemaNode, @@ -246,9 +237,9 @@ public class TestXmlBodyReader extends AbstractBodyReaderTest { checkNormalizedNodeContext(returnValue); // check if container was found both according to its name and namespace assertEquals("Not correct container found, name was ignored", - "foo-bar-container", returnValue.getData().getNodeType().getLocalName()); + "foo-bar-container", returnValue.getData().getIdentifier().getNodeType().getLocalName()); assertEquals("Not correct container found, namespace was ignored", - "foo:module", returnValue.getData().getNodeType().getNamespace().toString()); + "foo:module", returnValue.getData().getIdentifier().getNodeType().getNamespace().toString()); } /** @@ -268,9 +259,9 @@ public class TestXmlBodyReader extends AbstractBodyReaderTest { checkNormalizedNodeContext(returnValue); // check if container was found both according to its name and namespace assertEquals("Not correct container found, name was ignored", - "foo-bar-container", returnValue.getData().getNodeType().getLocalName()); + "foo-bar-container", returnValue.getData().getIdentifier().getNodeType().getLocalName()); assertEquals("Not correct container found, namespace was ignored", - "bar:module", returnValue.getData().getNodeType().getNamespace().toString()); + "bar:module", returnValue.getData().getIdentifier().getNodeType().getNamespace().toString()); } /** diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java index 6f54a773d9..f7c4df0dd4 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java @@ -14,7 +14,6 @@ import static org.mockito.Mockito.mock; import java.io.File; import java.io.InputStream; -import java.net.URI; import java.util.Collection; import java.util.Optional; import javax.ws.rs.core.MediaType; @@ -30,8 +29,8 @@ import org.opendaylight.restconf.common.errors.RestconfError; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; 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.NormalizedNodes; @@ -45,7 +44,7 @@ public class TestXmlBodyReaderMountPoint extends AbstractBodyReaderTest { private static EffectiveModelContext schemaContext; private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create( - URI.create("instance:identifier:module"), Revision.of("2014-01-17")); + XMLNamespace.of("instance:identifier:module"), Revision.of("2014-01-17")); public TestXmlBodyReaderMountPoint() { super(schemaContext, mock(DOMMountPoint.class)); @@ -117,17 +116,17 @@ public class TestXmlBodyReaderMountPoint extends AbstractBodyReaderTest { null, null, this.mediaType, null, inputStream); checkNormalizedNodeContext(returnValue); final ContainerNode contNode = (ContainerNode) returnValue.getData(); - final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of(QName.create(contNode.getNodeType(), "cont")); - final Optional> contDataNodePotential = contNode - .getChild(yangCont.getLastPathArgument()); + final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of( + QName.create(contNode.getIdentifier().getNodeType(), "cont")); + final Optional contDataNodePotential = + contNode.findChildByArg(yangCont.getLastPathArgument()); assertTrue(contDataNodePotential.isPresent()); final ContainerNode contDataNode = (ContainerNode) contDataNodePotential.get(); - final YangInstanceIdentifier yangLeaf = - YangInstanceIdentifier.of(QName.create(contDataNode.getNodeType(), "lf")); - final Optional> leafDataNode = contDataNode.getChild( - yangLeaf.getLastPathArgument()); + final YangInstanceIdentifier yangLeaf = YangInstanceIdentifier.of( + QName.create(contDataNode.getIdentifier().getNodeType(), "lf")); + final Optional leafDataNode = contDataNode.findChildByArg(yangLeaf.getLastPathArgument()); assertTrue(leafDataNode.isPresent()); - assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().getValue().toString())); + assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().body().toString())); } private void checkExpectValueNormalizeNodeContext( @@ -170,9 +169,9 @@ public class TestXmlBodyReaderMountPoint extends AbstractBodyReaderTest { checkMountPointNormalizedNodeContext(returnValue); // check if container was found both according to its name and namespace assertEquals("Not correct container found, name was ignored", - "foo-bar-container", returnValue.getData().getNodeType().getLocalName()); + "foo-bar-container", returnValue.getData().getIdentifier().getNodeType().getLocalName()); assertEquals("Not correct container found, namespace was ignored", - "foo:module", returnValue.getData().getNodeType().getNamespace().toString()); + "foo:module", returnValue.getData().getIdentifier().getNodeType().getNamespace().toString()); } /** @@ -192,9 +191,9 @@ public class TestXmlBodyReaderMountPoint extends AbstractBodyReaderTest { checkMountPointNormalizedNodeContext(returnValue); // check if container was found both according to its name and namespace assertEquals("Not correct container found, name was ignored", - "foo-bar-container", returnValue.getData().getNodeType().getLocalName()); + "foo-bar-container", returnValue.getData().getIdentifier().getNodeType().getLocalName()); assertEquals("Not correct container found, namespace was ignored", - "bar:module", returnValue.getData().getNodeType().getNamespace().toString()); + "bar:module", returnValue.getData().getIdentifier().getNodeType().getNamespace().toString()); } /** diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java index 206158341a..058d89e01b 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java @@ -44,9 +44,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent 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.NormalizedNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -175,7 +175,7 @@ public class RestPutListDataTest { assertTrue(testNodeSchemaNode != null); assertTrue(testNodeSchemaNode instanceof ListSchemaNode); final DataContainerNodeBuilder testNodeContainer = - Builders.mapEntryBuilder((ListSchemaNode) testNodeSchemaNode); + SchemaAwareBuilders.mapEntryBuilder((ListSchemaNode) testNodeSchemaNode); List testChildren = ControllerContext.findInstanceDataChildrenByName( (ListSchemaNode) testNodeSchemaNode, key1.getLocalName()); @@ -184,7 +184,7 @@ public class RestPutListDataTest { assertTrue(testLeafKey1SchemaNode != null); assertTrue(testLeafKey1SchemaNode instanceof LeafSchemaNode); final NormalizedNodeBuilder> leafKey1 = - Builders.leafBuilder((LeafSchemaNode) testLeafKey1SchemaNode); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) testLeafKey1SchemaNode); leafKey1.withValue(payloadKey1); testNodeContainer.withChild(leafKey1.build()); @@ -196,7 +196,7 @@ public class RestPutListDataTest { assertTrue(testLeafKey2SchemaNode != null); assertTrue(testLeafKey2SchemaNode instanceof LeafSchemaNode); final NormalizedNodeBuilder> leafKey2 = - Builders.leafBuilder((LeafSchemaNode) testLeafKey2SchemaNode); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) testLeafKey2SchemaNode); leafKey2.withValue(payloadKey2); testNodeContainer.withChild(leafKey2.build()); } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonIdentityrefToNnTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonIdentityrefToNnTest.java index db75081e8b..ddbb34419e 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonIdentityrefToNnTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonIdentityrefToNnTest.java @@ -46,11 +46,9 @@ public class JsonIdentityrefToNnTest extends AbstractBodyReaderTest { final NormalizedNodeContext normalizedNodeContext = this.jsonBodyReader.readFrom( null, null, null, this.mediaType, null, inputStream); - assertEquals("cont", normalizedNodeContext.getData().getNodeType() - .getLocalName()); + assertEquals("cont", normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); - final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext - .getData()); + final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext.getData()); assertTrue(dataTree.contains("cont1")); assertTrue(dataTree @@ -67,5 +65,4 @@ public class JsonIdentityrefToNnTest extends AbstractBodyReaderTest { protected MediaType getMediaType() { return null; } - } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonLeafrefToNnTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonLeafrefToNnTest.java index 7476a63ecb..697a2cdc72 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonLeafrefToNnTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonLeafrefToNnTest.java @@ -46,10 +46,8 @@ public class JsonLeafrefToNnTest extends AbstractBodyReaderTest { final NormalizedNodeContext normalizedNodeContext = this.jsonBodyReader.readFrom( null, null, null, this.mediaType, null, inputStream); - assertEquals("cont", normalizedNodeContext.getData().getNodeType() - .getLocalName()); - final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext - .getData()); + assertEquals("cont", normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); + final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext.getData()); assertTrue(dataTree.contains("lf2 121")); } @@ -57,5 +55,4 @@ public class JsonLeafrefToNnTest extends AbstractBodyReaderTest { protected MediaType getMediaType() { return null; } - } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonToNnTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonToNnTest.java index 0bd9a62ed3..2be1f28417 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonToNnTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonToNnTest.java @@ -87,8 +87,7 @@ public class JsonToNnTest extends AbstractBodyReaderTest { "multiple-items-yang:lst"); assertNotNull(normalizedNodeContext); - assertEquals("lst", normalizedNodeContext.getData().getNodeType() - .getLocalName()); + assertEquals("lst", normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); verityMultipleItemsInList(normalizedNodeContext); } @@ -99,11 +98,9 @@ public class JsonToNnTest extends AbstractBodyReaderTest { "/json-to-nn/array-with-null.json", "array-with-null-yang:cont"); assertNotNull(normalizedNodeContext); - assertEquals("cont", normalizedNodeContext.getData().getNodeType() - .getLocalName()); + assertEquals("cont", normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); - final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext - .getData()); + final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext.getData()); assertTrue(dataTree.contains("lf")); assertTrue(dataTree.contains("empty")); } @@ -171,11 +168,9 @@ public class JsonToNnTest extends AbstractBodyReaderTest { "/json-to-nn/empty-data.json", "array-with-null-yang:cont"); assertNotNull(normalizedNodeContext); - assertEquals("cont", normalizedNodeContext.getData().getNodeType() - .getLocalName()); + assertEquals("cont", normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); - final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext - .getData()); + final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext.getData()); assertTrue(dataTree.contains("lflst1")); @@ -183,24 +178,20 @@ public class JsonToNnTest extends AbstractBodyReaderTest { RestconfDocumentedException exception = null; mockBodyReader("array-with-null-yang:cont", this.jsonBodyReader, false); - final InputStream inputStream = this.getClass().getResourceAsStream( - "/json-to-nn/empty-data.json1"); + final InputStream inputStream = this.getClass().getResourceAsStream("/json-to-nn/empty-data.json1"); try { - this.jsonBodyReader.readFrom(null, null, null, this.mediaType, null, - inputStream); + this.jsonBodyReader.readFrom(null, null, null, this.mediaType, null,inputStream); } catch (final RestconfDocumentedException e) { exception = e; } assertNotNull(exception); - assertEquals("Error parsing input: null", exception.getErrors().get(0) - .getErrorMessage()); + assertEquals("Error parsing input: null", exception.getErrors().get(0).getErrorMessage()); } @Test public void testJsonBlankInput() throws Exception { - final NormalizedNodeContext normalizedNodeContext = prepareNNC("", - "array-with-null-yang:cont"); + final NormalizedNodeContext normalizedNodeContext = prepareNNC("", "array-with-null-yang:cont"); assertNull(normalizedNodeContext); } @@ -208,19 +199,16 @@ public class JsonToNnTest extends AbstractBodyReaderTest { public void notSupplyNamespaceIfAlreadySupplied()throws Exception { final String uri = "simple-list-yang1" + ":" + "lst"; - final NormalizedNodeContext normalizedNodeContext = prepareNNC( - "/json-to-nn/simple-list.json", uri); + final NormalizedNodeContext normalizedNodeContext = prepareNNC("/json-to-nn/simple-list.json", uri); assertNotNull(normalizedNodeContext); verifyNormaluizedNodeContext(normalizedNodeContext, "lst"); mockBodyReader("simple-list-yang2:lst", this.jsonBodyReader, false); - final InputStream inputStream = this.getClass().getResourceAsStream( - "/json-to-nn/simple-list.json"); + final InputStream inputStream = this.getClass().getResourceAsStream("/json-to-nn/simple-list.json"); try { - this.jsonBodyReader.readFrom(null, null, null, this.mediaType, null, - inputStream); + this.jsonBodyReader.readFrom(null, null, null, this.mediaType, null, inputStream); fail("NormalizedNodeContext should not be create because of different namespace"); } catch (final RestconfDocumentedException e) { LOG.warn("Read from InputStream failed. Message: {}. Status: {}", e.getMessage(), e.getStatus()); @@ -231,26 +219,21 @@ public class JsonToNnTest extends AbstractBodyReaderTest { @Test public void dataAugmentedTest() throws Exception { - NormalizedNodeContext normalizedNodeContext = prepareNNC( - "/common/augment/json/dataa.json", "main:cont"); + NormalizedNodeContext normalizedNodeContext = prepareNNC("/common/augment/json/dataa.json", "main:cont"); assertNotNull(normalizedNodeContext); - assertEquals("cont", normalizedNodeContext.getData().getNodeType() - .getLocalName()); + assertEquals("cont", normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext .getData()); assertTrue(dataTree.contains("cont1")); assertTrue(dataTree.contains("lf11 lf11 value from a")); - normalizedNodeContext = prepareNNC("/common/augment/json/datab.json", - "main:cont"); + normalizedNodeContext = prepareNNC("/common/augment/json/datab.json", "main:cont"); assertNotNull(normalizedNodeContext); - assertEquals("cont", normalizedNodeContext.getData().getNodeType() - .getLocalName()); - dataTree = NormalizedNodes - .toStringTree(normalizedNodeContext.getData()); + assertEquals("cont", normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); + dataTree = NormalizedNodes.toStringTree(normalizedNodeContext.getData()); assertTrue(dataTree.contains("cont1")); assertTrue(dataTree.contains("lf11 lf11 value from b")); } @@ -268,8 +251,7 @@ public class JsonToNnTest extends AbstractBodyReaderTest { private NormalizedNodeContext prepareNNC(final String jsonPath, final String uri) throws Exception { try { mockBodyReader(uri, this.jsonBodyReader, false); - } catch (NoSuchFieldException | SecurityException - | IllegalArgumentException | IllegalAccessException e) { + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { LOG.warn("Operation failed due to: {}", e.getMessage()); } final InputStream inputStream = this.getClass().getResourceAsStream(jsonPath); @@ -277,8 +259,7 @@ public class JsonToNnTest extends AbstractBodyReaderTest { NormalizedNodeContext normalizedNodeContext = null; try { - normalizedNodeContext = this.jsonBodyReader.readFrom(null, null, null, - this.mediaType, null, inputStream); + normalizedNodeContext = this.jsonBodyReader.readFrom(null, null, null, this.mediaType, null, inputStream); } catch (WebApplicationException e) { // TODO Auto-generated catch block } @@ -288,11 +269,9 @@ public class JsonToNnTest extends AbstractBodyReaderTest { private static void verifyNormaluizedNodeContext(final NormalizedNodeContext normalizedNodeContext, final String topLevelElementName) { - assertEquals(topLevelElementName, normalizedNodeContext.getData() - .getNodeType().getLocalName()); + assertEquals(topLevelElementName, normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); - final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext - .getData()); + final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext.getData()); assertTrue(dataTree.contains("cont1")); assertTrue(dataTree.contains("lst1")); assertTrue(dataTree.contains("lflst1")); @@ -302,9 +281,7 @@ public class JsonToNnTest extends AbstractBodyReaderTest { } private static void verityMultipleItemsInList(final NormalizedNodeContext normalizedNodeContext) { - - final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext - .getData()); + final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext.getData()); assertTrue(dataTree.contains("lf11")); assertTrue(dataTree.contains("lf11_1")); assertTrue(dataTree.contains("lflst11")); @@ -317,21 +294,18 @@ public class JsonToNnTest extends AbstractBodyReaderTest { public void unsupportedDataFormatTest() throws Exception { mockBodyReader("simple-list-yang1:lst", this.jsonBodyReader, false); - final InputStream inputStream = this.getClass().getResourceAsStream( - "/json-to-nn/unsupported-json-format.json"); + final InputStream inputStream = this.getClass().getResourceAsStream("/json-to-nn/unsupported-json-format.json"); RestconfDocumentedException exception = null; try { - this.jsonBodyReader.readFrom(null, null, null, this.mediaType, null, - inputStream); + this.jsonBodyReader.readFrom(null, null, null, this.mediaType, null, inputStream); } catch (final RestconfDocumentedException e) { exception = e; } LOG.info(exception.getErrors().get(0).getErrorMessage()); - assertTrue(exception.getErrors().get(0).getErrorMessage() - .contains("is not a simple type")); + assertTrue(exception.getErrors().get(0).getErrorMessage().contains("is not a simple type")); } @Test @@ -345,11 +319,9 @@ public class JsonToNnTest extends AbstractBodyReaderTest { null, null, null, this.mediaType, null, inputStream); assertNotNull(normalizedNodeContext); - assertEquals("cont", normalizedNodeContext.getData().getNodeType() - .getLocalName()); + assertEquals("cont", normalizedNodeContext.getData().getIdentifier().getNodeType().getLocalName()); - final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext - .getData()); + final String dataTree = NormalizedNodes.toStringTree(normalizedNodeContext.getData()); assertTrue(dataTree.contains("lf1 moduleName:value lf2")); } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnInstanceIdentifierToXmlTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnInstanceIdentifierToXmlTest.java index 6aea684fb6..3560f32d24 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnInstanceIdentifierToXmlTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnInstanceIdentifierToXmlTest.java @@ -28,13 +28,13 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; 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.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; -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.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.ListNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -44,13 +44,12 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; public class NnInstanceIdentifierToXmlTest extends AbstractBodyReaderTest { - private static EffectiveModelContext schemaContext; - NormalizedNodeXmlBodyWriter xmlBodyWriter; + + private final NormalizedNodeXmlBodyWriter xmlBodyWriter = new NormalizedNodeXmlBodyWriter(); public NnInstanceIdentifierToXmlTest() { super(schemaContext, null); - xmlBodyWriter = new NormalizedNodeXmlBodyWriter(); } @BeforeClass @@ -64,8 +63,7 @@ public class NnInstanceIdentifierToXmlTest extends AbstractBodyReaderTest { final OutputStream output = new ByteArrayOutputStream(); - xmlBodyWriter.writeTo(normalizedNodeContext, null, null, null, - mediaType, null, output); + xmlBodyWriter.writeTo(normalizedNodeContext, null, null, null, mediaType, null, output); assertNotNull(output); @@ -108,13 +106,13 @@ public class NnInstanceIdentifierToXmlTest extends AbstractBodyReaderTest { final DataSchemaNode schemaCont = schemaContext.getDataChildByName(cont); - final DataContainerNodeBuilder dataCont = Builders + final DataContainerNodeBuilder dataCont = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) schemaCont); final DataSchemaNode schemaCont1 = ((ContainerSchemaNode) schemaCont) .getDataChildByName(cont1); - final DataContainerNodeBuilder dataCont1 = Builders + final DataContainerNodeBuilder dataCont1 = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) schemaCont1); final List instanceLfLst11 = ControllerContext @@ -123,11 +121,10 @@ public class NnInstanceIdentifierToXmlTest extends AbstractBodyReaderTest { final DataSchemaNode lfLst11Schema = Iterables .getFirst(instanceLfLst11, null); - final ListNodeBuilder> lfLst11Data = Builders + final ListNodeBuilder> lfLst11Data = SchemaAwareBuilders .leafSetBuilder((LeafListSchemaNode) lfLst11Schema); - lfLst11Data.withChild(Builders - .leafSetEntryBuilder((LeafListSchemaNode) lfLst11Schema) + lfLst11Data.withChild(SchemaAwareBuilders.leafSetEntryBuilder((LeafListSchemaNode) lfLst11Schema) .withValue("lflst11 value").build()); dataCont1.withChild(lfLst11Data.build()); @@ -136,7 +133,7 @@ public class NnInstanceIdentifierToXmlTest extends AbstractBodyReaderTest { (DataNodeContainer) schemaCont1, lf11.getLocalName()); final DataSchemaNode lf11Schema = Iterables.getFirst(instanceLf11, null); - dataCont1.withChild(Builders.leafBuilder((LeafSchemaNode) lf11Schema) + dataCont1.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) lf11Schema) .withValue("/instanceidentifier/").build()); dataCont.withChild(dataCont1.build()); @@ -206,13 +203,13 @@ public class NnInstanceIdentifierToXmlTest extends AbstractBodyReaderTest { final DataSchemaNode schemaCont = schemaContext.getDataChildByName(cont); - final DataContainerNodeBuilder dataCont = Builders + final DataContainerNodeBuilder dataCont = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) schemaCont); final DataSchemaNode schemaCont1 = ((ContainerSchemaNode) schemaCont) .getDataChildByName(cont1); - final DataContainerNodeBuilder dataCont1 = Builders + final DataContainerNodeBuilder dataCont1 = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) schemaCont1); final List instanceLst11 = ControllerContext @@ -220,46 +217,37 @@ public class NnInstanceIdentifierToXmlTest extends AbstractBodyReaderTest { (DataNodeContainer) schemaCont1, lst11.getLocalName()); final DataSchemaNode lst11Schema = Iterables.getFirst(instanceLst11, null); - final CollectionNodeBuilder dataLst11 = Builders + final CollectionNodeBuilder dataLst11 = SchemaAwareBuilders .mapBuilder((ListSchemaNode) lst11Schema); - final DataContainerNodeBuilder dataLst11Vaule = Builders + final DataContainerNodeBuilder dataLst11Vaule = SchemaAwareBuilders .mapEntryBuilder((ListSchemaNode) lst11Schema); - dataLst11Vaule.withChild(buildLeaf(lst11Schema, keyvalue111, dataLst11, - "keyvalue111")); + dataLst11Vaule.withChild(buildLeaf(lst11Schema, keyvalue111, dataLst11, "keyvalue111")); - dataLst11Vaule.withChild(buildLeaf(lst11Schema, keyvalue112, dataLst11, - "keyvalue112")); + dataLst11Vaule.withChild(buildLeaf(lst11Schema, keyvalue112, dataLst11, "keyvalue112")); - dataLst11Vaule.withChild(buildLeaf(lst11Schema, lf11, dataLst11, - "/cont/cont1/lf12")); + dataLst11Vaule.withChild(buildLeaf(lst11Schema, lf11, dataLst11, "/cont/cont1/lf12")); - dataLst11Vaule.withChild(buildLeaf(lst11Schema, lf12, dataLst11, - "lf12 value")); + dataLst11Vaule.withChild(buildLeaf(lst11Schema, lf12, dataLst11, "lf12 value")); dataLst11.withChild(dataLst11Vaule.build()); dataCont1.withChild(dataLst11.build()); dataCont.withChild(dataCont1.build()); - final NormalizedNodeContext testNormalizedNodeContext = new NormalizedNodeContext( - new InstanceIdentifierContext<>(null, schemaCont, - null, schemaContext), dataCont.build()); - - return testNormalizedNodeContext; + return new NormalizedNodeContext(new InstanceIdentifierContext<>(null, schemaCont, null, schemaContext), + dataCont.build()); } - private static DataContainerChild buildLeaf(final DataSchemaNode lst11Schema, final QName qname, - final CollectionNodeBuilder dataLst11, final Object value) { + private static DataContainerChild buildLeaf(final DataSchemaNode lst11Schema, final QName qname, + final CollectionNodeBuilder dataLst11, final Object value) { - final List instanceLf = ControllerContext - .findInstanceDataChildrenByName( - (DataNodeContainer) lst11Schema, qname.getLocalName()); + final List instanceLf = ControllerContext.findInstanceDataChildrenByName( + (DataNodeContainer) lst11Schema, qname.getLocalName()); final DataSchemaNode schemaLf = Iterables.getFirst(instanceLf, null); - return Builders.leafBuilder((LeafSchemaNode) schemaLf).withValue(value) - .build(); + return SchemaAwareBuilders.leafBuilder((LeafSchemaNode) schemaLf).withValue(value).build(); } @Override diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlTest.java index 7374458bb5..b847a053da 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlTest.java @@ -7,18 +7,21 @@ */ package org.opendaylight.controller.sal.restconf.impl.nn.to.xml.test; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import com.google.common.base.VerifyException; +import com.google.common.base.Throwables; import com.google.common.collect.Iterables; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.OutputStream; import java.util.List; import javax.ws.rs.core.MediaType; import org.junit.BeforeClass; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; import org.mockito.Mockito; import org.opendaylight.controller.sal.rest.impl.test.providers.AbstractBodyReaderTest; import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter; @@ -29,29 +32,25 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; -import org.opendaylight.yangtools.yang.model.util.type.BitsTypeBuilder; -import org.opendaylight.yangtools.yang.model.util.type.EnumerationTypeBuilder; -import org.opendaylight.yangtools.yang.model.util.type.UnionTypeBuilder; +import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; +import org.opendaylight.yangtools.yang.model.ri.type.BitsTypeBuilder; +import org.opendaylight.yangtools.yang.model.ri.type.EnumerationTypeBuilder; +import org.opendaylight.yangtools.yang.model.ri.type.UnionTypeBuilder; public class NnToXmlTest extends AbstractBodyReaderTest { - - @Rule - public ExpectedException thrown = ExpectedException.none(); + private static EffectiveModelContext schemaContext; private final NormalizedNodeXmlBodyWriter xmlBodyWriter; - private static EffectiveModelContext schemaContext; public NnToXmlTest() { super(schemaContext, null); @@ -83,8 +82,7 @@ public class NnToXmlTest extends AbstractBodyReaderTest { @Test public void nnAsYangLeafrefWithPrefixToXMLTest() throws Exception { - final NormalizedNodeContext normalizedNodeContext = prepareLeafrefData(); - nnToXml(normalizedNodeContext, "true", "true"); + nnToXml(prepareLeafrefData(), "true", "true"); } /** @@ -95,9 +93,12 @@ public class NnToXmlTest extends AbstractBodyReaderTest { public void nnAsYangLeafrefWithPrefixToXMLNegativeTest() throws Exception { final NormalizedNodeContext normalizedNodeContext = prepareLeafrefNegativeData(); - thrown.expect(VerifyException.class); - nnToXml(normalizedNodeContext, "value", - "value"); + final IOException ex = assertThrows(IOException.class, () -> nnToXml(normalizedNodeContext, + "value", "value")); + final Throwable rootCause = Throwables.getRootCause(ex); + assertThat(rootCause, instanceOf(IllegalArgumentException.class)); + assertEquals("Data tree child (basic:module?revision=2013-12-02)not-existing not present", + rootCause.getMessage()); } @Test @@ -197,7 +198,7 @@ public class NnToXmlTest extends AbstractBodyReaderTest { final BitsTypeDefinition.Bit mockBit2 = Mockito.mock(BitsTypeDefinition.Bit.class); Mockito.when(mockBit2.getName()).thenReturn("two"); Mockito.when(mockBit2.getPosition()).thenReturn(Uint32.TWO); - final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(Mockito.mock(SchemaPath.class)); + final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(QName.create("foo", "foo")); bitsTypeBuilder.addBit(mockBit1); bitsTypeBuilder.addBit(mockBit2); @@ -213,7 +214,7 @@ public class NnToXmlTest extends AbstractBodyReaderTest { Mockito.when(mockEnum.getName()).thenReturn("enum2"); final EnumerationTypeBuilder enumerationTypeBuilder = BaseTypes - .enumerationTypeBuilder(Mockito.mock(SchemaPath.class)); + .enumerationTypeBuilder(QName.create("foo", "foo")); enumerationTypeBuilder.addEnum(mockEnum); final String elName = "lfEnumeration"; @@ -251,11 +252,11 @@ public class NnToXmlTest extends AbstractBodyReaderTest { Mockito.when(mockBit2.getName()).thenReturn("second"); Mockito.when(mockBit2.getPosition()).thenReturn(Uint32.TWO); - final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(Mockito.mock(SchemaPath.class)); + final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(QName.create("foo", "foo")); bitsTypeBuilder.addBit(mockBit1); bitsTypeBuilder.addBit(mockBit2); - final UnionTypeBuilder unionTypeBuilder = BaseTypes.unionTypeBuilder(Mockito.mock(SchemaPath.class)); + final UnionTypeBuilder unionTypeBuilder = BaseTypes.unionTypeBuilder(QName.create("foo", "foo")); unionTypeBuilder.addType(BaseTypes.int8Type()); unionTypeBuilder.addType(bitsTypeBuilder.build()); unionTypeBuilder.addType(BaseTypes.booleanType()); @@ -294,14 +295,14 @@ public class NnToXmlTest extends AbstractBodyReaderTest { final DataSchemaNode contSchema = schemaContext.getDataChildByName(cont); - final DataContainerNodeBuilder contData = Builders + final DataContainerNodeBuilder contData = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) contSchema); final List instanceLf = ControllerContext .findInstanceDataChildrenByName((DataNodeContainer) contSchema, lf.getLocalName()); final DataSchemaNode schemaLf = Iterables.getFirst(instanceLf, null); - contData.withChild(Builders.leafBuilder((LeafSchemaNode) schemaLf).withValue(object).build()); + contData.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) schemaLf).withValue(object).build()); final NormalizedNodeContext testNormalizedNodeContext = new NormalizedNodeContext( new InstanceIdentifierContext<>(null, contSchema, null, schemaContext), contData.build()); @@ -326,20 +327,20 @@ public class NnToXmlTest extends AbstractBodyReaderTest { final DataSchemaNode contSchema = schemaContext.getDataChildByName(cont); - final DataContainerNodeBuilder contData = Builders + final DataContainerNodeBuilder contData = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) contSchema); List instanceLf = ControllerContext .findInstanceDataChildrenByName((DataNodeContainer) contSchema, lfBoolean.getLocalName()); DataSchemaNode schemaLf = Iterables.getFirst(instanceLf, null); - contData.withChild(Builders.leafBuilder((LeafSchemaNode) schemaLf).withValue(Boolean.TRUE).build()); + contData.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) schemaLf).withValue(Boolean.TRUE).build()); instanceLf = ControllerContext.findInstanceDataChildrenByName((DataNodeContainer) contSchema, lfLfref.getLocalName()); schemaLf = Iterables.getFirst(instanceLf, null); - contData.withChild(Builders.leafBuilder((LeafSchemaNode) schemaLf).withValue("true").build()); + contData.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) schemaLf).withValue("true").build()); final NormalizedNodeContext testNormalizedNodeContext = new NormalizedNodeContext( new InstanceIdentifierContext<>(null, contSchema, null, schemaContext), contData.build()); @@ -352,14 +353,14 @@ public class NnToXmlTest extends AbstractBodyReaderTest { final QName lfLfref = QName.create("basic:module", "2013-12-02", "lfLfrefNegative"); final DataSchemaNode contSchema = schemaContext.getDataChildByName(cont); - final DataContainerNodeBuilder contData = Builders + final DataContainerNodeBuilder contData = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) contSchema); final List instanceLf = ControllerContext.findInstanceDataChildrenByName((DataNodeContainer) contSchema, lfLfref.getLocalName()); final DataSchemaNode schemaLf = Iterables.getFirst(instanceLf, null); - contData.withChild(Builders.leafBuilder((LeafSchemaNode) schemaLf).withValue("value").build()); + contData.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) schemaLf).withValue("value").build()); return new NormalizedNodeContext( new InstanceIdentifierContext<>(null, contSchema, null, schemaContext), contData.build()); @@ -372,12 +373,12 @@ public class NnToXmlTest extends AbstractBodyReaderTest { final DataSchemaNode contSchema = schemaContext.getDataChildByName(cont); - final DataContainerNodeBuilder contData = Builders + final DataContainerNodeBuilder contData = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) contSchema); final DataSchemaNode cont1Schema = ((ContainerSchemaNode) contSchema).getDataChildByName(cont1); - final DataContainerNodeBuilder cont1Data = Builders + final DataContainerNodeBuilder cont1Data = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) cont1Schema); Object value = null; @@ -391,7 +392,7 @@ public class NnToXmlTest extends AbstractBodyReaderTest { .findInstanceDataChildrenByName((DataNodeContainer) cont1Schema, lf11.getLocalName()); final DataSchemaNode schemaLf = Iterables.getFirst(instanceLf, null); - cont1Data.withChild(Builders.leafBuilder((LeafSchemaNode) schemaLf).withValue(value).build()); + cont1Data.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) schemaLf).withValue(value).build()); contData.withChild(cont1Data.build()); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithChoiceTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithChoiceTest.java index a2299de40e..edc3cb7db9 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithChoiceTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithChoiceTest.java @@ -25,8 +25,8 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; @@ -75,14 +75,14 @@ public class NnToXmlWithChoiceTest extends AbstractBodyReaderTest { final DataSchemaNode contSchemaNode = schemaContext .getDataChildByName(contQname); - final DataContainerNodeBuilder dataContainerNodeAttrBuilder = Builders + final DataContainerNodeBuilder dataContainerNodeAttrBuilder = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) contSchemaNode); final DataSchemaNode choiceSchemaNode = ((ContainerSchemaNode) contSchemaNode) .getDataChildByName(choA); assertTrue(choiceSchemaNode instanceof ChoiceSchemaNode); - final DataContainerNodeBuilder dataChoice = Builders + final DataContainerNodeBuilder dataChoice = SchemaAwareBuilders .choiceBuilder((ChoiceSchemaNode) choiceSchemaNode); final List instanceLf = ControllerContext @@ -90,7 +90,7 @@ public class NnToXmlWithChoiceTest extends AbstractBodyReaderTest { (DataNodeContainer) contSchemaNode, lf.getLocalName()); final DataSchemaNode schemaLf = Iterables.getFirst(instanceLf, null); - dataChoice.withChild(Builders.leafBuilder((LeafSchemaNode) schemaLf) + dataChoice.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) schemaLf) .withValue(value).build()); dataContainerNodeAttrBuilder.withChild(dataChoice.build()); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithDataFromSeveralModulesTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithDataFromSeveralModulesTest.java index 2005834bdb..28cf582486 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithDataFromSeveralModulesTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithDataFromSeveralModulesTest.java @@ -28,8 +28,8 @@ import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -94,7 +94,7 @@ public class NnToXmlWithDataFromSeveralModulesTest extends private static NormalizedNodeContext prepareNormalizedNodeContext() { final String rev = "2014-01-17"; - final DataContainerNodeBuilder dataContSchemaContNode = Builders + final DataContainerNodeBuilder dataContSchemaContNode = SchemaAwareBuilders .containerBuilder(schemaContext); final DataContainerNodeBuilder modul1 = buildContBuilderMod1( @@ -123,7 +123,7 @@ public class NnToXmlWithDataFromSeveralModulesTest extends final DataSchemaNode contSchemaNode = schemaContext .getDataChildByName(contQname); - final DataContainerNodeBuilder dataContainerNodeAttrBuilder = Builders + final DataContainerNodeBuilder dataContainerNodeAttrBuilder = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) contSchemaNode); Preconditions.checkState(contSchemaNode instanceof ContainerSchemaNode); @@ -133,14 +133,14 @@ public class NnToXmlWithDataFromSeveralModulesTest extends lf1Qname.getLocalName()); final DataSchemaNode schemaLf1_m1 = Iterables.getFirst(instanceLf1_m1, null); - dataContainerNodeAttrBuilder.withChild(Builders + dataContainerNodeAttrBuilder.withChild(SchemaAwareBuilders .leafBuilder((LeafSchemaNode) schemaLf1_m1) .withValue(lf1Value).build()); final DataSchemaNode contBSchemaNode = ((ContainerSchemaNode) contSchemaNode) .getDataChildByName(contBQname); - final DataContainerNodeBuilder dataContainerB = Builders + final DataContainerNodeBuilder dataContainerB = SchemaAwareBuilders .containerBuilder((ContainerSchemaNode) contBSchemaNode); return dataContainerNodeAttrBuilder.withChild(dataContainerB.build()); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java index 090d5dee87..01d08a12aa 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java @@ -108,8 +108,8 @@ public class BrokerFacadeTest { private DOMDataTreeReadWriteTransaction rwTransaction; private BrokerFacade brokerFacade; - private final NormalizedNode dummyNode = createDummyNode("test:module", "2014-01-09", "interfaces"); - private final FluentFuture>> dummyNodeInFuture = wrapDummyNode(this.dummyNode); + private final NormalizedNode dummyNode = createDummyNode("test:module", "2014-01-09", "interfaces"); + private final FluentFuture> dummyNodeInFuture = wrapDummyNode(this.dummyNode); private final QName qname = TestUtils.buildQName("interfaces","test:module", "2014-01-09"); private final YangInstanceIdentifier instanceID = YangInstanceIdentifier.builder().node(this.qname).build(); private ControllerContext controllerContext; @@ -127,7 +127,7 @@ public class BrokerFacadeTest { DOMDataTreeChangeService.class, Mockito.mock(DOMDataTreeChangeService.class))); } - private static FluentFuture>> wrapDummyNode(final NormalizedNode dummyNode) { + private static FluentFuture> wrapDummyNode(final NormalizedNode dummyNode) { return immediateFluentFuture(Optional.of(dummyNode)); } @@ -138,10 +138,10 @@ public class BrokerFacadeTest { /** * Value of this node shouldn't be important for testing purposes. */ - private static NormalizedNode createDummyNode(final String namespace, final String date, - final String localName) { + private static NormalizedNode createDummyNode(final String namespace, final String date, final String localName) { return Builders.containerBuilder() - .withNodeIdentifier(new NodeIdentifier(QName.create(namespace, date, localName))).build(); + .withNodeIdentifier(new NodeIdentifier(QName.create(namespace, date, localName))) + .build(); } @Test @@ -149,7 +149,7 @@ public class BrokerFacadeTest { when(this.readTransaction.read(any(LogicalDatastoreType.class), any(YangInstanceIdentifier.class))).thenReturn( this.dummyNodeInFuture); - final NormalizedNode actualNode = this.brokerFacade.readConfigurationData(this.instanceID); + final NormalizedNode actualNode = this.brokerFacade.readConfigurationData(this.instanceID); assertSame("readConfigurationData", this.dummyNode, actualNode); } @@ -159,7 +159,7 @@ public class BrokerFacadeTest { when(this.readTransaction.read(any(LogicalDatastoreType.class), any(YangInstanceIdentifier.class))).thenReturn( this.dummyNodeInFuture); - final NormalizedNode actualNode = this.brokerFacade.readOperationalData(this.instanceID); + final NormalizedNode actualNode = this.brokerFacade.readOperationalData(this.instanceID); assertSame("readOperationalData", this.dummyNode, actualNode); } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CnSnToXmlAndJsonInstanceIdentifierTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CnSnToXmlAndJsonInstanceIdentifierTest.java index f55030c293..96100cbb5d 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CnSnToXmlAndJsonInstanceIdentifierTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CnSnToXmlAndJsonInstanceIdentifierTest.java @@ -12,8 +12,6 @@ import static org.junit.Assert.assertTrue; import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; -import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -122,30 +120,29 @@ public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSch } - private static YangInstanceIdentifier createInstanceIdentifier() throws URISyntaxException { + private static YangInstanceIdentifier createInstanceIdentifier() { final List pathArguments = new ArrayList<>(); - pathArguments.add(new NodeIdentifier(QName.create(new URI("instance:identifier:module"), "cont"))); - pathArguments.add(new NodeIdentifier(QName.create(new URI("instance:identifier:module"), "cont1"))); + pathArguments.add(new NodeIdentifier(QName.create("instance:identifier:module", "cont"))); + pathArguments.add(new NodeIdentifier(QName.create("instance:identifier:module", "cont1"))); - final QName qName = QName.create(new URI("augment:module"), "lst11"); + final QName qName = QName.create("augment:module", "lst11"); final Map keyValues = new HashMap<>(); - keyValues.put(QName.create(new URI("augment:module"), "keyvalue111"), "value1"); - keyValues.put(QName.create(new URI("augment:module"), "keyvalue112"), "value2"); + keyValues.put(QName.create("augment:module", "keyvalue111"), "value1"); + keyValues.put(QName.create("augment:module", "keyvalue112"), "value2"); final NodeIdentifierWithPredicates nodeIdentifierWithPredicates = NodeIdentifierWithPredicates.of(qName, keyValues); pathArguments.add(nodeIdentifierWithPredicates); - pathArguments.add(new NodeIdentifier(QName.create(new URI("augment:augment:module"), "lf112"))); + pathArguments.add(new NodeIdentifier(QName.create("augment:augment:module", "lf112"))); return YangInstanceIdentifier.create(pathArguments); } - private static YangInstanceIdentifier createInstanceIdentifierWithLeafList() throws URISyntaxException { + private static YangInstanceIdentifier createInstanceIdentifierWithLeafList() { final List pathArguments = new ArrayList<>(); - pathArguments.add(new NodeIdentifier(QName.create(new URI("instance:identifier:module"), "cont"))); - pathArguments.add(new NodeIdentifier(QName.create(new URI("instance:identifier:module"), "cont1"))); - pathArguments.add(new NodeWithValue<>(QName.create(new URI("augment:module:leaf:list"), "lflst11"), - "lflst11_1")); + pathArguments.add(new NodeIdentifier(QName.create("instance:identifier:module", "cont"))); + pathArguments.add(new NodeIdentifier(QName.create("instance:identifier:module", "cont1"))); + pathArguments.add(new NodeWithValue<>(QName.create("augment:module:leaf:list", "lflst11"), "lflst11_1")); return YangInstanceIdentifier.create(pathArguments); } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CutDataToCorrectDepthTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CutDataToCorrectDepthTest.java index d45519a71f..9b6ff25c63 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CutDataToCorrectDepthTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CutDataToCorrectDepthTest.java @@ -48,17 +48,18 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithV 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.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.ListNodeBuilder; 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.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; @@ -69,9 +70,9 @@ public class CutDataToCorrectDepthTest extends JerseyTest { private static final Logger LOG = LoggerFactory.getLogger(JerseyTest.class); - private static NormalizedNode depth1Cont; - private static NormalizedNode depth2Cont1; - private NormalizedNode globalPayload; + private static NormalizedNode depth1Cont; + private static NormalizedNode depth2Cont1; + private NormalizedNode globalPayload; private static EffectiveModelContext schemaContextModules; private final ControllerContext controllerContext = @@ -88,7 +89,7 @@ public class CutDataToCorrectDepthTest extends JerseyTest { final InstanceIdentifierContext iiWithData = controllerContext.toInstanceIdentifier(identifier); - NormalizedNode data = null; + NormalizedNode data = null; if (identifier.equals("nested-module:depth1-cont/depth2-cont1")) { data = depth2Cont1; } else if (identifier.equals("nested-module:depth1-cont")) { @@ -216,7 +217,7 @@ public class CutDataToCorrectDepthTest extends JerseyTest { target(uri).request(mediaType).put(Entity.entity(responseStr, mediaType)); } - private void verifyResponse(final NormalizedNode nodeData) throws WebApplicationException, IOException { + private void verifyResponse(final NormalizedNode nodeData) throws WebApplicationException, IOException { assertNotNull(this.globalPayload); assertEquals(this.globalPayload, nodeData); this.globalPayload = null; @@ -236,10 +237,10 @@ public class CutDataToCorrectDepthTest extends JerseyTest { return Builders.leafBuilder().withNodeIdentifier(toIdentifier(localName)).withValue(value).build(); } - private static ContainerNode container(final String localName, final DataContainerChild... children) { + private static ContainerNode container(final String localName, final DataContainerChild... children) { final DataContainerNodeBuilder containerBuilder = Builders.containerBuilder(); - for (final DataContainerChild child : children) { + for (final DataContainerChild child : children) { containerBuilder.withChild(child); } containerBuilder.withNodeIdentifier(toIdentifier(localName)); @@ -258,19 +259,18 @@ public class CutDataToCorrectDepthTest extends JerseyTest { return builder.build(); } - private static UnkeyedListEntryNode unkeyedEntry(final String localName, - final DataContainerChild... children) { + private static UnkeyedListEntryNode unkeyedEntry(final String localName, final DataContainerChild... children) { final DataContainerNodeBuilder builder = Builders.unkeyedListEntryBuilder(); builder.withNodeIdentifier(toIdentifier(localName)); - for (final DataContainerChild child : children) { + for (final DataContainerChild child : children) { builder.withChild(child); } return builder.build(); } private static MapNode mapNode(final String localName, final MapEntryNode... entryNodes) { - final CollectionNodeBuilder builder = Builders.mapBuilder(); + final CollectionNodeBuilder builder = Builders.mapBuilder(); builder.withNodeIdentifier(toIdentifier(localName)); for (final MapEntryNode mapEntryNode : entryNodes) { builder.withChild(mapEntryNode); @@ -279,23 +279,23 @@ public class CutDataToCorrectDepthTest extends JerseyTest { } private static MapEntryNode mapEntryNode(final String localName, final int keysNumber, - final DataContainerChild... children) { + final DataContainerChild... children) { final DataContainerNodeBuilder builder = Builders.mapEntryBuilder(); final Map keys = new HashMap<>(); for (int i = 0; i < keysNumber; i++) { - keys.put(children[i].getNodeType(), children[i].getValue()); + keys.put(children[i].getIdentifier().getNodeType(), children[i].body()); } builder.withNodeIdentifier(toIdentifier(localName, keys)); - for (final DataContainerChild child : children) { + for (final DataContainerChild child : children) { builder.withChild(child); } return builder.build(); } private static LeafSetNode leafList(final String localName, final String... children) { - final ListNodeBuilder> builder = Builders.leafSetBuilder(); + final ListNodeBuilder> builder = Builders.leafSetBuilder(); builder.withNodeIdentifier(toIdentifier(localName)); for (final String child : children) { builder.withChild(Builders.leafSetEntryBuilder().withNodeIdentifier(toIdentifier(localName, child)) diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java index 025c1a3443..588689424f 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java @@ -9,35 +9,32 @@ package org.opendaylight.controller.sal.restconf.impl.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture; import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; import java.io.FileNotFoundException; -import java.net.URI; -import java.net.URISyntaxException; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Optional; +import java.util.Set; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; -import org.mockito.Mockito; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException; import org.opendaylight.mdsal.dom.api.DOMRpcResult; @@ -54,13 +51,14 @@ import org.opendaylight.restconf.common.errors.RestconfError.ErrorType; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.ContainerLike; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -69,7 +67,6 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; public class InvokeRpcMethodTest { @@ -96,8 +93,8 @@ public class InvokeRpcMethodTest { uriInfo = mock(UriInfo.class); final MultivaluedMap map = new MultivaluedHashMap<>(); - map.put("prettyPrint", Collections.singletonList("true")); - when(uriInfo.getQueryParameters(any(Boolean.class))).thenReturn(map); + map.put("prettyPrint", List.of("true")); + doReturn(map).when(uriInfo).getQueryParameters(any(Boolean.class)); } /** @@ -108,18 +105,14 @@ public class InvokeRpcMethodTest { @Test @Ignore public void invokeRpcMethodTest() { - try { - controllerContext.findModuleNameByNamespace(new URI("invoke:rpc:module")); - } catch (final URISyntaxException e) { - assertTrue("Uri wasn't created sucessfuly", false); - } + controllerContext.findModuleNameByNamespace(XMLNamespace.of("invoke:rpc:module")); final NormalizedNodeContext payload = prepareDomPayload(); final NormalizedNodeContext rpcResponse = restconfImpl.invokeRpc("invoke-rpc-module:rpc-test", payload, uriInfo); - assertTrue(rpcResponse != null); - assertTrue(rpcResponse.getData() == null); + assertNotNull(rpcResponse); + assertNull(rpcResponse.getData()); } @@ -128,30 +121,29 @@ public class InvokeRpcMethodTest { final Module rpcModule = schema.findModules("invoke-rpc-module").iterator().next(); assertNotNull(rpcModule); final QName rpcQName = QName.create(rpcModule.getQNameModule(), "rpc-test"); - final QName rpcInputQName = QName.create(rpcModule.getQNameModule(),"input"); ContainerLike rpcInputSchemaNode = null; for (final RpcDefinition rpc : rpcModule.getRpcs()) { if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { - rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName); + rpcInputSchemaNode = rpc.getInput(); break; } } assertNotNull(rpcInputSchemaNode); final DataContainerNodeBuilder container = - Builders.containerBuilder(rpcInputSchemaNode); + SchemaAwareBuilders.containerBuilder(rpcInputSchemaNode); final QName contQName = QName.create(rpcModule.getQNameModule(), "cont"); final DataSchemaNode contSchemaNode = rpcInputSchemaNode.getDataChildByName(contQName); assertTrue(contSchemaNode instanceof ContainerSchemaNode); final DataContainerNodeBuilder contNode = - Builders.containerBuilder((ContainerSchemaNode) contSchemaNode); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) contSchemaNode); final QName lfQName = QName.create(rpcModule.getQNameModule(), "lf"); final DataSchemaNode lfSchemaNode = ((ContainerSchemaNode) contSchemaNode).getDataChildByName(lfQName); assertTrue(lfSchemaNode instanceof LeafSchemaNode); final LeafNode lfNode = - Builders.leafBuilder((LeafSchemaNode) lfSchemaNode).withValue("any value").build(); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) lfSchemaNode).withValue("any value").build(); contNode.withChild(lfNode); container.withChild(contNode.build()); @@ -164,26 +156,22 @@ public class InvokeRpcMethodTest { final QName qname = QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast"); doReturn(immediateFailedFluentFuture(new DOMRpcImplementationNotAvailableException("testExeption"))) - .when(brokerFacade).invokeRpc(eq(qname), any()); - - try { - this.restconfImpl.invokeRpc("toaster:cancel-toast", null, uriInfo); - fail("Expected an exception to be thrown."); - } catch (final RestconfDocumentedException e) { - verifyRestconfDocumentedException(e, 0, ErrorType.APPLICATION, ErrorTag.OPERATION_NOT_SUPPORTED, - Optional.empty(), Optional.empty()); - } + .when(brokerFacade).invokeRpc(eq(qname), any()); + + final RestconfDocumentedException ex = assertThrows(RestconfDocumentedException.class, + () -> this.restconfImpl.invokeRpc("toaster:cancel-toast", null, uriInfo)); + verifyRestconfDocumentedException(ex, 0, ErrorType.APPLICATION, ErrorTag.OPERATION_NOT_SUPPORTED, + Optional.empty(), Optional.empty()); } void verifyRestconfDocumentedException(final RestconfDocumentedException restDocumentedException, final int index, final ErrorType expErrorType, final ErrorTag expErrorTag, final Optional expErrorMsg, final Optional expAppTag) { - RestconfError actual = null; - try { - actual = restDocumentedException.getErrors().get(index); - } catch (final ArrayIndexOutOfBoundsException ex) { - fail("RestconfError not found at index " + index); - } + + final List errors = restDocumentedException.getErrors(); + assertTrue("RestconfError not found at index " + index, errors.size() > index); + + RestconfError actual = errors.get(index); assertEquals("getErrorType", expErrorType, actual.getErrorType()); assertEquals("getErrorTag", expErrorTag, actual.getErrorTag()); @@ -209,20 +197,17 @@ public class InvokeRpcMethodTest { final QName path = QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast"); doReturn(immediateFluentFuture(result)).when(brokerFacade).invokeRpc(eq(path), any()); - try { - this.restconfImpl.invokeRpc("toaster:cancel-toast", null, uriInfo); - fail("Expected an exception to be thrown."); - } catch (final RestconfDocumentedException e) { - verifyRestconfDocumentedException(e, 0, ErrorType.TRANSPORT, ErrorTag.OPERATION_FAILED, Optional.of("foo"), - Optional.empty()); - verifyRestconfDocumentedException(e, 1, ErrorType.RPC, ErrorTag.IN_USE, Optional.of("bar"), - Optional.of("app-tag")); - } + final RestconfDocumentedException ex = assertThrows(RestconfDocumentedException.class, + () -> this.restconfImpl.invokeRpc("toaster:cancel-toast", null, uriInfo)); + verifyRestconfDocumentedException(ex, 0, ErrorType.TRANSPORT, ErrorTag.OPERATION_FAILED, Optional.of("foo"), + Optional.empty()); + verifyRestconfDocumentedException(ex, 1, ErrorType.RPC, ErrorTag.IN_USE, Optional.of("bar"), + Optional.of("app-tag")); } @Test public void testInvokeRpcWithNoPayload_Success() { - final NormalizedNode resultObj = null; + final NormalizedNode resultObj = null; final DOMRpcResult expResult = new DefaultDOMRpcResult(resultObj); final QName qname = QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast"); @@ -238,33 +223,25 @@ public class InvokeRpcMethodTest { @Test public void testInvokeRpcWithEmptyOutput() { - final ContainerNode resultObj = Mockito.mock(ContainerNode.class); - Mockito.when(resultObj.getValue()).thenReturn(Collections.emptySet()); + final ContainerNode resultObj = mock(ContainerNode.class); + doReturn(Set.of()).when(resultObj).body(); + doCallRealMethod().when(resultObj).isEmpty(); final DOMRpcResult expResult = new DefaultDOMRpcResult(resultObj); final QName qname = QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast"); doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(eq(qname), any()); - WebApplicationException exceptionToBeThrown = null; - try { - this.restconfImpl.invokeRpc("toaster:cancel-toast", null, uriInfo); - } catch (final WebApplicationException exception) { - exceptionToBeThrown = exception; - - } - Assert.assertNotNull("WebApplicationException with status code 204 is expected.", exceptionToBeThrown); - Assert.assertEquals(Response.Status.NO_CONTENT.getStatusCode(), exceptionToBeThrown.getResponse().getStatus()); + WebApplicationException exceptionToBeThrown = assertThrows(WebApplicationException.class, + () -> this.restconfImpl.invokeRpc("toaster:cancel-toast", null, uriInfo)); + assertEquals(Response.Status.NO_CONTENT.getStatusCode(), exceptionToBeThrown.getResponse().getStatus()); } @Test public void testInvokeRpcMethodWithBadMethodName() { - try { - this.restconfImpl.invokeRpc("toaster:bad-method", null, uriInfo); - fail("Expected an exception"); - } catch (final RestconfDocumentedException e) { - verifyRestconfDocumentedException(e, 0, ErrorType.RPC, ErrorTag.UNKNOWN_ELEMENT, - Optional.empty(), Optional.empty()); - } + final RestconfDocumentedException ex = assertThrows(RestconfDocumentedException.class, + () -> this.restconfImpl.invokeRpc("toaster:bad-method", null, uriInfo)); + verifyRestconfDocumentedException(ex, 0, ErrorType.RPC, ErrorTag.UNKNOWN_ELEMENT, + Optional.empty(), Optional.empty()); } @Test @@ -276,13 +253,12 @@ public class InvokeRpcMethodTest { final Module rpcModule = schemaContext.findModules("toaster").iterator().next(); assertNotNull(rpcModule); final QName rpcQName = QName.create(rpcModule.getQNameModule(), "make-toast"); - final QName rpcInputQName = QName.create(rpcModule.getQNameModule(),"input"); RpcDefinition rpcDef = null; ContainerLike rpcInputSchemaNode = null; for (final RpcDefinition rpc : rpcModule.getRpcs()) { if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { - rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName); + rpcInputSchemaNode = rpc.getInput(); rpcDef = rpc; break; } @@ -291,7 +267,7 @@ public class InvokeRpcMethodTest { assertNotNull(rpcDef); assertNotNull(rpcInputSchemaNode); final DataContainerNodeBuilder containerBuilder = - Builders.containerBuilder(rpcInputSchemaNode); + SchemaAwareBuilders.containerBuilder(rpcInputSchemaNode); final NormalizedNodeContext payload = new NormalizedNodeContext(new InstanceIdentifierContext<>(null, rpcInputSchemaNode, @@ -308,13 +284,10 @@ public class InvokeRpcMethodTest { @Test public void testThrowExceptionWhenSlashInModuleName() { - try { - this.restconfImpl.invokeRpc("toaster/slash", null, uriInfo); - fail("Expected an exception."); - } catch (final RestconfDocumentedException e) { - verifyRestconfDocumentedException(e, 0, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, - Optional.empty(), Optional.empty()); - } + final RestconfDocumentedException ex = assertThrows(RestconfDocumentedException.class, + () -> this.restconfImpl.invokeRpc("toaster/slash", null, uriInfo)); + verifyRestconfDocumentedException(ex, 0, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, + Optional.empty(), Optional.empty()); } @Test @@ -329,7 +302,7 @@ public class InvokeRpcMethodTest { ContainerLike rpcOutputSchemaNode = null; for (final RpcDefinition rpc : rpcModule.getRpcs()) { if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { - rpcOutputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcOutputQName); + rpcOutputSchemaNode = rpc.getOutput(); rpcDef = rpc; break; } @@ -337,12 +310,12 @@ public class InvokeRpcMethodTest { assertNotNull(rpcDef); assertNotNull(rpcOutputSchemaNode); final DataContainerNodeBuilder containerBuilder = - Builders.containerBuilder(rpcOutputSchemaNode); + SchemaAwareBuilders.containerBuilder(rpcOutputSchemaNode); final DataSchemaNode leafSchema = rpcOutputSchemaNode .getDataChildByName(QName.create(rpcModule.getQNameModule(), "textOut")); assertTrue(leafSchema instanceof LeafSchemaNode); final NormalizedNodeBuilder> leafBuilder = - Builders.leafBuilder((LeafSchemaNode) leafSchema); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) leafSchema); leafBuilder.withValue("brm"); containerBuilder.withChild(leafBuilder.build()); final ContainerNode container = containerBuilder.build(); @@ -366,7 +339,7 @@ public class InvokeRpcMethodTest { * invoked. */ @Test - @Ignore // FIXME find how to use mockito for it public void testMountedRpcCallNoPayload_Success() throws Exception { + // FIXME find how to use mockito for it } } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java index f09360ae5a..25c534d191 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java @@ -161,7 +161,7 @@ public class JSONRestconfServiceImplTest { assertTrue("Expected MapEntryNode. Actual " + capturedNode.getValue().getClass(), capturedNode.getValue() instanceof MapEntryNode); final MapEntryNode actualNode = (MapEntryNode) capturedNode.getValue(); - assertEquals("MapEntryNode node type", INTERFACE_QNAME, actualNode.getNodeType()); + assertEquals("MapEntryNode node type", INTERFACE_QNAME, actualNode.getIdentifier().getNodeType()); verifyLeafNode(actualNode, NAME_QNAME, "eth0"); verifyLeafNode(actualNode, TYPE_QNAME, "ethernetCsmacd"); verifyLeafNode(actualNode, ENABLED_QNAME, Boolean.FALSE); @@ -192,7 +192,7 @@ public class JSONRestconfServiceImplTest { assertTrue("Expected ContainerNode", capturedNode.getValue() instanceof ContainerNode); final ContainerNode actualNode = (ContainerNode) capturedNode.getValue(); - assertEquals("ContainerNode node type", TEST_CONT1_QNAME, actualNode.getNodeType()); + assertEquals("ContainerNode node type", TEST_CONT1_QNAME, actualNode.getIdentifier().getNodeType()); verifyLeafNode(actualNode, TEST_LF11_QNAME, "lf11 data"); verifyLeafNode(actualNode, TEST_LF12_QNAME, "lf12 data"); } @@ -237,9 +237,9 @@ public class JSONRestconfServiceImplTest { assertTrue("Expected ContainerNode", capturedNode.getValue() instanceof ContainerNode); final ContainerNode actualNode = (ContainerNode) capturedNode.getValue(); - assertEquals("ContainerNode node type", INTERFACES_QNAME, actualNode.getNodeType()); + assertEquals("ContainerNode node type", INTERFACES_QNAME, actualNode.getIdentifier().getNodeType()); - final java.util.Optional> mapChild = actualNode.getChild( + final java.util.Optional mapChild = actualNode.findChildByArg( new NodeIdentifier(INTERFACE_QNAME)); assertEquals(INTERFACE_QNAME.toString() + " present", true, mapChild.isPresent()); assertTrue("Expected MapNode. Actual " + mapChild.get().getClass(), mapChild.get() instanceof MapNode); @@ -247,7 +247,7 @@ public class JSONRestconfServiceImplTest { final NodeIdentifierWithPredicates entryNodeID = NodeIdentifierWithPredicates.of( INTERFACE_QNAME, NAME_QNAME, "eth0"); - final java.util.Optional entryChild = mapNode.getChild(entryNodeID); + final java.util.Optional entryChild = mapNode.findChildByArg(entryNodeID); assertEquals(entryNodeID.toString() + " present", true, entryChild.isPresent()); final MapEntryNode entryNode = entryChild.get(); verifyLeafNode(entryNode, NAME_QNAME, "eth0"); @@ -278,7 +278,7 @@ public class JSONRestconfServiceImplTest { assertTrue("Expected ContainerNode", capturedNode.getValue() instanceof ContainerNode); final ContainerNode actualNode = (ContainerNode) capturedNode.getValue(); - assertEquals("ContainerNode node type", TEST_CONT1_QNAME, actualNode.getNodeType()); + assertEquals("ContainerNode node type", TEST_CONT1_QNAME, actualNode.getIdentifier().getNodeType()); verifyLeafNode(actualNode, TEST_LF11_QNAME, "lf11 data"); verifyLeafNode(actualNode, TEST_LF12_QNAME, "lf12 data"); } @@ -417,7 +417,7 @@ public class JSONRestconfServiceImplTest { @SuppressWarnings("rawtypes") @Test public void testInvokeRpcWithInput() throws Exception { - final DOMRpcResult expResult = new DefaultDOMRpcResult((NormalizedNode)null); + final DOMRpcResult expResult = new DefaultDOMRpcResult((NormalizedNode)null); doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(eq(MAKE_TOAST_QNAME), any(NormalizedNode.class)); @@ -440,7 +440,7 @@ public class JSONRestconfServiceImplTest { @Test public void testInvokeRpcWithNoInput() throws Exception { - final DOMRpcResult expResult = new DefaultDOMRpcResult((NormalizedNode)null); + final DOMRpcResult expResult = new DefaultDOMRpcResult((NormalizedNode)null); doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(any(QName.class), any()); final String uriPath = "toaster:cancel-toast"; @@ -454,7 +454,7 @@ public class JSONRestconfServiceImplTest { @Test public void testInvokeRpcWithOutput() throws Exception { - final NormalizedNode outputNode = ImmutableContainerNodeBuilder.create() + final NormalizedNode outputNode = ImmutableContainerNodeBuilder.create() .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TEST_OUTPUT_QNAME)) .withChild(ImmutableNodes.leafNode(TEXT_OUT_QNAME, "foo")).build(); final DOMRpcResult expResult = new DefaultDOMRpcResult(outputNode); @@ -521,10 +521,10 @@ public class JSONRestconfServiceImplTest { new Object[]{INTERFACE_QNAME, NAME_QNAME, "eth0"}); } - void verifyLeafNode(final DataContainerNode parent, final QName leafType, final Object leafValue) { - final java.util.Optional> leafChild = parent.getChild(new NodeIdentifier(leafType)); + void verifyLeafNode(final DataContainerNode parent, final QName leafType, final Object leafValue) { + final java.util.Optional leafChild = parent.findChildByArg(new NodeIdentifier(leafType)); assertTrue(leafType.toString() + " present", leafChild.isPresent()); - assertEquals(leafType.toString() + " value", leafValue, leafChild.get().getValue()); + assertEquals(leafType.toString() + " value", leafValue, leafChild.get().body()); } void verifyPath(final YangInstanceIdentifier path, final Object... expArgs) { diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestCodecExceptionsTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestCodecExceptionsTest.java index 6a922dc898..bd2d48b639 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestCodecExceptionsTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestCodecExceptionsTest.java @@ -15,18 +15,14 @@ import org.junit.Test; import org.opendaylight.netconf.sal.restconf.impl.RestCodec; import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; +import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; public class RestCodecExceptionsTest { - - private static final SchemaPath PATH = SchemaPath.create(true, QName.create("test", "2014-05-30", "test")); - @Test public void serializeExceptionTest() { - final IllegalArgumentCodec codec = RestCodec.from(BaseTypes.bitsTypeBuilder(PATH).build(), - null, null); + final IllegalArgumentCodec codec = RestCodec.from( + BaseTypes.bitsTypeBuilder(QName.create("test", "2014-05-30", "test")).build(), null, null); final String serializedValue = (String) codec.serialize("incorrect value"); // set // expected assertEquals("incorrect value", serializedValue); @@ -39,5 +35,4 @@ public class RestCodecExceptionsTest { final IllegalArgumentCodec codec = RestCodec.from(mockedIidentityrefType, null, null); assertNull(codec.deserialize("incorrect value")); } - } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java index 2714f33425..65fa8e08a0 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java @@ -20,7 +20,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableMap; -import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -55,7 +54,6 @@ import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; 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; @@ -92,7 +90,6 @@ public class RestGetOperationTest extends JerseyTest { private static EffectiveModelContext schemaContextModules; private static EffectiveModelContext schemaContextBehindMountPoint; - @SuppressWarnings("rawtypes") private static NormalizedNode answerFromGet; private BrokerFacade brokerFacade; @@ -168,7 +165,6 @@ public class RestGetOperationTest extends JerseyTest { /** * MountPoint test. URI represents mount point. */ - @SuppressWarnings("unchecked") @Test public void getDataWithUrlMountPoint() throws Exception { when(brokerFacade.readConfigurationData(any(DOMMountPoint.class), any(YangInstanceIdentifier.class), @@ -218,7 +214,7 @@ public class RestGetOperationTest extends JerseyTest { } private static QName newTestModuleQName(final String localPart) throws Exception { - return QName.create(URI.create("test:module"), Revision.of("2014-01-09"), localPart); + return QName.create("test:module", "2014-01-09", localPart); } @Test @@ -232,7 +228,6 @@ public class RestGetOperationTest extends JerseyTest { assertEquals(200, get(uri, MediaType.APPLICATION_XML)); } - @SuppressWarnings("unchecked") @Test public void getDataWithIdentityrefInURL() throws Exception { setControllerContext(schemaContextTestModule); @@ -243,9 +238,9 @@ public class RestGetOperationTest extends JerseyTest { newTestModuleQName("name"), "foo"); final YangInstanceIdentifier iid = YangInstanceIdentifier.builder().node(newTestModuleQName("modules")) .node(moduleQN).nodeWithKey(moduleQN, keyMap).build(); - @SuppressWarnings("rawtypes") - final NormalizedNode data = ImmutableMapNodeBuilder.create().withNodeIdentifier( - new NodeIdentifier(moduleQN)).withChild(ImmutableNodes.mapEntryBuilder() + final NormalizedNode data = ImmutableMapNodeBuilder.create() + .withNodeIdentifier(new NodeIdentifier(moduleQN)) + .withChild(ImmutableNodes.mapEntryBuilder() .withNodeIdentifier(NodeIdentifierWithPredicates.of(moduleQN, keyMap)) .withChild(ImmutableNodes.leafNode(newTestModuleQName("type"), newTestModuleQName("test-identity"))) .withChild(ImmutableNodes.leafNode(newTestModuleQName("name"), "foo")) @@ -582,7 +577,6 @@ public class RestGetOperationTest extends JerseyTest { * type string; * } */ - @SuppressWarnings("rawtypes") private static NormalizedNode prepareCnDataForMountPointTest(final boolean wrapToCont) throws Exception { final String testModuleDate = "2014-01-09"; final ContainerNode contChild = Builders @@ -602,21 +596,17 @@ public class RestGetOperationTest extends JerseyTest { } - @SuppressWarnings("unchecked") private void mockReadOperationalDataMethod() { when(brokerFacade.readOperationalData(any(YangInstanceIdentifier.class))).thenReturn(answerFromGet); } - @SuppressWarnings("unchecked") private void mockReadConfigurationDataMethod() { when(brokerFacade.readConfigurationData(any(YangInstanceIdentifier.class), isNull())) .thenReturn(answerFromGet); } - @SuppressWarnings("rawtypes") private static NormalizedNode prepareCnDataForSlashesBehindMountPointTest() throws Exception { - return ImmutableMapEntryNodeBuilder - .create() + return ImmutableMapEntryNodeBuilder.create() .withNodeIdentifier( TestUtils.getNodeIdentifierPredicate("lst1", "test:module", "2014-01-09", "lf11", "GigabitEthernet0/0/0/0")) @@ -680,7 +670,6 @@ public class RestGetOperationTest extends JerseyTest { getDataWithInvalidDepthParameterTest(mockInfo); } - @SuppressWarnings({"rawtypes", "unchecked"}) private void getDataWithInvalidDepthParameterTest(final UriInfo uriInfo) { try { final QName qNameDepth1Cont = QName.create("urn:nested:module", "2014-06-3", "depth1-cont"); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java index 19eeda240a..3aa6a9c8cb 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java @@ -129,7 +129,6 @@ public class RestPostOperationTest extends JerseyTest { final ArgumentCaptor instanceIdCaptor = ArgumentCaptor.forClass(YangInstanceIdentifier.class); - @SuppressWarnings("rawtypes") final ArgumentCaptor compNodeCaptor = ArgumentCaptor.forClass(NormalizedNode.class); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java index 480ee30d5d..b9164ac11b 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java @@ -65,7 +65,6 @@ public class RestPutConfigTest { final QName qNameKey = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "name"); final NodeIdentifierWithPredicates identWithPredicates = NodeIdentifierWithPredicates.of(qName, qNameKey, "key"); - Mockito.when(data.getNodeType()).thenReturn(qName); Mockito.when(data.getIdentifier()).thenReturn(identWithPredicates); final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data); @@ -87,7 +86,6 @@ public class RestPutConfigTest { final QName qNameSubKey = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "sub-name"); final NodeIdentifierWithPredicates identWithPredicates = NodeIdentifierWithPredicates.of(qName, qNameSubKey, "subkey"); - Mockito.when(data.getNodeType()).thenReturn(qName); Mockito.when(data.getIdentifier()).thenReturn(identWithPredicates); final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data); @@ -115,7 +113,6 @@ public class RestPutConfigTest { final QName qNameKey = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "name"); final NodeIdentifierWithPredicates identWithPredicates = NodeIdentifierWithPredicates.of(qName, qNameKey, "notSameKey"); - Mockito.when(data.getNodeType()).thenReturn(qName); Mockito.when(data.getIdentifier()).thenReturn(identWithPredicates); final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data); @@ -128,7 +125,7 @@ public class RestPutConfigTest { this.restconfService.updateConfigurationData(identifier, payload, uriInfo); } - private void mockingBrokerPut(final YangInstanceIdentifier yii, final NormalizedNode data) { + private void mockingBrokerPut(final YangInstanceIdentifier yii, final NormalizedNode data) { final PutResult result = Mockito.mock(PutResult.class); Mockito.when(this.brokerFacade.commitConfigurationDataPut(schemaContext, yii, data, null, null)) .thenReturn(result); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java index cc127d5e40..780dcf32f6 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java @@ -66,8 +66,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; @@ -189,19 +189,19 @@ public class RestconfImplTest { "2014-01-14", "create-notification-stream")).when(schemaNode).getQName(); doReturn(null).when(iiCtx).getMountPoint(); - final Set> children = new HashSet<>(); - final DataContainerChild child = mock(DataContainerChild.class, + final Set children = new HashSet<>(); + final DataContainerChild child = mock(DataContainerChild.class, Mockito.withSettings().extraInterfaces(LeafSetNode.class)); final LeafSetEntryNode entryNode = mock(LeafSetEntryNode.class); - when(entryNode.getValue()).thenReturn("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)toastDone"); - when(((LeafSetNode) child).getValue()).thenReturn(Sets.newHashSet(entryNode)); + when(entryNode.body()).thenReturn("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)toastDone"); + when(((LeafSetNode) child).body()).thenReturn(Sets.newHashSet(entryNode)); children.add(child); - final NormalizedNode normalizedNode = mock(NormalizedNode.class, + final NormalizedNode normalizedNode = mock(NormalizedNode.class, Mockito.withSettings().extraInterfaces(ContainerNode.class)); doReturn(normalizedNode).when(payload).getData(); - doReturn(children).when(normalizedNode).getValue(); + doReturn(children).when(normalizedNode).body(); // register notification final NormalizedNodeContext context = this.restconfImpl @@ -219,35 +219,37 @@ public class RestconfImplTest { .getRestconfModuleRestConfSchemaNode(restconfModule, Draft02.RestConfModule.STREAM_LIST_SCHEMA_NODE); final ListSchemaNode listStreamSchemaNode = (ListSchemaNode) streamSchemaNode; final DataContainerNodeBuilder streamNodeValues = - Builders.mapEntryBuilder(listStreamSchemaNode); + SchemaAwareBuilders.mapEntryBuilder(listStreamSchemaNode); List instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "name"); final DataSchemaNode nameSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); - streamNodeValues.withChild(Builders.leafBuilder((LeafSchemaNode) nameSchemaNode).withValue("").build()); + streamNodeValues.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) nameSchemaNode) + .withValue("") + .build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "description"); final DataSchemaNode descriptionSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); - streamNodeValues.withChild( - Builders.leafBuilder((LeafSchemaNode) nameSchemaNode).withValue("DESCRIPTION_PLACEHOLDER").build()); + streamNodeValues.withChild(SchemaAwareBuilders.leafBuilder((LeafSchemaNode) nameSchemaNode) + .withValue("DESCRIPTION_PLACEHOLDER") + .build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "replay-support"); final DataSchemaNode replaySupportSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); streamNodeValues.withChild( - Builders.leafBuilder((LeafSchemaNode) replaySupportSchemaNode).withValue(Boolean.TRUE).build()); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) replaySupportSchemaNode).withValue(Boolean.TRUE).build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "replay-log-creation-time"); final DataSchemaNode replayLogCreationTimeSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); streamNodeValues.withChild( - Builders.leafBuilder((LeafSchemaNode) replayLogCreationTimeSchemaNode).withValue("").build()); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) replayLogCreationTimeSchemaNode).withValue("").build()); instanceDataChildrenByName = ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "events"); final DataSchemaNode eventsSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null); streamNodeValues.withChild( - Builders.leafBuilder((LeafSchemaNode) eventsSchemaNode).withValue(Empty.getInstance()).build()); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) eventsSchemaNode).withValue(Empty.getInstance()).build()); assertNotNull(streamNodeValues.build()); - } /** diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/TestUtils.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/TestUtils.java index 7c03805add..d96cc770d5 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/TestUtils.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/TestUtils.java @@ -19,8 +19,6 @@ import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; -import java.net.URI; -import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.util.ArrayList; @@ -39,11 +37,12 @@ import javax.xml.transform.stream.StreamResult; import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -160,11 +159,7 @@ public final class TestUtils { } public static QName buildQName(final String name, final String uri, final String date, final String prefix) { - try { - return QName.create(new URI(uri), Revision.ofNullable(date), name); - } catch (final URISyntaxException e) { - return null; - } + return QName.create(XMLNamespace.of(uri), Revision.ofNullable(date), name); } public static QName buildQName(final String name, final String uri, final String date) { @@ -233,7 +228,7 @@ public final class TestUtils { return NodeIdentifierWithPredicates.of(QName.create(namespace, revision, localName), predicate); } - public static NormalizedNode prepareNormalizedNodeWithIetfInterfacesInterfacesData() throws ParseException { + public static NormalizedNode prepareNormalizedNodeWithIetfInterfacesInterfacesData() throws ParseException { final String ietfInterfacesDate = "2013-07-04"; final String namespace = "urn:ietf:params:xml:ns:yang:ietf-interfaces"; final DataContainerNodeBuilder mapEntryNode = diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URIParametersParsing.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URIParametersParsing.java index 52433d185f..e11f174e35 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URIParametersParsing.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URIParametersParsing.java @@ -41,8 +41,8 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerLike; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -52,7 +52,6 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; public class URIParametersParsing { @@ -115,26 +114,24 @@ public class URIParametersParsing { final Module rpcSalRemoteModule = schema.findModule("sal-remote", Revision.of("2014-01-14")).get(); final QName rpcQName = QName.create(rpcSalRemoteModule.getQNameModule(), "create-data-change-event-subscription"); - final QName rpcInputQName = - QName.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote", "2014-01-14", "input"); final RpcDefinition rpcDef = Mockito.mock(RpcDefinition.class); ContainerLike rpcInputSchemaNode = null; for (final RpcDefinition rpc : rpcSalRemoteModule.getRpcs()) { if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { - rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName); + rpcInputSchemaNode = rpc.getInput(); break; } } assertNotNull("RPC ContainerSchemaNode was not found!", rpcInputSchemaNode); final DataContainerNodeBuilder container = - Builders.containerBuilder(rpcInputSchemaNode); + SchemaAwareBuilders.containerBuilder(rpcInputSchemaNode); final QName pathQName = QName.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote", "2014-01-14", "path"); final DataSchemaNode pathSchemaNode = rpcInputSchemaNode.getDataChildByName(pathQName); assertTrue(pathSchemaNode instanceof LeafSchemaNode); - final LeafNode pathNode = Builders.leafBuilder((LeafSchemaNode) pathSchemaNode) + final LeafNode pathNode = SchemaAwareBuilders.leafBuilder((LeafSchemaNode) pathSchemaNode) .withValue(YangInstanceIdentifier.builder() .node(QName.create("urn:opendaylight:inventory", "2013-08-19", "nodes")).build()).build(); container.withChild(pathNode); @@ -142,19 +139,19 @@ public class URIParametersParsing { final AugmentationSchemaNode augmentationSchema = requireNonNull(rpcInputSchemaNode.getAvailableAugmentations() .iterator().next()); final DataContainerNodeBuilder augmentationBuilder = - Builders.augmentationBuilder(augmentationSchema); + SchemaAwareBuilders.augmentationBuilder(augmentationSchema); final QName dataStoreQName = QName.create("urn:sal:restconf:event:subscription", "2014-07-08", "datastore"); final DataSchemaNode dsSchemaNode = augmentationSchema.getDataChildByName(dataStoreQName); assertTrue(dsSchemaNode instanceof LeafSchemaNode); - final LeafNode dsNode = Builders.leafBuilder((LeafSchemaNode) dsSchemaNode) + final LeafNode dsNode = SchemaAwareBuilders.leafBuilder((LeafSchemaNode) dsSchemaNode) .withValue(datastore).build(); augmentationBuilder.withChild(dsNode); final QName scopeQName = QName.create("urn:sal:restconf:event:subscription", "2014-07-08", "scope"); final DataSchemaNode scopeSchemaNode = augmentationSchema.getDataChildByName(scopeQName); assertTrue(scopeSchemaNode instanceof LeafSchemaNode); - final LeafNode scopeNode = Builders.leafBuilder((LeafSchemaNode) scopeSchemaNode) + final LeafNode scopeNode = SchemaAwareBuilders.leafBuilder((LeafSchemaNode) scopeSchemaNode) .withValue(scope).build(); augmentationBuilder.withChild(scopeNode); @@ -163,7 +160,7 @@ public class URIParametersParsing { final DataSchemaNode outputSchemaNode = augmentationSchema.getDataChildByName(outputQName); assertTrue(outputSchemaNode instanceof LeafSchemaNode); final LeafNode outputNode = - Builders.leafBuilder((LeafSchemaNode) outputSchemaNode).withValue("XML").build(); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) outputSchemaNode).withValue("XML").build(); augmentationBuilder.withChild(outputNode); container.withChild(augmentationBuilder.build()); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/rest/impl/DepthAwareNormalizedNodeWriterTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/rest/impl/DepthAwareNormalizedNodeWriterTest.java index c086c98cb5..58debcbbf6 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/rest/impl/DepthAwareNormalizedNodeWriterTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/rest/impl/DepthAwareNormalizedNodeWriterTest.java @@ -61,13 +61,13 @@ public class DepthAwareNormalizedNodeWriterTest { private NodeIdentifier mapNodeIdentifier; private NodeIdentifierWithPredicates mapEntryNodeIdentifier; private NodeIdentifier leafSetNodeIdentifier; - private NodeWithValue leafSetEntryNodeIdentifier; + private NodeWithValue leafSetEntryNodeIdentifier; private NodeIdentifier keyLeafNodeIdentifier; private NodeIdentifier anotherLeafNodeIdentifier; - private Collection> containerNodeValue; + private Collection containerNodeValue; private Collection mapNodeValue; - private Collection> mapEntryNodeValue; + private Collection mapEntryNodeValue; private Collection> leafSetNodeValue; private String leafSetEntryNodeValue; private String keyLeafNodeValue; @@ -97,31 +97,31 @@ public class DepthAwareNormalizedNodeWriterTest { mapEntryNodeIdentifier = NodeIdentifierWithPredicates.of( QName.create("namespace", "list-entry"), mapEntryNodeKey, keyLeafNodeValue); when(mapEntryNodeData.getIdentifier()).thenReturn(mapEntryNodeIdentifier); - when(mapEntryNodeData.getChild(keyLeafNodeIdentifier)).thenReturn(Optional.of(keyLeafNodeData)); + when(mapEntryNodeData.findChildByArg(keyLeafNodeIdentifier)).thenReturn(Optional.of(keyLeafNodeData)); - when(keyLeafNodeData.getValue()).thenReturn(keyLeafNodeValue); + when(keyLeafNodeData.body()).thenReturn(keyLeafNodeValue); when(keyLeafNodeData.getIdentifier()).thenReturn(keyLeafNodeIdentifier); anotherLeafNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "another-field")); anotherLeafNodeValue = "another-value"; - when(anotherLeafNodeData.getValue()).thenReturn(anotherLeafNodeValue); + when(anotherLeafNodeData.body()).thenReturn(anotherLeafNodeValue); when(anotherLeafNodeData.getIdentifier()).thenReturn(anotherLeafNodeIdentifier); // values - when(leafSetEntryNodeData.getValue()).thenReturn(leafSetEntryNodeValue); + when(leafSetEntryNodeData.body()).thenReturn(leafSetEntryNodeValue); leafSetNodeValue = Collections.singletonList(leafSetEntryNodeData); - when(leafSetNodeData.getValue()).thenReturn(leafSetNodeValue); + when(leafSetNodeData.body()).thenReturn(leafSetNodeValue); containerNodeValue = Collections.singleton(leafSetNodeData); - when(containerNodeData.getValue()).thenReturn(containerNodeValue); + when(containerNodeData.body()).thenReturn(containerNodeValue); mapEntryNodeValue = Sets.newHashSet(keyLeafNodeData, anotherLeafNodeData); - when(mapEntryNodeData.getValue()).thenReturn(mapEntryNodeValue); + when(mapEntryNodeData.body()).thenReturn(mapEntryNodeValue); mapNodeValue = Collections.singleton(mapEntryNodeData); - when(mapNodeData.getValue()).thenReturn(mapNodeValue); + when(mapNodeData.body()).thenReturn(mapNodeValue); } /** diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java index fef6c1f154..b62c399127 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java @@ -9,19 +9,14 @@ package org.opendaylight.netconf.sal.streams.listeners; import static java.util.Objects.requireNonNull; import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import com.google.common.collect.Lists; import java.io.FileNotFoundException; -import java.net.URI; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.Set; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -32,27 +27,28 @@ import org.opendaylight.controller.sal.restconf.impl.test.TestUtils; import org.opendaylight.mdsal.dom.api.DOMNotification; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType; -import org.opendaylight.yangtools.util.SingletonSet; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; 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; +import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class NotificationListenerTest { - private static final QNameModule MODULE = QNameModule.create(URI.create("notifi:mod"), Revision.of("2016-11-23")); + private static final QNameModule MODULE = QNameModule.create(XMLNamespace.of("notifi:mod"), + Revision.of("2016-11-23")); private static EffectiveModelContext schemaContext; @@ -69,7 +65,7 @@ public class NotificationListenerTest { } @Test - public void notifi_leafTest() throws Exception { + public void notifi_leafTest() { final Absolute schemaPathNotifi = Absolute.of(QName.create(MODULE, "notifi-leaf")); final DOMNotification notificationData = mock(DOMNotification.class); @@ -89,7 +85,7 @@ public class NotificationListenerTest { } @Test - public void notifi_cont_leafTest() throws Exception { + public void notifi_cont_leafTest() { final Absolute schemaPathNotifi = Absolute.of(QName.create(MODULE, "notifi-cont")); final DOMNotification notificationData = mock(DOMNotification.class); @@ -111,17 +107,15 @@ public class NotificationListenerTest { } @Test - public void notifi_list_Test() throws Exception { + public void notifi_list_Test() { final Absolute schemaPathNotifi = Absolute.of(QName.create(MODULE, "notifi-list")); - final DOMNotification notificationData = mock(DOMNotification.class); - - final LeafNode leaf = mockLeaf(QName.create(MODULE, "lf")); - final MapEntryNode entry = mockMapEntry(QName.create(MODULE, "lst"), leaf); - final MapNode list = mockList(QName.create(MODULE, "lst"), entry); - final ContainerNode cont = mockCont(QName.create(MODULE, "cont"), list); - final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), cont); + final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), ImmutableNodes.mapNodeBuilder() + .withNodeIdentifier(NodeIdentifier.create(QName.create(MODULE, "lst"))) + .withChild(mockMapEntry(QName.create(MODULE, "lst"), mockLeaf(QName.create(MODULE, "lf")))) + .build()); + final DOMNotification notificationData = mock(DOMNotification.class); when(notificationData.getType()).thenReturn(schemaPathNotifi); when(notificationData.getBody()).thenReturn(notifiBody); @@ -135,7 +129,7 @@ public class NotificationListenerTest { } @Test - public void notifi_grpTest() throws Exception { + public void notifi_grpTest() { final Absolute schemaPathNotifi = Absolute.of(QName.create(MODULE, "notifi-grp")); final DOMNotification notificationData = mock(DOMNotification.class); @@ -154,7 +148,7 @@ public class NotificationListenerTest { } @Test - public void notifi_augmTest() throws Exception { + public void notifi_augmTest() { final Absolute schemaPathNotifi = Absolute.of(QName.create(MODULE, "notifi-augm")); final DOMNotification notificationData = mock(DOMNotification.class); @@ -175,59 +169,36 @@ public class NotificationListenerTest { private static AugmentationNode mockAugm(final LeafNode leaf) { final AugmentationNode augm = mock(AugmentationNode.class); - final AugmentationIdentifier augmId = new AugmentationIdentifier(SingletonSet.of(leaf.getNodeType())); + final AugmentationIdentifier augmId = new AugmentationIdentifier(Set.of(leaf.getIdentifier().getNodeType())); when(augm.getIdentifier()).thenReturn(augmId); - final Collection> childs = new ArrayList<>(); + final Collection childs = new ArrayList<>(); childs.add(leaf); - when(augm.getValue()).thenReturn(childs); + when(augm.body()).thenReturn(childs); return augm; } private static MapEntryNode mockMapEntry(final QName entryQName, final LeafNode leaf) { - final MapEntryNode entry = mock(MapEntryNode.class); - final Map keyValues = new HashMap<>(); - keyValues.put(leaf.getNodeType(), "value"); - final NodeIdentifierWithPredicates nodeId = NodeIdentifierWithPredicates.of(leaf.getNodeType(), keyValues); - when(entry.getIdentifier()).thenReturn(nodeId); - when(entry.getChild(any())).thenReturn(Optional.of(leaf)); - - final Collection> childs = new ArrayList<>(); - childs.add(leaf); - - when(entry.getValue()).thenReturn(childs); - return entry; + return Builders.mapEntryBuilder() + .withNodeIdentifier(NodeIdentifierWithPredicates.of(entryQName, leaf.getIdentifier().getNodeType(), + leaf.body())) + .withChild(leaf) + .build(); } - private static MapNode mockList(final QName listQName, final MapEntryNode... entries) { - final MapNode list = mock(MapNode.class); - when(list.getIdentifier()).thenReturn(NodeIdentifier.create(listQName)); - when(list.getValue()).thenReturn(Lists.newArrayList(entries)); - return list; - } - - private static ContainerNode mockCont(final QName contQName, - final DataContainerChild child) { - final ContainerNode cont = mock(ContainerNode.class); - when(cont.getIdentifier()).thenReturn(NodeIdentifier.create(contQName)); - - final Collection> childs = new ArrayList<>(); - childs.add(child); - when(cont.getValue()).thenReturn(childs); - return cont; + private static ContainerNode mockCont(final QName contQName, final DataContainerChild child) { + return Builders.containerBuilder() + .withNodeIdentifier(NodeIdentifier.create(contQName)) + .withChild(child) + .build(); } private static LeafNode mockLeaf(final QName leafQName) { - final LeafNode child = mock(LeafNode.class); - when(child.getNodeType()).thenReturn(leafQName); - when(child.getIdentifier()).thenReturn(NodeIdentifier.create(leafQName)); - when(child.getValue()).thenReturn("value"); - return child; + return ImmutableNodes.leafNode(leafQName, "value"); } - private String prepareJson(final DOMNotification notificationData, final Absolute schemaPathNotifi) - throws Exception { + private String prepareJson(final DOMNotification notificationData, final Absolute schemaPathNotifi) { final List paths = new ArrayList<>(); paths.add(schemaPathNotifi.asSchemaPath()); final List listNotifi = diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/restconf/rev131019/restconf/restconf/modules/RevisionBuilderTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/restconf/rev131019/restconf/restconf/modules/RevisionBuilderTest.java index 1568b0c987..5c2eba18b7 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/restconf/rev131019/restconf/restconf/modules/RevisionBuilderTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/restconf/rev131019/restconf/restconf/modules/RevisionBuilderTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev131019.restconf.restconf.modules; import static org.junit.Assert.assertEquals; @@ -16,7 +15,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.re import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev131019.restconf.restconf.modules.Module.Revision; public class RevisionBuilderTest { - @Test public void testEmptyString() { final RevisionBuilder revisionBuilder = new RevisionBuilder(); @@ -42,7 +40,7 @@ public class RevisionBuilderTest { RevisionBuilder.getDefaultInstance("badFormat"); } - private void validate(final Revision revisionUnderTest, final String expectedRevisionString, + private static void validate(final Revision revisionUnderTest, final String expectedRevisionString, final RevisionIdentifier expectedRevisionIdentifier) { assertNotNull(revisionUnderTest); assertEquals(expectedRevisionString, revisionUnderTest.getString()); diff --git a/restconf/restconf-nb-bierman02/src/test/resources/json-to-nn/leafref/augment-leafref-module.yang b/restconf/restconf-nb-bierman02/src/test/resources/json-to-nn/leafref/augment-leafref-module.yang index 766cc8153e..8a55e43a37 100644 --- a/restconf/restconf-nb-bierman02/src/test/resources/json-to-nn/leafref/augment-leafref-module.yang +++ b/restconf/restconf-nb-bierman02/src/test/resources/json-to-nn/leafref/augment-leafref-module.yang @@ -2,14 +2,11 @@ module augment-leafref-module { namespace "augment:leafref:module"; prefix "auglfrfmo"; - revision 2014-12-16 { - } - + revision 2014-12-16; typedef leafreftype { type leafref { - path "/cont/lf3"; - + path "/auglfrfmo:cont/auglfrfmo:lf3"; } } @@ -18,4 +15,4 @@ module augment-leafref-module { type string; } } -} \ No newline at end of file +} diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java index f0705b1233..d455e813f1 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java @@ -11,7 +11,6 @@ import static java.util.Objects.requireNonNull; import com.google.common.collect.Iterables; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -28,6 +27,7 @@ import org.opendaylight.restconf.common.util.IdentityValuesDTO.Predicate; import org.opendaylight.restconf.common.util.RestUtil; import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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; @@ -269,7 +269,7 @@ public final class RestCodec { final List identities = data.getValuesWithNamespaces(); for (int i = 0; i < identities.size(); i++) { final IdentityValue identityValue = identities.get(i); - URI validNamespace = + XMLNamespace validNamespace = resolveValidNamespace(identityValue.getNamespace(), this.mountPoint, schemaContext); final DataSchemaNode node = findInstanceDataChildByNameAndNamespace( parentContainer, identityValue.getValue(), validNamespace); @@ -350,7 +350,7 @@ public final class RestCodec { justification = "https://github.com/spotbugs/spotbugs/issues/811") private static Module getModuleByNamespace(final String namespace, final DOMMountPoint mountPoint, final SchemaContext schemaContext) { - final URI validNamespace = resolveValidNamespace(namespace, mountPoint, schemaContext); + final XMLNamespace validNamespace = resolveValidNamespace(namespace, mountPoint, schemaContext); Module module = null; if (mountPoint != null) { module = modelContext(mountPoint).findModules(validNamespace).iterator().next(); @@ -364,22 +364,22 @@ public final class RestCodec { return module; } - private static URI resolveValidNamespace(final String namespace, final DOMMountPoint mountPoint, + private static XMLNamespace resolveValidNamespace(final String namespace, final DOMMountPoint mountPoint, final SchemaContext schemaContext) { - URI validNamespace; + XMLNamespace validNamespace; if (mountPoint != null) { validNamespace = findFirstModuleByName(modelContext(mountPoint), namespace); } else { validNamespace = findFirstModuleByName(schemaContext, namespace); } if (validNamespace == null) { - validNamespace = URI.create(namespace); + validNamespace = XMLNamespace.of(namespace); } return validNamespace; } - private static URI findFirstModuleByName(final SchemaContext schemaContext, final String name) { + private static XMLNamespace findFirstModuleByName(final SchemaContext schemaContext, final String name) { for (final Module module : schemaContext.getModules()) { if (module.getName().equals(name)) { return module.getNamespace(); @@ -391,7 +391,7 @@ public final class RestCodec { @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", justification = "https://github.com/spotbugs/spotbugs/issues/811") private static DataSchemaNode findInstanceDataChildByNameAndNamespace(final DataNodeContainer container, - final String name, final URI namespace) { + final String name, final XMLNamespace namespace) { requireNonNull(namespace); final Iterable result = Iterables.filter(findInstanceDataChildrenByName(container, name), diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/StringModuleInstanceIdentifierCodec.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/StringModuleInstanceIdentifierCodec.java index c026f7dbc3..aa34c29e28 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/StringModuleInstanceIdentifierCodec.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/StringModuleInstanceIdentifierCodec.java @@ -9,8 +9,8 @@ package org.opendaylight.restconf.nb.rfc8040.codecs; import static java.util.Objects.requireNonNull; -import java.net.URI; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -47,7 +47,7 @@ public final class StringModuleInstanceIdentifierCodec extends AbstractModuleStr } @Override - protected String prefixForNamespace(final URI namespace) { + protected String prefixForNamespace(final XMLNamespace namespace) { return this.context.findModules(namespace).stream().findFirst().map(Module::getName).orElse(null); } } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java index a302e56d7f..e4ebf37324 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java @@ -10,7 +10,6 @@ package org.opendaylight.restconf.nb.rfc8040.handlers; import static java.util.Objects.requireNonNull; import com.google.common.base.Throwables; -import java.util.Collection; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.PostConstruct; @@ -30,9 +29,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.mo import org.opendaylight.yangtools.concepts.ListenerRegistration; 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.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.ConflictingModificationAppliedException; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; @@ -102,12 +99,11 @@ public class SchemaContextHandler implements EffectiveModelContextListener, Auto return schemaContext; } - private void putData( - final NormalizedNode>> normNode) { + private void putData(final ContainerNode normNode) { final DOMTransactionChain transactionChain = this.transactionChainHandler.get(); final DOMDataTreeWriteTransaction wTx = transactionChain.newWriteOnlyTransaction(); wTx.put(LogicalDatastoreType.OPERATIONAL, - YangInstanceIdentifier.create(NodeIdentifier.create(normNode.getNodeType())), normNode); + YangInstanceIdentifier.create(NodeIdentifier.create(normNode.getIdentifier().getNodeType())), normNode); try { wTx.commit().get(); } catch (InterruptedException e) { diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java index 56a3d24995..0cd836d55b 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyReader.java @@ -18,6 +18,7 @@ import javax.ws.rs.Consumes; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.Provider; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.context.NormalizedNodeContext; @@ -40,11 +41,13 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException; +import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference; import org.opendaylight.yangtools.yang.model.api.OperationDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,15 +78,16 @@ public class JsonNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyRead final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final SchemaNode parentSchema; + final EffectiveStatementInference parentSchema; if (isPost) { - parentSchema = path.getSchemaNode(); + parentSchema = SchemaInferenceStack.ofSchemaPath(path.getSchemaContext(), + path.getSchemaNode().getPath()).toInference(); } else if (path.getSchemaNode() instanceof SchemaContext || SchemaPath.ROOT.equals(path.getSchemaNode().getPath().getParent())) { - parentSchema = path.getSchemaContext(); + parentSchema = SchemaInferenceStack.of(path.getSchemaContext()).toInference(); } else { - parentSchema = SchemaContextUtil - .findDataSchemaNode(path.getSchemaContext(), path.getSchemaNode().getPath().getParent()); + parentSchema = SchemaInferenceStack.ofSchemaPath(path.getSchemaContext(), + path.getSchemaNode().getPath().getParent()).toInference(); } final JsonParserStream jsonParser = JsonParserStream.create(writer, @@ -92,30 +96,31 @@ public class JsonNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyRead final JsonReader reader = new JsonReader(new InputStreamReader(entityStream, StandardCharsets.UTF_8)); jsonParser.parse(reader); - NormalizedNode result = resultHolder.getResult(); + NormalizedNode result = resultHolder.getResult(); final List iiToDataList = new ArrayList<>(); InstanceIdentifierContext newIIContext; while (result instanceof AugmentationNode || result instanceof ChoiceNode) { - final Object childNode = ((DataContainerNode) result).getValue().iterator().next(); + final Object childNode = ((DataContainerNode) result).body().iterator().next(); if (isPost) { iiToDataList.add(result.getIdentifier()); } - result = (NormalizedNode) childNode; + result = (NormalizedNode) childNode; } if (isPost) { if (result instanceof MapEntryNode) { - iiToDataList.add(new YangInstanceIdentifier.NodeIdentifier(result.getNodeType())); + iiToDataList.add(new YangInstanceIdentifier.NodeIdentifier(result.getIdentifier().getNodeType())); iiToDataList.add(result.getIdentifier()); } else { - if (!(parentSchema instanceof OperationDefinition)) { + final List> parentPath = parentSchema.statementPath(); + if (parentPath.isEmpty() || !(parentPath.get(parentPath.size() - 1) instanceof OperationDefinition)) { iiToDataList.add(result.getIdentifier()); } } } else { if (result instanceof MapNode) { - result = Iterables.getOnlyElement(((MapNode) result).getValue()); + result = Iterables.getOnlyElement(((MapNode) result).body()); } } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/NormalizedNodeJsonBodyWriter.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/NormalizedNodeJsonBodyWriter.java index 602646e3b6..0a040f44fb 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/NormalizedNodeJsonBodyWriter.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/NormalizedNodeJsonBodyWriter.java @@ -14,7 +14,6 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; @@ -30,7 +29,7 @@ import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.nb.rfc8040.MediaTypes; import org.opendaylight.restconf.nb.rfc8040.jersey.providers.api.RestconfNormalizedNodeWriter; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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.MapEntryNode; @@ -78,7 +77,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter httpHeaders, final OutputStream entityStream) throws IOException, WebApplicationException { - final NormalizedNode data = context.getData(); + final NormalizedNode data = context.getData(); if (data == null) { return; } @@ -104,7 +103,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter context, final NormalizedNode data, + final SchemaPath path, final InstanceIdentifierContext context, final NormalizedNode data, final Integer depth, final List> fields) throws IOException { final RestconfNormalizedNodeWriter nnWriter; @@ -119,7 +118,8 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter child : data.getValue()) { + private static void writeChildren(final RestconfNormalizedNodeWriter nnWriter, final ContainerNode data) + throws IOException { + for (final DataContainerChild child : data.body()) { nnWriter.write(child); } } @@ -176,7 +178,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter data = context.getData(); + final NormalizedNode data = context.getData(); final SchemaPath schemaPath = pathContext.getSchemaNode().getPath(); writeNormalizedNode(xmlWriter, schemaPath, pathContext, data, context.getWriterParameters().getDepth(), context.getWriterParameters().getFields()); } - private static void writeNormalizedNode(final XMLStreamWriter xmlWriter, - final SchemaPath path, final InstanceIdentifierContext pathContext, final NormalizedNode data, - final Integer depth, final List> fields) throws IOException { + private static void writeNormalizedNode(final XMLStreamWriter xmlWriter, final SchemaPath path, + final InstanceIdentifierContext pathContext, final NormalizedNode data, final Integer depth, + final List> fields) throws IOException { final RestconfNormalizedNodeWriter nnWriter; final EffectiveModelContext schemaCtx = pathContext.getSchemaContext(); @@ -142,7 +142,9 @@ public class NormalizedNodeXmlBodyWriter implements MessageBodyWriter child : data.getValue()) { + for (final NormalizedNode child : data.body()) { nnWriter.write(child); } nnWriter.flush(); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java index 64b3056393..b7278c4678 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriter.java @@ -32,10 +32,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -113,7 +113,7 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod * @throws IOException when thrown from the backing writer. */ @Override - public final ParameterAwareNormalizedNodeWriter write(final NormalizedNode node) throws IOException { + public final ParameterAwareNormalizedNodeWriter write(final NormalizedNode node) throws IOException { if (wasProcessedAsCompositeNode(node)) { return this; } @@ -148,29 +148,29 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod return children instanceof Collection ? ((Collection) children).size() : UNKNOWN_SIZE; } - private boolean wasProcessAsSimpleNode(final NormalizedNode node) throws IOException { + private boolean wasProcessAsSimpleNode(final NormalizedNode node) throws IOException { if (node instanceof LeafSetEntryNode) { if (selectedByParameters(node, false)) { final LeafSetEntryNode nodeAsLeafList = (LeafSetEntryNode) node; writer.startLeafSetEntryNode(nodeAsLeafList.getIdentifier()); - writer.scalarValue(nodeAsLeafList.getValue()); + writer.scalarValue(nodeAsLeafList.body()); writer.endNode(); } return true; } else if (node instanceof LeafNode) { final LeafNode nodeAsLeaf = (LeafNode)node; writer.startLeafNode(nodeAsLeaf.getIdentifier()); - writer.scalarValue(nodeAsLeaf.getValue()); + writer.scalarValue(nodeAsLeaf.body()); writer.endNode(); return true; } else if (node instanceof AnyxmlNode) { final AnyxmlNode anyxmlNode = (AnyxmlNode)node; - final Class objectModel = anyxmlNode.getValueObjectModel(); + final Class objectModel = anyxmlNode.bodyObjectModel(); if (writer.startAnyxmlNode(anyxmlNode.getIdentifier(), objectModel)) { if (DOMSource.class.isAssignableFrom(objectModel)) { - writer.domSourceValue((DOMSource) anyxmlNode.getValue()); + writer.domSourceValue((DOMSource) anyxmlNode.body()); } else { - writer.scalarValue(anyxmlNode.getValue()); + writer.scalarValue(anyxmlNode.body()); } writer.endNode(); } @@ -187,7 +187,7 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod * @param mixinParent {@code true} if parent is mixin, {@code false} otherwise * @return {@code true} if node will be written, {@code false} otherwise */ - protected boolean selectedByParameters(final NormalizedNode node, final boolean mixinParent) { + protected boolean selectedByParameters(final NormalizedNode node, final boolean mixinParent) { // nodes to be written are not limited by fields, only by depth if (fields == null) { return maxDepth == null || currentDepth < maxDepth; @@ -205,7 +205,7 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod // write only selected nodes if (currentDepth > 0 && currentDepth <= fields.size()) { - return fields.get(currentDepth - 1).contains(node.getNodeType()); + return fields.get(currentDepth - 1).contains(node.getIdentifier().getNodeType()); } // after this depth only depth parameter is used to determine when to write node @@ -220,9 +220,9 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod * @return True * @throws IOException when the writer reports it */ - protected final boolean writeChildren(final Iterable> children, + protected final boolean writeChildren(final Iterable children, final boolean mixinParent) throws IOException { - for (final NormalizedNode child : children) { + for (final NormalizedNode child : children) { if (selectedByParameters(child, mixinParent)) { write(child); } @@ -233,7 +233,7 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod protected boolean writeMapEntryChildren(final MapEntryNode mapEntryNode) throws IOException { if (selectedByParameters(mapEntryNode, false)) { - writeChildren(mapEntryNode.getValue(), false); + writeChildren(mapEntryNode.body(), false); } else if (fields == null && maxDepth != null && currentDepth == maxDepth) { writeOnlyKeys(mapEntryNode.getIdentifier().entrySet()); } @@ -250,25 +250,25 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod } protected boolean writeMapEntryNode(final MapEntryNode node) throws IOException { - writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.getValue())); + writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.body())); currentDepth++; writeMapEntryChildren(node); currentDepth--; return true; } - private boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { + private boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { boolean processedAsCompositeNode = false; if (node instanceof ContainerNode) { final ContainerNode n = (ContainerNode) node; - if (!n.getNodeType().withoutRevision().equals(ROOT_DATA_QNAME)) { - writer.startContainerNode(n.getIdentifier(), childSizeHint(n.getValue())); + if (!n.getIdentifier().getNodeType().withoutRevision().equals(ROOT_DATA_QNAME)) { + writer.startContainerNode(n.getIdentifier(), childSizeHint(n.body())); currentDepth++; - processedAsCompositeNode = writeChildren(n.getValue(), false); + processedAsCompositeNode = writeChildren(n.body(), false); currentDepth--; } else { // write child nodes of data root container - for (final NormalizedNode child : n.getValue()) { + for (final NormalizedNode child : n.body()) { currentDepth++; if (selectedByParameters(child, false)) { write(child); @@ -281,39 +281,39 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod processedAsCompositeNode = writeMapEntryNode((MapEntryNode) node); } else if (node instanceof UnkeyedListEntryNode) { final UnkeyedListEntryNode n = (UnkeyedListEntryNode) node; - writer.startUnkeyedListItem(n.getIdentifier(), childSizeHint(n.getValue())); + writer.startUnkeyedListItem(n.getIdentifier(), childSizeHint(n.body())); currentDepth++; - processedAsCompositeNode = writeChildren(n.getValue(), false); + processedAsCompositeNode = writeChildren(n.body(), false); currentDepth--; } else if (node instanceof ChoiceNode) { final ChoiceNode n = (ChoiceNode) node; - writer.startChoiceNode(n.getIdentifier(), childSizeHint(n.getValue())); - processedAsCompositeNode = writeChildren(n.getValue(), true); + writer.startChoiceNode(n.getIdentifier(), childSizeHint(n.body())); + processedAsCompositeNode = writeChildren(n.body(), true); } else if (node instanceof AugmentationNode) { final AugmentationNode n = (AugmentationNode) node; writer.startAugmentationNode(n.getIdentifier()); - processedAsCompositeNode = writeChildren(n.getValue(), true); + processedAsCompositeNode = writeChildren(n.body(), true); } else if (node instanceof UnkeyedListNode) { final UnkeyedListNode n = (UnkeyedListNode) node; - writer.startUnkeyedList(n.getIdentifier(), childSizeHint(n.getValue())); - processedAsCompositeNode = writeChildren(n.getValue(), false); - } else if (node instanceof OrderedMapNode) { - final OrderedMapNode n = (OrderedMapNode) node; - writer.startOrderedMapNode(n.getIdentifier(), childSizeHint(n.getValue())); - processedAsCompositeNode = writeChildren(n.getValue(), true); + writer.startUnkeyedList(n.getIdentifier(), childSizeHint(n.body())); + processedAsCompositeNode = writeChildren(n.body(), false); + } else if (node instanceof UserMapNode) { + final UserMapNode n = (UserMapNode) node; + writer.startOrderedMapNode(n.getIdentifier(), childSizeHint(n.body())); + processedAsCompositeNode = writeChildren(n.body(), true); } else if (node instanceof MapNode) { final MapNode n = (MapNode) node; - writer.startMapNode(n.getIdentifier(), childSizeHint(n.getValue())); - processedAsCompositeNode = writeChildren(n.getValue(), true); + writer.startMapNode(n.getIdentifier(), childSizeHint(n.body())); + processedAsCompositeNode = writeChildren(n.body(), true); } else if (node instanceof LeafSetNode) { final LeafSetNode n = (LeafSetNode) node; - if (node instanceof OrderedLeafSetNode) { - writer.startOrderedLeafSet(n.getIdentifier(), childSizeHint(n.getValue())); + if (node instanceof UserLeafSetNode) { + writer.startOrderedLeafSet(n.getIdentifier(), childSizeHint(n.body())); } else { - writer.startLeafSet(n.getIdentifier(), childSizeHint(n.getValue())); + writer.startLeafSet(n.getIdentifier(), childSizeHint(n.body())); } currentDepth++; - processedAsCompositeNode = writeChildren(n.getValue(), true); + processedAsCompositeNode = writeChildren(n.body(), true); currentDepth--; } @@ -331,13 +331,13 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod @Override protected boolean writeMapEntryNode(final MapEntryNode node) throws IOException { final NormalizedNodeStreamWriter writer = getWriter(); - writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.getValue())); + writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.body())); final Set qnames = node.getIdentifier().keySet(); // Write out all the key children currentDepth++; for (final QName qname : qnames) { - final Optional> child = node.getChild(new NodeIdentifier(qname)); + final Optional child = node.findChildByArg(new NodeIdentifier(qname)); if (child.isPresent()) { if (selectedByParameters(child.get(), false)) { write(child.get()); @@ -351,11 +351,11 @@ public class ParameterAwareNormalizedNodeWriter implements RestconfNormalizedNod currentDepth++; // Write all the rest final boolean result = - writeChildren(Iterables.filter(node.getValue(), input -> { + writeChildren(Iterables.filter(node.body(), input -> { if (input instanceof AugmentationNode) { return true; } - if (!qnames.contains(input.getNodeType())) { + if (!qnames.contains(input.getIdentifier().getNodeType())) { return true; } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java index 4913810fdf..bdde8bf53b 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java @@ -54,6 +54,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.OperationDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -125,18 +126,18 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade } else if (!isOperation) { final QName scQName = schemaNode.getQName(); checkState(docRootElm.equals(scQName.getLocalName()) - && docRootNamespace.equals(scQName.getNamespace().toASCIIString()), + && docRootNamespace.equals(scQName.getNamespace().toString()), "Not correct message root element \"%s\", should be \"%s\"", docRootElm, scQName); } - NormalizedNode parsed; + NormalizedNode parsed; final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); if (schemaNode instanceof ContainerLike || schemaNode instanceof ListSchemaNode || schemaNode instanceof LeafSchemaNode) { - final XmlParserStream xmlParser = XmlParserStream.create(writer, pathContext.getSchemaContext(), - schemaNode); + final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.ofInstantiatedPath( + pathContext.getSchemaContext(), schemaNode.getPath()).toInference()); xmlParser.traverse(new DOMSource(doc.getDocumentElement())); parsed = resultHolder.getResult(); @@ -147,7 +148,7 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade if (parsed instanceof MapNode) { final MapNode mapNode = (MapNode) parsed; // extracting the MapEntryNode - parsed = mapNode.getValue().iterator().next(); + parsed = mapNode.body().iterator().next(); } if (schemaNode instanceof ListSchemaNode && isPost()) { @@ -213,10 +214,8 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade private static AugmentationSchemaNode findCorrespondingAugment(final DataSchemaNode parent, final DataSchemaNode child) { if (parent instanceof AugmentationTarget && !(parent instanceof ChoiceSchemaNode)) { - for (final AugmentationSchemaNode augmentation - : ((AugmentationTarget) parent).getAvailableAugmentations()) { - final DataSchemaNode childInAugmentation = augmentation.getDataChildByName(child.getQName()); - if (childInAugmentation != null) { + for (AugmentationSchemaNode augmentation : ((AugmentationTarget) parent).getAvailableAugmentations()) { + if (augmentation.dataChildByName(child.getQName()) != null) { return augmentation; } } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/api/RestconfNormalizedNodeWriter.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/api/RestconfNormalizedNodeWriter.java index 37b32c150d..4a70195d2a 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/api/RestconfNormalizedNodeWriter.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/api/RestconfNormalizedNodeWriter.java @@ -15,5 +15,5 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public interface RestconfNormalizedNodeWriter extends Flushable, Closeable { - RestconfNormalizedNodeWriter write(NormalizedNode node) throws IOException; + RestconfNormalizedNodeWriter write(NormalizedNode node) throws IOException; } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/JsonStreamWriterWithDisabledValidation.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/JsonStreamWriterWithDisabledValidation.java index a3b2b2fb0f..ebfd900d39 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/JsonStreamWriterWithDisabledValidation.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/JsonStreamWriterWithDisabledValidation.java @@ -10,9 +10,9 @@ package org.opendaylight.restconf.nb.rfc8040.jersey.providers.errors; import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.io.OutputStreamWriter; -import java.net.URI; import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; @@ -39,7 +39,8 @@ final class JsonStreamWriterWithDisabledValidation extends StreamWriterWithDisab * @param schemaContextHandler Handler that holds actual schema context. */ JsonStreamWriterWithDisabledValidation(final QName excludedQName, final OutputStreamWriter outputWriter, - final SchemaPath schemaPath, final URI initialNs, final SchemaContextHandler schemaContextHandler) { + final SchemaPath schemaPath, final XMLNamespace initialNs, + final SchemaContextHandler schemaContextHandler) { super(excludedQName); this.jsonWriter = JsonWriterFactory.createJsonWriter(outputWriter); this.jsonNodeStreamWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter( diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapper.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapper.java index bec5c57cce..a4e9de5209 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapper.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapper.java @@ -15,7 +15,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; -import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.LinkedHashSet; @@ -37,13 +36,14 @@ import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev170126.errors.Errors; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev170126.errors.errors.Error; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListNodeBuilder; @@ -68,7 +68,7 @@ public final class RestconfDocumentedExceptionMapper implements ExceptionMapper< private static final QName ERROR_MESSAGE_QNAME = qnameOf("error-message"); private static final QName ERROR_INFO_QNAME = qnameOf("error-info"); private static final QName ERROR_PATH_QNAME = qnameOf("error-path"); - private static final URI IETF_RESTCONF_URI = Errors.QNAME.getModule().getNamespace(); + private static final XMLNamespace IETF_RESTCONF_URI = Errors.QNAME.getModule().getNamespace(); @Context private HttpHeaders headers; @@ -200,7 +200,7 @@ public final class RestconfDocumentedExceptionMapper implements ExceptionMapper< } } - private static String writeNormalizedNode(final NormalizedNode errorsContainer, + private static String writeNormalizedNode(final NormalizedNode errorsContainer, final ByteArrayOutputStream outputStream, final StreamWriterWithDisabledValidation streamWriter) { try (NormalizedNodeWriter nnWriter = NormalizedNodeWriter.forStreamWriter(streamWriter)) { nnWriter.write(errorsContainer); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonToPatchBodyReader.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonToPatchBodyReader.java index 34df3b0e05..3ed78638bb 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonToPatchBodyReader.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonToPatchBodyReader.java @@ -8,6 +8,7 @@ package org.opendaylight.restconf.nb.rfc8040.jersey.providers.patch; import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableList; @@ -49,7 +50,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeS import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -231,9 +233,14 @@ public class JsonToPatchBodyReader extends AbstractToPatchBodyReader { edit.setTargetSchemaNode(path.getSchemaContext()); } else { edit.setTarget(codec.deserialize(codec.serialize(path.getInstanceIdentifier()).concat(target))); - edit.setTargetSchemaNode(SchemaContextUtil.findDataSchemaNode(path.getSchemaContext(), - codec.getDataContextTree().findChild(edit.getTarget()).orElseThrow().getDataSchemaNode() - .getPath().getParent())); + + final EffectiveStatement parentStmt = SchemaInferenceStack.ofInstantiatedPath( + path.getSchemaContext(), + codec.getDataContextTree().findChild(edit.getTarget()).orElseThrow().getDataSchemaNode() + .getPath().getParent()) + .currentStatement(); + verify(parentStmt instanceof SchemaNode, "Unexpected parent %s", parentStmt); + edit.setTargetSchemaNode((SchemaNode) parentStmt); } break; @@ -366,12 +373,13 @@ public class JsonToPatchBodyReader extends AbstractToPatchBodyReader { * @param in reader JsonReader reader * @return NormalizedNode representing data */ - private static NormalizedNode readEditData(final @NonNull JsonReader in, + private static NormalizedNode readEditData(final @NonNull JsonReader in, final @NonNull SchemaNode targetSchemaNode, final @NonNull InstanceIdentifierContext path) { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); JsonParserStream.create(writer, JSONCodecFactorySupplier.RFC7951.getShared(path.getSchemaContext()), - targetSchemaNode).parse(in); + SchemaInferenceStack.ofInstantiatedPath(path.getSchemaContext(), targetSchemaNode.getPath()).toInference()) + .parse(in); return resultHolder.getResult(); } @@ -421,7 +429,7 @@ public class JsonToPatchBodyReader extends AbstractToPatchBodyReader { private PatchEditOperation operation; private YangInstanceIdentifier target; private SchemaNode targetSchemaNode; - private NormalizedNode data; + private NormalizedNode data; String getId() { return id; @@ -455,11 +463,11 @@ public class JsonToPatchBodyReader extends AbstractToPatchBodyReader { this.targetSchemaNode = requireNonNull(targetSchemaNode); } - NormalizedNode getData() { + NormalizedNode getData() { return data; } - void setData(final NormalizedNode data) { + void setData(final NormalizedNode data) { this.data = requireNonNull(data); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlToPatchBodyReader.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlToPatchBodyReader.java index cf507ff590..2087a397a1 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlToPatchBodyReader.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlToPatchBodyReader.java @@ -7,11 +7,13 @@ */ package org.opendaylight.restconf.nb.rfc8040.jersey.providers.patch; +import static com.google.common.base.Verify.verify; +import static com.google.common.base.Verify.verifyNotNull; + import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; import java.io.IOException; import java.io.InputStream; -import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Iterator; @@ -38,6 +40,7 @@ import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler; import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -51,7 +54,8 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -109,7 +113,8 @@ public class XmlToPatchBodyReader extends AbstractToPatchBodyReader { ? schemaNode.getQName().getNamespace().toString() : firstValueElement.getNamespaceURI(); // find module according to namespace - final Module module = pathContext.getSchemaContext().findModules(URI.create(namespace)).iterator().next(); + final Module module = pathContext.getSchemaContext().findModules(XMLNamespace.of(namespace)).iterator() + .next(); // initialize codec + set default prefix derived from module name final StringModuleInstanceIdentifierCodec codec = new StringModuleInstanceIdentifierCodec( @@ -128,13 +133,14 @@ public class XmlToPatchBodyReader extends AbstractToPatchBodyReader { namespace, module.getQNameModule().getRevision().map(Revision::toString).orElse(null)))); - targetNode = SchemaContextUtil.findDataSchemaNode(pathContext.getSchemaContext(), - codec.getDataContextTree().findChild(targetII).orElseThrow().getDataSchemaNode() - .getPath().getParent()); - // move schema node - schemaNode = (DataSchemaNode) SchemaContextUtil.findDataSchemaNode(pathContext.getSchemaContext(), - codec.getDataContextTree().findChild(targetII).orElseThrow().getDataSchemaNode().getPath()); + schemaNode = verifyNotNull(codec.getDataContextTree().findChild(targetII).orElseThrow() + .getDataSchemaNode()); + + final EffectiveStatement parentStmt = SchemaInferenceStack.ofInstantiatedPath( + pathContext.getSchemaContext(), schemaNode.getPath().getParent()).currentStatement(); + verify(parentStmt instanceof SchemaNode, "Unexpected parent %s", parentStmt); + targetNode = (SchemaNode) parentStmt; } if (targetNode == null) { @@ -144,12 +150,13 @@ public class XmlToPatchBodyReader extends AbstractToPatchBodyReader { } if (oper.isWithValue()) { - final NormalizedNode parsed; + final NormalizedNode parsed; if (schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode) { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final XmlParserStream xmlParser = XmlParserStream.create(writer, pathContext.getSchemaContext(), - schemaNode); + final XmlParserStream xmlParser = XmlParserStream.create(writer, + SchemaInferenceStack.ofInstantiatedPath(pathContext.getSchemaContext(), schemaNode.getPath()) + .toInference()); xmlParser.traverse(new DOMSource(firstValueElement)); parsed = resultHolder.getResult(); } else { diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java index 590bb7bd72..7922c2675e 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtil.java @@ -28,7 +28,6 @@ import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev14070 import org.opendaylight.yangtools.yang.common.QName; 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.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -155,13 +154,11 @@ final class CreateStreamUtil { * are going to be generated. */ private static YangInstanceIdentifier preparePath(final ContainerNode data, final QName qualifiedName) { - final Optional> path = data.getChild( - new YangInstanceIdentifier.NodeIdentifier(QName.create( - qualifiedName, - RestconfStreamsConstants.STREAM_PATH_PARAM_NAME))); + final Optional path = data.findChildByArg( + new NodeIdentifier(QName.create(qualifiedName, RestconfStreamsConstants.STREAM_PATH_PARAM_NAME))); Object pathValue = null; if (path.isPresent()) { - pathValue = path.get().getValue(); + pathValue = path.get().body(); } if (!(pathValue instanceof YangInstanceIdentifier)) { LOG.debug("Instance identifier {} was not normalized correctly", qualifiedName); @@ -182,21 +179,21 @@ final class CreateStreamUtil { * @return Parsed enumeration. */ private static T parseEnum(final ContainerNode data, final Class clazz, final String paramName) { - final Optional> optAugNode = data.getChild( + final Optional optAugNode = data.findChildByArg( RestconfStreamsConstants.SAL_REMOTE_AUG_IDENTIFIER); if (optAugNode.isEmpty()) { return null; } - final DataContainerChild augNode = optAugNode.get(); + final DataContainerChild augNode = optAugNode.get(); if (!(augNode instanceof AugmentationNode)) { return null; } - final Optional> enumNode = ((AugmentationNode) augNode).getChild( + final Optional enumNode = ((AugmentationNode) augNode).findChildByArg( new NodeIdentifier(QName.create(RestconfStreamsConstants.SAL_REMOTE_AUGMENT, paramName))); if (enumNode.isEmpty()) { return null; } - final Object value = enumNode.get().getValue(); + final Object value = enumNode.get().body(); if (!(value instanceof String)) { return null; } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java index 5b12419e51..f22e12e4c4 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java @@ -136,7 +136,7 @@ public class RestconfDataServiceImpl implements RestconfDataService { final DOMMountPoint mountPoint = instanceIdentifier.getMountPoint(); final RestconfStrategy strategy = getRestconfStrategy(mountPoint); - final NormalizedNode node; + final NormalizedNode node; if (parameters.getFieldPaths() != null && !parameters.getFieldPaths().isEmpty()) { node = ReadDataTransactionUtil.readData(parameters.getContent(), instanceIdentifier.getInstanceIdentifier(), strategy, parameters.getWithDefault(), schemaContextRef, parameters.getFieldPaths()); @@ -146,7 +146,7 @@ public class RestconfDataServiceImpl implements RestconfDataService { } 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(); + final String value = (String) node.body(); final String streamName = value.substring(value.indexOf(NOTIFICATION_STREAM + '/')); this.delegRestconfSubscrService.subscribeToStream(streamName, uriInfo); } @@ -159,7 +159,7 @@ public class RestconfDataServiceImpl implements RestconfDataService { if (parameters.getContent().equals(RestconfDataServiceConstant.ReadData.ALL) || parameters.getContent().equals(RestconfDataServiceConstant.ReadData.CONFIG)) { - final QName type = node.getNodeType(); + final QName type = node.getIdentifier().getNodeType(); return Response.status(200) .entity(new NormalizedNodeContext(instanceIdentifier, node, parameters)) .header("ETag", '"' + type.getModule().getRevision().map(Revision::toString).orElse(null) @@ -183,7 +183,7 @@ public class RestconfDataServiceImpl implements RestconfDataService { * @param uriInfo uri info * @return {@link NormalizedNode} */ - private NormalizedNode readData(final String identifier, final String content, + private NormalizedNode readData(final String identifier, final String content, final YangInstanceIdentifier path, final RestconfStrategy strategy, final String withDefa, final EffectiveModelContext schemaContext, final UriInfo uriInfo) { if (identifier != null && identifier.contains(STREAMS_PATH) && !identifier.contains(STREAM_PATH_PART)) { @@ -389,9 +389,10 @@ public class RestconfDataServiceImpl implements RestconfDataService { final Absolute schemaPath = Absolute.of(ImmutableList.copyOf(context.getSchemaNode().getPath() .getPathFromRoot())); final YangInstanceIdentifier yangIIdContext = context.getInstanceIdentifier(); - final NormalizedNode data = payload.getData(); + final NormalizedNode data = payload.getData(); - if (yangIIdContext.isEmpty() && !RestconfDataServiceConstant.NETCONF_BASE_QNAME.equals(data.getNodeType())) { + if (yangIIdContext.isEmpty() + && !RestconfDataServiceConstant.NETCONF_BASE_QNAME.equals(data.getIdentifier().getNodeType())) { throw new RestconfDocumentedException("Instance identifier need to contain at least one path argument", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE); } @@ -419,7 +420,7 @@ public class RestconfDataServiceImpl implements RestconfDataService { } } - if (resultData != null && resultData.getValue().isEmpty()) { + if (resultData != null && resultData.isEmpty()) { throw new WebApplicationException(Response.Status.NO_CONTENT); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java index aafb5e2881..3a8e84db17 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java @@ -9,7 +9,6 @@ package org.opendaylight.restconf.nb.rfc8040.rests.services.impl; import static java.util.Objects.requireNonNull; -import java.net.URI; import java.util.Optional; import javax.ws.rs.Path; import javax.ws.rs.WebApplicationException; @@ -29,6 +28,7 @@ import org.opendaylight.restconf.nb.rfc8040.rests.services.api.RestconfInvokeOpe import org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfInvokeOperationsUtil; import org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -55,7 +55,7 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat final EffectiveModelContext refSchemaCtx = this.schemaContextHandler.get(); final QName schemaPath = payload.getInstanceIdentifierContext().getSchemaNode().getQName(); final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint(); - final URI namespace = payload.getInstanceIdentifierContext().getSchemaNode().getQName().getNamespace(); + final XMLNamespace namespace = payload.getInstanceIdentifierContext().getSchemaNode().getQName().getNamespace(); final DOMRpcResult response; final EffectiveModelContext schemaContextRef; @@ -79,13 +79,13 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat final DOMRpcResult result = RestconfInvokeOperationsUtil.checkResponse(response); RpcDefinition resultNodeSchema = null; - NormalizedNode resultData = null; + NormalizedNode resultData = null; if (result != null && result.getResult() != null) { resultData = result.getResult(); resultNodeSchema = (RpcDefinition) payload.getInstanceIdentifierContext().getSchemaNode(); } - if (resultData != null && ((ContainerNode) resultData).getValue().isEmpty()) { + if (resultData != null && ((ContainerNode) resultData).isEmpty()) { throw new WebApplicationException(Response.Status.NO_CONTENT); } else { return new NormalizedNodeContext(new InstanceIdentifierContext<>(null, resultNodeSchema, mountPoint, diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java index 5ca0e51e1e..2afc1b9176 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java @@ -40,7 +40,7 @@ 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.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/BatchedExistenceCheck.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/BatchedExistenceCheck.java index b3b9d862ee..001793033c 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/BatchedExistenceCheck.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/BatchedExistenceCheck.java @@ -37,9 +37,9 @@ final class BatchedExistenceCheck { static BatchedExistenceCheck start(final DOMDataTreeReadOperations tx, final LogicalDatastoreType datastore, final YangInstanceIdentifier parentPath, - final Collection> children) { + final Collection children) { final BatchedExistenceCheck ret = new BatchedExistenceCheck(children.size()); - for (NormalizedNode child : children) { + for (NormalizedNode child : children) { final YangInstanceIdentifier path = parentPath.node(child.getIdentifier()); tx.exists(datastore, path).addCallback(new FutureCallback() { @Override diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java index 2e705bb785..dbb7adc356 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java @@ -41,7 +41,7 @@ public final class MdsalRestconfStrategy extends RestconfStrategy { } @Override - public ListenableFuture>> read(final LogicalDatastoreType store, + public ListenableFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { try (DOMDataTreeReadTransaction tx = dataBroker.newReadOnlyTransaction()) { return tx.read(store, path); @@ -49,7 +49,7 @@ public final class MdsalRestconfStrategy extends RestconfStrategy { } @Override - public ListenableFuture>> read(final LogicalDatastoreType store, + public ListenableFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path, final List fields) { return Futures.immediateFailedFuture(new UnsupportedOperationException( "Reading of selected subtrees is currently not supported in: " + MdsalRestconfStrategy.class)); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfTransaction.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfTransaction.java index 8c6a18a446..e6b93d2bb5 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfTransaction.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfTransaction.java @@ -60,26 +60,24 @@ final class MdsalRestconfTransaction extends RestconfTransaction { } @Override - public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { verifyNotNull(rwTx).merge(store, path, data); } @Override - public void create(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data, final SchemaContext schemaContext) { + public void create(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data, + final SchemaContext schemaContext) { if (data instanceof MapNode || data instanceof LeafSetNode) { - final NormalizedNode emptySubTree = ImmutableNodes.fromInstanceId(schemaContext, path); + final NormalizedNode emptySubTree = ImmutableNodes.fromInstanceId(schemaContext, path); merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.create(emptySubTree.getIdentifier()), emptySubTree); TransactionUtil.ensureParentsByMerge(path, schemaContext, this); - final Collection> children = - ((NormalizedNodeContainer) data).getValue(); + final Collection children = ((NormalizedNodeContainer) data).body(); final BatchedExistenceCheck check = BatchedExistenceCheck.start(verifyNotNull(rwTx), LogicalDatastoreType.CONFIGURATION, path, children); - for (final NormalizedNode child : children) { + for (final NormalizedNode child : children) { final YangInstanceIdentifier childPath = path.node(child.getIdentifier()); verifyNotNull(rwTx).put(store, childPath, child); } @@ -94,15 +92,15 @@ final class MdsalRestconfTransaction extends RestconfTransaction { } @Override - public void replace(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data, final SchemaContext schemaContext) { + public void replace(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data, + final SchemaContext schemaContext) { if (data instanceof MapNode || data instanceof LeafSetNode) { - final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path); merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); TransactionUtil.ensureParentsByMerge(path, schemaContext, this); - for (final NormalizedNode child : ((NormalizedNodeContainer) data).getValue()) { + for (final NormalizedNode child : ((NormalizedNodeContainer) data).body()) { final YangInstanceIdentifier childPath = path.node(child.getIdentifier()); verifyNotNull(rwTx).put(store, childPath, child); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java index 59d4023a4b..4cb04a0b46 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java @@ -45,8 +45,8 @@ public final class NetconfRestconfStrategy extends RestconfStrategy { } @Override - public ListenableFuture>> read(final LogicalDatastoreType store, - final YangInstanceIdentifier path) { + public ListenableFuture> read(final LogicalDatastoreType store, + final YangInstanceIdentifier path) { switch (store) { case CONFIGURATION: return netconfService.getConfig(path); @@ -61,7 +61,7 @@ public final class NetconfRestconfStrategy extends RestconfStrategy { } @Override - public ListenableFuture>> read(final LogicalDatastoreType store, + public ListenableFuture> read(final LogicalDatastoreType store, final YangInstanceIdentifier path, final List fields) { switch (store) { case CONFIGURATION: diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java index 7689c26578..f28f406199 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java @@ -79,20 +79,19 @@ final class NetconfRestconfTransaction extends RestconfTransaction { } @Override - public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data) { + public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { enqueueOperation(() -> netconfService.merge(store, path, data, Optional.empty())); } @Override public void create(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data, final SchemaContext schemaContext) { + final NormalizedNode data, final SchemaContext schemaContext) { if (data instanceof MapNode || data instanceof LeafSetNode) { - final NormalizedNode emptySubTree = ImmutableNodes.fromInstanceId(schemaContext, path); + final NormalizedNode emptySubTree = ImmutableNodes.fromInstanceId(schemaContext, path); merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.create(emptySubTree.getIdentifier()), emptySubTree); - for (final NormalizedNode child : ((NormalizedNodeContainer) data).getValue()) { + for (final NormalizedNode child : ((NormalizedNodeContainer) data).body()) { final YangInstanceIdentifier childPath = path.node(child.getIdentifier()); enqueueOperation(() -> netconfService.create(store, childPath, child, Optional.empty())); } @@ -102,14 +101,14 @@ final class NetconfRestconfTransaction extends RestconfTransaction { } @Override - public void replace(final LogicalDatastoreType store, final YangInstanceIdentifier path, - final NormalizedNode data, final SchemaContext schemaContext) { + public void replace(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data, + final SchemaContext schemaContext) { if (data instanceof MapNode || data instanceof LeafSetNode) { - final NormalizedNode emptySubTree = ImmutableNodes.fromInstanceId(schemaContext, path); + final NormalizedNode emptySubTree = ImmutableNodes.fromInstanceId(schemaContext, path); merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.create(emptySubTree.getIdentifier()), emptySubTree); - for (final NormalizedNode child : ((NormalizedNodeContainer) data).getValue()) { + for (final NormalizedNode child : ((NormalizedNodeContainer) data).body()) { final YangInstanceIdentifier childPath = path.node(child.getIdentifier()); enqueueOperation(() -> netconfService.replace(store, childPath, child, Optional.empty())); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfStrategy.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfStrategy.java index 71dac9899c..ce98545dea 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfStrategy.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfStrategy.java @@ -63,7 +63,7 @@ public abstract class RestconfStrategy { * @param path the data object path * @return a ListenableFuture containing the result of the read */ - public abstract ListenableFuture>> read(LogicalDatastoreType store, + public abstract ListenableFuture> read(LogicalDatastoreType store, YangInstanceIdentifier path); /** @@ -74,7 +74,7 @@ public abstract class RestconfStrategy { * @param fields paths to selected fields relative to parent path * @return a ListenableFuture containing the result of the read */ - public abstract ListenableFuture>> read(LogicalDatastoreType store, + public abstract ListenableFuture> read(LogicalDatastoreType store, YangInstanceIdentifier path, List fields); /** diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfTransaction.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfTransaction.java index ef8e3dd31e..162e8be046 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfTransaction.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfTransaction.java @@ -63,7 +63,7 @@ public abstract class RestconfTransaction { * @param path the data object path * @param data the data object to be merged to the specified path */ - public abstract void merge(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode data); + public abstract void merge(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode data); /** * Stores a piece of data at the specified path. @@ -73,7 +73,7 @@ public abstract class RestconfTransaction { * @param data the data object to be merged to the specified path * @param schemaContext static view of compiled yang files */ - public abstract void create(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode data, + public abstract void create(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode data, SchemaContext schemaContext); /** @@ -84,6 +84,6 @@ public abstract class RestconfTransaction { * @param data the data object to be merged to the specified path * @param schemaContext static view of compiled yang files */ - public abstract void replace(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode data, + public abstract void replace(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode data, SchemaContext schemaContext); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/NormalizedNodeFactory.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/NormalizedNodeFactory.java index d7198c2826..7f4ccb8da9 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/NormalizedNodeFactory.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/NormalizedNodeFactory.java @@ -11,15 +11,9 @@ import java.util.Optional; import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -class NormalizedNodeFactory extends FutureDataFactory>> - implements Builder> { - +class NormalizedNodeFactory extends FutureDataFactory> implements Builder { @Override - public NormalizedNode build() { - if (this.result.isPresent()) { - return this.result.get(); - } - return null; + public NormalizedNode build() { + return result.orElse(null); } - } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java index 43790a80d3..b9ca979824 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java @@ -152,8 +152,7 @@ public final class PatchDataTransactionUtil { * @param payload Data to be created * @param transaction A handle to a set of DS operations */ - private static void createDataWithinTransaction(final YangInstanceIdentifier path, - final NormalizedNode payload, + private static void createDataWithinTransaction(final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext, final RestconfTransaction transaction) { LOG.trace("POST {} within Restconf Patch: {} with payload {}", LogicalDatastoreType.CONFIGURATION.name(), @@ -180,8 +179,7 @@ public final class PatchDataTransactionUtil { * @param payload Data to be merged * @param transaction A handle to a set of DS operations */ - private static void mergeDataWithinTransaction(final YangInstanceIdentifier path, - final NormalizedNode payload, + private static void mergeDataWithinTransaction(final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext, final RestconfTransaction transaction) { LOG.trace("Merge {} within Restconf Patch: {} with payload {}", LogicalDatastoreType.CONFIGURATION.name(), @@ -209,8 +207,7 @@ public final class PatchDataTransactionUtil { * @param payload Data to be created * @param transaction A handle to a set of DS operations */ - private static void replaceDataWithinTransaction(final YangInstanceIdentifier path, - final NormalizedNode payload, + private static void replaceDataWithinTransaction(final YangInstanceIdentifier path, final NormalizedNode payload, final EffectiveModelContext schemaContext, final RestconfTransaction transaction) { LOG.trace("PUT {} within Restconf Patch: {} with payload {}", diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java index cad30a9127..5fcbe665b3 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java @@ -49,7 +49,7 @@ public final class PlainPatchDataTransactionUtil { final RestconfTransaction transaction = strategy.prepareWriteExecution(); YangInstanceIdentifier path = payload.getInstanceIdentifierContext().getInstanceIdentifier(); - NormalizedNode data = payload.getData(); + NormalizedNode data = payload.getData(); try { LOG.trace("Merge CONFIGURATION within Restconf Patch: {} with payload {}", path, data); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java index 9051937988..32edd65421 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java @@ -89,7 +89,7 @@ public final class PostDataTransactionUtil { * @return {@link FluentFuture} */ private static FluentFuture submitData(final YangInstanceIdentifier path, - final NormalizedNode data, + final NormalizedNode data, final RestconfStrategy strategy, final EffectiveModelContext schemaContext, final Insert insert, final String point) { @@ -100,11 +100,11 @@ public final class PostDataTransactionUtil { } PutDataTransactionUtil.checkListAndOrderedType(schemaContext, path); - final NormalizedNode readData; + final NormalizedNode readData; switch (insert) { case FIRST: readData = PutDataTransactionUtil.readList(strategy, path.getParent().getParent()); - if (readData == null || ((NormalizedNodeContainer) readData).getValue().isEmpty()) { + if (readData == null || ((NormalizedNodeContainer) readData).isEmpty()) { transaction.replace(LogicalDatastoreType.CONFIGURATION, path, data, schemaContext); return transaction.commit(); } @@ -119,23 +119,23 @@ public final class PostDataTransactionUtil { return transaction.commit(); case BEFORE: readData = PutDataTransactionUtil.readList(strategy, path.getParent().getParent()); - if (readData == null || ((NormalizedNodeContainer) readData).getValue().isEmpty()) { + if (readData == null || ((NormalizedNodeContainer) readData).isEmpty()) { transaction.replace(LogicalDatastoreType.CONFIGURATION, path, data, schemaContext); return transaction.commit(); } checkItemDoesNotExists(strategy.exists(LogicalDatastoreType.CONFIGURATION, path), path); insertWithPointPost(path, data, schemaContext, point, - (NormalizedNodeContainer>) readData, true, transaction); + (NormalizedNodeContainer) readData, true, transaction); return transaction.commit(); case AFTER: readData = PutDataTransactionUtil.readList(strategy, path.getParent().getParent()); - if (readData == null || ((NormalizedNodeContainer) readData).getValue().isEmpty()) { + if (readData == null || ((NormalizedNodeContainer) readData).isEmpty()) { transaction.replace(LogicalDatastoreType.CONFIGURATION, path, data, schemaContext); return transaction.commit(); } checkItemDoesNotExists(strategy.exists(LogicalDatastoreType.CONFIGURATION, path), path); insertWithPointPost(path, data, schemaContext, point, - (NormalizedNodeContainer>) readData, false, transaction); + (NormalizedNodeContainer) readData, false, transaction); return transaction.commit(); default: throw new RestconfDocumentedException( @@ -144,17 +144,16 @@ public final class PostDataTransactionUtil { } } - private static void insertWithPointPost(final YangInstanceIdentifier path, - final NormalizedNode data, + private static void insertWithPointPost(final YangInstanceIdentifier path, final NormalizedNode data, final EffectiveModelContext schemaContext, final String point, - final NormalizedNodeContainer> readList, - final boolean before, final RestconfTransaction transaction) { + final NormalizedNodeContainer readList, final boolean before, + final RestconfTransaction transaction) { final YangInstanceIdentifier parent = path.getParent().getParent(); transaction.remove(LogicalDatastoreType.CONFIGURATION, parent); final InstanceIdentifierContext instanceIdentifier = ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.empty()); int lastItemPosition = 0; - for (final NormalizedNode nodeChild : readList.getValue()) { + for (final NormalizedNode nodeChild : readList.body()) { if (nodeChild.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) { break; } @@ -164,10 +163,10 @@ public final class PostDataTransactionUtil { lastItemPosition++; } int lastInsertedPosition = 0; - final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, parent); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, parent); transaction.merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); - for (final NormalizedNode nodeChild : readList.getValue()) { + for (final NormalizedNode nodeChild : readList.body()) { if (lastInsertedPosition == lastItemPosition) { transaction.replace(LogicalDatastoreType.CONFIGURATION, path, data, schemaContext); } @@ -177,7 +176,7 @@ public final class PostDataTransactionUtil { } } - private static void makePost(final YangInstanceIdentifier path, final NormalizedNode data, + private static void makePost(final YangInstanceIdentifier path, final NormalizedNode data, final SchemaContext schemaContext, final RestconfTransaction transaction) { try { transaction.create(LogicalDatastoreType.CONFIGURATION, path, data, schemaContext); @@ -197,14 +196,14 @@ public final class PostDataTransactionUtil { * @return {@link URI} */ private static URI resolveLocation(final UriInfo uriInfo, final YangInstanceIdentifier initialPath, - final EffectiveModelContext schemaContext, final NormalizedNode data) { + final EffectiveModelContext schemaContext, final NormalizedNode data) { if (uriInfo == null) { return null; } YangInstanceIdentifier path = initialPath; if (data instanceof MapNode) { - final Collection children = ((MapNode) data).getValue(); + final Collection children = ((MapNode) data).body(); if (!children.isEmpty()) { path = path.node(children.iterator().next().getIdentifier()); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java index ae29f56a8b..dbe01ad079 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java @@ -75,10 +75,11 @@ public final class PutDataTransactionUtil { * @param payload data */ public static void validTopLevelNodeName(final YangInstanceIdentifier path, final NormalizedNodeContext payload) { - final String payloadName = payload.getData().getNodeType().getLocalName(); + final String payloadName = payload.getData().getIdentifier().getNodeType().getLocalName(); if (path.isEmpty()) { - if (!payload.getData().getNodeType().equals(RestconfDataServiceConstant.NETCONF_BASE_QNAME)) { + if (!payload.getData().getIdentifier().getNodeType().equals( + RestconfDataServiceConstant.NETCONF_BASE_QNAME)) { throw new RestconfDocumentedException("Instance identifier has to contain at least one path argument", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE); } @@ -102,7 +103,7 @@ public final class PutDataTransactionUtil { final InstanceIdentifierContext iiWithData = payload.getInstanceIdentifierContext(); final PathArgument lastPathArgument = iiWithData.getInstanceIdentifier().getLastPathArgument(); final SchemaNode schemaNode = iiWithData.getSchemaNode(); - final NormalizedNode data = payload.getData(); + final NormalizedNode data = payload.getData(); if (schemaNode instanceof ListSchemaNode) { final List keyDefinitions = ((ListSchemaNode) schemaNode).getKeyDefinition(); if (lastPathArgument instanceof NodeIdentifierWithPredicates && data instanceof MapEntryNode) { @@ -173,7 +174,7 @@ public final class PutDataTransactionUtil { private static FluentFuture submitData(final YangInstanceIdentifier path, final EffectiveModelContext schemaContext, final RestconfStrategy strategy, - final NormalizedNode data, + final NormalizedNode data, final Insert insert, final String point) { final RestconfTransaction transaction = strategy.prepareWriteExecution(); if (insert == null) { @@ -181,11 +182,11 @@ public final class PutDataTransactionUtil { } checkListAndOrderedType(schemaContext, path); - final NormalizedNode readData; + final NormalizedNode readData; switch (insert) { case FIRST: readData = readList(strategy, path.getParent()); - if (readData == null || ((NormalizedNodeContainer) readData).getValue().isEmpty()) { + if (readData == null || ((NormalizedNodeContainer) readData).isEmpty()) { return makePut(path, schemaContext, transaction, data); } transaction.remove(LogicalDatastoreType.CONFIGURATION, path.getParent()); @@ -196,19 +197,19 @@ public final class PutDataTransactionUtil { return makePut(path, schemaContext, transaction, data); case BEFORE: readData = readList(strategy, path.getParent()); - if (readData == null || ((NormalizedNodeContainer) readData).getValue().isEmpty()) { + if (readData == null || ((NormalizedNodeContainer) readData).isEmpty()) { return makePut(path, schemaContext, transaction, data); } - insertWithPointPut(transaction, path, data, schemaContext, point, - (NormalizedNodeContainer>) readData, true); + insertWithPointPut(transaction, path, data, schemaContext, point, (NormalizedNodeContainer) readData, + true); return transaction.commit(); case AFTER: readData = readList(strategy, path.getParent()); - if (readData == null || ((NormalizedNodeContainer) readData).getValue().isEmpty()) { + if (readData == null || ((NormalizedNodeContainer) readData).isEmpty()) { return makePut(path, schemaContext, transaction, data); } - insertWithPointPut(transaction, path, data, schemaContext, point, - (NormalizedNodeContainer>) readData, false); + insertWithPointPut(transaction, path, data, schemaContext, point, (NormalizedNodeContainer) readData, + false); return transaction.commit(); default: throw new RestconfDocumentedException( @@ -219,22 +220,21 @@ public final class PutDataTransactionUtil { // FIXME: this method is only called from a context where we are modifying data. This should be part of strategy, // requiring an already-open transaction. It also must return a future, so it can be properly composed. - static NormalizedNode readList(final RestconfStrategy strategy, final YangInstanceIdentifier path) { - return ReadDataTransactionUtil.readDataViaTransaction(strategy, LogicalDatastoreType.CONFIGURATION, - path,false); + static NormalizedNode readList(final RestconfStrategy strategy, final YangInstanceIdentifier path) { + return ReadDataTransactionUtil.readDataViaTransaction(strategy, LogicalDatastoreType.CONFIGURATION, path, + false); } private static void insertWithPointPut(final RestconfTransaction transaction, final YangInstanceIdentifier path, - final NormalizedNode data, + final NormalizedNode data, final EffectiveModelContext schemaContext, final String point, - final NormalizedNodeContainer> readList, - final boolean before) { + final NormalizedNodeContainer readList, final boolean before) { transaction.remove(LogicalDatastoreType.CONFIGURATION, path.getParent()); final InstanceIdentifierContext instanceIdentifier = ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.empty()); int lastItemPosition = 0; - for (final NormalizedNode nodeChild : readList.getValue()) { + for (final NormalizedNode nodeChild : readList.body()) { if (nodeChild.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) { break; } @@ -244,11 +244,11 @@ public final class PutDataTransactionUtil { lastItemPosition++; } int lastInsertedPosition = 0; - final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path.getParent()); + final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path.getParent()); transaction.merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree); - for (final NormalizedNode nodeChild : readList.getValue()) { + for (final NormalizedNode nodeChild : readList.body()) { if (lastInsertedPosition == lastItemPosition) { transaction.replace(LogicalDatastoreType.CONFIGURATION, path, data, schemaContext); } @@ -261,7 +261,7 @@ public final class PutDataTransactionUtil { private static FluentFuture makePut(final YangInstanceIdentifier path, final SchemaContext schemaContext, final RestconfTransaction transaction, - final NormalizedNode data) { + final NormalizedNode data) { transaction.replace(LogicalDatastoreType.CONFIGURATION, path, data, schemaContext); return transaction.commit(); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java index b4e552b55b..f8bfacc34d 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java @@ -53,17 +53,20 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.ListNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; 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.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -201,10 +204,10 @@ public final class ReadDataTransactionUtil { * @param ctx schema context * @return {@link NormalizedNode} */ - public static @Nullable NormalizedNode readData(final @NonNull String valueOfContent, - final @NonNull YangInstanceIdentifier path, - final @NonNull RestconfStrategy strategy, - final String withDefa, final EffectiveModelContext ctx) { + public static @Nullable NormalizedNode readData(final @NonNull String valueOfContent, + final @NonNull YangInstanceIdentifier path, + final @NonNull RestconfStrategy strategy, + final String withDefa, final EffectiveModelContext ctx) { switch (valueOfContent) { case RestconfDataServiceConstant.ReadData.CONFIG: if (withDefa == null) { @@ -238,7 +241,7 @@ public final class ReadDataTransactionUtil { * @param fields paths to selected subtrees which should be read, relative to to the parent path * @return {@link NormalizedNode} */ - public static @Nullable NormalizedNode readData(final @NonNull String valueOfContent, + public static @Nullable NormalizedNode readData(final @NonNull String valueOfContent, final @NonNull YangInstanceIdentifier path, final @NonNull RestconfStrategy strategy, final @Nullable String withDefa, @NonNull final EffectiveModelContext ctx, final @NonNull List fields) { @@ -298,7 +301,7 @@ public final class ReadDataTransactionUtil { } } - private static NormalizedNode prepareDataByParamWithDef(final NormalizedNode result, + private static NormalizedNode prepareDataByParamWithDef(final NormalizedNode result, final YangInstanceIdentifier path, final String withDefa, final EffectiveModelContext ctx) { boolean trim; switch (withDefa) { @@ -316,12 +319,12 @@ public final class ReadDataTransactionUtil { final DataSchemaNode baseSchemaNode = baseSchemaCtxTree.findChild(path).orElseThrow().getDataSchemaNode(); if (result instanceof ContainerNode) { final DataContainerNodeBuilder builder = - Builders.containerBuilder((ContainerSchemaNode) baseSchemaNode); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) baseSchemaNode); buildCont(builder, (ContainerNode) result, baseSchemaCtxTree, path, trim); return builder.build(); } else { final DataContainerNodeBuilder builder = - Builders.mapEntryBuilder((ListSchemaNode) baseSchemaNode); + SchemaAwareBuilders.mapEntryBuilder((ListSchemaNode) baseSchemaNode); buildMapEntryBuilder(builder, (MapEntryNode) result, baseSchemaCtxTree, path, trim, ((ListSchemaNode) baseSchemaNode).getKeyDefinition()); return builder.build(); @@ -332,37 +335,37 @@ public final class ReadDataTransactionUtil { final DataContainerNodeBuilder builder, final MapEntryNode result, final DataSchemaContextTree baseSchemaCtxTree, final YangInstanceIdentifier actualPath, final boolean trim, final List keys) { - for (final DataContainerChild child : result.getValue()) { + for (final DataContainerChild child : result.body()) { final YangInstanceIdentifier path = actualPath.node(child.getIdentifier()); final DataSchemaNode childSchema = baseSchemaCtxTree.findChild(path).orElseThrow().getDataSchemaNode(); if (child instanceof ContainerNode) { final DataContainerNodeBuilder childBuilder = - Builders.containerBuilder((ContainerSchemaNode) childSchema); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) childSchema); buildCont(childBuilder, (ContainerNode) child, baseSchemaCtxTree, path, trim); builder.withChild(childBuilder.build()); } else if (child instanceof MapNode) { - final CollectionNodeBuilder childBuilder = - Builders.mapBuilder((ListSchemaNode) childSchema); + final CollectionNodeBuilder childBuilder = + SchemaAwareBuilders.mapBuilder((ListSchemaNode) childSchema); buildList(childBuilder, (MapNode) child, baseSchemaCtxTree, path, trim, ((ListSchemaNode) childSchema).getKeyDefinition()); builder.withChild(childBuilder.build()); } else if (child instanceof LeafNode) { final Object defaultVal = ((LeafSchemaNode) childSchema).getType().getDefaultValue().orElse(null); - final Object nodeVal = child.getValue(); + final Object nodeVal = child.body(); final NormalizedNodeBuilder> leafBuilder = - Builders.leafBuilder((LeafSchemaNode) childSchema); - if (keys.contains(child.getNodeType())) { - leafBuilder.withValue(((LeafNode) child).getValue()); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) childSchema); + if (keys.contains(child.getIdentifier().getNodeType())) { + leafBuilder.withValue(((LeafNode) child).body()); builder.withChild(leafBuilder.build()); } else { if (trim) { if (defaultVal == null || !defaultVal.equals(nodeVal)) { - leafBuilder.withValue(((LeafNode) child).getValue()); + leafBuilder.withValue(((LeafNode) child).body()); builder.withChild(leafBuilder.build()); } } else { if (defaultVal != null && defaultVal.equals(nodeVal)) { - leafBuilder.withValue(((LeafNode) child).getValue()); + leafBuilder.withValue(((LeafNode) child).body()); builder.withChild(leafBuilder.build()); } } @@ -371,15 +374,15 @@ public final class ReadDataTransactionUtil { } } - private static void buildList(final CollectionNodeBuilder builder, final MapNode result, - final DataSchemaContextTree baseSchemaCtxTree, final YangInstanceIdentifier path, final boolean trim, - final List keys) { - for (final MapEntryNode mapEntryNode : result.getValue()) { + private static void buildList(final CollectionNodeBuilder builder, + final MapNode result, final DataSchemaContextTree baseSchemaCtxTree, final YangInstanceIdentifier path, + final boolean trim, final List keys) { + for (final MapEntryNode mapEntryNode : result.body()) { final YangInstanceIdentifier actualNode = path.node(mapEntryNode.getIdentifier()); final DataSchemaNode childSchema = baseSchemaCtxTree.findChild(actualNode).orElseThrow() .getDataSchemaNode(); final DataContainerNodeBuilder mapEntryBuilder = - Builders.mapEntryBuilder((ListSchemaNode) childSchema); + SchemaAwareBuilders.mapEntryBuilder((ListSchemaNode) childSchema); buildMapEntryBuilder(mapEntryBuilder, mapEntryNode, baseSchemaCtxTree, actualNode, trim, keys); builder.withChild(mapEntryBuilder.build()); } @@ -388,33 +391,33 @@ public final class ReadDataTransactionUtil { private static void buildCont(final DataContainerNodeBuilder builder, final ContainerNode result, final DataSchemaContextTree baseSchemaCtxTree, final YangInstanceIdentifier actualPath, final boolean trim) { - for (final DataContainerChild child : result.getValue()) { + for (final DataContainerChild child : result.body()) { final YangInstanceIdentifier path = actualPath.node(child.getIdentifier()); final DataSchemaNode childSchema = baseSchemaCtxTree.findChild(path).orElseThrow().getDataSchemaNode(); if (child instanceof ContainerNode) { final DataContainerNodeBuilder builderChild = - Builders.containerBuilder((ContainerSchemaNode) childSchema); + SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) childSchema); buildCont(builderChild, result, baseSchemaCtxTree, actualPath, trim); builder.withChild(builderChild.build()); } else if (child instanceof MapNode) { - final CollectionNodeBuilder childBuilder = - Builders.mapBuilder((ListSchemaNode) childSchema); + final CollectionNodeBuilder childBuilder = + SchemaAwareBuilders.mapBuilder((ListSchemaNode) childSchema); buildList(childBuilder, (MapNode) child, baseSchemaCtxTree, path, trim, ((ListSchemaNode) childSchema).getKeyDefinition()); builder.withChild(childBuilder.build()); } else if (child instanceof LeafNode) { final Object defaultVal = ((LeafSchemaNode) childSchema).getType().getDefaultValue().orElse(null); - final Object nodeVal = child.getValue(); + final Object nodeVal = child.body(); final NormalizedNodeBuilder> leafBuilder = - Builders.leafBuilder((LeafSchemaNode) childSchema); + SchemaAwareBuilders.leafBuilder((LeafSchemaNode) childSchema); if (trim) { if (defaultVal == null || !defaultVal.equals(nodeVal)) { - leafBuilder.withValue(((LeafNode) child).getValue()); + leafBuilder.withValue(((LeafNode) child).body()); builder.withChild(leafBuilder.build()); } } else { if (defaultVal != null && defaultVal.equals(nodeVal)) { - leafBuilder.withValue(((LeafNode) child).getValue()); + leafBuilder.withValue(((LeafNode) child).body()); builder.withChild(leafBuilder.build()); } } @@ -431,10 +434,10 @@ public final class ReadDataTransactionUtil { * in {@link RestconfStrategy} if any * @return {@link NormalizedNode} */ - static @Nullable NormalizedNode readDataViaTransaction(final @NonNull RestconfStrategy strategy, + static @Nullable NormalizedNode readDataViaTransaction(final @NonNull RestconfStrategy strategy, final LogicalDatastoreType store, final YangInstanceIdentifier path, final boolean closeTransactionChain) { - final ListenableFuture>> listenableFuture = strategy.read(store, path); + final ListenableFuture> listenableFuture = strategy.read(store, path); return extractReadData(strategy, path, closeTransactionChain, listenableFuture); } @@ -450,16 +453,16 @@ public final class ReadDataTransactionUtil { * @param fields paths to selected subtrees which should be read, relative to to the parent path * @return {@link NormalizedNode} */ - private static @Nullable NormalizedNode readDataViaTransaction(final @NonNull RestconfStrategy strategy, + private static @Nullable NormalizedNode readDataViaTransaction(final @NonNull RestconfStrategy strategy, final @NonNull LogicalDatastoreType store, final @NonNull YangInstanceIdentifier path, final boolean closeTransactionChain, final @NonNull List fields) { - final ListenableFuture>> listenableFuture = strategy.read(store, path, fields); + final ListenableFuture> listenableFuture = strategy.read(store, path, fields); return extractReadData(strategy, path, closeTransactionChain, listenableFuture); } - private static NormalizedNode extractReadData(final RestconfStrategy strategy, + private static NormalizedNode extractReadData(final RestconfStrategy strategy, final YangInstanceIdentifier path, final boolean closeTransactionChain, - final ListenableFuture>> dataFuture) { + final ListenableFuture> dataFuture) { final NormalizedNodeFactory dataFactory = new NormalizedNodeFactory(); if (closeTransactionChain) { //Method close transactionChain if any @@ -479,14 +482,14 @@ public final class ReadDataTransactionUtil { * @param ctx schema context * @return {@link NormalizedNode} */ - private static @Nullable NormalizedNode readAllData(final @NonNull RestconfStrategy strategy, + private static @Nullable NormalizedNode readAllData(final @NonNull RestconfStrategy strategy, final YangInstanceIdentifier path, final String withDefa, final EffectiveModelContext ctx) { // PREPARE STATE DATA NODE - final NormalizedNode stateDataNode = readDataViaTransaction( - strategy, LogicalDatastoreType.OPERATIONAL, path, false); + final NormalizedNode stateDataNode = readDataViaTransaction(strategy, LogicalDatastoreType.OPERATIONAL, path, + false); // PREPARE CONFIG DATA NODE - final NormalizedNode configDataNode; + final NormalizedNode configDataNode; //Here will be closed transactionChain if any if (withDefa == null) { configDataNode = readDataViaTransaction( @@ -511,15 +514,15 @@ public final class ReadDataTransactionUtil { * @param fields paths to selected subtrees which should be read, relative to to the parent path * @return {@link NormalizedNode} */ - private static @Nullable NormalizedNode readAllData(final @NonNull RestconfStrategy strategy, + private static @Nullable NormalizedNode readAllData(final @NonNull RestconfStrategy strategy, final @NonNull YangInstanceIdentifier path, final @Nullable String withDefa, final @NonNull EffectiveModelContext ctx, final @NonNull List fields) { // PREPARE STATE DATA NODE - final NormalizedNode stateDataNode = readDataViaTransaction( - strategy, LogicalDatastoreType.OPERATIONAL, path, false, fields); + final NormalizedNode stateDataNode = readDataViaTransaction(strategy, LogicalDatastoreType.OPERATIONAL, path, + false, fields); // PREPARE CONFIG DATA NODE - final NormalizedNode configDataNode; + final NormalizedNode configDataNode; //Here will be closed transactionChain if any if (withDefa == null) { configDataNode = readDataViaTransaction(strategy, LogicalDatastoreType.CONFIGURATION, path, true, fields); @@ -532,8 +535,8 @@ public final class ReadDataTransactionUtil { return mergeConfigAndSTateDataIfNeeded(stateDataNode, configDataNode); } - private static NormalizedNode mergeConfigAndSTateDataIfNeeded(final NormalizedNode stateDataNode, - final NormalizedNode configDataNode) { + private static NormalizedNode mergeConfigAndSTateDataIfNeeded(final NormalizedNode stateDataNode, + final NormalizedNode configDataNode) { // if no data exists if (stateDataNode == null && configDataNode == null) { return null; @@ -560,8 +563,8 @@ public final class ReadDataTransactionUtil { * @param configDataNode data node of config data * @return {@link NormalizedNode} */ - private static @NonNull NormalizedNode mergeStateAndConfigData( - final @NonNull NormalizedNode stateDataNode, final @NonNull NormalizedNode configDataNode) { + private static @NonNull NormalizedNode mergeStateAndConfigData( + final @NonNull NormalizedNode stateDataNode, final @NonNull NormalizedNode configDataNode) { validateNodeMerge(stateDataNode, configDataNode); if (configDataNode instanceof RpcDefinition) { return prepareRpcData(configDataNode, stateDataNode); @@ -576,8 +579,8 @@ public final class ReadDataTransactionUtil { * @param stateDataNode data node of state data * @param configDataNode data node of config data */ - private static void validateNodeMerge(final @NonNull NormalizedNode stateDataNode, - final @NonNull NormalizedNode configDataNode) { + private static void validateNodeMerge(final @NonNull NormalizedNode stateDataNode, + final @NonNull NormalizedNode configDataNode) { final QNameModule moduleOfStateData = stateDataNode.getIdentifier().getNodeType().getModule(); final QNameModule moduleOfConfigData = configDataNode.getIdentifier().getNodeType().getModule(); if (!moduleOfStateData.equals(moduleOfConfigData)) { @@ -592,8 +595,8 @@ public final class ReadDataTransactionUtil { * @param stateDataNode data node of state data * @return {@link NormalizedNode} */ - private static @NonNull NormalizedNode prepareRpcData(final @NonNull NormalizedNode configDataNode, - final @NonNull NormalizedNode stateDataNode) { + private static @NonNull NormalizedNode prepareRpcData(final @NonNull NormalizedNode configDataNode, + final @NonNull NormalizedNode stateDataNode) { final DataContainerNodeBuilder mapEntryBuilder = ImmutableNodes .mapEntryBuilder(); mapEntryBuilder.withNodeIdentifier((NodeIdentifierWithPredicates) configDataNode.getIdentifier()); @@ -603,7 +606,9 @@ public final class ReadDataTransactionUtil { // MAP STATE DATA mapRpcDataNode(stateDataNode, mapEntryBuilder); - return ImmutableNodes.mapNodeBuilder(configDataNode.getNodeType()).addChild(mapEntryBuilder.build()).build(); + return ImmutableNodes.mapNodeBuilder(configDataNode.getIdentifier().getNodeType()) + .addChild(mapEntryBuilder.build()) + .build(); } /** @@ -612,9 +617,9 @@ public final class ReadDataTransactionUtil { * @param dataNode data node * @param mapEntryBuilder builder for mapping data */ - private static void mapRpcDataNode(final @NonNull NormalizedNode dataNode, + private static void mapRpcDataNode(final @NonNull NormalizedNode dataNode, final @NonNull DataContainerNodeBuilder mapEntryBuilder) { - ((ContainerNode) dataNode).getValue().forEach(mapEntryBuilder::addChild); + ((ContainerNode) dataNode).body().forEach(mapEntryBuilder::addChild); } /** @@ -625,22 +630,22 @@ public final class ReadDataTransactionUtil { * @return {@link NormalizedNode} */ @SuppressWarnings("unchecked") - private static @NonNull NormalizedNode prepareData(final @NonNull NormalizedNode configDataNode, - final @NonNull NormalizedNode stateDataNode) { - if (configDataNode instanceof OrderedMapNode) { - final CollectionNodeBuilder builder = Builders + private static @NonNull NormalizedNode prepareData(final @NonNull NormalizedNode configDataNode, + final @NonNull NormalizedNode stateDataNode) { + if (configDataNode instanceof UserMapNode) { + final CollectionNodeBuilder builder = Builders .orderedMapBuilder().withNodeIdentifier(((MapNode) configDataNode).getIdentifier()); mapValueToBuilder( - ((OrderedMapNode) configDataNode).getValue(), ((OrderedMapNode) stateDataNode).getValue(), builder); + ((UserMapNode) configDataNode).body(), ((UserMapNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof MapNode) { - final CollectionNodeBuilder builder = ImmutableNodes + final CollectionNodeBuilder builder = ImmutableNodes .mapNodeBuilder().withNodeIdentifier(((MapNode) configDataNode).getIdentifier()); mapValueToBuilder( - ((MapNode) configDataNode).getValue(), ((MapNode) stateDataNode).getValue(), builder); + ((MapNode) configDataNode).body(), ((MapNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof MapEntryNode) { @@ -648,7 +653,7 @@ public final class ReadDataTransactionUtil { .mapEntryBuilder().withNodeIdentifier(((MapEntryNode) configDataNode).getIdentifier()); mapValueToBuilder( - ((MapEntryNode) configDataNode).getValue(), ((MapEntryNode) stateDataNode).getValue(), builder); + ((MapEntryNode) configDataNode).body(), ((MapEntryNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof ContainerNode) { @@ -656,15 +661,15 @@ public final class ReadDataTransactionUtil { .containerBuilder().withNodeIdentifier(((ContainerNode) configDataNode).getIdentifier()); mapValueToBuilder( - ((ContainerNode) configDataNode).getValue(), ((ContainerNode) stateDataNode).getValue(), builder); + ((ContainerNode) configDataNode).body(), ((ContainerNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof AugmentationNode) { final DataContainerNodeBuilder builder = Builders .augmentationBuilder().withNodeIdentifier(((AugmentationNode) configDataNode).getIdentifier()); - mapValueToBuilder(((AugmentationNode) configDataNode).getValue(), - ((AugmentationNode) stateDataNode).getValue(), builder); + mapValueToBuilder(((AugmentationNode) configDataNode).body(), + ((AugmentationNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof ChoiceNode) { @@ -672,43 +677,43 @@ public final class ReadDataTransactionUtil { .choiceBuilder().withNodeIdentifier(((ChoiceNode) configDataNode).getIdentifier()); mapValueToBuilder( - ((ChoiceNode) configDataNode).getValue(), ((ChoiceNode) stateDataNode).getValue(), builder); + ((ChoiceNode) configDataNode).body(), ((ChoiceNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof LeafNode) { - return ImmutableNodes.leafNode(configDataNode.getNodeType(), configDataNode.getValue()); - } else if (configDataNode instanceof OrderedLeafSetNode) { - final ListNodeBuilder> builder = Builders - .orderedLeafSetBuilder().withNodeIdentifier(((OrderedLeafSetNode) configDataNode).getIdentifier()); + return ImmutableNodes.leafNode(configDataNode.getIdentifier().getNodeType(), configDataNode.body()); + } else if (configDataNode instanceof UserLeafSetNode) { + final ListNodeBuilder> builder = Builders + .orderedLeafSetBuilder().withNodeIdentifier(((UserLeafSetNode) configDataNode).getIdentifier()); - mapValueToBuilder(((OrderedLeafSetNode) configDataNode).getValue(), - ((OrderedLeafSetNode) stateDataNode).getValue(), builder); + mapValueToBuilder(((UserLeafSetNode) configDataNode).body(), + ((UserLeafSetNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof LeafSetNode) { - final ListNodeBuilder> builder = Builders + final ListNodeBuilder> builder = Builders .leafSetBuilder().withNodeIdentifier(((LeafSetNode) configDataNode).getIdentifier()); - mapValueToBuilder(((LeafSetNode) configDataNode).getValue(), - ((LeafSetNode) stateDataNode).getValue(), builder); + mapValueToBuilder(((LeafSetNode) configDataNode).body(), + ((LeafSetNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof LeafSetEntryNode) { return Builders.leafSetEntryBuilder() .withNodeIdentifier(((LeafSetEntryNode) configDataNode).getIdentifier()) - .withValue(configDataNode.getValue()) + .withValue(configDataNode.body()) .build(); } else if (configDataNode instanceof UnkeyedListNode) { final CollectionNodeBuilder builder = Builders .unkeyedListBuilder().withNodeIdentifier(((UnkeyedListNode) configDataNode).getIdentifier()); - mapValueToBuilder(((UnkeyedListNode) configDataNode).getValue(), - ((UnkeyedListNode) stateDataNode).getValue(), builder); + mapValueToBuilder(((UnkeyedListNode) configDataNode).body(), + ((UnkeyedListNode) stateDataNode).body(), builder); return builder.build(); } else if (configDataNode instanceof UnkeyedListEntryNode) { final DataContainerNodeBuilder builder = Builders .unkeyedListEntryBuilder().withNodeIdentifier(((UnkeyedListEntryNode) configDataNode).getIdentifier()); - mapValueToBuilder(((UnkeyedListEntryNode) configDataNode).getValue(), - ((UnkeyedListEntryNode) stateDataNode).getValue(), builder); + mapValueToBuilder(((UnkeyedListEntryNode) configDataNode).body(), + ((UnkeyedListEntryNode) stateDataNode).body(), builder); return builder.build(); } else { throw new RestconfDocumentedException("Unexpected node type: " + configDataNode.getClass().getName()); @@ -722,7 +727,7 @@ public final class ReadDataTransactionUtil { * @param stateData collection of state data nodes * @param builder builder */ - private static > void mapValueToBuilder( + private static void mapValueToBuilder( final @NonNull Collection configData, final @NonNull Collection stateData, final @NonNull NormalizedNodeContainerBuilder builder) { final Map configMap = configData.stream().collect( @@ -745,7 +750,7 @@ public final class ReadDataTransactionUtil { * @param stateMap map of state data nodes * @param builder - builder */ - private static > void mapDataToBuilder( + private static void mapDataToBuilder( final @NonNull Map configMap, final @NonNull Map stateMap, final @NonNull NormalizedNodeContainerBuilder builder) { configMap.entrySet().stream().filter(x -> !stateMap.containsKey(x.getKey())).forEach( @@ -763,7 +768,7 @@ public final class ReadDataTransactionUtil { * @param builder - builder */ @SuppressWarnings("unchecked") - private static > void mergeDataToBuilder( + private static void mergeDataToBuilder( final @NonNull Map configMap, final @NonNull Map stateMap, final @NonNull NormalizedNodeContainerBuilder builder) { // it is enough to process only config data because operational contains the same data diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java index f4b9b2d20d..3966bc1487 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java @@ -52,7 +52,7 @@ public final class RestconfInvokeOperationsUtil { * schema path of data * @return {@link DOMRpcResult} */ - public static DOMRpcResult invokeRpcViaMountPoint(final DOMMountPoint mountPoint, final NormalizedNode data, + public static DOMRpcResult invokeRpcViaMountPoint(final DOMMountPoint mountPoint, final NormalizedNode data, final QName schemaPath) { final Optional mountPointService = mountPoint.getService(DOMRpcService.class); if (mountPointService.isPresent()) { @@ -74,12 +74,11 @@ public final class RestconfInvokeOperationsUtil { * rpc service to invoke rpc * @return {@link DOMRpcResult} */ - public static DOMRpcResult invokeRpc(final NormalizedNode data, final QName rpc, - final DOMRpcService rpcService) { + public static DOMRpcResult invokeRpc(final NormalizedNode data, final QName rpc, final DOMRpcService rpcService) { return prepareResult(rpcService.invokeRpc(rpc, nonnullInput(rpc, data))); } - private static @NonNull NormalizedNode nonnullInput(final QName type, final NormalizedNode input) { + private static @NonNull NormalizedNode nonnullInput(final QName type, final NormalizedNode input) { return input != null ? input : ImmutableNodes.containerNode(YangConstants.operationInputQName(type.getModule())); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfStreamsConstants.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfStreamsConstants.java index 63cc04bb09..669f84029b 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfStreamsConstants.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfStreamsConstants.java @@ -8,10 +8,10 @@ package org.opendaylight.restconf.nb.rfc8040.rests.utils; import com.google.common.collect.ImmutableSet; -import java.net.URI; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; /** @@ -20,11 +20,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.Augmentat public final class RestconfStreamsConstants { public static final QNameModule SAL_REMOTE_AUGMENT = QNameModule.create( - URI.create("urn:sal:restconf:event:subscription"), - Revision.of("2014-07-08")); + XMLNamespace.of("urn:sal:restconf:event:subscription"), Revision.of("2014-07-08")); public static final QNameModule SUBSCRIBE_TO_NOTIFICATION = QNameModule.create( - URI.create("subscribe:to:notification"), - Revision.of("2016-10-28")); + XMLNamespace.of("subscribe:to:notification"), Revision.of("2016-10-28")); public static final QName SAL_REMOTE_NAMESPACE = QName.create( "urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote", diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TransactionUtil.java index 804ad07d05..93b3a94158 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TransactionUtil.java @@ -57,7 +57,7 @@ public final class TransactionUtil { return; } - final NormalizedNode parentStructure = ImmutableNodes.fromInstanceId(schemaContext, + final NormalizedNode parentStructure = ImmutableNodes.fromInstanceId(schemaContext, YangInstanceIdentifier.create(normalizedPathWithoutChildArgs)); transaction.merge(LogicalDatastoreType.CONFIGURATION, rootNormalizedPath, parentStructure); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractNotificationsData.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractNotificationsData.java index 61b7b7a870..332eec555f 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractNotificationsData.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractNotificationsData.java @@ -120,7 +120,7 @@ abstract class AbstractNotificationsData { * schema path of data * @return {@link DOMResult} */ - protected DOMResult writeNormalizedNode(final NormalizedNode normalized, final EffectiveModelContext context, + protected DOMResult writeNormalizedNode(final NormalizedNode normalized, final EffectiveModelContext context, final SchemaPath schemaPath) throws IOException, XMLStreamException { final Document doc = UntrustedXML.newDocumentBuilder().newDocument(); final DOMResult result = new DOMResult(doc); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java index 38835e8d7e..80c875dd70 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java @@ -35,16 +35,17 @@ 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; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; 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.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.model.api.Deviation; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.FeatureDefinition; @@ -87,7 +88,7 @@ public final class RestconfMappingNodeUtil { */ public static ContainerNode mapModulesByIetfYangLibraryYang(final Collection modules, final SchemaContext context, final String moduleSetId) { - final CollectionNodeBuilder mapBuilder = Builders.orderedMapBuilder() + final CollectionNodeBuilder mapBuilder = Builders.orderedMapBuilder() .withNodeIdentifier(new NodeIdentifier(IetfYangLibrary.MODULE_QNAME_LIST)); for (final Module module : context.getModules()) { fillMapByModules(mapBuilder, IetfYangLibrary.MODULE_QNAME_LIST, false, module, context); @@ -112,7 +113,7 @@ public final class RestconfMappingNodeUtil { * @param context * schema context */ - private static void fillMapByModules(final CollectionNodeBuilder mapBuilder, + private static void fillMapByModules(final CollectionNodeBuilder mapBuilder, final QName mapQName, final boolean isSubmodule, final ModuleLike module, final SchemaContext context) { final DataContainerNodeBuilder mapEntryBuilder = newCommonLeafsMapEntryBuilder(mapQName, module); @@ -164,7 +165,7 @@ public final class RestconfMappingNodeUtil { private static void addSubmodules(final ModuleLike module, final DataContainerNodeBuilder mapEntryBuilder, final SchemaContext context) { - final CollectionNodeBuilder mapBuilder = Builders.orderedMapBuilder() + final CollectionNodeBuilder mapBuilder = Builders.orderedMapBuilder() .withNodeIdentifier(new NodeIdentifier(IetfYangLibrary.SPECIFIC_MODULE_SUBMODULE_LIST_QNAME)); for (final Submodule submodule : module.getSubmodules()) { @@ -187,7 +188,7 @@ public final class RestconfMappingNodeUtil { private static void addDeviationList(final ModuleLike module, final DataContainerNodeBuilder mapEntryBuilder, final SchemaContext context) { - final CollectionNodeBuilder deviations = Builders.mapBuilder() + final CollectionNodeBuilder deviations = Builders.mapBuilder() .withNodeIdentifier(new NodeIdentifier(IetfYangLibrary.SPECIFIC_MODULE_DEVIATION_LIST_QNAME)); for (final Deviation deviation : module.getDeviations()) { final List ids = deviation.getTargetPath().getNodeIdentifiers(); @@ -209,7 +210,7 @@ public final class RestconfMappingNodeUtil { private static void addFeatureLeafList( final DataContainerNodeBuilder mapEntryBuilder, final Collection features) { - final ListNodeBuilder> leafSetBuilder = Builders.leafSetBuilder() + final ListNodeBuilder> leafSetBuilder = Builders.leafSetBuilder() .withNodeIdentifier(new NodeIdentifier(IetfYangLibrary.SPECIFIC_MODULE_FEATURE_LEAF_LIST_QNAME)); for (final FeatureDefinition feature : features) { leafSetBuilder.withChildValue(feature.getQName().getLocalName()); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java index de31eb364d..db34403887 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java @@ -46,7 +46,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; /** * Deserializer for {@link String} to {@link YangInstanceIdentifier} for restconf. @@ -176,8 +176,8 @@ public final class YangInstanceIdentifierDeserializer { } final TypeDefinition baseType = RestUtil.resolveBaseTypeFrom(typedef); if (baseType instanceof LeafrefTypeDefinition) { - typedef = SchemaContextUtil.getBaseTypeForLeafRef((LeafrefTypeDefinition) baseType, schemaContext, - schemaNode); + typedef = SchemaInferenceStack.ofInstantiatedPath(schemaContext, schemaNode.getPath()) + .resolveLeafref((LeafrefTypeDefinition) baseType); } decoded = RestCodec.from(typedef, null, schemaContext).deserialize(value); if (decoded == null && typedef instanceof IdentityrefTypeDefinition) { diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java index 9fd81a2f39..39d4292d18 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java @@ -36,6 +36,7 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -79,7 +80,7 @@ public final class TestRestconfUtils { final InputStream inputStream = TestRestconfUtils.class.getResourceAsStream(pathToInputFile); try { final Document doc = UntrustedXML.newDocumentBuilder().parse(inputStream); - final NormalizedNode nn = parse(iiContext, doc); + final NormalizedNode nn = parse(iiContext, doc); return new NormalizedNodeContext(iiContext, nn); } catch (final Exception e) { LOG.error("Load xml file " + pathToInputFile + " fail.", e); @@ -87,7 +88,7 @@ public final class TestRestconfUtils { return null; } - private static NormalizedNode parse(final InstanceIdentifierContext iiContext, final Document doc) + private static NormalizedNode parse(final InstanceIdentifierContext iiContext, final Document doc) throws XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException { final SchemaNode schemaNodeContext = iiContext.getSchemaNode(); DataSchemaNode schemaNode = null; @@ -120,7 +121,8 @@ public final class TestRestconfUtils { final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - final XmlParserStream xmlParser = XmlParserStream.create(writer, iiContext.getSchemaContext(), schemaNode); + final XmlParserStream xmlParser = XmlParserStream.create(writer, + SchemaInferenceStack.ofInstantiatedPath(iiContext.getSchemaContext(), schemaNode.getPath()).toInference()); if (schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode) { xmlParser.traverse(new DOMSource(doc.getDocumentElement())); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java index c950aa1166..2a0030ea1b 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java @@ -22,8 +22,6 @@ import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; -import java.net.URI; -import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.util.ArrayList; @@ -50,11 +48,12 @@ import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler; import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -172,12 +171,7 @@ public final class TestUtils { } public static QName buildQName(final String name, final String uri, final String date, final String prefix) { - try { - final URI u = new URI(uri); - return QName.create(u, Revision.ofNullable(date), name); - } catch (final URISyntaxException e) { - return null; - } + return QName.create(XMLNamespace.of(uri), Revision.ofNullable(date), name); } public static QName buildQName(final String name, final String uri, final String date) { @@ -246,7 +240,7 @@ public final class TestUtils { return NodeIdentifierWithPredicates.of(QName.create(namespace, revision, localName), predicate); } - public static NormalizedNode prepareNormalizedNodeWithIetfInterfacesInterfacesData() throws ParseException { + public static NormalizedNode prepareNormalizedNodeWithIetfInterfacesInterfacesData() throws ParseException { final String ietfInterfacesDate = "2013-07-04"; final String namespace = "urn:ietf:params:xml:ns:yang:ietf-interfaces"; final DataContainerNodeBuilder mapEntryNode = diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterDepthTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterDepthTest.java index 91be11e251..ba3a8aff39 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterDepthTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterDepthTest.java @@ -64,13 +64,13 @@ public class ParameterAwareNormalizedNodeWriterDepthTest { private NodeIdentifier mapNodeIdentifier; private NodeIdentifierWithPredicates mapEntryNodeIdentifier; private NodeIdentifier leafSetNodeIdentifier; - private NodeWithValue leafSetEntryNodeIdentifier; + private NodeWithValue leafSetEntryNodeIdentifier; private NodeIdentifier keyLeafNodeIdentifier; private NodeIdentifier anotherLeafNodeIdentifier; - private Collection> containerNodeValue; + private Collection containerNodeValue; private Collection mapNodeValue; - private Collection> mapEntryNodeValue; + private Collection mapEntryNodeValue; private Collection> leafSetNodeValue; private String leafSetEntryNodeValue; private String keyLeafNodeValue; @@ -81,7 +81,6 @@ public class ParameterAwareNormalizedNodeWriterDepthTest { // identifiers containerNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "container")); when(containerNodeData.getIdentifier()).thenReturn(containerNodeIdentifier); - when(containerNodeData.getNodeType()).thenReturn(containerNodeIdentifier.getNodeType()); mapNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "list")); when(mapNodeData.getIdentifier()).thenReturn(mapNodeIdentifier); @@ -101,31 +100,31 @@ public class ParameterAwareNormalizedNodeWriterDepthTest { mapEntryNodeIdentifier = NodeIdentifierWithPredicates.of( QName.create("namespace", "list-entry"), mapEntryNodeKey, keyLeafNodeValue); when(mapEntryNodeData.getIdentifier()).thenReturn(mapEntryNodeIdentifier); - when(mapEntryNodeData.getChild(keyLeafNodeIdentifier)).thenReturn(Optional.of(keyLeafNodeData)); + when(mapEntryNodeData.findChildByArg(keyLeafNodeIdentifier)).thenReturn(Optional.of(keyLeafNodeData)); - when(keyLeafNodeData.getValue()).thenReturn(keyLeafNodeValue); + when(keyLeafNodeData.body()).thenReturn(keyLeafNodeValue); when(keyLeafNodeData.getIdentifier()).thenReturn(keyLeafNodeIdentifier); anotherLeafNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "another-field")); anotherLeafNodeValue = "another-value"; - when(anotherLeafNodeData.getValue()).thenReturn(anotherLeafNodeValue); + when(anotherLeafNodeData.body()).thenReturn(anotherLeafNodeValue); when(anotherLeafNodeData.getIdentifier()).thenReturn(anotherLeafNodeIdentifier); // values - when(leafSetEntryNodeData.getValue()).thenReturn(leafSetEntryNodeValue); + when(leafSetEntryNodeData.body()).thenReturn(leafSetEntryNodeValue); leafSetNodeValue = Collections.singletonList(leafSetEntryNodeData); - when(leafSetNodeData.getValue()).thenReturn(leafSetNodeValue); + when(leafSetNodeData.body()).thenReturn(leafSetNodeValue); containerNodeValue = Collections.singleton(leafSetNodeData); - when(containerNodeData.getValue()).thenReturn(containerNodeValue); + when(containerNodeData.body()).thenReturn(containerNodeValue); mapEntryNodeValue = Sets.newHashSet(keyLeafNodeData, anotherLeafNodeData); - when(mapEntryNodeData.getValue()).thenReturn(mapEntryNodeValue); + when(mapEntryNodeData.body()).thenReturn(mapEntryNodeValue); mapNodeValue = Collections.singleton(mapEntryNodeData); - when(mapNodeData.getValue()).thenReturn(mapNodeValue); + when(mapNodeData.body()).thenReturn(mapNodeValue); } /** diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterFieldsTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterFieldsTest.java index d02a5e70f4..51fe2f1b1d 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterFieldsTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterFieldsTest.java @@ -61,12 +61,12 @@ public class ParameterAwareNormalizedNodeWriterFieldsTest { private NodeIdentifier mapNodeIdentifier; private NodeIdentifierWithPredicates mapEntryNodeIdentifier; private NodeIdentifier leafSetNodeIdentifier; - private NodeWithValue leafSetEntryNodeIdentifier; + private NodeWithValue leafSetEntryNodeIdentifier; private NodeIdentifier keyLeafNodeIdentifier; - private Collection> containerNodeValue; + private Collection containerNodeValue; private Collection mapNodeValue; - private Collection> mapEntryNodeValue; + private Collection mapEntryNodeValue; private Collection> leafSetNodeValue; private String leafSetEntryNodeValue; private String keyLeafNodeValue; @@ -76,7 +76,6 @@ public class ParameterAwareNormalizedNodeWriterFieldsTest { // identifiers containerNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "container")); Mockito.when(containerNodeData.getIdentifier()).thenReturn(containerNodeIdentifier); - Mockito.when(containerNodeData.getNodeType()).thenReturn(containerNodeIdentifier.getNodeType()); mapNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "list")); Mockito.when(mapNodeData.getIdentifier()).thenReturn(mapNodeIdentifier); @@ -88,7 +87,6 @@ public class ParameterAwareNormalizedNodeWriterFieldsTest { leafSetNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "leaf-set")); Mockito.when(leafSetNodeData.getIdentifier()).thenReturn(leafSetNodeIdentifier); - Mockito.when(leafSetNodeData.getNodeType()).thenReturn(leafSetNodeIdentifier.getNodeType()); final QName mapEntryNodeKey = QName.create("namespace", "key-field"); keyLeafNodeIdentifier = NodeIdentifier.create(mapEntryNodeKey); @@ -97,26 +95,25 @@ public class ParameterAwareNormalizedNodeWriterFieldsTest { mapEntryNodeIdentifier = NodeIdentifierWithPredicates.of( QName.create("namespace", "list-entry"), mapEntryNodeKey, keyLeafNodeValue); Mockito.when(mapEntryNodeData.getIdentifier()).thenReturn(mapEntryNodeIdentifier); - Mockito.when(mapEntryNodeData.getChild(keyLeafNodeIdentifier)).thenReturn(Optional.of(keyLeafNodeData)); + Mockito.when(mapEntryNodeData.findChildByArg(keyLeafNodeIdentifier)).thenReturn(Optional.of(keyLeafNodeData)); - Mockito.when(keyLeafNodeData.getValue()).thenReturn(keyLeafNodeValue); + Mockito.when(keyLeafNodeData.body()).thenReturn(keyLeafNodeValue); Mockito.when(keyLeafNodeData.getIdentifier()).thenReturn(keyLeafNodeIdentifier); - Mockito.when(keyLeafNodeData.getNodeType()).thenReturn(keyLeafNodeIdentifier.getNodeType()); // values - Mockito.when(leafSetEntryNodeData.getValue()).thenReturn(leafSetEntryNodeValue); + Mockito.when(leafSetEntryNodeData.body()).thenReturn(leafSetEntryNodeValue); leafSetNodeValue = Collections.singletonList(leafSetEntryNodeData); - Mockito.when(leafSetNodeData.getValue()).thenReturn(leafSetNodeValue); + Mockito.when(leafSetNodeData.body()).thenReturn(leafSetNodeValue); containerNodeValue = Collections.singleton(leafSetNodeData); - Mockito.when(containerNodeData.getValue()).thenReturn(containerNodeValue); + Mockito.when(containerNodeData.body()).thenReturn(containerNodeValue); mapEntryNodeValue = Sets.newHashSet(keyLeafNodeData); - Mockito.when(mapEntryNodeData.getValue()).thenReturn(mapEntryNodeValue); + Mockito.when(mapEntryNodeData.body()).thenReturn(mapEntryNodeValue); mapNodeValue = Collections.singleton(mapEntryNodeData); - Mockito.when(mapNodeData.getValue()).thenReturn(mapNodeValue); + Mockito.when(mapNodeData.body()).thenReturn(mapNodeValue); } /** @@ -190,7 +187,7 @@ public class ParameterAwareNormalizedNodeWriterFieldsTest { @Test public void writeMapNodeAllFieldsTest() throws Exception { final List> limitedFields = new ArrayList<>(); - limitedFields.add(Sets.newHashSet(keyLeafNodeData.getNodeType())); + limitedFields.add(Sets.newHashSet(keyLeafNodeData.getIdentifier().getNodeType())); final ParameterAwareNormalizedNodeWriter parameterWriter = ParameterAwareNormalizedNodeWriter.forStreamWriter( writer, null, limitedFields); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterParametersTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterParametersTest.java index 5957c73953..3c984b955b 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterParametersTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/ParameterAwareNormalizedNodeWriterParametersTest.java @@ -49,47 +49,40 @@ public class ParameterAwareNormalizedNodeWriterParametersTest { private NodeIdentifier containerNodeIdentifier; private NodeIdentifier leafSetNodeIdentifier; - private NodeWithValue leafSetEntryNodeIdentifier; - private NodeIdentifier rootDataContainerIdentifier; + private NodeWithValue leafSetEntryNodeIdentifier; - private Collection> containerNodeValue; + private Collection containerNodeValue; private Collection> leafSetNodeValue; private String leafSetEntryNodeValue; - private Collection> rootDataContainerValue; + private Collection rootDataContainerValue; @Before public void setUp() { // identifiers containerNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "container")); Mockito.when(containerNodeData.getIdentifier()).thenReturn(containerNodeIdentifier); - Mockito.when(containerNodeData.getNodeType()).thenReturn(containerNodeIdentifier.getNodeType()); final QName leafSetEntryNodeQName = QName.create("namespace", "leaf-set-entry"); leafSetEntryNodeValue = "leaf-set-value"; leafSetEntryNodeIdentifier = new NodeWithValue<>(leafSetEntryNodeQName, leafSetEntryNodeValue); Mockito.when(leafSetEntryNodeData.getIdentifier()).thenReturn(leafSetEntryNodeIdentifier); - Mockito.when(leafSetEntryNodeData.getNodeType()).thenReturn(leafSetEntryNodeIdentifier.getNodeType()); - Mockito.when(leafSetEntryNodeData.getNodeType()).thenReturn(leafSetEntryNodeQName); leafSetNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "leaf-set")); Mockito.when(leafSetNodeData.getIdentifier()).thenReturn(leafSetNodeIdentifier); - Mockito.when(leafSetNodeData.getNodeType()).thenReturn(leafSetNodeIdentifier.getNodeType()); - - rootDataContainerIdentifier = NodeIdentifier.create( - QName.create("urn:ietf:params:xml:ns:netconf:base:1.0", "data")); - Mockito.when(rootDataContainerData.getNodeType()).thenReturn(rootDataContainerIdentifier.getNodeType()); // values - Mockito.when(leafSetEntryNodeData.getValue()).thenReturn(leafSetEntryNodeValue); + Mockito.when(leafSetEntryNodeData.body()).thenReturn(leafSetEntryNodeValue); leafSetNodeValue = Collections.singletonList(leafSetEntryNodeData); - Mockito.when(leafSetNodeData.getValue()).thenReturn(leafSetNodeValue); + Mockito.when(leafSetNodeData.body()).thenReturn(leafSetNodeValue); containerNodeValue = Collections.singleton(leafSetNodeData); - Mockito.when(containerNodeData.getValue()).thenReturn(containerNodeValue); + Mockito.when(containerNodeData.body()).thenReturn(containerNodeValue); rootDataContainerValue = Collections.singleton(leafSetNodeData); - Mockito.when(rootDataContainerData.getValue()).thenReturn(rootDataContainerValue); + Mockito.when(rootDataContainerData.getIdentifier()).thenReturn(NodeIdentifier.create( + QName.create("urn:ietf:params:xml:ns:netconf:base:1.0", "data"))); + Mockito.when(rootDataContainerData.body()).thenReturn(rootDataContainerValue); } /** diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java index 2948062eec..8145d8d63e 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java @@ -13,7 +13,6 @@ import static org.junit.Assert.assertTrue; import java.io.File; import java.io.InputStream; -import java.net.URI; import java.util.Collection; import java.util.Optional; import javax.ws.rs.core.MediaType; @@ -30,8 +29,8 @@ import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.XmlBodyReaderT import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; 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.NormalizedNodes; @@ -42,7 +41,7 @@ import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public class XmlBodyReaderMountPointTest extends AbstractBodyReaderTest { private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create( - URI.create("instance:identifier:module"), Revision.of("2014-01-17")); + XMLNamespace.of("instance:identifier:module"), Revision.of("2014-01-17")); private static EffectiveModelContext schemaContext; @@ -132,17 +131,18 @@ public class XmlBodyReaderMountPointTest extends AbstractBodyReaderTest { null, null, this.mediaType, null, inputStream); checkNormalizedNodeContext(returnValue); final ContainerNode contNode = (ContainerNode) returnValue.getData(); - final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of(QName.create(contNode.getNodeType(), "cont")); - final Optional> contDataNodePotential = contNode - .getChild(yangCont.getLastPathArgument()); + final YangInstanceIdentifier yangCont = YangInstanceIdentifier.of( + QName.create(contNode.getIdentifier().getNodeType(), "cont")); + final Optional contDataNodePotential = + contNode.findChildByArg(yangCont.getLastPathArgument()); assertTrue(contDataNodePotential.isPresent()); final ContainerNode contDataNode = (ContainerNode) contDataNodePotential.get(); - final YangInstanceIdentifier yangLeaf = - YangInstanceIdentifier.of(QName.create(contDataNode.getNodeType(), "lf")); - final Optional> leafDataNode = contDataNode.getChild( + final YangInstanceIdentifier yangLeaf = YangInstanceIdentifier.of( + QName.create(contDataNode.getIdentifier().getNodeType(), "lf")); + final Optional leafDataNode = contDataNode.findChildByArg( yangLeaf.getLastPathArgument()); assertTrue(leafDataNode.isPresent()); - assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().getValue().toString())); + assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().body().toString())); } private static void checkExpectValueNormalizeNodeContext(final DataSchemaNode dataSchemaNode, @@ -184,9 +184,9 @@ public class XmlBodyReaderMountPointTest extends AbstractBodyReaderTest { checkMountPointNormalizedNodeContext(returnValue); // check if container was found both according to its name and namespace assertEquals("Not correct container found, name was ignored", - "foo-bar-container", returnValue.getData().getNodeType().getLocalName()); + "foo-bar-container", returnValue.getData().getIdentifier().getNodeType().getLocalName()); assertEquals("Not correct container found, namespace was ignored", - "foo:module", returnValue.getData().getNodeType().getNamespace().toString()); + "foo:module", returnValue.getData().getIdentifier().getNodeType().getNamespace().toString()); } /** @@ -206,9 +206,9 @@ public class XmlBodyReaderMountPointTest extends AbstractBodyReaderTest { checkMountPointNormalizedNodeContext(returnValue); // check if container was found both according to its name and namespace assertEquals("Not correct container found, name was ignored", - "foo-bar-container", returnValue.getData().getNodeType().getLocalName()); + "foo-bar-container", returnValue.getData().getIdentifier().getNodeType().getLocalName()); assertEquals("Not correct container found, namespace was ignored", - "bar:module", returnValue.getData().getNodeType().getNamespace().toString()); + "bar:module", returnValue.getData().getIdentifier().getNodeType().getNamespace().toString()); } /** diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapperTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapperTest.java index 9138cc1f21..ea12aae2a5 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapperTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapperTest.java @@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import java.net.URI; import java.util.Arrays; import java.util.List; import javax.ws.rs.core.HttpHeaders; @@ -36,6 +35,7 @@ import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -47,7 +47,7 @@ public class RestconfDocumentedExceptionMapperTest { private static final String EMPTY_XML = ""; private static final String EMPTY_JSON = "{}"; private static final QNameModule MONITORING_MODULE_INFO = QNameModule.create( - URI.create("instance:identifier:patch:module"), Revision.of("2015-11-21")); + XMLNamespace.of("instance:identifier:patch:module"), Revision.of("2015-11-21")); private static RestconfDocumentedExceptionMapper exceptionMapper; diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java index 350cf3e150..f53c402d59 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java @@ -16,7 +16,6 @@ import com.google.common.collect.Sets; import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; -import java.net.URI; import java.util.Collection; import java.util.Optional; import javax.ws.rs.core.MediaType; @@ -28,6 +27,7 @@ import org.opendaylight.restconf.nb.rfc8040.jersey.providers.JsonNormalizedNodeB import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes; import org.opendaylight.yangtools.yang.model.api.ActionDefinition; @@ -41,7 +41,7 @@ import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public class JsonBodyReaderTest extends AbstractBodyReaderTest { private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create( - URI.create("instance:identifier:module"), Revision.of("2014-01-17")); + XMLNamespace.of("instance:identifier:module"), Revision.of("2014-01-17")); private static EffectiveModelContext schemaContext; @@ -135,7 +135,7 @@ public class JsonBodyReaderTest extends AbstractBodyReaderTest { public void moduleSubContainerAugmentDataPostTest() throws Exception { final DataSchemaNode dataSchemaNode = schemaContext .getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); - final Module augmentModule = schemaContext.findModules(new URI("augment:module")).iterator().next(); + final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName contAugmentQName = QName.create(augmentModule.getQNameModule(), "cont-augment"); final YangInstanceIdentifier.AugmentationIdentifier augII = new YangInstanceIdentifier.AugmentationIdentifier( Sets.newHashSet(contAugmentQName)); @@ -156,7 +156,7 @@ public class JsonBodyReaderTest extends AbstractBodyReaderTest { public void moduleSubContainerChoiceAugmentDataPostTest() throws Exception { final DataSchemaNode dataSchemaNode = schemaContext .getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); - final Module augmentModule = schemaContext.findModules(new URI("augment:module")).iterator().next(); + final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName augmentChoice1QName = QName.create(augmentModule.getQNameModule(), "augment-choice1"); final QName augmentChoice2QName = QName.create(augmentChoice1QName, "augment-choice2"); final QName containerQName = QName.create(augmentChoice1QName, "case-choice-case-container1"); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java index 42e091c014..15ba17429a 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java @@ -15,7 +15,6 @@ import static org.junit.Assert.fail; import com.google.common.collect.Sets; import java.io.File; import java.io.InputStream; -import java.net.URI; import java.util.Collection; import java.util.Optional; import javax.ws.rs.core.MediaType; @@ -30,8 +29,8 @@ import org.opendaylight.restconf.nb.rfc8040.jersey.providers.XmlNormalizedNodeBo import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes; @@ -44,7 +43,7 @@ import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public class XmlBodyReaderTest extends AbstractBodyReaderTest { private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create( - URI.create("instance:identifier:module"), Revision.of("2014-01-17")); + XMLNamespace.of("instance:identifier:module"), Revision.of("2014-01-17")); private static EffectiveModelContext schemaContext; @@ -86,15 +85,14 @@ public class XmlBodyReaderTest extends AbstractBodyReaderTest { assertTrue(nnc.getData() instanceof MapEntryNode); final MapEntryNode data = (MapEntryNode) nnc.getData(); - assertTrue(data.getValue().size() == 2); - for (final DataContainerChild child : data.getValue()) { - switch (child.getNodeType().getLocalName()) { + assertEquals(2, data.size()); + for (final DataContainerChild child : data.body()) { + switch (child.getIdentifier().getNodeType().getLocalName()) { case "key-leaf": - assertEquals("key-value", child.getValue()); + assertEquals("key-value", child.body()); break; - case "ordinary-leaf": - assertEquals("leaf-value", child.getValue()); + assertEquals("leaf-value", child.body()); break; default: fail(); @@ -172,7 +170,7 @@ public class XmlBodyReaderTest extends AbstractBodyReaderTest { public void moduleSubContainerAugmentDataPostTest() throws Exception { final DataSchemaNode dataSchemaNode = schemaContext .getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); - final Module augmentModule = schemaContext.findModules(new URI("augment:module")).iterator().next(); + final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName contAugmentQName = QName.create(augmentModule.getQNameModule(), "cont-augment"); final YangInstanceIdentifier.AugmentationIdentifier augII = new YangInstanceIdentifier.AugmentationIdentifier( Sets.newHashSet(contAugmentQName)); @@ -192,7 +190,7 @@ public class XmlBodyReaderTest extends AbstractBodyReaderTest { public void moduleSubContainerChoiceAugmentDataPostTest() throws Exception { final DataSchemaNode dataSchemaNode = schemaContext .getDataChildByName(QName.create(INSTANCE_IDENTIFIER_MODULE_QNAME, "cont")); - final Module augmentModule = schemaContext.findModules(new URI("augment:module")).iterator().next(); + final Module augmentModule = schemaContext.findModules(XMLNamespace.of("augment:module")).iterator().next(); final QName augmentChoice1QName = QName.create(augmentModule.getQNameModule(), "augment-choice1"); final QName augmentChoice2QName = QName.create(augmentChoice1QName, "augment-choice2"); final QName containerQName = QName.create(augmentChoice1QName, "case-choice-case-container1"); @@ -237,9 +235,9 @@ public class XmlBodyReaderTest extends AbstractBodyReaderTest { checkNormalizedNodeContext(returnValue); // check if container was found both according to its name and namespace assertEquals("Not correct container found, name was ignored", "foo-bar-container", - returnValue.getData().getNodeType().getLocalName()); + returnValue.getData().getIdentifier().getNodeType().getLocalName()); assertEquals("Not correct container found, namespace was ignored", "foo:module", - returnValue.getData().getNodeType().getNamespace().toString()); + returnValue.getData().getIdentifier().getNodeType().getNamespace().toString()); } /** @@ -260,9 +258,9 @@ public class XmlBodyReaderTest extends AbstractBodyReaderTest { checkNormalizedNodeContext(returnValue); // check if container was found both according to its name and namespace assertEquals("Not correct container found, name was ignored", "foo-bar-container", - returnValue.getData().getNodeType().getLocalName()); + returnValue.getData().getIdentifier().getNodeType().getLocalName()); assertEquals("Not correct container found, namespace was ignored", "bar:module", - returnValue.getData().getNodeType().getNamespace().toString()); + returnValue.getData().getIdentifier().getNodeType().getNamespace().toString()); } /** diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java index f9a0e6db30..2de5d57bfe 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java @@ -12,6 +12,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Collections; +import java.util.function.Function; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,15 +27,14 @@ 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.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders; import org.opendaylight.yangtools.yang.model.api.ContainerLike; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; -import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -52,47 +52,51 @@ public class CreateStreamUtilTest { @Test public void createStreamTest() { - this.payload = prepareDomPayload("create-data-change-event-subscription", "input", "toaster", "path"); + this.payload = prepareDomPayload("create-data-change-event-subscription", RpcDefinition::getInput, "toaster", + "path"); final DOMRpcResult result = CreateStreamUtil.createDataChangeNotifiStream(this.payload, this.refSchemaCtx); assertEquals(result.getErrors(), Collections.emptyList()); - final NormalizedNode testedNn = result.getResult(); + final NormalizedNode testedNn = result.getResult(); assertNotNull(testedNn); - final NormalizedNodeContext contextRef = prepareDomPayload("create-data-change-event-subscription", "output", - "data-change-event-subscription/toaster:toaster/datastore=CONFIGURATION/scope=BASE", "stream-name"); + final NormalizedNodeContext contextRef = prepareDomPayload("create-data-change-event-subscription", + RpcDefinition::getOutput, + "data-change-event-subscription/toaster:toaster/datastore=CONFIGURATION/scope=BASE", "stream-name"); assertEquals(contextRef.getData(), testedNn); } @Test(expected = RestconfDocumentedException.class) public void createStreamWrongValueTest() { - this.payload = prepareDomPayload("create-data-change-event-subscription", "input", "String value", "path"); + this.payload = prepareDomPayload("create-data-change-event-subscription", RpcDefinition::getInput, + "String value", "path"); final DOMRpcResult result = CreateStreamUtil.createDataChangeNotifiStream(this.payload, this.refSchemaCtx); assertEquals(result.getErrors(), Collections.emptyList()); } @Test(expected = RestconfDocumentedException.class) public void createStreamWrongInputRpcTest() { - this.payload = prepareDomPayload("create-data-change-event-subscription2", "input", "toaster", "path2"); + this.payload = prepareDomPayload("create-data-change-event-subscription2", RpcDefinition::getInput, "toaster", + "path2"); final DOMRpcResult result = CreateStreamUtil.createDataChangeNotifiStream(this.payload, this.refSchemaCtx); assertEquals(result.getErrors(), Collections.emptyList()); } - private NormalizedNodeContext prepareDomPayload(final String rpcName, final String inputOutput, - final String toasterValue, final String inputOutputName) { + private NormalizedNodeContext prepareDomPayload(final String rpcName, + final Function rpcToContainer, final String toasterValue, + final String inputOutputName) { final EffectiveModelContext schema = this.refSchemaCtx; final Module rpcModule = schema.findModules("sal-remote").iterator().next(); final QName rpcQName = QName.create(rpcModule.getQNameModule(), rpcName); - final QName rpcInputQName = QName.create(rpcModule.getQNameModule(), inputOutput); ContainerLike rpcInputSchemaNode = null; for (final RpcDefinition rpc : rpcModule.getRpcs()) { if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { - rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName); + rpcInputSchemaNode = rpcToContainer.apply(rpc); break; } } assertNotNull(rpcInputSchemaNode); final DataContainerNodeBuilder container = - Builders.containerBuilder(rpcInputSchemaNode); + SchemaAwareBuilders.containerBuilder(rpcInputSchemaNode); final QName lfQName = QName.create(rpcModule.getQNameModule(), inputOutputName); final DataSchemaNode lfSchemaNode = rpcInputSchemaNode.findDataChildByName(lfQName).orElseThrow(); @@ -106,7 +110,7 @@ public class CreateStreamUtilTest { } else { o = toasterValue; } - final LeafNode lfNode = Builders.leafBuilder((LeafSchemaNode) lfSchemaNode) + final LeafNode lfNode = SchemaAwareBuilders.leafBuilder((LeafSchemaNode) lfSchemaNode) .withValue(o).build(); container.withChild(lfNode); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java index 21793e5d92..2aba00cdbf 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java @@ -70,7 +70,6 @@ import org.opendaylight.yangtools.yang.common.QName; 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; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; 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; @@ -242,16 +241,15 @@ public class RestconfDataServiceImplTest { assertNotNull(response); assertEquals(200, response.getStatus()); - final NormalizedNode data = ((NormalizedNodeContext) response.getEntity()).getData(); + final NormalizedNode data = ((NormalizedNodeContext) response.getEntity()).getData(); assertTrue(data instanceof ContainerNode); - final Collection> rootNodes = ((ContainerNode) data).getValue(); + final Collection rootNodes = ((ContainerNode) data).body(); assertEquals(1, rootNodes.size()); - final Collection> allDataChildren - = ((ContainerNode) rootNodes.iterator().next()).getValue(); + final Collection allDataChildren = ((ContainerNode) rootNodes.iterator().next()).body(); assertEquals(3, allDataChildren.size()); } - private static ContainerNode wrapNodeByDataRootContainer(final DataContainerChild data) { + private static ContainerNode wrapNodeByDataRootContainer(final DataContainerChild data) { return ImmutableContainerNodeBuilder.create() .withNodeIdentifier(NodeIdentifier.create(SchemaContext.NAME)) .withChild(data) @@ -277,12 +275,12 @@ public class RestconfDataServiceImplTest { assertEquals(200, response.getStatus()); // response must contain all child nodes from config and operational containers merged in one container - final NormalizedNode data = ((NormalizedNodeContext) response.getEntity()).getData(); + final NormalizedNode data = ((NormalizedNodeContext) response.getEntity()).getData(); assertTrue(data instanceof ContainerNode); - assertEquals(3, ((ContainerNode) data).getValue().size()); - assertTrue(((ContainerNode) data).getChild(this.buildPlayerCont.getIdentifier()).isPresent()); - assertTrue(((ContainerNode) data).getChild(this.buildLibraryCont.getIdentifier()).isPresent()); - assertTrue(((ContainerNode) data).getChild(this.buildPlaylistList.getIdentifier()).isPresent()); + assertEquals(3, ((ContainerNode) data).size()); + assertTrue(((ContainerNode) data).findChildByArg(this.buildPlayerCont.getIdentifier()).isPresent()); + assertTrue(((ContainerNode) data).findChildByArg(this.buildLibraryCont.getIdentifier()).isPresent()); + assertTrue(((ContainerNode) data).findChildByArg(this.buildPlaylistList.getIdentifier()).isPresent()); } @Test(expected = RestconfDocumentedException.class) @@ -313,14 +311,14 @@ public class RestconfDataServiceImplTest { assertEquals(200, response.getStatus()); // response must contain only config data - final NormalizedNode data = ((NormalizedNodeContext) response.getEntity()).getData(); + final NormalizedNode data = ((NormalizedNodeContext) response.getEntity()).getData(); // config data present - assertTrue(((ContainerNode) data).getChild(this.buildPlayerCont.getIdentifier()).isPresent()); - assertTrue(((ContainerNode) data).getChild(this.buildLibraryCont.getIdentifier()).isPresent()); + assertTrue(((ContainerNode) data).findChildByArg(this.buildPlayerCont.getIdentifier()).isPresent()); + assertTrue(((ContainerNode) data).findChildByArg(this.buildLibraryCont.getIdentifier()).isPresent()); // state data absent - assertFalse(((ContainerNode) data).getChild(this.buildPlaylistList.getIdentifier()).isPresent()); + assertFalse(((ContainerNode) data).findChildByArg(this.buildPlaylistList.getIdentifier()).isPresent()); } /** @@ -341,14 +339,14 @@ public class RestconfDataServiceImplTest { assertEquals(200, response.getStatus()); // response must contain only operational data - final NormalizedNode data = ((NormalizedNodeContext) response.getEntity()).getData(); + final NormalizedNode data = ((NormalizedNodeContext) response.getEntity()).getData(); // state data present - assertTrue(((ContainerNode) data).getChild(this.buildPlayerCont.getIdentifier()).isPresent()); - assertTrue(((ContainerNode) data).getChild(this.buildPlaylistList.getIdentifier()).isPresent()); + assertTrue(((ContainerNode) data).findChildByArg(this.buildPlayerCont.getIdentifier()).isPresent()); + assertTrue(((ContainerNode) data).findChildByArg(this.buildPlaylistList.getIdentifier()).isPresent()); // config data absent - assertFalse(((ContainerNode) data).getChild(this.buildLibraryCont.getIdentifier()).isPresent()); + assertFalse(((ContainerNode) data).findChildByArg(this.buildLibraryCont.getIdentifier()).isPresent()); } @Test @@ -408,7 +406,7 @@ public class RestconfDataServiceImplTest { new InstanceIdentifierContext<>(this.iidBase, null, null, this.contextRef); final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, buildList); final MapNode data = (MapNode) payload.getData(); - final MapEntryNode entryNode = data.getValue().iterator().next(); + final MapEntryNode entryNode = data.body().iterator().next(); final NodeIdentifierWithPredicates identifier = entryNode.getIdentifier(); final YangInstanceIdentifier node = payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImplTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImplTest.java index a382eedf9e..7d2c1de83d 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImplTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImplTest.java @@ -26,6 +26,6 @@ public class RestconfImplTest { final RestconfImpl restconfImpl = new RestconfImpl(schemaContextHandler); final NormalizedNodeContext libraryVersion = restconfImpl.getLibraryVersion(); final LeafNode value = (LeafNode) libraryVersion.getData(); - assertEquals(IetfYangLibrary.REVISION.toString(), value.getValue()); + assertEquals(IetfYangLibrary.REVISION.toString(), value.body()); } } diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java index 1854e8634d..fe3bdafda3 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java @@ -8,16 +8,17 @@ package org.opendaylight.restconf.nb.rfc8040.rests.services.impl; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; -import java.util.Collections; +import java.util.List; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -74,7 +75,8 @@ public class RestconfInvokeOperationsServiceImplTest { final String identifier = "invoke-rpc-module:rpcTest"; final ContainerNode result = mock(ContainerNode.class); final LeafNode outputChild = mock(LeafNode.class); - when(result.getValue()).thenReturn(Collections.singleton(outputChild)); + doCallRealMethod().when(result).isEmpty(); + doReturn(List.of(outputChild)).when(result).body(); final NormalizedNodeContext payload = prepNNC(result); final UriInfo uriInfo = mock(UriInfo.class); @@ -87,6 +89,7 @@ public class RestconfInvokeOperationsServiceImplTest { public void testInvokeRpcWithEmptyOutput() { final String identifier = "invoke-rpc-module:rpcTest"; final ContainerNode result = mock(ContainerNode.class); + doReturn(true).when(result).isEmpty(); final NormalizedNodeContext payload = prepNNC(result); final UriInfo uriInfo = mock(UriInfo.class); @@ -98,17 +101,17 @@ public class RestconfInvokeOperationsServiceImplTest { exceptionToBeThrown = exception; } - Assert.assertNotNull("WebApplicationException with status code 204 is expected.", exceptionToBeThrown); - Assert.assertEquals(Response.Status.NO_CONTENT.getStatusCode(), exceptionToBeThrown.getResponse().getStatus()); + assertNotNull("WebApplicationException with status code 204 is expected.", exceptionToBeThrown); + assertEquals(Response.Status.NO_CONTENT.getStatusCode(), exceptionToBeThrown.getResponse().getStatus()); } - private NormalizedNodeContext prepNNC(final NormalizedNode result) { + private NormalizedNodeContext prepNNC(final NormalizedNode result) { final InstanceIdentifierContext context = mock(InstanceIdentifierContext.class); final RpcDefinition schemaNode = mock(RpcDefinition.class); final QName qname = QName.create("invoke:rpc:module", "2013-12-03", "rpcTest"); when(schemaNode.getQName()).thenReturn(qname); doReturn(schemaNode).when(context).getSchemaNode(); - final NormalizedNode data = mock(NormalizedNode.class); + final NormalizedNode data = mock(NormalizedNode.class); final DOMRpcResult domRpcResult = mock(DOMRpcResult.class); doReturn(immediateFluentFuture(domRpcResult)).when(this.rpcService).invokeRpc(qname, data); doReturn(result).when(domRpcResult).getResult(); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfOperationsServiceTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfOperationsServiceTest.java index a80053290e..31f1638d9c 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfOperationsServiceTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfOperationsServiceTest.java @@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import com.google.common.collect.ImmutableSet; -import java.net.URI; import java.util.Set; import javax.ws.rs.core.UriInfo; import org.junit.Before; @@ -27,7 +26,7 @@ import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -52,8 +51,8 @@ public class RestconfOperationsServiceTest { this.schemaContext = YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/modules")); this.schemaContextHandler = TestUtils.newSchemaContextHandler(schemaContext); - final QNameModule module1 = QNameModule.create(URI.create("module:1")); - final QNameModule module2 = QNameModule.create(URI.create("module:2")); + final QNameModule module1 = QNameModule.create(XMLNamespace.of("module:1")); + final QNameModule module2 = QNameModule.create(XMLNamespace.of("module:2")); this.listOfRpcsNames = ImmutableSet.of(QName.create(module1, "dummy-rpc1-module1"), QName.create(module1, "dummy-rpc2-module1"), QName.create(module2, "dummy-rpc1-module2"), @@ -66,15 +65,16 @@ public class RestconfOperationsServiceTest { new RestconfOperationsServiceImpl(this.schemaContextHandler, this.domMountPointService); final NormalizedNodeContext operations = oper.getOperations(this.uriInfo); final ContainerNode data = (ContainerNode) operations.getData(); - assertEquals("urn:ietf:params:xml:ns:yang:ietf-restconf", data.getNodeType().getNamespace().toString()); - assertEquals("operations", data.getNodeType().getLocalName()); + assertEquals("urn:ietf:params:xml:ns:yang:ietf-restconf", + data.getIdentifier().getNodeType().getNamespace().toString()); + assertEquals("operations", data.getIdentifier().getNodeType().getLocalName()); - assertEquals(4, data.getValue().size()); + assertEquals(4, data.body().size()); - for (final DataContainerChild child : data.getValue()) { - assertEquals(Empty.getInstance(), child.getValue()); + for (final DataContainerChild child : data.body()) { + assertEquals(Empty.getInstance(), child.body()); - final QName qname = child.getNodeType().withoutRevision(); + final QName qname = child.getIdentifier().getNodeType().withoutRevision(); assertTrue(this.listOfRpcsNames.contains(qname)); } } diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java index 874af5a74d..75e3f6da9c 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java @@ -144,7 +144,7 @@ public class PostDataTransactionUtilTest { doReturn(immediateFalseFluentFuture()).when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2); final NodeIdentifier identifier = - ((ContainerNode) ((Collection) payload.getData().getValue()).iterator().next()).getIdentifier(); + ((ContainerNode) ((Collection) payload.getData().body()).iterator().next()).getIdentifier(); final YangInstanceIdentifier node = payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier); doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, node.getParent(), payload.getData()); @@ -175,7 +175,7 @@ public class PostDataTransactionUtilTest { final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, this.buildList); final MapNode data = (MapNode) payload.getData(); - final MapEntryNode entryNode = data.getValue().iterator().next(); + final MapEntryNode entryNode = data.body().iterator().next(); final NodeIdentifierWithPredicates identifier = entryNode.getIdentifier(); final YangInstanceIdentifier node = payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier); @@ -214,7 +214,7 @@ public class PostDataTransactionUtilTest { doReturn(immediateFalseFluentFuture()).when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2); final NodeIdentifier identifier = - ((ContainerNode) ((Collection) payload.getData().getValue()).iterator().next()).getIdentifier(); + ((ContainerNode) ((Collection) payload.getData().body()).iterator().next()).getIdentifier(); final YangInstanceIdentifier node = payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier); doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, node.getParent(), payload.getData()); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java index 15e2a00e74..d734ab3f05 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java @@ -106,7 +106,7 @@ public class ReadDataTransactionUtilTest { .read(LogicalDatastoreType.CONFIGURATION, DATA.path); doReturn(immediateFluentFuture(Optional.of(DATA.data3))).when(this.netconfService).getConfig(DATA.path); final String valueOfContent = RestconfDataServiceConstant.ReadData.CONFIG; - NormalizedNode normalizedNode = readData(valueOfContent, DATA.path, mdsalStrategy); + NormalizedNode normalizedNode = readData(valueOfContent, DATA.path, mdsalStrategy); assertEquals(DATA.data3, normalizedNode); normalizedNode = readData(valueOfContent, DATA.path, netconfStrategy); @@ -122,7 +122,7 @@ public class ReadDataTransactionUtilTest { doReturn(immediateFluentFuture(Optional.of(DATA.data3))).when(this.netconfService).getConfig(DATA.path); doReturn(immediateFluentFuture(Optional.empty())).when(this.netconfService).get(DATA.path); final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL; - NormalizedNode normalizedNode = readData(valueOfContent, DATA.path, mdsalStrategy); + NormalizedNode normalizedNode = readData(valueOfContent, DATA.path, mdsalStrategy); assertEquals(DATA.data3, normalizedNode); normalizedNode = readData(valueOfContent, DATA.path, netconfStrategy); @@ -138,7 +138,7 @@ public class ReadDataTransactionUtilTest { doReturn(immediateFluentFuture(Optional.of(DATA.data2))).when(this.netconfService).get(DATA.path2); doReturn(immediateFluentFuture(Optional.empty())).when(this.netconfService).getConfig(DATA.path2); final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL; - NormalizedNode normalizedNode = readData(valueOfContent, DATA.path2, mdsalStrategy); + NormalizedNode normalizedNode = readData(valueOfContent, DATA.path2, mdsalStrategy); assertEquals(DATA.data2, normalizedNode); normalizedNode = readData(valueOfContent, DATA.path2, netconfStrategy); @@ -151,7 +151,7 @@ public class ReadDataTransactionUtilTest { .read(LogicalDatastoreType.OPERATIONAL, DATA.path2); doReturn(immediateFluentFuture(Optional.of(DATA.data2))).when(this.netconfService).get(DATA.path2); final String valueOfContent = RestconfDataServiceConstant.ReadData.NONCONFIG; - NormalizedNode normalizedNode = readData(valueOfContent, DATA.path2, mdsalStrategy); + NormalizedNode normalizedNode = readData(valueOfContent, DATA.path2, mdsalStrategy); assertEquals(DATA.data2, normalizedNode); normalizedNode = readData(valueOfContent, DATA.path2, netconfStrategy); @@ -173,7 +173,7 @@ public class ReadDataTransactionUtilTest { .withChild(DATA.contentLeaf) .withChild(DATA.contentLeaf2) .build(); - NormalizedNode normalizedNode = readData(valueOfContent, DATA.path, mdsalStrategy); + NormalizedNode normalizedNode = readData(valueOfContent, DATA.path, mdsalStrategy); assertEquals(checkingData, normalizedNode); normalizedNode = readData(valueOfContent, DATA.path, netconfStrategy); @@ -194,8 +194,7 @@ public class ReadDataTransactionUtilTest { .withChild(DATA.contentLeaf) .withChild(DATA.contentLeaf2) .build(); - NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.path, - mdsalStrategy); + NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.path, mdsalStrategy); assertEquals(checkingData, normalizedNode); normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.path, netconfStrategy); @@ -216,7 +215,7 @@ public class ReadDataTransactionUtilTest { .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("ns", "2016-02-28", "list"))) .withChild(DATA.checkData) .build(); - NormalizedNode normalizedNode = readData(valueOfContent, DATA.path3, mdsalStrategy); + NormalizedNode normalizedNode = readData(valueOfContent, DATA.path3, mdsalStrategy); assertEquals(checkingData, normalizedNode); normalizedNode = readData(valueOfContent, DATA.path3, netconfStrategy); @@ -235,7 +234,7 @@ public class ReadDataTransactionUtilTest { final MapNode expectedData = Builders.orderedMapBuilder() .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(DATA.listQname)).withChild(DATA.checkData) .build(); - NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.path3, + NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.path3, mdsalStrategy); assertEquals(expectedData, normalizedNode); @@ -256,10 +255,9 @@ public class ReadDataTransactionUtilTest { .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(DATA.listQname)) .withChild(Builders.unkeyedListEntryBuilder().withNodeIdentifier( new YangInstanceIdentifier.NodeIdentifier(DATA.listQname)) - .withChild(DATA.unkeyedListEntryNode1.getValue().iterator().next()) - .withChild(DATA.unkeyedListEntryNode2.getValue().iterator().next()).build()).build(); - NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, - DATA.path3, mdsalStrategy); + .withChild(DATA.unkeyedListEntryNode1.body().iterator().next()) + .withChild(DATA.unkeyedListEntryNode2.body().iterator().next()).build()).build(); + NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.path3, mdsalStrategy); assertEquals(expectedData, normalizedNode); normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.path3, netconfStrategy); @@ -278,9 +276,9 @@ public class ReadDataTransactionUtilTest { .getConfig(DATA.leafSetNodePath); final LeafSetNode expectedData = Builders.leafSetBuilder().withNodeIdentifier( new YangInstanceIdentifier.NodeIdentifier(DATA.leafListQname)).withValue( - ImmutableList.>builder().addAll(DATA.leafSetNode1.getValue()) - .addAll(DATA.leafSetNode2.getValue()).build()).build(); - NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.leafSetNodePath, + ImmutableList.>builder().addAll(DATA.leafSetNode1.body()) + .addAll(DATA.leafSetNode2.body()).build()).build(); + NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.leafSetNodePath, mdsalStrategy); assertEquals(expectedData, normalizedNode); @@ -300,9 +298,9 @@ public class ReadDataTransactionUtilTest { .getConfig(DATA.leafSetNodePath); final LeafSetNode expectedData = Builders.orderedLeafSetBuilder().withNodeIdentifier( new YangInstanceIdentifier.NodeIdentifier(DATA.leafListQname)).withValue( - ImmutableList.>builder().addAll(DATA.orderedLeafSetNode1.getValue()) - .addAll(DATA.orderedLeafSetNode2.getValue()).build()).build(); - NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.leafSetNodePath, + ImmutableList.>builder().addAll(DATA.orderedLeafSetNode1.body()) + .addAll(DATA.orderedLeafSetNode2.body()).build()).build(); + NormalizedNode normalizedNode = readData(RestconfDataServiceConstant.ReadData.ALL, DATA.leafSetNodePath, mdsalStrategy); assertEquals(expectedData, normalizedNode); @@ -316,7 +314,7 @@ public class ReadDataTransactionUtilTest { .read(LogicalDatastoreType.CONFIGURATION, DATA.path2); doReturn(immediateFluentFuture(Optional.empty())).when(this.netconfService).getConfig(DATA.path2); final String valueOfContent = RestconfDataServiceConstant.ReadData.CONFIG; - NormalizedNode normalizedNode = readData(valueOfContent, DATA.path2, mdsalStrategy); + NormalizedNode normalizedNode = readData(valueOfContent, DATA.path2, mdsalStrategy); assertNull(normalizedNode); normalizedNode = readData(valueOfContent, DATA.path2, netconfStrategy); @@ -326,7 +324,7 @@ public class ReadDataTransactionUtilTest { @Test(expected = RestconfDocumentedException.class) public void readDataFailTest() { final String valueOfContent = "nonsense"; - NormalizedNode normalizedNode = readData(valueOfContent, null, mdsalStrategy); + NormalizedNode normalizedNode = readData(valueOfContent, null, mdsalStrategy); assertNull(normalizedNode); normalizedNode = readData(valueOfContent, null, netconfStrategy); @@ -610,7 +608,7 @@ public class ReadDataTransactionUtilTest { * @param strategy {@link RestconfStrategy} - wrapper for variables * @return {@link NormalizedNode} */ - private @Nullable NormalizedNode readData(final @NonNull String valueOfContent, + private @Nullable NormalizedNode readData(final @NonNull String valueOfContent, final YangInstanceIdentifier path, final @NonNull RestconfStrategy strategy) { return ReadDataTransactionUtil.readData(valueOfContent, path, strategy, null, schemaContext); } diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TestData.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TestData.java index 722d999fd5..fd7431797b 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TestData.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TestData.java @@ -17,9 +17,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; class TestData { @@ -33,8 +33,8 @@ class TestData { final ContainerNode data4; final MapNode listData; final MapNode listData2; - final OrderedMapNode orderedMapNode1; - final OrderedMapNode orderedMapNode2; + final UserMapNode orderedMapNode1; + final UserMapNode orderedMapNode2; final LeafNode contentLeaf; final LeafNode contentLeaf2; final MapEntryNode checkData; @@ -70,8 +70,7 @@ class TestData { .withNodeIdentifier(new NodeIdentifier(QName.create(base, "leaf-content-different"))) .withValue("content-different") .build(); - final DataContainerChild dataContainer = - Builders.leafBuilder() + final DataContainerChild dataContainer = Builders.leafBuilder() .withNodeIdentifier(new NodeIdentifier(QName.create(listQname, "identifier"))) .withValue("id") .build(); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java index 093f11724a..7fb31cc8b7 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/JsonNotificationListenerTest.java @@ -8,16 +8,13 @@ package org.opendaylight.restconf.nb.rfc8040.streams.listeners; import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import com.google.common.collect.Lists; -import java.net.URI; import java.time.Instant; import java.util.ArrayList; import java.util.Collection; -import java.util.Optional; +import java.util.Set; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -26,20 +23,20 @@ import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.mdsal.dom.api.DOMNotification; import org.opendaylight.restconf.nb.rfc8040.TestUtils; import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType; -import org.opendaylight.yangtools.util.SingletonSet; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; 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; +import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.slf4j.Logger; @@ -49,7 +46,8 @@ import org.slf4j.LoggerFactory; public class JsonNotificationListenerTest { private static final Logger LOG = LoggerFactory.getLogger(JsonNotificationListenerTest.class); - private static final QNameModule MODULE = QNameModule.create(URI.create("notifi:mod"), Revision.of("2016-11-23")); + private static final QNameModule MODULE = + QNameModule.create(XMLNamespace.of("notifi:mod"), Revision.of("2016-11-23")); private static EffectiveModelContext SCHEMA_CONTEXT; @@ -115,9 +113,10 @@ public class JsonNotificationListenerTest { final LeafNode leaf = mockLeaf(QName.create(MODULE, "lf")); final MapEntryNode entry = mockMapEntry(QName.create(MODULE, "lst"), leaf); - final MapNode list = mockList(QName.create(MODULE, "lst"), entry); - final ContainerNode cont = mockCont(QName.create(MODULE, "cont"), list); - final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), cont); + final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), Builders.mapBuilder() + .withNodeIdentifier(NodeIdentifier.create(QName.create(MODULE, "lst"))) + .withChild(entry) + .build()); when(notificationData.getType()).thenReturn(schemaPathNotifi); when(notificationData.getBody()).thenReturn(notifiBody); @@ -172,54 +171,33 @@ public class JsonNotificationListenerTest { private static AugmentationNode mockAugm(final LeafNode leaf) { final AugmentationNode augm = mock(AugmentationNode.class); - final AugmentationIdentifier augmId = new AugmentationIdentifier(SingletonSet.of(leaf.getNodeType())); + final AugmentationIdentifier augmId = new AugmentationIdentifier(Set.of(leaf.getIdentifier().getNodeType())); when(augm.getIdentifier()).thenReturn(augmId); - final Collection> childs = new ArrayList<>(); + final Collection childs = new ArrayList<>(); childs.add(leaf); - when(augm.getValue()).thenReturn(childs); + when(augm.body()).thenReturn(childs); return augm; } private static MapEntryNode mockMapEntry(final QName entryQName, final LeafNode leaf) { - final MapEntryNode entry = mock(MapEntryNode.class); - final NodeIdentifierWithPredicates nodeId = NodeIdentifierWithPredicates.of(leaf.getNodeType(), - leaf.getNodeType(), "value"); - when(entry.getIdentifier()).thenReturn(nodeId); - when(entry.getChild(any())).thenReturn(Optional.of(leaf)); - - final Collection> childs = new ArrayList<>(); - childs.add(leaf); - - when(entry.getValue()).thenReturn(childs); - return entry; + return Builders.mapEntryBuilder() + .withNodeIdentifier(NodeIdentifierWithPredicates.of(entryQName, leaf.getIdentifier().getNodeType(), + leaf.body())) + .withChild(leaf) + .build(); } - private static MapNode mockList(final QName listQName, final MapEntryNode... entries) { - final MapNode list = mock(MapNode.class); - when(list.getIdentifier()).thenReturn(NodeIdentifier.create(listQName)); - when(list.getValue()).thenReturn(Lists.newArrayList(entries)); - return list; - } - - private static ContainerNode mockCont(final QName contQName, - final DataContainerChild child) { - final ContainerNode cont = mock(ContainerNode.class); - when(cont.getIdentifier()).thenReturn(NodeIdentifier.create(contQName)); - - final Collection> childs = new ArrayList<>(); - childs.add(child); - when(cont.getValue()).thenReturn(childs); - return cont; + private static ContainerNode mockCont(final QName contQName, final DataContainerChild child) { + return Builders.containerBuilder() + .withNodeIdentifier(NodeIdentifier.create(contQName)) + .withChild(child) + .build(); } private static LeafNode mockLeaf(final QName leafQName) { - final LeafNode child = mock(LeafNode.class); - when(child.getNodeType()).thenReturn(leafQName); - when(child.getIdentifier()).thenReturn(NodeIdentifier.create(leafQName)); - when(child.getValue()).thenReturn("value"); - return child; + return ImmutableNodes.leafNode(leafQName, "value"); } private static String prepareJson(final DOMNotification notificationData, final Absolute schemaPathNotifi) diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java index 1f2cf65970..d6f5bb6f38 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/XmlNotificationListenerTest.java @@ -8,20 +8,13 @@ package org.opendaylight.restconf.nb.rfc8040.streams.listeners; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; -import static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import com.google.common.collect.Lists; -import java.net.URI; import java.time.Instant; import java.util.ArrayList; import java.util.Collection; -import java.util.Optional; +import java.util.Set; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -30,23 +23,28 @@ import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.mdsal.dom.api.DOMNotification; import org.opendaylight.restconf.nb.rfc8040.TestUtils; import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping; -import org.opendaylight.yangtools.util.SingletonSet; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; +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; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; 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; +import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.xmlunit.assertj.XmlAssert; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class XmlNotificationListenerTest { - private static final QNameModule MODULE = QNameModule.create(URI.create("notifi:mod"), Revision.of("2016-11-23")); + private static final QNameModule MODULE = + QNameModule.create(XMLNamespace.of("notifi:mod"), Revision.of("2016-11-23")); private static EffectiveModelContext SCHEMA_CONTEXT; @@ -111,9 +109,10 @@ public class XmlNotificationListenerTest { final LeafNode leaf = mockLeaf(QName.create(MODULE, "lf")); final MapEntryNode entry = mockMapEntry(QName.create(MODULE, "lst"), leaf); - final MapNode list = mockList(QName.create(MODULE, "lst"), entry); - final ContainerNode cont = mockCont(QName.create(MODULE, "cont"), list); - final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), cont); + final ContainerNode notifiBody = mockCont(schemaPathNotifi.lastNodeIdentifier(), Builders.mapBuilder() + .withNodeIdentifier(NodeIdentifier.create(QName.create(MODULE, "lst"))) + .withChild(entry) + .build()); when(notificationData.getType()).thenReturn(schemaPathNotifi); when(notificationData.getBody()).thenReturn(notifiBody); @@ -122,7 +121,7 @@ public class XmlNotificationListenerTest { final String control = "" + "2020-06-29T14:23:46.086855+02:00" - + "value"; + + "value"; assertXmlMatches(result, control); } @@ -170,7 +169,7 @@ public class XmlNotificationListenerTest { assertXmlMatches(result, control); } - private static void assertXmlMatches(String result, String control) { + private static void assertXmlMatches(final String result, final String control) { XmlAssert.assertThat(result).and(control) // text values have localName null but we want to compare those, ignore only nodes that have localName // with eventTime value @@ -180,54 +179,33 @@ public class XmlNotificationListenerTest { private static AugmentationNode mockAugm(final LeafNode leaf) { final AugmentationNode augm = mock(AugmentationNode.class); - final AugmentationIdentifier augmId = new AugmentationIdentifier(SingletonSet.of(leaf.getNodeType())); + final AugmentationIdentifier augmId = new AugmentationIdentifier(Set.of(leaf.getIdentifier().getNodeType())); when(augm.getIdentifier()).thenReturn(augmId); - final Collection> childs = new ArrayList<>(); + final Collection childs = new ArrayList<>(); childs.add(leaf); - when(augm.getValue()).thenReturn(childs); + when(augm.body()).thenReturn(childs); return augm; } private static MapEntryNode mockMapEntry(final QName entryQName, final LeafNode leaf) { - final MapEntryNode entry = mock(MapEntryNode.class); - final NodeIdentifierWithPredicates nodeId = NodeIdentifierWithPredicates.of(leaf.getNodeType(), - leaf.getNodeType(), "value"); - when(entry.getIdentifier()).thenReturn(nodeId); - when(entry.getChild(any())).thenReturn(Optional.of(leaf)); - - final Collection> childs = new ArrayList<>(); - childs.add(leaf); - - when(entry.getValue()).thenReturn(childs); - return entry; + return Builders.mapEntryBuilder() + .withNodeIdentifier(NodeIdentifierWithPredicates.of(entryQName, leaf.getIdentifier().getNodeType(), + leaf.body())) + .withChild(leaf) + .build(); } - private static MapNode mockList(final QName listQName, final MapEntryNode... entries) { - final MapNode list = mock(MapNode.class); - when(list.getIdentifier()).thenReturn(NodeIdentifier.create(listQName)); - when(list.getValue()).thenReturn(Lists.newArrayList(entries)); - return list; - } - - private static ContainerNode mockCont(final QName contQName, - final DataContainerChild child) { - final ContainerNode cont = mock(ContainerNode.class); - when(cont.getIdentifier()).thenReturn(NodeIdentifier.create(contQName)); - - final Collection> childs = new ArrayList<>(); - childs.add(child); - when(cont.getValue()).thenReturn(childs); - return cont; + private static ContainerNode mockCont(final QName contQName, final DataContainerChild child) { + return Builders.containerBuilder() + .withNodeIdentifier(NodeIdentifier.create(contQName)) + .withChild(child) + .build(); } private static LeafNode mockLeaf(final QName leafQName) { - final LeafNode child = mock(LeafNode.class); - when(child.getNodeType()).thenReturn(leafQName); - when(child.getIdentifier()).thenReturn(NodeIdentifier.create(leafQName)); - when(child.getValue()).thenReturn("value"); - return child; + return ImmutableNodes.leafNode(leafQName, "value"); } private static String prepareXmlResult(final DOMNotification notificationData, final Absolute schemaPathNotifi) diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtilTest.java index 808e64991d..56aa718dc2 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtilTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtilTest.java @@ -32,7 +32,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.mo 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.PathArgument; 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; @@ -91,11 +90,11 @@ public class RestconfMappingNodeUtilTest { assertNotNull(normNode); final List listOfValues = new ArrayList<>(); - for (final DataContainerChild child : normNode.getValue()) { - if (child.getNodeType().equals(Capabilities.QNAME)) { - for (final DataContainerChild dataContainerChild : ((ContainerNode) child).getValue()) { - for (final Object entry : ((LeafSetNode) dataContainerChild).getValue()) { - listOfValues.add(((LeafSetEntryNode) entry).getValue()); + for (final DataContainerChild child : normNode.body()) { + if (child.getIdentifier().getNodeType().equals(Capabilities.QNAME)) { + for (final DataContainerChild dataContainerChild : ((ContainerNode) child).body()) { + for (final Object entry : ((LeafSetNode) dataContainerChild).body()) { + listOfValues.add(((LeafSetEntryNode) entry).body()); } } } @@ -151,11 +150,11 @@ public class RestconfMappingNodeUtilTest { private static void assertMappedData(final Map map, final MapEntryNode mappedData) { assertNotNull(mappedData); - for (final DataContainerChild child : mappedData.getValue()) { + for (final DataContainerChild child : mappedData.body()) { if (child instanceof LeafNode) { final LeafNode leaf = (LeafNode) child; - assertTrue(map.containsKey(leaf.getNodeType())); - assertEquals(map.get(leaf.getNodeType()), leaf.getValue()); + assertTrue(map.containsKey(leaf.getIdentifier().getNodeType())); + assertEquals(map.get(leaf.getIdentifier().getNodeType()), leaf.body()); } } } @@ -168,11 +167,11 @@ public class RestconfMappingNodeUtilTest { */ private static void verifyDeviations(final ContainerNode containerNode) { int deviationsFound = 0; - for (final DataContainerChild child : containerNode.getValue()) { + for (final DataContainerChild child : containerNode.body()) { if (child instanceof MapNode) { - for (final MapEntryNode mapEntryNode : ((MapNode) child).getValue()) { - for (final DataContainerChild dataContainerChild : mapEntryNode.getValue()) { - if (dataContainerChild.getNodeType() + for (final MapEntryNode mapEntryNode : ((MapNode) child).body()) { + for (final DataContainerChild dataContainerChild : mapEntryNode.body()) { + if (dataContainerChild.getIdentifier().getNodeType() .equals(IetfYangLibrary.SPECIFIC_MODULE_DEVIATION_LIST_QNAME)) { deviationsFound++; } @@ -190,30 +189,28 @@ public class RestconfMappingNodeUtilTest { * modules */ private static void verifyLoadedModules(final ContainerNode containerNode) { - final Map loadedModules = new HashMap<>(); - for (final DataContainerChild child : containerNode.getValue()) { + for (final DataContainerChild child : containerNode.body()) { if (child instanceof LeafNode) { - assertEquals(IetfYangLibrary.MODULE_SET_ID_LEAF_QNAME, child.getNodeType()); + assertEquals(IetfYangLibrary.MODULE_SET_ID_LEAF_QNAME, child.getIdentifier().getNodeType()); } if (child instanceof MapNode) { - assertEquals(IetfYangLibrary.MODULE_QNAME_LIST, child.getNodeType()); - for (final MapEntryNode mapEntryNode : ((MapNode) child).getValue()) { + assertEquals(IetfYangLibrary.MODULE_QNAME_LIST, child.getIdentifier().getNodeType()); + for (final MapEntryNode mapEntryNode : ((MapNode) child).body()) { String name = ""; String revision = ""; - for (final DataContainerChild dataContainerChild : mapEntryNode - .getValue()) { - switch (dataContainerChild.getNodeType().getLocalName()) { + for (final DataContainerChild dataContainerChild : mapEntryNode.body()) { + switch (dataContainerChild.getIdentifier().getNodeType().getLocalName()) { case IetfYangLibrary.SPECIFIC_MODULE_NAME_LEAF: - name = String.valueOf(dataContainerChild.getValue()); + name = String.valueOf(dataContainerChild.body()); break; case IetfYangLibrary.SPECIFIC_MODULE_REVISION_LEAF: - revision = String.valueOf(dataContainerChild.getValue()); + revision = String.valueOf(dataContainerChild.body()); break; default : LOG.info("Unknown local name '{}' of node.", - dataContainerChild.getNodeType().getLocalName()); + dataContainerChild.getIdentifier().getNodeType().getLocalName()); break; } } diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserFieldsParameterTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserFieldsParameterTest.java index b18a6d874c..49f5448b42 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserFieldsParameterTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserFieldsParameterTest.java @@ -15,7 +15,6 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; import com.google.common.collect.Sets; -import java.net.URI; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -33,6 +32,7 @@ import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; 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; @@ -58,14 +58,11 @@ public class ParserFieldsParameterTest { private InstanceIdentifierContext identifierTestServices; private static final QNameModule Q_NAME_MODULE_JUKEBOX = QNameModule.create( - URI.create("http://example.com/ns/example-jukebox"), - Revision.of("2015-04-04")); + XMLNamespace.of("http://example.com/ns/example-jukebox"), Revision.of("2015-04-04")); private static final QNameModule Q_NAME_MODULE_TEST_SERVICES = QNameModule.create( - URI.create("tests:test-services"), - Revision.of("2019-03-25")); + XMLNamespace.of("tests:test-services"), Revision.of("2019-03-25")); private static final QNameModule Q_NAME_MODULE_AUGMENTED_JUKEBOX = QNameModule.create( - URI.create("http://example.com/ns/augmented-jukebox"), - Revision.of("2016-05-05")); + XMLNamespace.of("http://example.com/ns/augmented-jukebox"), Revision.of("2016-05-05")); // container jukebox @Mock diff --git a/restconf/restconf-nb-rfc8040/src/test/resources/notifications/notifi-module.yang b/restconf/restconf-nb-rfc8040/src/test/resources/notifications/notifi-module.yang index 70d45f1631..e9c0e4b667 100644 --- a/restconf/restconf-nb-rfc8040/src/test/resources/notifications/notifi-module.yang +++ b/restconf/restconf-nb-rfc8040/src/test/resources/notifications/notifi-module.yang @@ -41,9 +41,9 @@ module notifi-module { notification notifi-augm { } - augment notifi-augm { + augment /notifi-augm { leaf lf-augm { type string; } } -} \ No newline at end of file +} diff --git a/restconf/sal-rest-connector-config/pom.xml b/restconf/sal-rest-connector-config/pom.xml index 49e9f53506..a72e7272d3 100644 --- a/restconf/sal-rest-connector-config/pom.xml +++ b/restconf/sal-rest-connector-config/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 8.1.2 + 9.0.2 diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java index c6a99382fc..bccb71eb63 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java @@ -66,11 +66,11 @@ import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.OperationDefinition; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -99,7 +99,7 @@ public abstract class BaseYangSwaggerGenerator { return schemaService; } - public ResourceList getResourceListing(final UriInfo uriInfo, final SchemaContext schemaContext, + public ResourceList getResourceListing(final UriInfo uriInfo, final EffectiveModelContext schemaContext, final String context, final URIType uriType, final OAversion oaversion) { return getResourceListing(uriInfo, schemaContext, context, 0, true, uriType, oaversion); } @@ -107,7 +107,7 @@ public abstract class BaseYangSwaggerGenerator { /** * Return list of modules converted to swagger compliant resource list. */ - public ResourceList getResourceListing(final UriInfo uriInfo, final SchemaContext schemaContext, + public ResourceList getResourceListing(final UriInfo uriInfo, final EffectiveModelContext schemaContext, final String context, final int pageNum, final boolean all, final URIType uriType, final OAversion oaversion) { final ResourceList resourceList = createResourceList(); @@ -149,14 +149,14 @@ public abstract class BaseYangSwaggerGenerator { public SwaggerObject getAllModulesDoc(final UriInfo uriInfo, final DefinitionNames definitionNames, final URIType uriType, final OAversion oaversion) { - final SchemaContext schemaContext = schemaService.getGlobalContext(); + final EffectiveModelContext schemaContext = schemaService.getGlobalContext(); Preconditions.checkState(schemaContext != null); return getAllModulesDoc(uriInfo, Optional.empty(), schemaContext, Optional.empty(), "", definitionNames, uriType, oaversion); } public SwaggerObject getAllModulesDoc(final UriInfo uriInfo, final Optional> range, - final SchemaContext schemaContext, final Optional deviceName, + final EffectiveModelContext schemaContext, final Optional deviceName, final String context, final DefinitionNames definitionNames, final URIType uriType, final OAversion oaversion) { final String schema = createSchemaFromUriInfo(uriInfo); @@ -177,8 +177,9 @@ public abstract class BaseYangSwaggerGenerator { } public void fillDoc(final SwaggerObject doc, final Optional> range, - final SchemaContext schemaContext, final String context, final Optional deviceName, - final URIType uriType, final OAversion oaversion, final DefinitionNames definitionNames) { + final EffectiveModelContext schemaContext, final String context, + final Optional deviceName, final URIType uriType, final OAversion oaversion, + final DefinitionNames definitionNames) { final SortedSet modules = getSortedModules(schemaContext); final Set filteredModules; if (range.isPresent()) { @@ -236,7 +237,7 @@ public abstract class BaseYangSwaggerGenerator { public CommonApiObject getApiDeclaration(final String module, final String revision, final UriInfo uriInfo, final URIType uriType, final OAversion oaversion) { - final SchemaContext schemaContext = schemaService.getGlobalContext(); + final EffectiveModelContext schemaContext = schemaService.getGlobalContext(); Preconditions.checkState(schemaContext != null); final SwaggerObject doc = getApiDeclaration(module, revision, uriInfo, schemaContext, "", uriType, oaversion); @@ -244,7 +245,7 @@ public abstract class BaseYangSwaggerGenerator { } public SwaggerObject getApiDeclaration(final String moduleName, final String revision, final UriInfo uriInfo, - final SchemaContext schemaContext, final String context, + final EffectiveModelContext schemaContext, final String context, final URIType uriType, final OAversion oaversion) { final Optional rev; @@ -262,7 +263,7 @@ public abstract class BaseYangSwaggerGenerator { } public SwaggerObject getApiDeclaration(final Module module, final UriInfo uriInfo, - final String context, final SchemaContext schemaContext, + final String context, final EffectiveModelContext schemaContext, final URIType uriType, final OAversion oaversion) { final String schema = createSchemaFromUriInfo(uriInfo); final String host = createHostFromUriInfo(uriInfo); @@ -285,7 +286,7 @@ public abstract class BaseYangSwaggerGenerator { public SwaggerObject getSwaggerDocSpec(final Module module, final String schema, final String host, final String basePath, final String context, - final SchemaContext schemaContext, final URIType uriType, + final EffectiveModelContext schemaContext, final URIType uriType, final OAversion oaversion) { final SwaggerObject doc = createSwaggerObject(schema, host, basePath, module.getName()); final DefinitionNames definitionNames = new DefinitionNames(); @@ -295,7 +296,7 @@ public abstract class BaseYangSwaggerGenerator { public SwaggerObject getSwaggerDocSpec(final Module module, final String context, final Optional deviceName, - final SchemaContext schemaContext, final URIType uriType, + final EffectiveModelContext schemaContext, final URIType uriType, final OAversion oaversion, final DefinitionNames definitionNames, final SwaggerObject doc, final boolean isForSingleModule) { final ObjectNode definitions; @@ -378,8 +379,8 @@ public abstract class BaseYangSwaggerGenerator { return doc; } - private void addRootPostLink(final Module module, final Optional deviceName, final ArrayNode pathParams, - final String resourcePath, final ObjectNode paths, final OAversion oaversion) { + private static void addRootPostLink(final Module module, final Optional deviceName, + final ArrayNode pathParams, final String resourcePath, final ObjectNode paths, final OAversion oaversion) { if (containsListOrContainer(module.getChildNodes())) { final ObjectNode post = JsonNodeFactory.instance.objectNode(); final String moduleName = module.getName(); @@ -440,7 +441,7 @@ public abstract class BaseYangSwaggerGenerator { private void addPaths(final DataSchemaNode node, final Optional deviceName, final String moduleName, final ObjectNode paths, final String parentPath, final ArrayNode parentPathParams, - final SchemaContext schemaContext, final boolean isConfig, final String parentName, + final EffectiveModelContext schemaContext, final boolean isConfig, final String parentName, final DefinitionNames definitionNames, final URIType uriType, final OAversion oaversion) { final ArrayNode pathParams = JsonUtil.copy(parentPathParams); final String resourcePath = parentPath + "/" + createPath(node, pathParams, schemaContext, oaversion); @@ -460,9 +461,9 @@ public abstract class BaseYangSwaggerGenerator { if (uriType.equals(URIType.RFC8040)) { final String operationPath = "rests/operations" + resourcePath.substring(11); - ((ActionNodeContainer) node).getActions().forEach((actionDef -> + ((ActionNodeContainer) node).getActions().forEach(actionDef -> addOperations(actionDef, moduleName, deviceName, paths, operationPath, parentName, definitionNames, - schemaContext, oaversion))); + schemaContext, oaversion)); } @@ -530,7 +531,7 @@ public abstract class BaseYangSwaggerGenerator { protected abstract ListPathBuilder newListPathBuilder(); private String createPath(final DataSchemaNode schemaNode, final ArrayNode pathParams, - final SchemaContext schemaContext, final OAversion oaversion) { + final EffectiveModelContext schemaContext, final OAversion oaversion) { final StringBuilder path = new StringBuilder(); final String localName = resolvePathArgumentsName(schemaNode, schemaContext); path.append(localName); @@ -582,11 +583,11 @@ public abstract class BaseYangSwaggerGenerator { return newName; } - private boolean isNamePicked(final String name, final JsonNode pathParam) { + private static boolean isNamePicked(final String name, final JsonNode pathParam) { return name.equals(pathParam.get("name").asText()); } - public SortedSet getSortedModules(final SchemaContext schemaContext) { + public SortedSet getSortedModules(final EffectiveModelContext schemaContext) { if (schemaContext == null) { return Collections.emptySortedSet(); } @@ -609,10 +610,10 @@ public abstract class BaseYangSwaggerGenerator { return sortedModules; } - private void addOperations(final OperationDefinition operDef, final String moduleName, - final Optional deviceName, final ObjectNode paths, final String parentPath, - final String parentName, final DefinitionNames definitionNames, - final SchemaContext schemaContext, final OAversion oaversion) { + private static void addOperations(final OperationDefinition operDef, final String moduleName, + final Optional deviceName, final ObjectNode paths, final String parentPath, final String parentName, + final DefinitionNames definitionNames, final EffectiveModelContext schemaContext, + final OAversion oaversion) { final ObjectNode operations = JsonNodeFactory.instance.objectNode(); final String resourcePath = parentPath + "/" + resolvePathArgumentsName(operDef, schemaContext); operations.set("post", buildPostOperation(operDef, moduleName, deviceName, parentName, definitionNames, diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorRFC8040.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorRFC8040.java index 6d9185a7d3..f9a4615bff 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorRFC8040.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorRFC8040.java @@ -45,14 +45,14 @@ public abstract class BaseYangSwaggerGeneratorRFC8040 extends BaseYangSwaggerGen } @Override - public String getResourcePathPart(String resourceType) { + public String getResourcePathPart(final String resourceType) { if (isData(resourceType)) { return "data"; } return "operations"; } - private boolean isData(String dataStore) { + private static boolean isData(final String dataStore) { return "config".contains(dataStore) || "operational".contains(dataStore); } diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/DefinitionGenerator.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/DefinitionGenerator.java index 6b7b73e36c..939eaf6f53 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/DefinitionGenerator.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/DefinitionGenerator.java @@ -45,6 +45,7 @@ import org.opendaylight.yangtools.yang.model.api.ContainerLike; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; @@ -54,7 +55,6 @@ import org.opendaylight.yangtools.yang.model.api.MandatoryAware; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.OperationDefinition; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -83,7 +83,7 @@ import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Uint64TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -139,7 +139,7 @@ public class DefinitionGenerator { */ - public ObjectNode convertToJsonSchema(final Module module, final SchemaContext schemaContext, + public ObjectNode convertToJsonSchema(final Module module, final EffectiveModelContext schemaContext, final ObjectNode definitions, final DefinitionNames definitionNames, final OAversion oaversion, final boolean isForSingleModule) throws IOException { @@ -156,7 +156,7 @@ public class DefinitionGenerator { return definitions; } - public ObjectNode convertToJsonSchema(final Module module, final SchemaContext schemaContext, + public ObjectNode convertToJsonSchema(final Module module, final EffectiveModelContext schemaContext, final DefinitionNames definitionNames, final OAversion oaversion, final boolean isForSingleModule) throws IOException { @@ -168,7 +168,7 @@ public class DefinitionGenerator { } private void processModule(final Module module, final ObjectNode definitions, final DefinitionNames definitionNames, - final SchemaContext schemaContext, final OAversion oaversion) { + final EffectiveModelContext schemaContext, final OAversion oaversion) { final ObjectNode definition = JsonNodeFactory.instance.objectNode(); final ObjectNode properties = JsonNodeFactory.instance.objectNode(); final ArrayNode required = JsonNodeFactory.instance.arrayNode(); @@ -225,8 +225,8 @@ public class DefinitionGenerator { } private void processContainersAndLists(final Module module, final ObjectNode definitions, - final DefinitionNames definitionNames, final SchemaContext schemaContext, - final OAversion oaversion) throws IOException { + final DefinitionNames definitionNames, final EffectiveModelContext schemaContext, final OAversion oaversion) + throws IOException { final String moduleName = module.getName(); for (final DataSchemaNode childNode : module.getChildNodes()) { @@ -246,7 +246,7 @@ public class DefinitionGenerator { private void processActionNodeContainer(final DataSchemaNode childNode, final String moduleName, final ObjectNode definitions, final DefinitionNames definitionNames, - final SchemaContext schemaContext, final OAversion oaversion) + final EffectiveModelContext schemaContext, final OAversion oaversion) throws IOException { for (final ActionDefinition actionDef : ((ActionNodeContainer) childNode).getActions()) { processOperations(actionDef, moduleName, definitions, definitionNames, schemaContext, oaversion); @@ -254,7 +254,7 @@ public class DefinitionGenerator { } private void processRPCs(final Module module, final ObjectNode definitions, final DefinitionNames definitionNames, - final SchemaContext schemaContext, final OAversion oaversion) throws IOException { + final EffectiveModelContext schemaContext, final OAversion oaversion) throws IOException { final String moduleName = module.getName(); for (final RpcDefinition rpcDefinition : module.getRpcs()) { processOperations(rpcDefinition, moduleName, definitions, definitionNames, schemaContext, oaversion); @@ -263,8 +263,9 @@ public class DefinitionGenerator { private void processOperations(final OperationDefinition operationDef, final String parentName, - final ObjectNode definitions, final DefinitionNames definitionNames, - final SchemaContext schemaContext, final OAversion oaversion) throws IOException { + final ObjectNode definitions, final DefinitionNames definitionNames, + final EffectiveModelContext schemaContext, final OAversion oaversion) + throws IOException { final String operationName = operationDef.getQName().getLocalName(); processOperationInputOutput(operationDef.getInput(), operationName, parentName, true, definitions, definitionNames, schemaContext, oaversion); @@ -275,7 +276,7 @@ public class DefinitionGenerator { private void processOperationInputOutput(final ContainerLike container, final String operationName, final String parentName, final boolean isInput, final ObjectNode definitions, final DefinitionNames definitionNames, - final SchemaContext schemaContext, final OAversion oaversion) + final EffectiveModelContext schemaContext, final OAversion oaversion) throws IOException { if (!container.getChildNodes().isEmpty()) { final String filename = parentName + "_" + operationName + (isInput ? INPUT_SUFFIX : OUTPUT_SUFFIX); @@ -296,8 +297,8 @@ public class DefinitionGenerator { } } - private ObjectNode processTopData(final String filename, final String discriminator, final ObjectNode definitions, - final SchemaNode schemaNode, final OAversion oaversion) { + private static ObjectNode processTopData(final String filename, final String discriminator, + final ObjectNode definitions, final SchemaNode schemaNode, final OAversion oaversion) { final ObjectNode dataNodeProperties = JsonNodeFactory.instance.objectNode(); final String name = filename + discriminator; final String ref = getAppropriateModelPrefix(oaversion) + name; @@ -341,7 +342,7 @@ public class DefinitionGenerator { * @param definitionNames Store for definition names */ private static void processIdentities(final Module module, final ObjectNode definitions, - final DefinitionNames definitionNames, final SchemaContext context) { + final DefinitionNames definitionNames, final EffectiveModelContext context) { final String moduleName = module.getName(); final Collection idNodes = module.getIdentities(); @@ -357,7 +358,7 @@ public class DefinitionGenerator { } private static void populateEnumWithDerived(final Collection derivedIds, - final ArrayNode enumPayload, final SchemaContext context) { + final ArrayNode enumPayload, final EffectiveModelContext context) { for (final IdentitySchemaNode derivedId : derivedIds) { enumPayload.add(derivedId.getQName().getLocalName()); populateEnumWithDerived(context.getDerivedIdentities(derivedId), enumPayload, context); @@ -366,7 +367,7 @@ public class DefinitionGenerator { private ObjectNode processDataNodeContainer(final DataNodeContainer dataNode, final String parentName, final ObjectNode definitions, final DefinitionNames definitionNames, - final boolean isConfig, final SchemaContext schemaContext, + final boolean isConfig, final EffectiveModelContext schemaContext, final OAversion oaversion) throws IOException { if (dataNode instanceof ListSchemaNode || dataNode instanceof ContainerSchemaNode) { final Collection containerChildren = dataNode.getChildNodes(); @@ -422,8 +423,8 @@ public class DefinitionGenerator { return null; } - private ObjectNode createPostJsonSchema(final SchemaNode dataNode, final ObjectNode properties, - final String postNodeName, final String description) { + private static ObjectNode createPostJsonSchema(final SchemaNode dataNode, final ObjectNode properties, + final String postNodeName, final String description) { final ObjectNode postSchema = JsonNodeFactory.instance.objectNode(); final ObjectNode postItemProperties; if (dataNode instanceof ListSchemaNode) { @@ -439,7 +440,7 @@ public class DefinitionGenerator { return postSchema; } - private ObjectNode createListItemProperties(final ObjectNode properties, final ListSchemaNode listNode) { + private static ObjectNode createListItemProperties(final ObjectNode properties, final ListSchemaNode listNode) { final ObjectNode postListItemProperties = JsonNodeFactory.instance.objectNode(); final List keyDefinition = listNode.getKeyDefinition(); final Set keys = listNode.getChildNodes().stream() @@ -464,7 +465,7 @@ public class DefinitionGenerator { private ObjectNode processChildren( final ObjectNode parentNode, final Collection nodes, final String parentName, final ObjectNode definitions, final DefinitionNames definitionNames, final boolean isConfig, - final SchemaContext schemaContext, final OAversion oaversion) throws IOException { + final EffectiveModelContext schemaContext, final OAversion oaversion) throws IOException { final ObjectNode properties = JsonNodeFactory.instance.objectNode(); final ArrayNode required = JsonNodeFactory.instance.arrayNode(); for (final DataSchemaNode node : nodes) { @@ -515,7 +516,7 @@ public class DefinitionGenerator { return properties; } - private ObjectNode processLeafListNode(final LeafListSchemaNode listNode, final SchemaContext schemaContext, + private ObjectNode processLeafListNode(final LeafListSchemaNode listNode, final EffectiveModelContext schemaContext, final ObjectNode definitions, final DefinitionNames definitionNames, final OAversion oaversion) { final ObjectNode props = JsonNodeFactory.instance.objectNode(); @@ -536,7 +537,7 @@ public class DefinitionGenerator { private void processChoiceNode( final Iterable nodes, final String parentName, final ObjectNode definitions, final DefinitionNames definitionNames, final boolean isConfig, - final SchemaContext schemaContext, final ObjectNode properties, final OAversion oaversion) + final EffectiveModelContext schemaContext, final ObjectNode properties, final OAversion oaversion) throws IOException { for (final DataSchemaNode node : nodes) { /* @@ -607,7 +608,7 @@ public class DefinitionGenerator { private ObjectNode processLeafNode(final LeafSchemaNode leafNode, final String jsonLeafName, final ObjectNode properties, final ArrayNode required, - final SchemaContext schemaContext, final ObjectNode definitions, + final EffectiveModelContext schemaContext, final ObjectNode definitions, final DefinitionNames definitionNames, final OAversion oaversion) { final ObjectNode property = JsonNodeFactory.instance.objectNode(); @@ -663,7 +664,7 @@ public class DefinitionGenerator { } private String processTypeDef(final TypeDefinition leafTypeDef, final DataSchemaNode node, - final ObjectNode property, final SchemaContext schemaContext, + final ObjectNode property, final EffectiveModelContext schemaContext, final ObjectNode definitions, final DefinitionNames definitionNames, final OAversion oaversion) { final String jsonType; @@ -689,13 +690,14 @@ public class DefinitionGenerator { } else if (leafTypeDef instanceof EmptyTypeDefinition) { jsonType = OBJECT_TYPE; } else if (leafTypeDef instanceof LeafrefTypeDefinition) { - return processTypeDef(SchemaContextUtil.getBaseTypeForLeafRef((LeafrefTypeDefinition) leafTypeDef, - schemaContext, node), node, property, schemaContext, definitions, definitionNames, oaversion); + final SchemaInferenceStack stack = SchemaInferenceStack.ofSchemaPath(schemaContext, node.getPath()); + return processTypeDef(stack.resolveLeafref((LeafrefTypeDefinition) leafTypeDef), node, property, + schemaContext, definitions, definitionNames, oaversion); } else if (leafTypeDef instanceof BooleanTypeDefinition) { jsonType = BOOLEAN_TYPE; setDefaultValue(property, true); } else if (leafTypeDef instanceof RangeRestrictedTypeDefinition) { - jsonType = processNumberType((RangeRestrictedTypeDefinition) leafTypeDef, property); + jsonType = processNumberType((RangeRestrictedTypeDefinition) leafTypeDef, property); } else if (leafTypeDef instanceof InstanceIdentifierTypeDefinition) { jsonType = processInstanceIdentifierType(node, property, schemaContext); } else { @@ -714,7 +716,7 @@ public class DefinitionGenerator { setDefaultValue(property, new BigDecimal(stringDefaultValue)); } else if (leafTypeDef instanceof RangeRestrictedTypeDefinition) { //uint8,16,32 int8,16,32,64 - if (isHexadecimalOrOctal((RangeRestrictedTypeDefinition)leafTypeDef)) { + if (isHexadecimalOrOctal((RangeRestrictedTypeDefinition)leafTypeDef)) { setDefaultValue(property, stringDefaultValue); } else { setDefaultValue(property, Long.valueOf(stringDefaultValue)); @@ -751,7 +753,7 @@ public class DefinitionGenerator { private String processIdentityRefType(final IdentityrefTypeDefinition leafTypeDef, final ObjectNode property, final ObjectNode definitions, final DefinitionNames definitionNames, - final OAversion oaversion, final SchemaContext schemaContext) { + final OAversion oaversion, final EffectiveModelContext schemaContext) { final String definitionName; if (isImported(leafTypeDef)) { definitionName = addImportedIdentity(leafTypeDef, definitions, definitionNames, schemaContext); @@ -765,7 +767,7 @@ public class DefinitionGenerator { private static String addImportedIdentity(final IdentityrefTypeDefinition leafTypeDef, final ObjectNode definitions, final DefinitionNames definitionNames, - final SchemaContext context) { + final EffectiveModelContext context) { final IdentitySchemaNode idNode = leafTypeDef.getIdentities().iterator().next(); final String identityName = idNode.getQName().getLocalName(); if (!definitionNames.isListedNode(idNode)) { @@ -779,7 +781,8 @@ public class DefinitionGenerator { } } - private static ObjectNode buildIdentityObject(final IdentitySchemaNode idNode, final SchemaContext context) { + private static ObjectNode buildIdentityObject(final IdentitySchemaNode idNode, + final EffectiveModelContext context) { final ObjectNode identityObj = JsonNodeFactory.instance.objectNode(); final String identityName = idNode.getQName().getLocalName(); LOG.debug("Processing Identity: {}", identityName); @@ -848,7 +851,8 @@ public class DefinitionGenerator { return STRING_TYPE; } - private String processNumberType(final RangeRestrictedTypeDefinition leafTypeDef, final ObjectNode property) { + private static String processNumberType(final RangeRestrictedTypeDefinition leafTypeDef, + final ObjectNode property) { final Optional maybeLower = ((RangeRestrictedTypeDefinition) leafTypeDef).getRangeConstraint() .map(RangeConstraint::getAllowedRanges).map(RangeSet::span).map(Range::lowerEndpoint); @@ -880,7 +884,7 @@ public class DefinitionGenerator { return INTEGER_TYPE; } - private boolean isHexadecimalOrOctal(RangeRestrictedTypeDefinition typeDef) { + private static boolean isHexadecimalOrOctal(final RangeRestrictedTypeDefinition typeDef) { final Optional optDefaultValue = typeDef.getDefaultValue(); if (optDefaultValue.isPresent()) { final String defaultValue = (String)optDefaultValue.get(); @@ -889,8 +893,8 @@ public class DefinitionGenerator { return false; } - private String processInstanceIdentifierType(final DataSchemaNode node, final ObjectNode property, - final SchemaContext schemaContext) { + private static String processInstanceIdentifierType(final DataSchemaNode node, final ObjectNode property, + final EffectiveModelContext schemaContext) { SchemaPath path = node.getPath(); while (path.getParent() != null && path.getParent().getPathFromRoot().iterator().hasNext()) { @@ -904,7 +908,7 @@ public class DefinitionGenerator { return STRING_TYPE; } - private String processUnionType(final UnionTypeDefinition unionType) { + private static String processUnionType(final UnionTypeDefinition unionType) { boolean isStringTakePlace = false; boolean isNumberTakePlace = false; boolean isBooleanTakePlace = false; @@ -937,7 +941,7 @@ public class DefinitionGenerator { return NUMBER_TYPE; } - private static ObjectNode buildXmlParameter(SchemaNode node) { + private static ObjectNode buildXmlParameter(final SchemaNode node) { final ObjectNode xml = JsonNodeFactory.instance.objectNode(); final QName qName = node.getQName(); xml.put(NAME_KEY, qName.getLocalName()); diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java index 91005b007d..c75a2daa82 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java @@ -138,7 +138,7 @@ public class MountPointSwagger implements DOMMountPointListener, AutoCloseable { public CommonApiObject getMountPointApi(final UriInfo uriInfo, final Long id, final String module, final String revision, final URIType uriType, final OAversion oaversion) { final YangInstanceIdentifier iid = getInstanceId(id); - final SchemaContext context = getSchemaContext(iid); + final EffectiveModelContext context = getSchemaContext(iid); final String urlPrefix = getYangMountUrl(iid); final String deviceName = extractDeviceName(iid); @@ -157,7 +157,7 @@ public class MountPointSwagger implements DOMMountPointListener, AutoCloseable { public CommonApiObject getMountPointApi(final UriInfo uriInfo, final Long id, final Optional pageNum, final URIType uriType, final OAversion oaversion) { final YangInstanceIdentifier iid = getInstanceId(id); - final SchemaContext context = getSchemaContext(iid); + final EffectiveModelContext context = getSchemaContext(iid); final String urlPrefix = getYangMountUrl(iid); final String deviceName = extractDeviceName(iid); diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/util/RestDocgenUtil.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/util/RestDocgenUtil.java index ee96a376db..bafecbc070 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/util/RestDocgenUtil.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/util/RestDocgenUtil.java @@ -7,13 +7,13 @@ */ package org.opendaylight.netconf.sal.rest.doc.util; -import java.net.URI; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Optional; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; @@ -23,7 +23,8 @@ public final class RestDocgenUtil { private RestDocgenUtil() { } - private static final Map, Module>> NAMESPACE_AND_REVISION_TO_MODULE = new HashMap<>(); + private static final Map, Module>> NAMESPACE_AND_REVISION_TO_MODULE = + new HashMap<>(); /** * Resolve path argument name for {@code node}. @@ -52,7 +53,7 @@ public final class RestDocgenUtil { private static synchronized String resolveFullNameFromNode(final SchemaNode node, final SchemaContext schemaContext) { - final URI namespace = node.getQName().getNamespace(); + final XMLNamespace namespace = node.getQName().getNamespace(); final Optional revision = node.getQName().getRevision(); Map, Module> revisionToModule = diff --git a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorTest.java b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorTest.java index 76b1bf9a8b..4595cb1b67 100644 --- a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorTest.java +++ b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorTest.java @@ -22,7 +22,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocGeneratorDraftO2; @@ -53,10 +52,6 @@ public class ApiDocGeneratorTest { this.generator = new ApiDocGeneratorDraftO2(this.helper.createMockSchemaService(this.schemaContext)); } - @After - public void after() throws Exception { - } - /** * Method: getApiDeclaration(String module, String revision, UriInfo uriInfo). */ @@ -78,7 +73,7 @@ public class ApiDocGeneratorTest { /** * Validates whether doc {@code doc} contains concrete specified models. */ - private void validateSwaggerModules(final SwaggerObject doc) { + private static void validateSwaggerModules(final SwaggerObject doc) { final ObjectNode definitions = doc.getDefinitions(); assertNotNull(definitions); @@ -129,7 +124,7 @@ public class ApiDocGeneratorTest { /** * Checks whether object {@code mainObject} contains in properties/items key $ref with concrete value. */ - private void containsReferences(final JsonNode mainObject, final String childObject, + private static void containsReferences(final JsonNode mainObject, final String childObject, final String expectedRef) { final JsonNode properties = mainObject.get("properties"); assertNotNull(properties); @@ -199,7 +194,7 @@ public class ApiDocGeneratorTest { * @param doc Api declaration * @throws Exception if operation fails */ - private void validateToaster(final SwaggerObject doc) throws Exception { + private static void validateToaster(final SwaggerObject doc) throws Exception { final Set expectedUrls = new TreeSet<>(Arrays.asList("/restconf/config", "/restconf/config/toaster2:toaster", "/restconf/config/toaster2:toaster/toasterSlot/{slotId}", diff --git a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/DocGenTestHelper.java b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/DocGenTestHelper.java index 0da601bade..f86856b537 100644 --- a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/DocGenTestHelper.java +++ b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/DocGenTestHelper.java @@ -26,6 +26,7 @@ import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; import org.mockito.ArgumentCaptor; import org.opendaylight.mdsal.dom.api.DOMSchemaService; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -84,7 +85,7 @@ public class DocGenTestHelper { final ArgumentCaptor moduleCapture = ArgumentCaptor.forClass(String.class); final ArgumentCaptor dateCapture = ArgumentCaptor.forClass(Optional.class); - final ArgumentCaptor namespaceCapture = ArgumentCaptor.forClass(URI.class); + final ArgumentCaptor namespaceCapture = ArgumentCaptor.forClass(XMLNamespace.class); when(mockContext.findModule(moduleCapture.capture(), dateCapture.capture())).then( invocation -> { final String module = moduleCapture.getValue(); @@ -98,7 +99,7 @@ public class DocGenTestHelper { }); when(mockContext.findModule(namespaceCapture.capture(), dateCapture.capture())).then( invocation -> { - final URI namespace = namespaceCapture.getValue(); + final XMLNamespace namespace = namespaceCapture.getValue(); final Optional date = dateCapture.getValue(); for (final Module m : DocGenTestHelper.this.modules) { if (m.getNamespace().equals(namespace) && m.getRevision().equals(date)) { diff --git a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/SwaggerObjectTest.java b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/SwaggerObjectTest.java index 6de3384120..d3e5daa5b0 100644 --- a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/SwaggerObjectTest.java +++ b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/SwaggerObjectTest.java @@ -17,8 +17,8 @@ import org.junit.Test; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl; import org.opendaylight.netconf.sal.rest.doc.impl.DefinitionGenerator; import org.opendaylight.netconf.sal.rest.doc.impl.DefinitionNames; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class SwaggerObjectTest { @@ -27,7 +27,7 @@ public class SwaggerObjectTest { private static final String STRING_DATE = "2014-05-28"; private static final Date REVISION = Date.valueOf(STRING_DATE); private DocGenTestHelper helper; - private SchemaContext schemaContext; + private EffectiveModelContext schemaContext; @Before public void setUp() throws Exception { -- 2.36.6