Update MRI projects for Aluminium 12/88912/46
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 6 Apr 2020 09:46:58 +0000 (11:46 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 30 Apr 2020 11:35:47 +0000 (13:35 +0200)
This bumps versions to the following:
- odlparent-7.0.1
- yangtools-5.0.1
- mdsal-6.0.0
- controller-2.0.0

Change-Id: Ie2c08ff858d66a57e79d118d8b7e571209a89c5a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
285 files changed:
artifacts/pom.xml
features/netconf-connector/features-netconf-connector/pom.xml
features/netconf-connector/odl-message-bus/pom.xml
features/netconf-connector/odl-netconf-callhome-ssh/pom.xml
features/netconf-connector/odl-netconf-clustered-topology/pom.xml
features/netconf-connector/odl-netconf-connector-all/pom.xml
features/netconf-connector/odl-netconf-connector/pom.xml
features/netconf-connector/odl-netconf-connector/src/main/feature/feature.xml
features/netconf-connector/odl-netconf-console/pom.xml
features/netconf-connector/odl-netconf-topology/pom.xml
features/netconf-connector/pom.xml
features/netconf/features-netconf/pom.xml
features/netconf/odl-aaa-netconf-plugin-no-cluster/pom.xml
features/netconf/odl-aaa-netconf-plugin/pom.xml
features/netconf/odl-netconf-all/pom.xml
features/netconf/odl-netconf-api/pom.xml
features/netconf/odl-netconf-api/src/main/feature/feature.xml
features/netconf/odl-netconf-client/pom.xml
features/netconf/odl-netconf-impl/pom.xml
features/netconf/odl-netconf-mapping-api/pom.xml
features/netconf/odl-netconf-mdsal/pom.xml
features/netconf/odl-netconf-netty-util/pom.xml
features/netconf/odl-netconf-netty-util/src/main/feature/feature.xml
features/netconf/odl-netconf-notifications-api/pom.xml
features/netconf/odl-netconf-notifications-impl/pom.xml
features/netconf/odl-netconf-ssh/pom.xml
features/netconf/odl-netconf-tcp/pom.xml
features/netconf/odl-netconf-util/pom.xml
features/netconf/odl-netconf-util/src/main/feature/feature.xml
features/netconf/pom.xml
features/pom.xml
features/restconf/features-restconf/pom.xml
features/restconf/odl-mdsal-apidocs/pom.xml
features/restconf/odl-mdsal-apidocs/src/main/feature/feature.xml
features/restconf/odl-restconf-all/pom.xml
features/restconf/odl-restconf-common/pom.xml
features/restconf/odl-restconf-common/src/main/feature/feature.xml
features/restconf/odl-restconf-nb-bierman02/pom.xml
features/restconf/odl-restconf-nb-rfc8040/pom.xml
features/restconf/odl-restconf/pom.xml
features/restconf/pom.xml
features/yanglib/features-yanglib/pom.xml
features/yanglib/odl-yanglib/pom.xml
features/yanglib/odl-yanglib/src/main/feature/feature.xml
features/yanglib/pom.xml
karaf/pom.xml
netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeMountSessionContext.java
netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallhomeStatusReporter.java
netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/IetfZeroTouchCallHomeServerProvider.java
netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/CurrentSchemaContext.java
netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/MdsalNetconfOperationServiceFactory.java
netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java
netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java
netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java
netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractNetconfOperationTest.java
netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java
netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/SchemaServiceStub.java
netconf/mdsal-netconf-notification/pom.xml
netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/NetconfNotificationManager.java
netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/NotificationToMdsalWriter.java
netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/ops/NotificationsTransformUtil.java
netconf/mdsal-netconf-notification/src/main/resources/OSGI-INF/blueprint/mdsal-netconf-notification.xml
netconf/mdsal-netconf-notification/src/test/java/org/opendaylight/netconf/mdsal/notification/impl/NetconfNotificationManagerTest.java
netconf/mdsal-netconf-notification/src/test/java/org/opendaylight/netconf/mdsal/notification/impl/NotificationToMdsalWriterTest.java
netconf/mdsal-netconf-notification/src/test/java/org/opendaylight/netconf/mdsal/notification/impl/ops/NotificationsTransformUtilTest.java
netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java
netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriterTest.java
netconf/messagebus-netconf/pom.xml
netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSource.java
netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceManager.java
netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java
netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceRegistration.java
netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/StreamNotificationTopicRegistration.java
netconf/messagebus-netconf/src/main/resources/OSGI-INF/blueprint/messagebus-netconf.xml
netconf/messagebus-netconf/src/test/java/org/opendaylight/netconf/messagebus/eventsources/netconf/AbstractCodecTest.java [new file with mode: 0644]
netconf/messagebus-netconf/src/test/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceManagerTest.java
netconf/messagebus-netconf/src/test/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMountTest.java
netconf/messagebus-netconf/src/test/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfTestUtils.java
netconf/messagebus-netconf/src/test/java/org/opendaylight/netconf/messagebus/eventsources/netconf/StreamNotificationTopicRegistrationTest.java
netconf/models/pom.xml
netconf/netconf-config/pom.xml
netconf/netconf-console/src/main/java/org/opendaylight/netconf/console/impl/NetconfCommandsImpl.java
netconf/netconf-console/src/main/java/org/opendaylight/netconf/console/utils/NetconfConsoleUtils.java
netconf/netconf-console/src/test/java/org/opendaylight/netconf/console/impl/NetconfCommandsImplTest.java
netconf/netconf-impl/pom.xml
netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSession.java
netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringService.java
netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/osgi/NetconfSessionMonitoringService.java
netconf/netconf-impl/src/test/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringServiceTest.java
netconf/netconf-impl/src/test/java/org/opendaylight/netconf/impl/osgi/NetconfSessionMonitoringServiceTest.java
netconf/netconf-topology-impl/src/main/java/org/opendaylight/netconf/topology/impl/NetconfConnectorFactoryImpl.java
netconf/netconf-topology-impl/src/main/resources/OSGI-INF/blueprint/netconf-topology.xml
netconf/netconf-topology-impl/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java
netconf/netconf-topology-singleton/pom.xml
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java
netconf/netconf-topology-singleton/src/main/resources/OSGI-INF/blueprint/netconf-topology-singleton.xml
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeManagerTest.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java
netconf/netconf-topology/pom.xml
netconf/netconf-util/pom.xml
netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java
netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java
netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/StreamingContext.java
netconf/netconf-util/src/test/java/org/opendaylight/netconf/util/NetconfUtilTest.java
netconf/pom.xml
netconf/sal-netconf-connector/pom.xml
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/NetconfDeviceSchemasResolver.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/impl/DefaultSchemaResourceManager.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceMountPointContext.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceSourcesResolver.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/LibraryModulesSchemas.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfMountPointContextFactory.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasResolverImpl.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacade.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProvider.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceTopologyAdapter.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfKeystoreAdapter.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/WriteRunningTx.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseSchema.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/util/NetconfSalKeystoreService.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/util/NetconfTopologyRPCProvider.java
netconf/sal-netconf-connector/src/main/resources/OSGI-INF/blueprint/sal-netconf-connector.xml
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/AbstractTestModelTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToNotificationTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfToRpcRequestTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacadeResponseWaitingTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacadeTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/MountInstanceTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBrokerTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceTopologyAdapterTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/NetconfDeviceWriteOnlyTxTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadOnlyTxTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProviderTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfSalKeystoreServiceTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxyTest.java
netconf/shaded-exificient-jar/pom.xml
netconf/shaded-exificient/pom.xml
netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/DummyMonitoringService.java
netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java
netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java
netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/NetconfState.java
netconf/tools/netconf-testtool/src/test/java/org/opendaylight/netconf/test/tool/TestToolTest.java
netconf/tools/pom.xml
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java [deleted file]
netconf/yanglib/src/main/resources/OSGI-INF/blueprint/yanglib.xml
netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java
netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibServiceImplTest.java [deleted file]
parent/pom.xml
pom.xml
restconf/pom.xml
restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java
restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/AbstractOperationsModule.java
restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsEffectiveModuleContext.java [new file with mode: 0644]
restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsImportedModule.java
restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsResourceUtils.java
restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/util/OperationsRestconfModule.java
restconf/restconf-models/pom.xml
restconf/restconf-nb-bierman02/pom.xml
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeXmlBodyWriter.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/DataNormalizationOperation.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java
restconf/restconf-nb-bierman02/src/main/resources/OSGI-INF/blueprint/restconf-config.xml
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/InstanceIdentifierTypeLeafTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/AbstractBodyReaderTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReader.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyWriter.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonPatchBodyReader.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonPatchBodyReaderMountPoint.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReader.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyWriter.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlPatchBodyReader.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlPatchBodyReaderMountPoint.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonIdentityrefToNnTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonLeafrefToNnTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/nn/test/JsonToNnTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/json/test/NnJsonChoiceCaseTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/json/test/NnToJsonLeafrefType.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/json/test/NnToJsonWithAugmentTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnInstanceIdentifierToXmlTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithChoiceTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithDataFromSeveralModulesTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/Bug3595Test.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/Bug8072Test.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CodecsExceptionsCatchingTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CutDataToCorrectDepthTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetAugmentedElementWhenEqualNamesTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfDocumentedExceptionMapperTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplNotificationSubscribingTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/TestUtils.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URIParametersParsing.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URITest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/YangAndXmlAndDataSchemaLoader.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/websockets/test/RestStreamTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/restconf/impl/InstanceIdentifierCodecImplTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapterTest.java
restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextListenerHandler.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/spi/AbstractIdentifierAwareJaxRsProvider.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/references/SchemaContextRef.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfImpl.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifier.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandlerTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonPatchBodyReaderMountPointTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonPatchBodyReaderTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlPatchBodyReaderMountPointTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/XmlPatchBodyReaderTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/AbstractBodyReaderTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/JsonBodyReaderTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/XmlBodyReaderTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040ImplTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImplTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtilTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtilTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfImplTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfSchemaServiceTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapterTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/test/Rfc8040RestConfWiringTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtilTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserFieldsParameterTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifierTest.java
restconf/sal-rest-connector-config/pom.xml
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocServiceImpl.java
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ModelGenerator.java
restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorTest.java
restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocServiceImplTest.java
restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/DocGenTestHelper.java
restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/MountPointSwaggerTest.java

index 9c8c52bfdc2a74a867c1694e481ab6189a4f3995..e21ce2ae9e6e20b4d8dafdda7203067ba1038eb1 100644 (file)
@@ -14,7 +14,7 @@
     <parent>
       <groupId>org.opendaylight.odlparent</groupId>
       <artifactId>odlparent-lite</artifactId>
-      <version>6.0.4</version>
+      <version>7.0.1</version>
       <relativePath/>
     </parent>
 
index 066e8325050844b0af7e7ac55f244facc2aea896..a0173070a53a6b45548093d45c0875240511b7cb 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>feature-repo-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 3e886ef62efec0fd7834e91a04f71a6de173aa88..642ceebc171bfe8303de358c94fd80b2c17542f0 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
@@ -33,8 +33,8 @@
         </dependency>
         <dependency>
             <groupId>org.opendaylight.controller</groupId>
-            <artifactId>odl-message-bus-collector</artifactId>
-            <version>1.11.0</version>
+            <artifactId>odl-controller-exp-messagebus</artifactId>
+            <version>2.0.0</version>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
index 25d9c7beac85541e7081e0b6bb73a6e3e1925b3d..08e94878de670d9e49f27f47594a71302a583df5 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 71f22d6a1582955b11f2101d38ee4145930b53ef..9b194fa6e0683691c5bf181b0d664fb45cac5f12 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 648a756a4c0f11ba3456144e93674f96e54e9e48..fafe544f617702bea5654ebbda6f1153b471e6b1 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 17707b0a77d5455ab1b433290253de45e968e8f5..8ca14c1a7edecde8a4a45d01bf18c7c5ba1a37bd 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>5.0.9</version>
+                <version>6.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>org.opendaylight.controller</groupId>
-                <artifactId>mdsal-artifacts</artifactId>
-                <version>1.11.0</version>
+                <artifactId>controller-artifacts</artifactId>
+                <version>2.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
             <groupId>org.opendaylight.netconf</groupId>
             <artifactId>netconf-topology</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.netconf</groupId>
-            <artifactId>netconf-config</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.aaa</groupId>
             <artifactId>odl-aaa-encryption-service</artifactId>
index c7229c63aaef138f34ef9b9587863b0c3ab79dce..236a8ebcba0767ec092a8b675c9a39a8f66ab024 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-connector" version="${project.version}">
-        <feature version="[3,4)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+        <feature version="[6,7)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
     </feature>
 </features>
index 23a185aaa5db16442899603955e4eb71ff1801d8..c536b9244d102948ff72c1e3f8d85ce9acad64de 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 891f840c569e90dfc5a3439ac8d677b8655f856b..c0eb5403bec770463f0f72372c9eb17676a83249 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 7b86ddf49c9c4b9bafbb90081fd9d7efac364e4f..e2e328e5a1f4e48a25b5b6e2d63b6b4b7930d14a 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index ef85a2056c03b60ace6560db79478e1bef2829de..82e1fcad4dd7523c20227e6d0f7278867c59087d 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>feature-repo-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index fe6e9bcd0461f04726c8af41298325cdef763608..ff7c09bf817ab07eafd66f9866d21d25272eef5a 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 3562a7a8ad69950fb99d9e587dedbfb12f2fd027..f8b8ab65a44943002904fb824efceb53c319fdd0 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 3ca59684da7ee5ec075b7a6a20e09fb1428ab4e9..04b3e515151d1cfed50cc014ef706b7f08d4ae36 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 3837b40ece0107e4d032610674d4210d212377fe..bb435761689ccf0f5a1acc54a66437fbe7d31bcf 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yangtools-artifacts</artifactId>
-                <version>4.0.6</version>
+                <version>5.0.1</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>5.0.9</version>
+                <version>6.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index 6e41d22b1a5b690d197e4cb87d482b48f871d841..e8c1eeb2d60803df04f351baf87daa1550949cbc 100644 (file)
@@ -8,9 +8,9 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-api" version="${project.version}">
-        <feature version="[6,7)">odl-netty-4</feature>
-        <feature version="[4,5)">odl-yangtools-parser-api</feature>
-        <feature version="[3,4)">odl-mdsal-model-rfc7895</feature>
-        <feature version="[3,4)">odl-mdsal-model-rfc8342</feature>
+        <feature version="[7,8)">odl-netty-4</feature>
+        <feature version="[5,6)">odl-yangtools-parser-api</feature>
+        <feature version="[6,7)">odl-mdsal-model-rfc7895</feature>
+        <feature version="[6,7)">odl-mdsal-model-rfc8342</feature>
     </feature>
 </features>
index 0e0b997e577fbdb15fb4a3f33e345c5a3bad5976..008f9caaf15631ec4f185bc0fbb98a1368544a84 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
     <packaging>feature</packaging>
 
     <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>odl-controller-exp-netty-config</artifactId>
+            <version>2.0.0</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>odl-netconf-netty-util</artifactId>
index b969be66e84d0002253f93f14ea728db4c896b63..e3cf3931bfdcd26d9a328afe899818b3b8b089c1 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 1c660d1fc39731803758bf97dd48f46bf692508f..e23437ca2ec814a5dc328ce15819ebbab30260e8 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index f3590c6c817f0765e5f3110eaed4d0a0c0bf6f55..337eccd1e57630eff4587663cb48a3d65ee0d630 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 6db673dbf5381bbce5db7cfe42ec16e9b08cee69..c8c41585488f3fa0b4ed279fb5855313c7cf36d6 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 22626056b3bad8bfc33bfc50f2031a122b5155c1..f32cf7cb91cdcf731fd4bb14850c46d8daa0f1f6 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-netconf-netty-util" version="${project.version}">
-        <feature version="[6,7)">odl-apache-sshd</feature>
+        <feature version="[7,8)">odl-apache-sshd</feature>
     </feature>
 </features>
index c3c5a29c10c533dde1ca4808018840b9b8d1fff7..07ccc1be609665f708fa0939a6ccb4a0ff285d66 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 80cdbe89f19ea6f20d4a629af394496018387257..574d291de47005738f5f74e0425ef33dd52f6efd 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
@@ -28,7 +28,7 @@
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>5.0.9</version>
+                <version>6.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index 006b5f1e4b90c5e640b03e900deacb5ac2c2aff0..b8b7457edd9bd848252039db7f5f71351e8eddb3 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index cdfbbaca7657807df61f9139b249a73a7df59028..393541be108be2c54a884ea8de25568650769fb1 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 6318a8d6f01657af31f937e8379b5ddec6366331..bdef344ca278dc54299edee0dc6cd0a99fdc58a1 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
@@ -32,7 +32,7 @@
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>odl-yangtools-codec</artifactId>
-            <version>4.0.6</version>
+            <version>5.0.1</version>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
index 5ca797f5e21e8f2913de0043c1b49aef0da9927a..12a55a361a971d64b7c2ee0a10212ddfa9e8dd86 100644 (file)
@@ -11,6 +11,6 @@
         <configfile finalname="etc/netconf.cfg">
             mvn:org.opendaylight.netconf/netconf-util/${project.version}/cfg/config
         </configfile>
-        <feature version="[4,5)">odl-yangtools-codec</feature>
+        <feature version="[5,6)">odl-yangtools-codec</feature>
     </feature>
 </features>
index 9a9c3fe01d3d9857358ecf9c168b81d804741603..0088c961c9f302777acdcd66e420b84ed96176f3 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 6bfbf2cfefdad14bfadd3b99fbe3a373c6607fb9..c82ca6fba37de9b8d85b33cf31c4a73a8b19a0fc 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index e792faaa7650f2517afdb13580a576dd65726496..532c65565f40ccac8d099b6061ec875fa5e6789d 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>feature-repo-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 89993dd639ea54e2ff435f1f9cc06086390380fc..8aeae5f426d89c7edd713f5717d186bb956d9525 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
@@ -26,8 +26,8 @@
     <dependencies>
         <dependency>
             <groupId>org.opendaylight.odlparent</groupId>
-            <artifactId>odl-jackson-2.9</artifactId>
-            <version>6.0.4</version>
+            <artifactId>odl-jackson-2.10</artifactId>
+            <version>7.0.1</version>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
index ac7251741a8bb39708c52bc671b4cbc97e16c2b4..f1c0e8fc2a8079ec6df6d4c07dfa981565ca3e20 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-mdsal-apidocs" version="${project.version}">
-        <feature version="[6,7)">odl-jackson-2.9</feature>
+        <feature version="[7,8)">odl-jackson-2.10</feature>
     </feature>
 </features>
index ec2f1a381ffbcf1b9933df9296882aa37e333c3c..1669afab925ce1ef591ad751cbfba460772c92a2 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 9f68acc365ebc57d937154f956112c4a3848ccc0..72af246e211a10f086bc7d6115aac37443e93445 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yangtools-artifacts</artifactId>
-                <version>4.0.6</version>
+                <version>5.0.1</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>5.0.9</version>
+                <version>6.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>org.opendaylight.controller</groupId>
-                <artifactId>mdsal-artifacts</artifactId>
-                <version>1.11.0</version>
+                <artifactId>controller-artifacts</artifactId>
+                <version>2.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index fc4b06de988601f45ca73000092697c801492cba..1418851883f636f10898e0ddde39d335dc786f1d 100644 (file)
@@ -8,8 +8,8 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-restconf-common" version="${project.version}">
-        <feature version="[6,7)">odl-karaf-feat-jetty</feature>
-        <feature version="[4,5)">odl-yangtools-export</feature>
-        <feature version="[3,4)">odl-mdsal-model-rfc7895</feature>
+        <feature version="[7,8)">odl-karaf-feat-jetty</feature>
+        <feature version="[5,6)">odl-yangtools-export</feature>
+        <feature version="[6,7)">odl-mdsal-model-rfc7895</feature>
     </feature>
 </features>
index 21ecbe40498c45d356924b8a34c9dd640a18bebc..abf032bc337321ff966ba1c20e025b088d221072 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
@@ -28,7 +28,7 @@
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>5.0.9</version>
+                <version>6.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index 2b806925dbfcd0c61c64a5a7621c67c0af3dc2d0..65d841f21b52c3d1ea1c08ac4e7617ad40045961 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
 
     <dependencyManagement>
         <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.controller</groupId>
+                <artifactId>controller-artifacts</artifactId>
+                <version>2.0.0</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
     </dependencyManagement>
 
     <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>odl-controller-exp-netty-config</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.netconf</groupId>
             <artifactId>odl-restconf-common</artifactId>
index 700431d7a745e477de77796c3d71fa38efa7da0a..761e75b026dfb277149a019383b29eb2f73c0ebb 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 580d7567f02badb0638e7fb4aac166be3748a920..72f3c5db819b86eef5be5172cf0edfe58f7953bd 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 7f260c07182f196fe48511ab2fa0fb994c9277f5..121229ce885b4bbcc9cdfc10fd86c07611a1a6f4 100644 (file)
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 3c42f02c81ccee0e55f0efc853be9fdd2e9f533b..c5c3b694b81508c1a026166451fbb86c4b83a5cb 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 4d7f1cdf7cc74297ae31ae41f6f0f30e6cf3e811..c0cdceac79ee9fa1ae2ab082bba20d970a6731bd 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-netconf-${project.version}">
     <feature name="odl-yanglib" version="${project.version}">
-        <feature version="[6,7)">odl-karaf-feat-jetty</feature>
+        <feature version="[7,8)">odl-karaf-feat-jetty</feature>
     </feature>
 </features>
index 84ad4d87d490dfde20d01989ac93dfead77a5ff4..9d84cd6e0bd998bb9da6b37e40dacf89d08f926d 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 9bf9e4468ea6fec3dda75130842a7a5747bfb6c3..67e8a99c7be6bfcb25c5f943672465eb1d7ac85a 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>karaf4-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
   <groupId>org.opendaylight.netconf</groupId>
index c9f0db72007af0bf856174e5d33e87a524977c3f..4765bf93b8f35a14810cae71e468fd83f8471433 100644 (file)
@@ -19,7 +19,6 @@ import org.opendaylight.netconf.callhome.protocol.CallHomeProtocolSessionContext
 import org.opendaylight.netconf.client.NetconfClientSession;
 import org.opendaylight.netconf.client.NetconfClientSessionListener;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
-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.NetconfNodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
@@ -65,7 +64,7 @@ class CallHomeMountSessionContext {
     Node getConfigNode() {
         return new NodeBuilder()
                 .setNodeId(getId())
-                .addAugmentation(NetconfNode.class, new NetconfNodeBuilder()
+                .addAugmentation(new NetconfNodeBuilder()
                     .setHost(new Host(key.getIpAddress()))
                     .setPort(key.getPort())
                     .setTcpOnly(Boolean.FALSE)
index 035de3946c284f464d199ecc7d95f543e78f5326..48467cde04a39e71937f37f078d6c4b5ddf95f9a 100644 (file)
@@ -12,9 +12,8 @@ import com.google.common.util.concurrent.MoreExecutors;
 import java.io.IOException;
 import java.security.GeneralSecurityException;
 import java.security.PublicKey;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
+import java.util.Collections;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
@@ -29,6 +28,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.netconf.callhome.protocol.AuthorizedKeysDecoder;
 import org.opendaylight.netconf.callhome.protocol.StatusRecorder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.callhome.device.status.rev170112.Device1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.callhome.device.status.rev170112.Device1.DeviceStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.callhome.device.status.rev170112.Device1Builder;
 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.NetconfNodeConnectionStatus;
@@ -193,14 +193,12 @@ class CallhomeStatusReporter implements DataTreeChangeListener<Node>, StatusReco
         } catch (IOException e) {
             LOG.warn("Unable to encode public key to ssh format.", e);
         }
-        Device1 d1 = new Device1Builder().setDeviceStatus(Device1.DeviceStatus.FAILEDNOTALLOWED).build();
-        DeviceBuilder builder = new DeviceBuilder()
+        return new DeviceBuilder()
                 .setUniqueId(id)
                 .withKey(new DeviceKey(id))
                 .setSshHostKey(sshEncodedKey)
-                .addAugmentation(Device1.class, d1);
-
-        return builder.build();
+                .addAugmentation(new Device1Builder().setDeviceStatus(Device1.DeviceStatus.FAILEDNOTALLOWED).build())
+                .build();
     }
 
     private Device readAndGetDevice(final NodeId nodeId) {
@@ -229,27 +227,27 @@ class CallhomeStatusReporter implements DataTreeChangeListener<Node>, StatusReco
     }
 
     private static Device withConnectedStatus(final Device opDev) {
-        Device1 status = new Device1Builder().setDeviceStatus(Device1.DeviceStatus.CONNECTED).build();
-        return new DeviceBuilder().addAugmentation(Device1.class, status).setUniqueId(opDev.getUniqueId())
-                .setSshHostKey(opDev.getSshHostKey()).build();
+        return deviceWithStatus(opDev, Device1.DeviceStatus.CONNECTED);
     }
 
     private static Device withFailedStatus(final Device opDev) {
-        Device1 status = new Device1Builder().setDeviceStatus(Device1.DeviceStatus.FAILED).build();
-        return new DeviceBuilder().addAugmentation(Device1.class, status).setUniqueId(opDev.getUniqueId())
-                .setSshHostKey(opDev.getSshHostKey()).build();
+        return deviceWithStatus(opDev, DeviceStatus.FAILED);
     }
 
     private static Device withDisconnectedStatus(final Device opDev) {
-        Device1 status = new Device1Builder().setDeviceStatus(Device1.DeviceStatus.DISCONNECTED).build();
-        return new DeviceBuilder().addAugmentation(Device1.class, status).setUniqueId(opDev.getUniqueId())
-                .setSshHostKey(opDev.getSshHostKey()).build();
+        return deviceWithStatus(opDev, DeviceStatus.DISCONNECTED);
     }
 
     private static Device withFailedAuthStatus(final Device opDev) {
-        Device1 status = new Device1Builder().setDeviceStatus(Device1.DeviceStatus.FAILEDAUTHFAILURE).build();
-        return new DeviceBuilder().addAugmentation(Device1.class, status).setUniqueId(opDev.getUniqueId())
-                .setSshHostKey(opDev.getSshHostKey()).build();
+        return deviceWithStatus(opDev, DeviceStatus.FAILEDAUTHFAILURE);
+    }
+
+    private static Device deviceWithStatus(final Device opDev, final DeviceStatus status) {
+        return new DeviceBuilder()
+                .setUniqueId(opDev.getUniqueId())
+                .setSshHostKey(opDev.getSshHostKey())
+                .addAugmentation(new Device1Builder().setDeviceStatus(status).build())
+                .build();
     }
 
     private void setDeviceStatus(final Device device) {
@@ -286,9 +284,9 @@ class CallhomeStatusReporter implements DataTreeChangeListener<Node>, StatusReco
         }
     }
 
-    private List<Device> getDevicesAsList() {
+    private Collection<Device> getDevicesAsList() {
         AllowedDevices devices = getDevices();
-        return devices == null ? new ArrayList<>() : devices.getDevice();
+        return devices == null ? Collections.emptyList() : devices.nonnullDevice().values();
     }
 
     @Override
index c1bdc628d5ee6d597a9d3168cb409cfc146b82f5..eb20f0c483d99900067e5659c81015ded4274d3c 100644 (file)
@@ -17,7 +17,6 @@ import java.net.InetSocketAddress;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
@@ -201,9 +200,9 @@ public class IetfZeroTouchCallHomeServerProvider implements AutoCloseable, DataT
         }, MoreExecutors.directExecutor());
     }
 
-    private static List<Device> getReadDevices(final ListenableFuture<Optional<AllowedDevices>> devicesFuture)
+    private static Collection<Device> getReadDevices(final ListenableFuture<Optional<AllowedDevices>> devicesFuture)
             throws InterruptedException, ExecutionException {
-        return devicesFuture.get().map(AllowedDevices::getDevice).orElse(Collections.emptyList());
+        return devicesFuture.get().map(AllowedDevices::nonnullDevice).orElse(Collections.emptyMap()).values();
     }
 
     private void readAndUpdateStatus(final Device cfgDevice) throws InterruptedException, ExecutionException {
@@ -222,7 +221,7 @@ public class IetfZeroTouchCallHomeServerProvider implements AutoCloseable, DataT
         }
 
         tx.merge(LogicalDatastoreType.OPERATIONAL, deviceIID, new DeviceBuilder()
-            .addAugmentation(Device1.class, devStatus).setSshHostKey(cfgDevice.getSshHostKey())
+            .addAugmentation(devStatus).setSshHostKey(cfgDevice.getSshHostKey())
             .setUniqueId(cfgDevice.getUniqueId()).build());
         tx.commit().addCallback(new FutureCallback<CommitInfo>() {
             @Override
index 66f053e9f71316f80debacbeaeb828877b0355c1..33109371344fe5ea729a2691824610bdedf29440 100644 (file)
@@ -7,7 +7,8 @@
  */
 package org.opendaylight.netconf.mdsal.connector;
 
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkState;
+
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
@@ -16,19 +17,19 @@ import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.netconf.api.capability.Capability;
 import org.opendaylight.netconf.api.monitoring.CapabilityListener;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
+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;
 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider;
 
-public class CurrentSchemaContext implements SchemaContextListener, AutoCloseable {
-    private final AtomicReference<SchemaContext> currentContext = new AtomicReference<>();
-    private final ListenerRegistration<SchemaContextListener> schemaContextListenerListenerRegistration;
+public class CurrentSchemaContext implements EffectiveModelContextListener, AutoCloseable {
+    private final AtomicReference<EffectiveModelContext> currentContext = new AtomicReference<>();
+    private final ListenerRegistration<?> schemaContextListenerListenerRegistration;
     private final Set<CapabilityListener> listeners1 = Collections.synchronizedSet(new HashSet<>());
     private final SchemaSourceProvider<YangTextSchemaSource> rootSchemaSourceProvider;
 
-    public SchemaContext getCurrentContext() {
-        Preconditions.checkState(currentContext.get() != null, "Current context not received");
+    public EffectiveModelContext getCurrentContext() {
+        checkState(currentContext.get() != null, "Current context not received");
         return currentContext.get();
     }
 
@@ -39,7 +40,7 @@ public class CurrentSchemaContext implements SchemaContextListener, AutoCloseabl
     }
 
     @Override
-    public void onGlobalContextUpdated(final SchemaContext schemaContext) {
+    public void onModelContextUpdated(final EffectiveModelContext schemaContext) {
         currentContext.set(schemaContext);
         // FIXME is notifying all the listeners from this callback wise ?
         final Set<Capability> addedCaps = MdsalNetconfOperationServiceFactory.transformCapabilities(
index 1c39f54caa76f8428a4bbca728223430b92dde82..f3885777fbf3dfdeca479efcf02fe40e5ad252a8 100644 (file)
@@ -102,8 +102,7 @@ public class MdsalNetconfOperationServiceFactory implements NetconfOperationServ
         // Added by netconf-impl by default
         // capabilities.add(new BasicCapability("urn:ietf:params:netconf:capability:candidate:1.0"));
 
-        final Set<Module> modules = currentContext.getModules();
-        for (final Module module : modules) {
+        for (final Module module : currentContext.getModules()) {
             Optional<YangModuleCapability> cap = moduleToCapability(module, rootSchemaSourceProviderDependency);
             if (cap.isPresent()) {
                 capabilities.add(cap.get());
index 23e9cc2fe396773078da8c9f9847fa5319d3e5ec..2a99755c4e3f6bcc11a79f56bfcaf38fc91660eb 100644 (file)
@@ -65,7 +65,7 @@ abstract class AbstractEdit extends AbstractConfigOperation {
 
     protected DataSchemaNode getSchemaNodeFromNamespace(final String namespace, final XmlElement element)
         throws DocumentedException {
-        final Iterator<Module> it;
+        final Iterator<? extends Module> it;
         try {
             // Returns module with newest revision since findModuleByNamespace returns a set of modules and we only
             // need the newest one
index b16f766c147df57b94fd88bff2f004d46f453ff8..f29adff83a65e67463c3af912ef0689b290e2a4c 100644 (file)
@@ -79,7 +79,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation {
     @Override
     protected HandlingPriority canHandle(final String netconfOperationName, final String namespace) {
         final URI namespaceURI = createNsUri(namespace);
-        final Optional<Module> module = getModule(namespaceURI);
+        final Optional<? extends Module> module = getModule(namespaceURI);
 
         if (!module.isPresent()) {
             LOG.debug("Cannot handle rpc: {}, {}", netconfOperationName, namespace);
@@ -102,7 +102,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation {
     }
 
     //this returns module with the newest revision if more then 1 module with same namespace is found
-    private Optional<Module> getModule(final URI namespaceURI) {
+    private Optional<? extends Module> getModule(final URI namespaceURI) {
         return schemaContext.getCurrentContext().findModules(namespaceURI).stream().findFirst();
     }
 
@@ -132,7 +132,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation {
         }
 
         final URI namespaceURI = createNsUri(netconfOperationNamespace);
-        final Optional<Module> moduleOptional = getModule(namespaceURI);
+        final Optional<? extends Module> moduleOptional = getModule(namespaceURI);
 
         if (!moduleOptional.isPresent()) {
             throw new DocumentedException("Unable to find module in Schema Context with namespace and name : "
@@ -152,7 +152,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation {
 
         final RpcDefinition rpcDefinition = rpcDefinitionOptional.get();
         final SchemaPath schemaPath = SchemaPath.create(Collections.singletonList(rpcDefinition.getQName()), true);
-        final NormalizedNode<?, ?> inputNode = rpcToNNode(operationElement, rpcDefinition.getInput());
+        final ContainerNode inputNode = rpcToNNode(operationElement, rpcDefinition.getInput());
 
         final DOMRpcResult result;
         try {
@@ -253,12 +253,8 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation {
      * @return parsed rpc into normalized node, or null if input schema is null
      */
     @SuppressWarnings("checkstyle:IllegalCatch")
-    private @Nullable NormalizedNode<?, ?> rpcToNNode(final XmlElement element,
+    private @Nullable ContainerNode rpcToNNode(final XmlElement element,
             final @Nullable ContainerSchemaNode input) throws DocumentedException {
-        if (input == null || input.getChildNodes().isEmpty()) {
-            return null;
-        }
-
         final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
         final XmlParserStream xmlParser = XmlParserStream.create(writer, schemaContext.getCurrentContext(), input);
@@ -270,7 +266,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation {
                     ErrorTag.MALFORMED_MESSAGE, ErrorSeverity.ERROR);
         }
 
-        return resultHolder.getResult();
+        return (ContainerNode) resultHolder.getResult();
     }
 
 }
index dd1c41ebc9016e27eef0b59aa7d70de3b27c3567..0ec329012ebb72008a192edfe0ee8860ccee168a 100644 (file)
@@ -94,8 +94,7 @@ public class FilterContentValidator {
      */
     private DataSchemaNode getRootDataSchemaNode(final Module module, final URI nameSpace, final String name)
             throws DocumentedException {
-        final Collection<DataSchemaNode> childNodes = module.getChildNodes();
-        for (final DataSchemaNode childNode : childNodes) {
+        for (final DataSchemaNode childNode : module.getChildNodes()) {
             final QName qName = childNode.getQName();
             if (qName.getNamespace().equals(nameSpace) && qName.getLocalName().equals(name)) {
                 return childNode;
index dcafdb2fac868cb933cd58310782e1956bd7a3a3..2f1ae629f911e46b3946d2eb976753005ec76ec1 100644 (file)
@@ -46,7 +46,7 @@ import org.opendaylight.netconf.mdsal.connector.ops.get.GetConfig;
 import org.opendaylight.netconf.util.test.NetconfXmlUnitRecursiveQualifier;
 import org.opendaylight.netconf.util.test.XmlFileLoader;
 import org.opendaylight.yangtools.util.concurrent.SpecialExecutors;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,7 +61,7 @@ public abstract class AbstractNetconfOperationTest {
     private static final String DATA_ELEMENT = "data";
     protected static final Document RPC_REPLY_OK = getReplyOk();
 
-    private static SchemaContext SCHEMA_CONTEXT;
+    private static EffectiveModelContext SCHEMA_CONTEXT;
 
     private CurrentSchemaContext currentSchemaContext;
     private TransactionProvider transactionProvider;
index 74aae779e6343cf4b07294be0874b0ac469dbbef..2b95d65299390908aeb49fca9c976cf73281bc0e 100644 (file)
@@ -56,10 +56,10 @@ 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.ImmutableContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 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.SchemaContextListener;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
@@ -116,7 +116,7 @@ public class RuntimeRpcTest {
         @Override
         public FluentFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
             final Collection<DataContainerChild<? extends PathArgument, ?>> children =
-                    (Collection<DataContainerChild<? extends PathArgument, ?>>) input.getValue();
+                    ((ContainerNode) input).getValue();
             final Module module = SCHEMA_CONTEXT.findModules(type.getLastComponent().getNamespace()).stream()
                 .findFirst().orElse(null);
             final RpcDefinition rpcDefinition = getRpcDefinitionFromModule(
@@ -135,13 +135,13 @@ public class RuntimeRpcTest {
         }
     };
 
-    private static SchemaContext SCHEMA_CONTEXT = null;
+    private static EffectiveModelContext SCHEMA_CONTEXT = null;
     private CurrentSchemaContext currentSchemaContext = null;
 
     @Mock
     private DOMSchemaService schemaService;
     @Mock
-    private SchemaContextListener listener;
+    private EffectiveModelContextListener listener;
     @Mock
     private ListenerRegistration<?> registration;
     @Mock
@@ -165,9 +165,9 @@ public class RuntimeRpcTest {
         doReturn(null).when(schemaService).getGlobalContext();
         doReturn(null).when(schemaService).getSessionContext();
         doAnswer(invocationOnMock -> {
-            ((SchemaContextListener) invocationOnMock.getArguments()[0]).onGlobalContextUpdated(SCHEMA_CONTEXT);
+            ((EffectiveModelContextListener) invocationOnMock.getArguments()[0]).onModelContextUpdated(SCHEMA_CONTEXT);
             return registration;
-        }).when(schemaService).registerSchemaContextListener(any(SchemaContextListener.class));
+        }).when(schemaService).registerSchemaContextListener(any(EffectiveModelContextListener.class));
 
         XMLUnit.setIgnoreWhitespace(true);
         XMLUnit.setIgnoreAttributeOrder(true);
index b7bee9978423ca2835177cb8b6d772208462f85d..495ebca85572728019af0353f679e4742b02baaa 100644 (file)
@@ -7,37 +7,34 @@
  */
 package org.opendaylight.netconf.mdsal.connector.ops;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ClassToInstanceMap;
 import com.google.common.collect.ImmutableClassToInstanceMap;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaServiceExtension;
 import org.opendaylight.yangtools.concepts.AbstractListenerRegistration;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 
 final class SchemaServiceStub implements DOMSchemaService {
-    private final SchemaContext schemaContext;
-
-    SchemaServiceStub(SchemaContext schemaContext) {
-        this.schemaContext = schemaContext;
-    }
+    private final EffectiveModelContext schemaContext;
 
-    @Override
-    public SchemaContext getSessionContext() {
-        return schemaContext;
+    SchemaServiceStub(final EffectiveModelContext schemaContext) {
+        this.schemaContext = requireNonNull(schemaContext);
     }
 
     @Override
-    public SchemaContext getGlobalContext() {
+    public EffectiveModelContext getGlobalContext() {
         return schemaContext;
     }
 
     @Override
-    public ListenerRegistration<SchemaContextListener> registerSchemaContextListener(
-        final SchemaContextListener listener) {
-        listener.onGlobalContextUpdated(getGlobalContext());
-        return new AbstractListenerRegistration<SchemaContextListener>(listener) {
+    public ListenerRegistration<EffectiveModelContextListener> registerSchemaContextListener(
+        final EffectiveModelContextListener listener) {
+        listener.onModelContextUpdated(schemaContext);
+        return new AbstractListenerRegistration<>(listener) {
             @Override
             protected void removeRegistration() {
                 // No-op
index 7745be3d25c9e079354881aa9de5a3f5de9977d0..d275b55a50210339faccba7cf989d76ffeb6b5cb 100644 (file)
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-binding-generator-impl</artifactId>
+            <artifactId>mdsal-binding-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-binding-api</artifactId>
+            <artifactId>mdsal-binding-dom-codec-spi</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-binding-dom-codec</artifactId>
+            <artifactId>mdsal-binding-runtime-spi</artifactId>
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <groupId>${project.groupId}</groupId>
             <artifactId>netconf-util</artifactId>
         </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+
         <dependency>
             <groupId>org.xmlunit</groupId>
             <artifactId>xmlunit-legacy</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-generator-impl</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-dom-codec</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
index e45af56b50d2d7ffe1b12fc2e4afc064d1941781..f746ad057dfaff44a34ea55698fe1c4f2dcd4bd4 100644 (file)
@@ -13,7 +13,7 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.HashMultiset;
-import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multiset;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -21,6 +21,8 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.netconf.mdsal.notification.impl.ops.NotificationsTransformUtil;
 import org.opendaylight.netconf.notifications.BaseNotificationPublisherRegistration;
@@ -50,20 +52,17 @@ import org.slf4j.LoggerFactory;
 /**
  *  A thread-safe implementation NetconfNotificationRegistry.
  */
+@Singleton
 public class NetconfNotificationManager implements NetconfNotificationCollector, NetconfNotificationRegistry,
         NetconfNotificationListener, AutoCloseable {
 
     public static final StreamNameType BASE_STREAM_NAME = new StreamNameType("NETCONF");
-    public static final Stream BASE_NETCONF_STREAM;
-
-    static {
-        BASE_NETCONF_STREAM = new StreamBuilder()
+    public static final Stream BASE_NETCONF_STREAM = new StreamBuilder()
                 .setName(BASE_STREAM_NAME)
                 .withKey(new StreamKey(BASE_STREAM_NAME))
                 .setReplaySupport(false)
                 .setDescription("Default Event Stream")
                 .build();
-    }
 
     private static final Logger LOG = LoggerFactory.getLogger(NetconfNotificationManager.class);
 
@@ -87,6 +86,12 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
 
     @GuardedBy("this")
     private final Set<GenericNotificationPublisherReg> notificationPublishers = new HashSet<>();
+    private final NotificationsTransformUtil transformUtil;
+
+    @Inject
+    public NetconfNotificationManager(final NotificationsTransformUtil transformUtil) {
+        this.transformUtil = requireNonNull(transformUtil);
+    }
 
     @Override
     public synchronized void onNotification(final StreamNameType stream, final NetconfNotification notification) {
@@ -126,7 +131,7 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
 
     @Override
     public synchronized Streams getNotificationPublishers() {
-        return new StreamsBuilder().setStream(Lists.newArrayList(streamMetadata.values())).build();
+        return new StreamsBuilder().setStream(Maps.uniqueIndex(streamMetadata.values(), Stream::key)).build();
     }
 
     @Override
@@ -237,14 +242,14 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
     public BaseNotificationPublisherRegistration registerBaseNotificationPublisher() {
         final NotificationPublisherRegistration notificationPublisherRegistration =
                 registerNotificationPublisher(BASE_NETCONF_STREAM);
-        return new BaseNotificationPublisherReg(notificationPublisherRegistration);
+        return new BaseNotificationPublisherReg(transformUtil, notificationPublisherRegistration);
     }
 
     @Override
     public YangLibraryPublisherRegistration registerYangLibraryPublisher() {
         final NotificationPublisherRegistration notificationPublisherRegistration =
                 registerNotificationPublisher(BASE_NETCONF_STREAM);
-        return new YangLibraryPublisherReg(notificationPublisherRegistration);
+        return new YangLibraryPublisherReg(transformUtil, notificationPublisherRegistration);
     }
 
     private static class GenericNotificationPublisherReg implements NotificationPublisherRegistration {
@@ -278,8 +283,11 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
         static final SchemaPath SESSION_END_PATH = SchemaPath.create(true, NetconfSessionEnd.QNAME);
 
         private final NotificationPublisherRegistration baseRegistration;
+        private final NotificationsTransformUtil transformUtil;
 
-        BaseNotificationPublisherReg(final NotificationPublisherRegistration baseRegistration) {
+        BaseNotificationPublisherReg(final NotificationsTransformUtil transformUtil,
+                final NotificationPublisherRegistration baseRegistration) {
+            this.transformUtil = requireNonNull(transformUtil);
             this.baseRegistration = baseRegistration;
         }
 
@@ -288,9 +296,8 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
             baseRegistration.close();
         }
 
-        private static NetconfNotification serializeNotification(final Notification notification,
-                final SchemaPath path) {
-            return NotificationsTransformUtil.transform(notification, path);
+        private NetconfNotification serializeNotification(final Notification notification, final SchemaPath path) {
+            return transformUtil.transform(notification, path);
         }
 
         @Override
@@ -314,15 +321,18 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
         static final SchemaPath YANG_LIBRARY_CHANGE_PATH = SchemaPath.create(true, YangLibraryChange.QNAME);
 
         private final NotificationPublisherRegistration baseRegistration;
+        private final NotificationsTransformUtil transformUtil;
 
-        YangLibraryPublisherReg(final NotificationPublisherRegistration baseRegistration) {
+        YangLibraryPublisherReg(final NotificationsTransformUtil transformUtil,
+                final NotificationPublisherRegistration baseRegistration) {
+            this.transformUtil = requireNonNull(transformUtil);
             this.baseRegistration = baseRegistration;
         }
 
         @Override
-        public void onYangLibraryChange(YangLibraryChange yangLibraryChange) {
-            baseRegistration.onNotification(BASE_STREAM_NAME, NotificationsTransformUtil
-                    .transform(yangLibraryChange, YANG_LIBRARY_CHANGE_PATH));
+        public void onYangLibraryChange(final YangLibraryChange yangLibraryChange) {
+            baseRegistration.onNotification(BASE_STREAM_NAME,
+                transformUtil.transform(yangLibraryChange, YANG_LIBRARY_CHANGE_PATH));
         }
 
         @Override
index 5ab4b294b235d1f7c86b962629901c30d4481837..5e17e09555637ff755ebe7bcab5edf3f1db1bbd4 100644 (file)
@@ -77,8 +77,7 @@ public final class NotificationToMdsalWriter implements AutoCloseable, NetconfNo
     public void onStreamRegistered(final Stream stream) {
         final WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
 
-        final InstanceIdentifier<Stream> streamIdentifier = STREAMS.child(Stream.class, stream.key());
-        tx.merge(LogicalDatastoreType.OPERATIONAL, streamIdentifier, stream, true);
+        tx.merge(LogicalDatastoreType.OPERATIONAL, STREAMS.child(Stream.class, stream.key()), stream);
 
         try {
             tx.commit().get();
index a3c5edd7c7d09598f78e2119a43df3342d70dd0b..cfb026dbc7479d84547dbc25ff1efa3789ac1f1c 100644 (file)
@@ -7,88 +7,70 @@
  */
 package org.opendaylight.netconf.mdsal.notification.impl.ops;
 
-import static com.google.common.base.Preconditions.checkState;
-import static java.util.Objects.requireNonNull;
+import static com.google.common.base.Verify.verify;
 
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Iterables;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.IOException;
-import java.util.Collections;
 import java.util.Date;
 import java.util.Optional;
+import javax.inject.Singleton;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.dom.DOMResult;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.binding.runtime.api.BindingRuntimeContext;
+import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory;
 import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.notifications.NetconfNotification;
 import org.opendaylight.netconf.util.NetconfUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.Netconf;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfigChange;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.YangLibraryChange;
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory;
 import org.w3c.dom.Document;
 
+@Singleton
 public final class NotificationsTransformUtil {
-    static final SchemaContext NOTIFICATIONS_SCHEMA_CTX;
-    static final BindingNormalizedNodeCodecRegistry CODEC_REGISTRY;
-    static final RpcDefinition CREATE_SUBSCRIPTION_RPC;
-
-    static {
-        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-        moduleInfoBackedContext.addModuleInfos(Collections.singletonList($YangModuleInfoImpl.getInstance()));
-        moduleInfoBackedContext.addModuleInfos(Collections.singletonList(org.opendaylight.yang.gen.v1.urn.ietf.params
-                .xml.ns.yang.ietf.netconf.notifications.rev120206.$YangModuleInfoImpl.getInstance()));
-        moduleInfoBackedContext.addModuleInfos(Collections.singletonList(org.opendaylight.yang.gen.v1.urn.ietf.params
-                .xml.ns.yang.ietf.yang.library.rev160621.$YangModuleInfoImpl.getInstance()));
-        final Optional<? extends SchemaContext> schemaContextOptional =
-                moduleInfoBackedContext.tryToCreateSchemaContext();
-        checkState(schemaContextOptional.isPresent());
-        NOTIFICATIONS_SCHEMA_CTX = schemaContextOptional.get();
-
-        CREATE_SUBSCRIPTION_RPC = requireNonNull(findCreateSubscriptionRpc());
-
-        CODEC_REGISTRY = new BindingNormalizedNodeCodecRegistry(BindingRuntimeContext.create(moduleInfoBackedContext,
-                NOTIFICATIONS_SCHEMA_CTX));
-    }
-
-    private NotificationsTransformUtil() {
+    private final SchemaContext schemaContext;
+    private final BindingNormalizedNodeSerializer serializer;
 
-    }
-
-    @SuppressFBWarnings(value = "NP_NONNULL_PARAM_VIOLATION", justification = "Unrecognised NullableDecl")
-    private static RpcDefinition findCreateSubscriptionRpc() {
-        return Iterables.getFirst(Collections2.filter(NOTIFICATIONS_SCHEMA_CTX.getOperations(),
-            input -> input.getQName().getLocalName().equals(CreateSubscription.CREATE_SUBSCRIPTION)), null);
+    public NotificationsTransformUtil(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator,
+            final BindingDOMCodecFactory codecFactory) {
+        final BindingRuntimeContext ctx = BindingRuntimeHelpers.createRuntimeContext(parserFactory, generator,
+            Netconf.class, NetconfConfigChange.class, YangLibraryChange.class);
+        schemaContext = ctx.getSchemaContext();
+        verify(schemaContext.getOperations().stream()
+                .filter(input -> input.getQName().getLocalName().equals(CreateSubscription.CREATE_SUBSCRIPTION))
+                .findFirst()
+                .isPresent());
+        serializer = codecFactory.createBindingDOMCodec(ctx);
     }
 
     /**
      * Transform base notification for capabilities into NetconfNotification.
      */
-    public static NetconfNotification transform(final Notification notification, final SchemaPath path) {
+    public NetconfNotification transform(final Notification notification, final SchemaPath path) {
         return transform(notification, Optional.empty(), path);
     }
 
-    public static NetconfNotification transform(final Notification notification, final Date eventTime,
-            final SchemaPath path) {
+    public NetconfNotification transform(final Notification notification, final Date eventTime, final SchemaPath path) {
         return transform(notification, Optional.ofNullable(eventTime), path);
     }
 
-    private static NetconfNotification transform(final Notification notification, final Optional<Date> eventTime,
+    private NetconfNotification transform(final Notification notification, final Optional<Date> eventTime,
             final SchemaPath path) {
-        final ContainerNode containerNode = CODEC_REGISTRY.toNormalizedNodeNotification(notification);
+        final ContainerNode containerNode = serializer.toNormalizedNodeNotification(notification);
         final DOMResult result = new DOMResult(XmlUtil.newDocument());
         try {
-            NetconfUtil.writeNormalizedNode(containerNode, result, path, NOTIFICATIONS_SCHEMA_CTX);
+            NetconfUtil.writeNormalizedNode(containerNode, result, path, schemaContext);
         } catch (final XMLStreamException | IOException e) {
             throw new IllegalStateException("Unable to serialize " + notification, e);
         }
         final Document node = (Document) result.getNode();
         return eventTime.isPresent() ? new NetconfNotification(node, eventTime.get()) : new NetconfNotification(node);
     }
-
 }
index d2b774cb1310fb40e71d884eee399b878375709f..a5bc339aa9ee9b7878e789c36f9f01f436279c05 100644 (file)
     <reference id="netconfOperationServiceFactoryListener"
                interface="org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactoryListener"
                odl:type="mapper-aggregator-registry"/>
+    <reference id="bindingGenerator"
+               interface="org.opendaylight.binding.runtime.api.BindingRuntimeGenerator"/>
+    <reference id="codecFactory"
+               interface="org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory"/>
+    <reference id="parserFactory"
+               interface="org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory"/>
 
     <!--This is the MD-SAL netconf server notification blueprint xml file-->
+    <bean id="transformUtil"
+          class="org.opendaylight.netconf.mdsal.notification.impl.ops.NotificationsTransformUtil">
+        <argument ref="parserFactory"/>
+        <argument ref="bindingGenerator"/>
+        <argument ref="codecFactory"/>
+    </bean>
 
     <bean id="netconfNotificationManager"
           class="org.opendaylight.netconf.mdsal.notification.impl.NetconfNotificationManager"
           destroy-method="close">
+               <argument ref="transformUtil"/>
     </bean>
     <service ref="netconfNotificationManager"
              interface="org.opendaylight.netconf.notifications.NetconfNotificationRegistry"
index a3daf2698baafb4c6a68a341c24206d49239eb9a..d075d7f8ef0e1415c6dea3ba37da8fd1ee7fe942 100644 (file)
@@ -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.mdsal.notification.impl;
 
 import static org.junit.Assert.assertEquals;
@@ -24,10 +23,13 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
 import org.junit.Assert;
-import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.mdsal.binding.dom.codec.impl.DefaultBindingDOMCodecFactory;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
+import org.opendaylight.netconf.mdsal.notification.impl.ops.NotificationsTransformUtil;
 import org.opendaylight.netconf.notifications.BaseNotificationPublisherRegistration;
 import org.opendaylight.netconf.notifications.NetconfNotification;
 import org.opendaylight.netconf.notifications.NetconfNotificationCollector;
@@ -38,18 +40,15 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.Stream;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChangeBuilder;
+import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl;
 
+@RunWith(MockitoJUnitRunner.class)
 public class NetconfNotificationManagerTest {
 
     public static final String RFC3339_DATE_FORMAT_WITH_MILLIS_BLUEPRINT = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
     @Mock
     private NetconfNotificationRegistry notificationRegistry;
 
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-    }
-
     @Test
     public void testEventTime() throws Exception {
         //Testing values with SimpleDateFormat
@@ -140,7 +139,7 @@ public class NetconfNotificationManagerTest {
 
     @Test
     public void testNotificationListeners() throws Exception {
-        final NetconfNotificationManager netconfNotificationManager = new NetconfNotificationManager();
+        final NetconfNotificationManager netconfNotificationManager = createManager();
         final BaseNotificationPublisherRegistration baseNotificationPublisherRegistration =
                 netconfNotificationManager.registerBaseNotificationPublisher();
 
@@ -163,13 +162,12 @@ public class NetconfNotificationManagerTest {
 
     @Test
     public void testClose() throws Exception {
-        final NetconfNotificationManager netconfNotificationManager = new NetconfNotificationManager();
+        final NetconfNotificationManager netconfNotificationManager = createManager();
 
         final BaseNotificationPublisherRegistration baseNotificationPublisherRegistration =
                 netconfNotificationManager.registerBaseNotificationPublisher();
 
         final NetconfNotificationListener listener = mock(NetconfNotificationListener.class);
-        doNothing().when(listener).onNotification(any(StreamNameType.class), any(NetconfNotification.class));
 
         netconfNotificationManager
                 .registerNotificationListener(NetconfNotificationManager.BASE_NETCONF_STREAM.getName(), listener);
@@ -198,7 +196,7 @@ public class NetconfNotificationManagerTest {
 
     @Test
     public void testStreamListeners() throws Exception {
-        final NetconfNotificationManager netconfNotificationManager = new NetconfNotificationManager();
+        final NetconfNotificationManager netconfNotificationManager = createManager();
 
         final NetconfNotificationCollector.NetconfNotificationStreamListener streamListener =
                 mock(NetconfNotificationCollector.NetconfNotificationStreamListener.class);
@@ -217,4 +215,9 @@ public class NetconfNotificationManagerTest {
 
         verify(streamListener).onStreamUnregistered(NetconfNotificationManager.BASE_STREAM_NAME);
     }
+
+    private static NetconfNotificationManager createManager() {
+        return new NetconfNotificationManager(new NotificationsTransformUtil(new YangParserFactoryImpl(),
+            new DefaultBindingRuntimeGenerator(), new DefaultBindingDOMCodecFactory()));
+    }
 }
\ No newline at end of file
index a3ff0f5e1f1bf0879ce366ae196c4f62742a86d6..32173efe790fff55354014d623fac7e0c0dc3331 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.netconf.mdsal.notification.impl;
 
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -52,7 +51,7 @@ public class NotificationToMdsalWriterTest {
 
         WriteTransaction tx = mock(WriteTransaction.class);
         doNothing().when(tx).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
-                any(DataObject.class), anyBoolean());
+            any(DataObject.class));
         doNothing().when(tx).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
         doReturn(emptyFluentFuture()).when(tx).commit();
         doReturn(tx).when(dataBroker).newWriteOnlyTransaction();
@@ -71,7 +70,7 @@ public class NotificationToMdsalWriterTest {
         writer.onStreamRegistered(testStream);
 
         verify(dataBroker.newWriteOnlyTransaction()).merge(LogicalDatastoreType.OPERATIONAL, streamIdentifier,
-                testStream, true);
+                testStream);
 
         writer.onStreamUnregistered(testStreamName);
 
index 88becc0d4d2bf949b423e741dcf3b8d8d5858d99..4415e0b14ca5a12425f96afffa59b87d9da325eb 100644 (file)
@@ -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.mdsal.notification.impl.ops;
 
 import static org.junit.Assert.assertTrue;
@@ -17,17 +16,20 @@ import org.custommonkey.xmlunit.DetailedDiff;
 import org.custommonkey.xmlunit.Diff;
 import org.custommonkey.xmlunit.XMLUnit;
 import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.opendaylight.mdsal.binding.dom.codec.impl.DefaultBindingDOMCodecFactory;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.notifications.NetconfNotification;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChangeBuilder;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl;
 import org.xml.sax.SAXException;
 
 public class NotificationsTransformUtilTest {
-
     private static final Date DATE = new Date();
     private static final String INNER_NOTIFICATION =
             "<netconf-capability-change xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications\">"
@@ -44,6 +46,14 @@ public class NotificationsTransformUtilTest {
                     + "</eventTime>"
                     + "</notification>";
 
+    private static NotificationsTransformUtil UTIL;
+
+    @BeforeClass
+    public static void beforeClass() {
+        UTIL = new NotificationsTransformUtil(new YangParserFactoryImpl(), new DefaultBindingRuntimeGenerator(),
+            new DefaultBindingDOMCodecFactory());
+    }
+
     @Test
     public void testTransform() throws Exception {
         final NetconfCapabilityChangeBuilder netconfCapabilityChangeBuilder = new NetconfCapabilityChangeBuilder();
@@ -52,7 +62,7 @@ public class NotificationsTransformUtilTest {
         netconfCapabilityChangeBuilder.setDeletedCapability(Lists.newArrayList(new Uri("uri4"), new Uri("uri3")));
 
         final NetconfCapabilityChange capabilityChange = netconfCapabilityChangeBuilder.build();
-        final NetconfNotification transform = NotificationsTransformUtil.transform(capabilityChange, DATE,
+        final NetconfNotification transform = UTIL.transform(capabilityChange, DATE,
                 SchemaPath.create(true, NetconfCapabilityChange.QNAME));
 
         final String serialized = XmlUtil.toString(transform.getDocument());
index d0899d2c740920017e64013de68bd393c253c9a3..95ed9dc82e3e374ce236e9f3abb15c3b052a9c7b 100644 (file)
@@ -9,9 +9,10 @@ package org.opendaylight.netconf.mdsal.yang.library;
 
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.List;
-import java.util.Set;
+import java.util.Collection;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
@@ -26,11 +27,12 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.librar
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.Submodule;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.SubmoduleBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.SubmoduleKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -38,10 +40,8 @@ import org.slf4j.LoggerFactory;
  * Listens for updates on global schema context, transforms context to ietf-yang-library:modules-state and
  * writes this state to operational data store.
  */
-public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCloseable {
-
+public class SchemaServiceToMdsalWriter implements EffectiveModelContextListener, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(SchemaServiceToMdsalWriter.class);
-
     private static final InstanceIdentifier<ModulesState> MODULES_STATE_INSTANCE_IDENTIFIER =
             InstanceIdentifier.create(ModulesState.class);
 
@@ -70,7 +70,7 @@ public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCl
 
 
     @Override
-    public void onGlobalContextUpdated(final SchemaContext context) {
+    public void onModelContextUpdated(final EffectiveModelContext context) {
         final ModulesState newModuleState = createModuleStateFromModules(context.getModules());
         final WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
         tx.put(LogicalDatastoreType.OPERATIONAL,
@@ -90,9 +90,12 @@ public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCl
         }, MoreExecutors.directExecutor());
     }
 
-    private ModulesState createModuleStateFromModules(final Set<Module> modules) {
+    private ModulesState createModuleStateFromModules(final Collection<? extends Module> modules) {
         return new ModulesStateBuilder()
-                .setModule(modules.stream().map(this::createModuleEntryFromModule).collect(Collectors.toList()))
+                .setModule(modules.stream()
+                    .map(this::createModuleEntryFromModule)
+                    .collect(Collectors.toMap(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library
+                        .rev160621.module.list.Module::key, Function.identity())))
                 .setModuleSetId(String.valueOf(moduleSetId.getAndIncrement()))
                 .build();
     }
@@ -110,10 +113,12 @@ public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCl
                 .build();
     }
 
-    private static List<Submodule> createSubmodulesForModule(final Module module) {
-        return module.getSubmodules().stream().map(subModule -> new SubmoduleBuilder()
-            .setName(new YangIdentifier(subModule.getName()))
-            .setRevision(RevisionUtils.fromYangCommon(subModule.getQNameModule().getRevision()))
-            .build()).collect(Collectors.toList());
+    private static Map<SubmoduleKey, Submodule> createSubmodulesForModule(final Module module) {
+        return module.getSubmodules().stream()
+                .map(subModule -> new SubmoduleBuilder()
+                    .setName(new YangIdentifier(subModule.getName()))
+                    .setRevision(RevisionUtils.fromYangCommon(subModule.getQNameModule().getRevision()))
+                    .build())
+                .collect(Collectors.toMap(Submodule::key, Function.identity()));
     }
 }
index 94cd1e7257b10f3d51cc0ef8b720340c0671104b..1013eaf27decb4fc38da62cb0bb856f3538a3d80 100644 (file)
@@ -15,7 +15,7 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.opendaylight.mdsal.common.api.CommitInfo.emptyFluentFuture;
 
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -37,8 +37,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.librar
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class SchemaServiceToMdsalWriterTest {
@@ -63,14 +63,14 @@ public class SchemaServiceToMdsalWriterTest {
         doNothing().when(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
         doReturn(emptyFluentFuture()).when(writeTransaction).commit();
         when(schemaService.registerSchemaContextListener(any())).thenReturn(
-                new ListenerRegistration<SchemaContextListener>() {
+                new ListenerRegistration<EffectiveModelContextListener>() {
                     @Override
                     public void close() {
 
                     }
 
                     @Override
-                    public SchemaContextListener getInstance() {
+                    public EffectiveModelContextListener getInstance() {
                         return null;
                     }
                 });
@@ -81,28 +81,31 @@ public class SchemaServiceToMdsalWriterTest {
     public void testOnGlobalContextUpdated() throws Exception {
         schemaServiceToMdsalWriter.start();
 
-        schemaServiceToMdsalWriter.onGlobalContextUpdated(getSchema());
+        schemaServiceToMdsalWriter.onModelContextUpdated(getSchema());
         verify(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL),
                 eq(MODULES_STATE_INSTANCE_IDENTIFIER), eq(createTestModuleState()));
     }
 
-    private static SchemaContext getSchema() {
+    private static EffectiveModelContext getSchema() {
         return YangParserTestUtils.parseYangResources(SchemaServiceToMdsalWriterTest.class, "/test-module.yang",
             "/test-submodule.yang");
     }
 
     private static ModulesState createTestModuleState() {
-        Submodule sub = new SubmoduleBuilder().setName(new YangIdentifier("test-submodule"))
+        Submodule sub = new SubmoduleBuilder()
+                .setName(new YangIdentifier("test-submodule"))
                 .setRevision(RevisionUtils.emptyRevision())
                 .build();
 
         Module module = new ModuleBuilder().setName(new YangIdentifier("test-module"))
                 .setNamespace(new Uri("test:namespace"))
                 .setRevision(new Revision(new RevisionIdentifier("2013-07-22")))
-                .setSubmodule(ImmutableList.of(sub))
+                .setSubmodule(ImmutableMap.of(sub.key(), sub))
                 .setConformanceType(Module.ConformanceType.Implement)
                 .build();
-        return new ModulesStateBuilder().setModuleSetId("0")
-                .setModule(ImmutableList.of(module)).build();
+        return new ModulesStateBuilder()
+                .setModuleSetId("0")
+                .setModule(ImmutableMap.of(module.key(), module))
+                .build();
     }
 }
index 27b9fa230c12b86d6c5679c3535dc66899afc901..0faebc09c16d9c9386ae512d7f24d93ad998ef5e 100644 (file)
@@ -51,13 +51,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-binding-dom-codec</artifactId>
+            <artifactId>mdsal-binding-dom-codec-api</artifactId>
         </dependency>
 
         <!-- Testing Dependencies -->
         <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-core</artifactId>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-dom-codec</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 </project>
index a9da17573315f7efa67a7059d1176285296088d1..9b43691d7bf1dd50db44cad4f209538d3deee99e 100644 (file)
@@ -11,6 +11,7 @@ import static com.google.common.util.concurrent.Futures.immediateFuture;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
@@ -19,12 +20,10 @@ import java.io.IOException;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.regex.Pattern;
 import javax.xml.stream.XMLStreamException;
@@ -138,15 +137,15 @@ public class NetconfEventSource implements EventSource, DOMNotificationListener
     }
 
     private Map<String, Stream> getAvailableStreams() {
-        Map<String, Stream> streamMap = new HashMap<>();
-        final List<Stream> availableStreams;
+        final Collection<Stream> availableStreams;
         try {
             availableStreams = mount.getAvailableStreams();
-            streamMap = Maps.uniqueIndex(availableStreams, input -> input.getName().getValue());
         } catch (InterruptedException | ExecutionException e) {
             LOG.warn("Can not read streams for node {}", mount.getNodeId(), e);
+            return ImmutableMap.of();
         }
-        return streamMap;
+
+        return Maps.uniqueIndex(availableStreams, input -> input.getName().getValue());
     }
 
     @Override
@@ -292,10 +291,8 @@ public class NetconfEventSource implements EventSource, DOMNotificationListener
         // add Event Source Connection status notification
         availNotifList.add(ConnectionNotificationTopicRegistration.EVENT_SOURCE_STATUS_PATH);
 
-        final Set<NotificationDefinition> availableNotifications = mount.getSchemaContext()
-                .getNotifications();
         // add all known notifications from netconf device
-        for (final NotificationDefinition nd : availableNotifications) {
+        for (final NotificationDefinition nd : mount.getSchemaContext().getNotifications()) {
             availNotifList.add(nd.getPath());
         }
         return availNotifList;
index 46331c54c36498a89798cc90394f1222a744f6e9..6bad11f675b3d0af215964d07937858e543c3e8b 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMNotificationPublishService;
@@ -54,12 +55,15 @@ public final class NetconfEventSourceManager implements DataTreeChangeListener<N
     private ListenerRegistration<NetconfEventSourceManager> listenerRegistration;
     private final EventSourceRegistry eventSourceRegistry;
     private final DataBroker dataBroker;
+    private final BindingNormalizedNodeSerializer serializer;
 
     public NetconfEventSourceManager(final DataBroker dataBroker,
+                                     final BindingNormalizedNodeSerializer serializer,
                                      final DOMNotificationPublishService domPublish,
                                      final DOMMountPointService domMount,
                                      final EventSourceRegistry eventSourceRegistry) {
         this.dataBroker = requireNonNull(dataBroker);
+        this.serializer = requireNonNull(serializer);
         this.domMounts = requireNonNull(domMount);
         this.publishService = requireNonNull(domPublish);
         this.eventSourceRegistry = requireNonNull(eventSourceRegistry);
@@ -100,7 +104,8 @@ public final class NetconfEventSourceManager implements DataTreeChangeListener<N
             return;
         }
         LOG.info("Netconf event source [{}] is creating...", key);
-        NetconfEventSourceRegistration nesr = NetconfEventSourceRegistration.create(requireNonNull(key), node, this);
+        NetconfEventSourceRegistration nesr = NetconfEventSourceRegistration.create(serializer, requireNonNull(key),
+            node, this);
         if (nesr != null) {
             NetconfEventSourceRegistration nesrOld = registrationMap.put(key, nesr);
             if (nesrOld != null) {
index c67995b4126d753fb4187fca6b188beaa8ba50ae..f25fed1f88b6176c4cf283e700a884a2bee2e173 100644 (file)
@@ -7,19 +7,19 @@
  */
 package org.opendaylight.netconf.messagebus.eventsources.netconf;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.time.Instant;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
@@ -48,31 +48,22 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
  * Facade of mounted netconf device.
  */
 class NetconfEventSourceMount {
-
-    private static final BindingNormalizedNodeCodecRegistry CODEC_REGISTRY;
     private static final YangInstanceIdentifier STREAMS_PATH = YangInstanceIdentifier.builder().node(Netconf.QNAME)
             .node(Streams.QNAME).build();
     private static final SchemaPath CREATE_SUBSCRIPTION = SchemaPath
             .create(true, QName.create(CreateSubscriptionInput.QNAME, "create-subscription"));
 
-    static {
-        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-        moduleInfoBackedContext.addModuleInfos(Collections.singletonList(org.opendaylight.yang.gen.v1.urn.ietf.params
-                .xml.ns.netmod.notification.rev080714.$YangModuleInfoImpl.getInstance()));
-        SchemaContext notificationsSchemaCtx = moduleInfoBackedContext.tryToCreateSchemaContext().get();
-
-        CODEC_REGISTRY = new BindingNormalizedNodeCodecRegistry(BindingRuntimeContext.create(moduleInfoBackedContext,
-                notificationsSchemaCtx));
-    }
-
     private final DOMMountPoint mountPoint;
     private final DOMRpcService rpcService;
     private final DOMNotificationService notificationService;
     private final DOMDataBroker dataBroker;
     private final Node node;
     private final String nodeId;
+    private final BindingNormalizedNodeSerializer serializer;
 
-    NetconfEventSourceMount(final Node node, final DOMMountPoint mountPoint) {
+    NetconfEventSourceMount(final BindingNormalizedNodeSerializer serializer, final Node node,
+            final DOMMountPoint mountPoint) {
+        this.serializer = requireNonNull(serializer);
         this.mountPoint = mountPoint;
         this.node = node;
         this.nodeId = node.getNodeId().getValue();
@@ -104,7 +95,7 @@ class NetconfEventSourceMount {
      * @param lastEventTime last event time
      * @return rpc result
      */
-    ListenableFuture<DOMRpcResult> invokeCreateSubscription(final Stream stream,
+    ListenableFuture<? extends DOMRpcResult> invokeCreateSubscription(final Stream stream,
             final Optional<Instant> lastEventTime) {
         final CreateSubscriptionInputBuilder inputBuilder = new CreateSubscriptionInputBuilder()
                 .setStream(stream.getName());
@@ -114,7 +105,7 @@ class NetconfEventSourceMount {
             inputBuilder.setStartTime(new DateAndTime(formattedDate));
         }
         final CreateSubscriptionInput input = inputBuilder.build();
-        final ContainerNode nnInput = CODEC_REGISTRY.toNormalizedNodeRpcData(input);
+        final ContainerNode nnInput = serializer.toNormalizedNodeRpcData(input);
         return rpcService.invokeRpc(CREATE_SUBSCRIPTION, nnInput);
     }
 
@@ -124,7 +115,7 @@ class NetconfEventSourceMount {
      * @param stream stream
      * @return rpc result
      */
-    ListenableFuture<DOMRpcResult> invokeCreateSubscription(final Stream stream) {
+    ListenableFuture<? extends DOMRpcResult> invokeCreateSubscription(final Stream stream) {
         return invokeCreateSubscription(stream, Optional.empty());
     }
 
@@ -135,14 +126,14 @@ class NetconfEventSourceMount {
      * @throws ExecutionException if data read fails
      * @throws InterruptedException if data read fails
      */
-    List<Stream> getAvailableStreams() throws InterruptedException, ExecutionException {
+    Collection<Stream> getAvailableStreams() throws InterruptedException, ExecutionException {
         final Optional<NormalizedNode<?, ?>> streams;
         try (DOMDataTreeReadTransaction tx = dataBroker.newReadOnlyTransaction()) {
             streams = tx.read(LogicalDatastoreType.OPERATIONAL, STREAMS_PATH).get();
         }
         if (streams.isPresent()) {
-            Streams streams1 = (Streams) CODEC_REGISTRY.fromNormalizedNode(STREAMS_PATH, streams.get()).getValue();
-            return streams1.getStream();
+            Streams streams1 = (Streams) serializer.fromNormalizedNode(STREAMS_PATH, streams.get()).getValue();
+            return streams1.nonnullStream().values();
         }
         return Collections.emptyList();
     }
index 34848b94c3dc3cb6eeb4eee257d139f02863e87a..dcb28acec04976d28e7a9c78e84c9cda5d6ed25c 100644 (file)
@@ -13,6 +13,7 @@ import static java.util.Objects.requireNonNull;
 import java.util.List;
 import java.util.Optional;
 import org.opendaylight.controller.messagebus.spi.EventSourceRegistration;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 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.NetconfNodeConnectionStatus.ConnectionStatus;
@@ -31,7 +32,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Helper class to keep connection status of netconf node  and event source registration object.
  */
-public final class NetconfEventSourceRegistration implements AutoCloseable {
+final class NetconfEventSourceRegistration implements AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(NetconfEventSourceRegistration.class);
     private static final YangInstanceIdentifier NETCONF_DEVICE_DOM_PATH = YangInstanceIdentifier.builder()
@@ -44,18 +45,30 @@ public final class NetconfEventSourceRegistration implements AutoCloseable {
 
     private final Node node;
     private final NetconfEventSourceManager netconfEventSourceManager;
+    private final BindingNormalizedNodeSerializer serializer;
+
     private ConnectionStatus currentNetconfConnStatus;
     private EventSourceRegistration<NetconfEventSource> eventSourceRegistration;
 
-    public static NetconfEventSourceRegistration create(final InstanceIdentifier<?> instanceIdent, final Node node,
-                                                        final NetconfEventSourceManager netconfEventSourceManager) {
+    private NetconfEventSourceRegistration(final BindingNormalizedNodeSerializer serializer, final Node node,
+            final NetconfEventSourceManager netconfEventSourceManager) {
+        this.serializer = requireNonNull(serializer);
+        this.node = node;
+        this.netconfEventSourceManager = netconfEventSourceManager;
+        this.eventSourceRegistration = null;
+        this.currentNetconfConnStatus = ConnectionStatus.Connecting;
+    }
+
+    static NetconfEventSourceRegistration create(final BindingNormalizedNodeSerializer serializer,
+            final InstanceIdentifier<?> instanceIdent, final Node node,
+            final NetconfEventSourceManager netconfEventSourceManager) {
         requireNonNull(instanceIdent);
-        requireNonNull(node);
         requireNonNull(netconfEventSourceManager);
         if (!isEventSource(node)) {
             return null;
         }
-        NetconfEventSourceRegistration nesr = new NetconfEventSourceRegistration(node, netconfEventSourceManager);
+        NetconfEventSourceRegistration nesr = new NetconfEventSourceRegistration(serializer, node,
+            netconfEventSourceManager);
         nesr.updateStatus();
         LOG.debug("NetconfEventSourceRegistration for node {} has been initialized...", node.getNodeId().getValue());
         return nesr;
@@ -82,13 +95,6 @@ public final class NetconfEventSourceRegistration implements AutoCloseable {
         return false;
     }
 
-    private NetconfEventSourceRegistration(final Node node, final NetconfEventSourceManager netconfEventSourceManager) {
-        this.node = node;
-        this.netconfEventSourceManager = netconfEventSourceManager;
-        this.eventSourceRegistration = null;
-        this.currentNetconfConnStatus = ConnectionStatus.Connecting;
-    }
-
     Optional<EventSourceRegistration<NetconfEventSource>> getEventSourceRegistration() {
         return Optional.ofNullable(eventSourceRegistration);
     }
@@ -146,7 +152,7 @@ public final class NetconfEventSourceRegistration implements AutoCloseable {
                 .getMountPoint(domMountPath(node.getNodeId()));
         EventSourceRegistration<NetconfEventSource> registration = null;
         if (domMountPoint.isPresent()/* && mountPoint.isPresent()*/) {
-            NetconfEventSourceMount mount = new NetconfEventSourceMount(node, domMountPoint.get());
+            NetconfEventSourceMount mount = new NetconfEventSourceMount(serializer, node, domMountPoint.get());
             final NetconfEventSource netconfEventSource = new NetconfEventSource(
                     netconfEventSourceManager.getStreamMap(),
                     mount,
index 50b2b3eab9f4e7dd1013e989b8a3520c818bbd41..b1a3b7b9b2c934d103fd981acc8e13ba7863f52f 100644 (file)
@@ -62,7 +62,7 @@ class StreamNotificationTopicRegistration extends NotificationTopicRegistration
     void activateNotificationSource() {
         if (!isActive()) {
             LOG.info("Stream {} is not active on node {}. Will subscribe.", this.getStreamName(), this.nodeId);
-            final ListenableFuture<DOMRpcResult> result = mountPoint.invokeCreateSubscription(stream);
+            final ListenableFuture<? extends DOMRpcResult> result = mountPoint.invokeCreateSubscription(stream);
             try {
                 result.get();
                 setActive(true);
@@ -84,7 +84,7 @@ class StreamNotificationTopicRegistration extends NotificationTopicRegistration
     void reActivateNotificationSource() {
         if (isActive()) {
             LOG.info("Stream {} is reactivating on node {}.", this.getStreamName(), this.nodeId);
-            final ListenableFuture<DOMRpcResult> result = mountPoint.invokeCreateSubscription(stream,
+            final ListenableFuture<? extends DOMRpcResult> result = mountPoint.invokeCreateSubscription(stream,
                 getLastEventTime());
             try {
                 result.get();
index c5eb61a3b8436e0924bc642f88bf3fd8624d28b6..f7d9966ca9f91c332104d2b8d06d3ad65ffb6250 100644 (file)
@@ -13,6 +13,8 @@
     <reference id="dataBroker"
                interface="org.opendaylight.mdsal.binding.api.DataBroker"
                odl:type="default"/>
+    <reference id="domCodec"
+               interface="org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer" />
     <reference id="domMountPointService"
                interface="org.opendaylight.mdsal.dom.api.DOMMountPointService" />
     <reference id="domNotificationPublishService"
@@ -25,6 +27,7 @@
           init-method="initialize"
           destroy-method="close">
         <argument ref="dataBroker" />
+        <argument ref="domCodec" />
         <argument ref="domNotificationPublishService" />
         <argument ref="domMountPointService" />
         <argument ref="eventSourceRegistry" />
diff --git a/netconf/messagebus-netconf/src/test/java/org/opendaylight/netconf/messagebus/eventsources/netconf/AbstractCodecTest.java b/netconf/messagebus-netconf/src/test/java/org/opendaylight/netconf/messagebus/eventsources/netconf/AbstractCodecTest.java
new file mode 100644 (file)
index 0000000..02a8f13
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 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.messagebus.eventsources.netconf;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
+import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.Netconf;
+
+public abstract class AbstractCodecTest {
+    static BindingCodecContext SERIALIZER;
+
+    @BeforeClass
+    public static void beforeClass()  {
+        SERIALIZER = new BindingCodecContext(BindingRuntimeHelpers.createRuntimeContext(Netconf.class));
+    }
+
+    @AfterClass
+    public static void afterClass()  {
+        SERIALIZER = null;
+    }
+}
index 83401fb8e8fea5f4c95d1acf769fd94add336385..6e9f45a539bc99c5855456c97a4f29b73a935896 100644 (file)
@@ -19,7 +19,6 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Optional;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.controller.messagebus.spi.EventSource;
 import org.opendaylight.controller.messagebus.spi.EventSourceRegistry;
@@ -46,10 +45,10 @@ import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
-public class NetconfEventSourceManagerTest {
+public class NetconfEventSourceManagerTest extends AbstractCodecTest {
 
     NetconfEventSourceManager netconfEventSourceManager;
-    ListenerRegistration listenerRegistrationMock;
+    ListenerRegistration<?> listenerRegistrationMock;
     DOMMountPointService domMountPointServiceMock;
     MountPointService mountPointServiceMock;
     EventSourceRegistry eventSourceTopologyMock;
@@ -57,9 +56,6 @@ public class NetconfEventSourceManagerTest {
     RpcProviderService rpcProviderRegistryMock;
     EventSourceRegistry eventSourceRegistry;
 
-    @BeforeClass
-    public static void initTestClass() throws IllegalAccessException, InstantiationException {
-    }
 
     @SuppressWarnings("unchecked")
     @Before
@@ -95,7 +91,7 @@ public class NetconfEventSourceManagerTest {
                 .build();
         doReturn(readStreamFuture).when(rtx).read(LogicalDatastoreType.OPERATIONAL, pathStream);
 
-        netconfEventSourceManager = new NetconfEventSourceManager(dataBrokerMock,
+        netconfEventSourceManager = new NetconfEventSourceManager(dataBrokerMock, SERIALIZER,
                 domNotificationPublishServiceMock, domMountPointServiceMock, eventSourceRegistry);
         netconfEventSourceManager.setStreamMap(new HashMap<>());
     }
index 035c0b7722e04b44ebce1dd2b666e7adf4ae479a..1e86b0f83de6b594e9750becc569bdc566fa46a4 100644 (file)
@@ -12,11 +12,11 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
-import com.google.common.collect.Lists;
+import com.google.common.collect.Collections2;
 import java.time.Instant;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
-import java.util.List;
+import java.util.Collection;
 import java.util.Optional;
 import org.junit.Assert;
 import org.junit.Before;
@@ -44,10 +44,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
-public class NetconfEventSourceMountTest {
-
+public class NetconfEventSourceMountTest extends AbstractCodecTest {
     public static final String STREAM_1 = "stream-1";
     public static final String STREAM_2 = "stream-2";
+
     @Mock
     private DOMMountPoint domMountPoint;
     @Mock
@@ -71,7 +71,7 @@ public class NetconfEventSourceMountTest {
         final NormalizedNode<?, ?> streamsNode = NetconfTestUtils.getStreamsNode(STREAM_1, STREAM_2);
         doReturn(FluentFutures.immediateFluentFuture(Optional.of(streamsNode)))
                 .when(tx).read(LogicalDatastoreType.OPERATIONAL, path);
-        mount = new NetconfEventSourceMount(NetconfTestUtils.getNode("node-1"), domMountPoint);
+        mount = new NetconfEventSourceMount(SERIALIZER, NetconfTestUtils.getNode("node-1"), domMountPoint);
     }
 
     @Test
@@ -126,9 +126,10 @@ public class NetconfEventSourceMountTest {
 
     @Test
     public void testGetAvailableStreams() throws Exception {
-        final List<Stream> availableStreams = mount.getAvailableStreams();
+        final Collection<Stream> availableStreams = mount.getAvailableStreams();
         Assert.assertEquals(2, availableStreams.size());
-        final List<String> streamNames = Lists.transform(availableStreams, input -> input.getName().getValue());
+        final Collection<String> streamNames = Collections2.transform(availableStreams,
+            input -> input.getName().getValue());
         streamNames.contains(STREAM_1);
         streamNames.contains(STREAM_2);
     }
index 6d8c333d12dffab083235a8fceb1ee1ada39d485..748963293a5ce64f1cc8d311294eaf4fb624b215 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.netconf.messagebus.eventsources.netconf;
 
+import com.google.common.collect.ImmutableMap;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -19,7 +20,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.StreamBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.DomainName;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
-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.NetconfNodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder;
@@ -59,7 +59,7 @@ public final class NetconfTestUtils {
 
         return new NodeBuilder()
                 .withKey(new NodeKey(new NodeId(nodeIdent)))
-                .addAugmentation(NetconfNode.class, new NetconfNodeBuilder()
+                .addAugmentation(new NetconfNodeBuilder()
                     .setConnectionStatus(cs)
                     .setHost(new Host(new DomainName(hostName)))
                     .setAvailableCapabilities(new AvailableCapabilitiesBuilder()
@@ -81,10 +81,7 @@ public final class NetconfTestUtils {
 
     public static Optional<Streams> getAvailableStream(final String name, final boolean replaySupport) {
         Stream stream = new StreamBuilder().setName(new StreamNameType(name)).setReplaySupport(replaySupport).build();
-        List<Stream> streamList = new ArrayList<>();
-        streamList.add(stream);
-        Streams streams = new StreamsBuilder().setStream(streamList).build();
-        return Optional.of(streams);
+        return Optional.of(new StreamsBuilder().setStream(ImmutableMap.of(stream.key(), stream)).build());
     }
 
     public static NormalizedNode<?, ?> getStreamsNode(final String... streamName) {
index 98990de0de99841317214b63b66678674aee6a55..1b4ee18606da6cfe404c383c18ee85a2a3e446dc 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.netconf.messagebus.eventsources.netconf;
 
 import static org.hamcrest.CoreMatchers.hasItems;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateNullFluentFuture;
@@ -59,8 +60,8 @@ public class StreamNotificationTopicRegistrationTest {
         when(mount.registerNotificationListener(source, ConnectionNotificationTopicRegistration
                 .EVENT_SOURCE_STATUS_PATH))
                 .thenReturn(listenerRegistration);
-        when(mount.invokeCreateSubscription(any(), any())).thenReturn(immediateNullFluentFuture());
-        when(mount.invokeCreateSubscription(any())).thenReturn(immediateNullFluentFuture());
+        doReturn(immediateNullFluentFuture()).when(mount).invokeCreateSubscription(any(), any());
+        doReturn(immediateNullFluentFuture()).when(mount).invokeCreateSubscription(any());
 
         when(source.getMount()).thenReturn(mount);
         stream = new StreamBuilder().setName(StreamNameType.getDefaultInstance(STREAM_NAME)).setReplaySupport(true)
index 6ebad0b728d7ea528384e682c10af1e43aa116cd..443d3751fa0389cc17c2efef3372f37eb869c8ff 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index f88f2de8d0c5bad883786d3776146de711b54161..829d390dde33742e25ced5fd079dd8a09c4deb78 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>bundle-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 50adf4b2007d401af900059ced278ee228725ef0..fbe5c9874af8eb00490d23730f71e94e3d8300fa 100644 (file)
@@ -67,7 +67,7 @@ public class NetconfCommandsImpl implements NetconfCommands {
             return new HashMap<>();
         }
         final Map<String, Map<String, String>> netconfNodes = new HashMap<>();
-        for (final Node node : topology.getNode()) {
+        for (final Node node : topology.nonnullNode().values()) {
             final NetconfNode netconfNode = node.augmentation(NetconfNode.class);
             final Map<String, String> attributes = new HashMap<>();
             attributes.put(NetconfConsoleConstants.NETCONF_ID, node.getNodeId().getValue());
index 4d33921fbd9cf917b0e421ef9139f257359e3660..691d793ea9da2d4ae55e8ca607a89c6cf920d29d 100644 (file)
@@ -7,9 +7,11 @@
  */
 package org.opendaylight.netconf.console.utils;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
@@ -40,13 +42,11 @@ public final class NetconfConsoleUtils {
     public static List<Node> getNetconfNodeFromIp(final String deviceIp, final DataBroker db) {
         final Topology topology = read(LogicalDatastoreType.OPERATIONAL, NetconfIidFactory.NETCONF_TOPOLOGY_IID, db);
         List<Node> nodes = new ArrayList<>();
-        if (isNetconfNodesPresent(topology)) {
-            for (Node node : topology.getNode()) {
-                final NetconfNode netconfNode = node.augmentation(NetconfNode.class);
-                if (netconfNode != null
-                        && netconfNode.getHost().getIpAddress().getIpv4Address().getValue().equals(deviceIp)) {
-                    nodes.add(node);
-                }
+        for (Node node : netconfNodes(topology)) {
+            final NetconfNode netconfNode = node.augmentation(NetconfNode.class);
+            if (netconfNode != null
+                    && netconfNode.getHost().getIpAddress().getIpv4Address().getValue().equals(deviceIp)) {
+                nodes.add(node);
             }
         }
         return nodes.isEmpty() ? null : nodes;
@@ -76,14 +76,11 @@ public final class NetconfConsoleUtils {
     public static Node getNetconfNodeFromIpAndPort(final String deviceIp, final String devicePort,
                                                    final DataBroker db) {
         final Topology topology = read(LogicalDatastoreType.OPERATIONAL, NetconfIidFactory.NETCONF_TOPOLOGY_IID, db);
-        if (isNetconfNodesPresent(topology)) {
-            for (Node node : topology.getNode()) {
-                final NetconfNode netconfNode = node.augmentation(NetconfNode.class);
-                if (netconfNode != null
-                        && netconfNode.getHost().getIpAddress().getIpv4Address().getValue().equals(deviceIp)
-                        && devicePort.equals(netconfNode.getPort().getValue().toString())) {
-                    return node;
-                }
+        for (Node node : netconfNodes(topology)) {
+            final NetconfNode netconfNode = node.augmentation(NetconfNode.class);
+            if (netconfNode != null && netconfNode.getHost().getIpAddress().getIpv4Address().getValue().equals(deviceIp)
+                    && devicePort.equals(netconfNode.getPort().getValue().toString())) {
+                return node;
             }
         }
         return null;
@@ -94,8 +91,8 @@ public final class NetconfConsoleUtils {
      * @param topology :NETCONF topology instance
      * @return :<code>true</code> if not empty, else, <code>false</code>
      */
-    private static boolean isNetconfNodesPresent(final Topology topology) {
-        return topology != null && topology.getNode() != null && !topology.getNode().isEmpty();
+    private static Collection<Node> netconfNodes(final Topology topology) {
+        return topology == null ? ImmutableList.of() : topology.nonnullNode().values();
     }
 
     /**
index e72b32de243b613b924aa5393a2b2912bf176c1d..42596c299cddfda2c263feb1a5ba99098f0e6450 100644 (file)
@@ -14,7 +14,9 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -54,7 +56,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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.common.Uint16;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class NetconfCommandsImplTest {
@@ -66,7 +68,7 @@ public class NetconfCommandsImplTest {
             NetconfNodeConnectionStatus.ConnectionStatus.Connected;
     private static final String CAP_PREFIX = "prefix";
 
-    private static SchemaContext SCHEMA_CONTEXT;
+    private static EffectiveModelContext SCHEMA_CONTEXT;
 
     private DataBroker dataBroker;
     private NetconfCommandsImpl netconfCommands;
@@ -137,7 +139,7 @@ public class NetconfCommandsImplTest {
         Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> {
             final Topology topology = NetconfConsoleUtils.read(LogicalDatastoreType.CONFIGURATION,
                     NetconfIidFactory.NETCONF_TOPOLOGY_IID, dataBroker);
-            final List<Node> nodes = topology.getNode();
+            final Collection<Node> nodes = topology.nonnullNode().values();
             if (nodes.size() != 2) {
                 return false;
             }
@@ -158,7 +160,7 @@ public class NetconfCommandsImplTest {
         Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> {
             final Topology topologyDeleted = NetconfConsoleUtils.read(LogicalDatastoreType.CONFIGURATION,
                     NetconfIidFactory.NETCONF_TOPOLOGY_IID, dataBroker);
-            final List<Node> nodesDeleted = topologyDeleted.getNode();
+            final Collection<Node> nodesDeleted = topologyDeleted.nonnullNode().values();
             if (nodesDeleted.size() != 1) {
                 return false;
             }
@@ -187,7 +189,7 @@ public class NetconfCommandsImplTest {
         Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> {
             final Topology topology = NetconfConsoleUtils.read(LogicalDatastoreType.CONFIGURATION,
                     NetconfIidFactory.NETCONF_TOPOLOGY_IID, dataBroker);
-            final List<Node> nodes = topology.getNode();
+            final Collection<Node> nodes = topology.nonnullNode().values();
             if (nodes.size() != 1) {
                 return false;
             }
@@ -214,13 +216,12 @@ public class NetconfCommandsImplTest {
 
     private void createTopology(final LogicalDatastoreType dataStoreType)
             throws TimeoutException, InterruptedException, ExecutionException {
-        final List<Node> nodes = new ArrayList<>();
         final Node node = getNetconfNode(NODE_ID, IP, PORT, CONN_STATUS, CAP_PREFIX);
-        nodes.add(node);
 
         final Topology topology = new TopologyBuilder()
                 .withKey(new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())))
-                .setTopologyId(new TopologyId(TopologyNetconf.QNAME.getLocalName())).setNode(nodes).build();
+                .setTopologyId(new TopologyId(TopologyNetconf.QNAME.getLocalName()))
+                .setNode(ImmutableMap.of(node.key(), node)).build();
 
         final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
         writeTransaction.put(dataStoreType, NetconfIidFactory.NETCONF_TOPOLOGY_IID, topology);
index 495805017022a5fffef7c9cf194a247985060608..9c8dbcc172211117ddbac334893986e2d3212f13 100644 (file)
   <name>${project.artifactId}</name>
   <packaging>bundle</packaging>
 
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.opendaylight.controller</groupId>
-        <artifactId>config-artifacts</artifactId>
-        <version>0.12.0</version>
-        <type>pom</type>
-        <scope>import</scope>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
index 209e006155f127d689e97dd14612c92a4ada2f31..df7dcd1900763f243227cb3a19242ada030f8c70 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.netconf.impl;
 
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Verify.verify;
 
 import com.google.common.net.InetAddresses;
 import io.netty.channel.Channel;
@@ -20,7 +21,6 @@ import java.time.Instant;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.opendaylight.netconf.api.NetconfMessage;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
@@ -34,7 +34,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210.NetconfTcp;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210.Session1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210.Session1Builder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfSsh;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.Transport;
@@ -52,7 +51,14 @@ public final class NetconfServerSession extends AbstractNetconfSession<NetconfSe
 
     private static final Logger LOG = LoggerFactory.getLogger(NetconfServerSession.class);
     private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
-    private static final String DATE_TIME_PATTERN_STRING = DateAndTime.PATTERN_CONSTANTS.get(0);
+
+    private static final String DATE_TIME_PATTERN_STRING;
+
+    static {
+        verify(DateAndTime.PATTERN_CONSTANTS.size() == 1);
+        DATE_TIME_PATTERN_STRING = DateAndTime.PATTERN_CONSTANTS.get(0);
+    }
+
     private static final Pattern DATE_TIME_PATTERN = Pattern.compile(DATE_TIME_PATTERN_STRING);
 
     private final NetconfHelloMessageAdditionalHeader header;
@@ -116,11 +122,10 @@ public final class NetconfServerSession extends AbstractNetconfSession<NetconfSe
 
     @Override
     public Session toManagementSession() {
-        SessionBuilder builder = new SessionBuilder();
-
-        builder.setSessionId(Uint32.valueOf(getSessionId()));
-        IpAddress address;
-        InetAddress address1 = InetAddresses.forString(header.getAddress());
+        final SessionBuilder builder = new SessionBuilder()
+                .withKey(new SessionKey(Uint32.valueOf(getSessionId())));
+        final InetAddress address1 = InetAddresses.forString(header.getAddress());
+        final IpAddress address;
         if (address1 instanceof Inet4Address) {
             address = new IpAddress(new Ipv4Address(header.getAddress()));
         } else {
@@ -128,30 +133,20 @@ public final class NetconfServerSession extends AbstractNetconfSession<NetconfSe
         }
         builder.setSourceHost(new Host(address));
 
-        checkState(DateAndTime.PATTERN_CONSTANTS.size() == 1);
-        String formattedDateTime = DATE_FORMATTER.format(loginTime);
-
-        Matcher matcher = DATE_TIME_PATTERN.matcher(formattedDateTime);
-        checkState(matcher.matches(), "Formatted datetime %s does not match pattern %s",
-                formattedDateTime, DATE_TIME_PATTERN);
-        builder.setLoginTime(new DateAndTime(formattedDateTime));
-
-        builder.setInBadRpcs(new ZeroBasedCounter32(Uint32.valueOf(inRpcFail)));
-        builder.setInRpcs(new ZeroBasedCounter32(Uint32.valueOf(inRpcSuccess)));
-        builder.setOutRpcErrors(new ZeroBasedCounter32(Uint32.valueOf(outRpcError)));
-
-        builder.setUsername(header.getUserName());
-        builder.setTransport(getTransportForString(header.getTransport()));
-
-        builder.setOutNotifications(new ZeroBasedCounter32(Uint32.valueOf(outNotification)));
-
-        builder.withKey(new SessionKey(Uint32.valueOf(getSessionId())));
-
-        Session1Builder builder1 = new Session1Builder();
-        builder1.setSessionIdentifier(header.getSessionIdentifier());
-        builder.addAugmentation(Session1.class, builder1.build());
-
-        return builder.build();
+        final String formattedDateTime = DATE_FORMATTER.format(loginTime);
+        checkState(DATE_TIME_PATTERN.matcher(formattedDateTime).matches(),
+            "Formatted datetime %s does not match pattern %s", formattedDateTime, DATE_TIME_PATTERN);
+
+        return builder
+                .setLoginTime(new DateAndTime(formattedDateTime))
+                .setInBadRpcs(new ZeroBasedCounter32(Uint32.valueOf(inRpcFail)))
+                .setInRpcs(new ZeroBasedCounter32(Uint32.valueOf(inRpcSuccess)))
+                .setOutRpcErrors(new ZeroBasedCounter32(Uint32.valueOf(outRpcError)))
+                .setUsername(header.getUserName())
+                .setTransport(getTransportForString(header.getTransport()))
+                .setOutNotifications(new ZeroBasedCounter32(Uint32.valueOf(outNotification)))
+                .addAugmentation(new Session1Builder().setSessionIdentifier(header.getSessionIdentifier()).build())
+                .build();
     }
 
     private static Class<? extends Transport> getTransportForString(final String transport) {
index b3f20bf9ee613948e94cf4ed38ea807325936e46..e48ccc864359553ad13ab732787d9a85e5fb9d51 100644 (file)
@@ -17,7 +17,6 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableList.Builder;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -155,28 +154,17 @@ class NetconfCapabilityMonitoringService implements CapabilityListener, AutoClos
     }
 
     private static Schemas transformSchemas(final Set<Capability> caps) {
-        final List<Schema> schemas = new ArrayList<>(caps.size());
+        final Map<SchemaKey, Schema> schemas = Maps.newHashMapWithExpectedSize(caps.size());
         for (final Capability cap : caps) {
             if (cap.getCapabilitySchema().isPresent()) {
-                final SchemaBuilder builder = new SchemaBuilder();
-
                 Preconditions.checkState(isValidModuleCapability(cap));
 
-                builder.setNamespace(new Uri(cap.getModuleNamespace().get()));
-
-                final String version = cap.getRevision().get();
-                builder.setVersion(version);
-
-                final String identifier = cap.getModuleName().get();
-                builder.setIdentifier(identifier);
-
-                builder.setFormat(Yang.class);
-
-                builder.setLocation(transformLocations(cap.getLocation()));
-
-                builder.withKey(new SchemaKey(Yang.class, identifier, version));
-
-                schemas.add(builder.build());
+                final SchemaKey key = new SchemaKey(Yang.class, cap.getModuleName().get(), cap.getRevision().get());
+                schemas.put(key, new SchemaBuilder()
+                    .withKey(key)
+                    .setNamespace(new Uri(cap.getModuleNamespace().get()))
+                    .setLocation(transformLocations(cap.getLocation()))
+                    .build());
             }
         }
 
index a3fecbdeef90f11c24df3f93d177746297618d68..df39aa11ae8d789a9b8e2df2bab4eb3281cecaa5 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.netconf.impl.osgi;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Maps;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -31,12 +32,10 @@ import org.slf4j.LoggerFactory;
 
 /**
  * This class implements {@link SessionListener} to receive updates about Netconf sessions. Instance notifies its
- * listeners
- * about session start and end. It also publishes on regular interval list of sessions,
+ * listeners about session start and end. It also publishes on regular interval list of sessions,
  * where events like rpc or notification happened.
  */
 class NetconfSessionMonitoringService implements SessionListener, AutoCloseable {
-
     private static final Logger LOG = LoggerFactory.getLogger(NetconfSessionMonitoringService.class);
 
     private final Set<NetconfManagementSession> sessions = new HashSet<>();
@@ -53,7 +52,8 @@ class NetconfSessionMonitoringService implements SessionListener, AutoCloseable
      *                             scheduled.
      * @param updateInterval       update interval. If is less than 0, updates won't be scheduled
      */
-    NetconfSessionMonitoringService(Optional<ScheduledThreadPool> schedulingThreadPool, long updateInterval) {
+    NetconfSessionMonitoringService(final Optional<ScheduledThreadPool> schedulingThreadPool,
+            final long updateInterval) {
         this.updateInterval = updateInterval;
         if (schedulingThreadPool.isPresent() && updateInterval > 0) {
             this.executor = schedulingThreadPool.get().getExecutor();
@@ -69,7 +69,9 @@ class NetconfSessionMonitoringService implements SessionListener, AutoCloseable
     synchronized Sessions getSessions() {
         final Collection<Session> managementSessions = Collections2.transform(sessions,
                 NetconfManagementSession::toManagementSession);
-        return new SessionsBuilder().setSession(ImmutableList.copyOf(managementSessions)).build();
+        return new SessionsBuilder()
+                .setSession(Maps.uniqueIndex(managementSessions, Session::key))
+                .build();
     }
 
     @Override
@@ -90,7 +92,7 @@ class NetconfSessionMonitoringService implements SessionListener, AutoCloseable
     }
 
     @Override
-    public synchronized void onSessionEvent(SessionEvent event) {
+    public synchronized void onSessionEvent(final SessionEvent event) {
         changedSessions.add(event.getSession());
     }
 
@@ -123,14 +125,14 @@ class NetconfSessionMonitoringService implements SessionListener, AutoCloseable
         changedSessions.clear();
     }
 
-    private void notifySessionUp(NetconfManagementSession managementSession) {
+    private void notifySessionUp(final NetconfManagementSession managementSession) {
         Session session = managementSession.toManagementSession();
         for (NetconfMonitoringService.SessionsListener listener : listeners) {
             listener.onSessionStarted(session);
         }
     }
 
-    private void notifySessionDown(NetconfManagementSession managementSession) {
+    private void notifySessionDown(final NetconfManagementSession managementSession) {
         Session session = managementSession.toManagementSession();
         for (NetconfMonitoringService.SessionsListener listener : listeners) {
             listener.onSessionEnded(session);
index c1cab0359f52fbd9f62fe3a0b1cb7557adb49e90..2d3161b72a8e283c0b1f739cdd90ae1614f6403f 100644 (file)
@@ -7,6 +7,9 @@
  */
 package org.opendaylight.netconf.impl.osgi;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
@@ -22,7 +25,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
@@ -138,10 +140,10 @@ public class NetconfCapabilityMonitoringServiceTest {
     @Test
     public void testGetSchemas() throws Exception {
         Schemas schemas = monitoringService.getSchemas();
-        Schema schema = schemas.getSchema().get(0);
-        Assert.assertEquals(TEST_MODULE_NAMESPACE, schema.getNamespace());
-        Assert.assertEquals(TEST_MODULE_NAME, schema.getIdentifier());
-        Assert.assertEquals(TEST_MODULE_REV, schema.getVersion());
+        Schema schema = schemas.getSchema().values().iterator().next();
+        assertEquals(TEST_MODULE_NAMESPACE, schema.getNamespace());
+        assertEquals(TEST_MODULE_NAME, schema.getIdentifier());
+        assertEquals(TEST_MODULE_REV, schema.getVersion());
     }
 
     @Test
@@ -150,15 +152,15 @@ public class NetconfCapabilityMonitoringServiceTest {
         monitoringService.onCapabilitiesChanged(Collections.singleton(moduleCapability2), Collections.emptySet());
         final String schema =
                 monitoringService.getSchemaForModuleRevision(TEST_MODULE_NAME, Optional.of(TEST_MODULE_REV));
-        Assert.assertEquals(TEST_MODULE_CONTENT, schema);
+        assertEquals(TEST_MODULE_CONTENT, schema);
         final String schema2 =
                 monitoringService.getSchemaForModuleRevision(TEST_MODULE_NAME, Optional.of(TEST_MODULE_REV2));
-        Assert.assertEquals(TEST_MODULE_CONTENT2, schema2);
+        assertEquals(TEST_MODULE_CONTENT2, schema2);
         //remove one revision
         monitoringService.onCapabilitiesChanged(Collections.emptySet(), Collections.singleton(moduleCapability1));
         //only one revision present
         final String schema3 = monitoringService.getSchemaForModuleRevision(TEST_MODULE_NAME, Optional.empty());
-        Assert.assertEquals(TEST_MODULE_CONTENT2, schema3);
+        assertEquals(TEST_MODULE_CONTENT2, schema3);
     }
 
     @Test
@@ -172,14 +174,14 @@ public class NetconfCapabilityMonitoringServiceTest {
         exp.add(new Uri(URN_IETF_PARAMS_NETCONF_CAPABILITY_URL_1_0));
         Capabilities expected = new CapabilitiesBuilder().setCapability(exp).build();
         Capabilities actual = monitoringService.getCapabilities();
-        Assert.assertEquals(new HashSet<>(expected.getCapability()), new HashSet<>(actual.getCapability()));
+        assertEquals(new HashSet<>(expected.getCapability()), new HashSet<>(actual.getCapability()));
     }
 
     @Test
     public void testClose() throws Exception {
-        Assert.assertFalse(monitoringService.getCapabilities().getCapability().isEmpty());
+        assertFalse(monitoringService.getCapabilities().getCapability().isEmpty());
         monitoringService.close();
-        Assert.assertTrue(monitoringService.getCapabilities().getCapability().isEmpty());
+        assertTrue(monitoringService.getCapabilities().getCapability().isEmpty());
     }
 
     @Test
@@ -205,22 +207,21 @@ public class NetconfCapabilityMonitoringServiceTest {
         final List<Uri> afterAddState = listenerValues.get(1).getCapability();
         final List<Uri> afterRemoveState = listenerValues.get(2).getCapability();
 
-        Assert.assertEquals(capabilitiesSize, afterRegisterState.size());
-        Assert.assertEquals(capabilitiesSize + 1, afterAddState.size());
-        Assert.assertEquals(capabilitiesSize, afterRemoveState.size());
-        Assert.assertFalse(afterRegisterState.contains(uri));
-        Assert.assertTrue(afterAddState.contains(uri));
-        Assert.assertFalse(afterRemoveState.contains(uri));
+        assertEquals(capabilitiesSize, afterRegisterState.size());
+        assertEquals(capabilitiesSize + 1, afterAddState.size());
+        assertEquals(capabilitiesSize, afterRemoveState.size());
+        assertFalse(afterRegisterState.contains(uri));
+        assertTrue(afterAddState.contains(uri));
+        assertFalse(afterRemoveState.contains(uri));
 
         //verify notification publication
         final List<NetconfCapabilityChange> publisherValues = capabilityChangeCaptor.getAllValues();
         final NetconfCapabilityChange afterAdd = publisherValues.get(0);
         final NetconfCapabilityChange afterRemove = publisherValues.get(1);
 
-        Assert.assertEquals(Collections.singleton(uri), new HashSet<>(afterAdd.getAddedCapability()));
-        Assert.assertEquals(Collections.emptySet(), new HashSet<>(afterAdd.getDeletedCapability()));
-        Assert.assertEquals(Collections.singleton(uri), new HashSet<>(afterRemove.getDeletedCapability()));
-        Assert.assertEquals(Collections.emptySet(), new HashSet<>(afterRemove.getAddedCapability()));
+        assertEquals(Collections.singleton(uri), new HashSet<>(afterAdd.getAddedCapability()));
+        assertEquals(Collections.emptySet(), new HashSet<>(afterAdd.getDeletedCapability()));
+        assertEquals(Collections.singleton(uri), new HashSet<>(afterRemove.getDeletedCapability()));
+        assertEquals(Collections.emptySet(), new HashSet<>(afterRemove.getAddedCapability()));
     }
-
 }
index d66690b4353ce1500f56dffa4d9c13da2282d6b8..dcb4654c78a235da32606d92f4d8b4f8eba438bc 100644 (file)
@@ -7,6 +7,10 @@
  */
 package org.opendaylight.netconf.impl.osgi;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
@@ -19,12 +23,12 @@ import java.util.HashSet;
 import java.util.Optional;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.netconf.api.capability.BasicCapability;
 import org.opendaylight.netconf.api.capability.Capability;
@@ -37,6 +41,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.sessions.SessionBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
+@RunWith(MockitoJUnitRunner.StrictStubs.class)
 public class NetconfSessionMonitoringServiceTest {
 
     private static final Session SESSION_1 = new SessionBuilder()
@@ -62,24 +67,18 @@ public class NetconfSessionMonitoringServiceTest {
     private NetconfSessionMonitoringService monitoringService;
 
     @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-
+    public void setUp() {
         doReturn(SESSION_1).when(sessionMock1).toManagementSession();
         doReturn(SESSION_2).when(sessionMock2).toManagementSession();
         doNothing().when(listener).onSessionStarted(any());
         doNothing().when(listener).onSessionEnded(any());
 
-        doNothing().when(notificationPublisher).onCapabilityChanged(any());
-        doNothing().when(notificationPublisher).onSessionStarted(any());
-        doNothing().when(notificationPublisher).onSessionEnded(any());
-
         monitoringService = new NetconfSessionMonitoringService(Optional.empty(), 0);
         monitoringService.registerListener(listener);
     }
 
     @Test
-    public void testListeners() throws Exception {
+    public void testListeners() {
         monitoringService.onSessionUp(sessionMock1);
         HashSet<Capability> added = new HashSet<>();
         added.add(new BasicCapability("toAdd"));
@@ -88,38 +87,36 @@ public class NetconfSessionMonitoringServiceTest {
         verify(listener).onSessionEnded(any());
     }
 
-
     @Test
-    public void testClose() throws Exception {
+    public void testClose() {
         monitoringService.onSessionUp(sessionMock1);
-        Assert.assertFalse(monitoringService.getSessions().getSession().isEmpty());
+        assertEquals(1, monitoringService.getSessions().getSession().size());
         monitoringService.close();
-        Assert.assertTrue(monitoringService.getSessions().getSession().isEmpty());
+        assertNull(monitoringService.getSessions().getSession());
     }
 
-
     @Test
-    public void testOnSessionUpAndDown() throws Exception {
+    public void testOnSessionUpAndDown() {
         monitoringService.onSessionUp(sessionMock1);
         ArgumentCaptor<Session> sessionUpCaptor = ArgumentCaptor.forClass(Session.class);
         verify(listener).onSessionStarted(sessionUpCaptor.capture());
         final Session sesionUp = sessionUpCaptor.getValue();
-        Assert.assertEquals(SESSION_1.getSessionId(), sesionUp.getSessionId());
-        Assert.assertEquals(SESSION_1.getSourceHost(), sesionUp.getSourceHost());
-        Assert.assertEquals(SESSION_1.getUsername(), sesionUp.getUsername());
+        assertEquals(SESSION_1.getSessionId(), sesionUp.getSessionId());
+        assertEquals(SESSION_1.getSourceHost(), sesionUp.getSourceHost());
+        assertEquals(SESSION_1.getUsername(), sesionUp.getUsername());
 
         monitoringService.onSessionDown(sessionMock1);
         ArgumentCaptor<Session> sessionDownCaptor = ArgumentCaptor.forClass(Session.class);
         verify(listener).onSessionEnded(sessionDownCaptor.capture());
         final Session sessionDown = sessionDownCaptor.getValue();
-        Assert.assertEquals(SESSION_1.getSessionId(), sessionDown.getSessionId());
-        Assert.assertEquals(SESSION_1.getSourceHost(), sessionDown.getSourceHost());
-        Assert.assertEquals(SESSION_1.getUsername(), sessionDown.getUsername());
+        assertEquals(SESSION_1.getSessionId(), sessionDown.getSessionId());
+        assertEquals(SESSION_1.getSourceHost(), sessionDown.getSourceHost());
+        assertEquals(SESSION_1.getUsername(), sessionDown.getUsername());
     }
 
     @Test
     @SuppressWarnings("unchecked")
-    public void testListenerUpdateSession() throws Exception {
+    public void testListenerUpdateSession() {
         ScheduledThreadPool threadPool = mock(ScheduledThreadPool.class);
         ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
         doReturn(executor).when(threadPool).getExecutor();
@@ -132,8 +129,8 @@ public class NetconfSessionMonitoringServiceTest {
                 ArgumentCaptor.forClass(Collection.class);
         verify(listener, timeout(2000)).onSessionsUpdated(captor.capture());
         final Collection<Session> value = captor.getValue();
-        Assert.assertTrue(value.contains(SESSION_1));
-        Assert.assertFalse(value.contains(SESSION_2));
+        assertTrue(value.contains(SESSION_1));
+        assertFalse(value.contains(SESSION_2));
         monitoringService.close();
     }
 }
index f605c558e0aee963398298af595b4218362b102b..c4b60b29fc47c2724eeea559b0430516b3cf7c59 100644 (file)
@@ -14,12 +14,9 @@ import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.netconf.topology.api.NetconfConnectorFactory;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.HostBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-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.NetconfNodeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.Credentials;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPwBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.login.pw.LoginPasswordBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
@@ -55,28 +52,21 @@ public class NetconfConnectorFactoryImpl implements NetconfConnectorFactory {
                             final Boolean tcpOnly,
                             final Boolean reconnectOnSchemaChange) {
 
-        final NodeId nodeId = new NodeId(instanceName);
-        final NodeKey nodeKey = new NodeKey(nodeId);
-        final Credentials credentials = new LoginPwBuilder()
-                .setLoginPassword(
-                        new LoginPasswordBuilder()
-                                .setUsername(username)
-                                .setPassword(password)
-                                .build())
-                .build();
-        final Host host = HostBuilder.getDefaultInstance(address);
-        final PortNumber portNumber = new PortNumber(Uint16.valueOf(port));
-        final NetconfNode netconfNode = new NetconfNodeBuilder()
-                .setHost(host)
-                .setPort(portNumber)
-                .setCredentials(credentials)
-                .setTcpOnly(tcpOnly)
-                .setReconnectOnChangedSchema(reconnectOnSchemaChange)
-                .build();
+        final NodeKey nodeKey = new NodeKey(new NodeId(instanceName));
         final Node node =  new NodeBuilder()
-                .setNodeId(nodeId)
                 .withKey(nodeKey)
-                .addAugmentation(NetconfNode.class, netconfNode)
+                .addAugmentation(new NetconfNodeBuilder()
+                    .setHost(HostBuilder.getDefaultInstance(address))
+                    .setPort(new PortNumber(Uint16.valueOf(port)))
+                    .setCredentials(new LoginPwBuilder()
+                        .setLoginPassword(new LoginPasswordBuilder()
+                            .setUsername(username)
+                            .setPassword(password)
+                            .build())
+                        .build())
+                    .setTcpOnly(tcpOnly)
+                    .setReconnectOnChangedSchema(reconnectOnSchemaChange)
+                    .build())
                 .build();
 
         final InstanceIdentifier<Node> nodePath = TOPOLOGY_PATH.child(Node.class, nodeKey);
index 06b7c198994f65b5bda15810fd74b7d77132b9c2..ca6af6c3a3594eafea765e072a558c184afddba5 100644 (file)
@@ -26,8 +26,7 @@
     <reference id="dataBroker"
                interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
     <reference id="mountPointService"
-               interface="org.opendaylight.mdsal.dom.api.DOMMountPointService"
-               odl:type="default"/>
+               interface="org.opendaylight.mdsal.dom.api.DOMMountPointService"/>
     <reference id="encryptionService"
                interface="org.opendaylight.aaa.encrypt.AAAEncryptionService" />
     <reference id="deviceActionFactory"
index 96a6696152e300979b6e325342bebce676d2dc0f..c8e808e7dc10b69c4bdc038b5ab4f27dae686f0b 100644 (file)
@@ -7,6 +7,11 @@
  */
 package org.opendaylight.netconf.topology.impl;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
@@ -23,7 +28,6 @@ import com.google.common.util.concurrent.MoreExecutors;
 import io.netty.util.concurrent.EventExecutor;
 import java.util.Collection;
 import java.util.HashSet;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -146,20 +150,20 @@ public class NetconfTopologyImplTest {
         PathArgument pa = IdentifiableItem.of(Node.class, new NodeKey(NODE_ID));
         when(newNode.getIdentifier()).thenReturn(pa);
 
-
-        final NetconfNode testingNode = new NetconfNodeBuilder()
-                .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
-                .setPort(new PortNumber(Uint16.valueOf(9999)))
-                .setReconnectOnChangedSchema(true)
-                .setDefaultRequestTimeoutMillis(Uint32.valueOf(1000))
-                .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(100))
-                .setKeepaliveDelay(Uint32.valueOf(1000))
-                .setTcpOnly(true)
-                .setCredentials(new LoginPasswordBuilder()
-                        .setUsername("testuser").setPassword("testpassword").build())
-                .build();
-
-        final NodeBuilder nn = new NodeBuilder().addAugmentation(NetconfNode.class, testingNode);
+        final NodeBuilder nn = new NodeBuilder()
+                .addAugmentation(new NetconfNodeBuilder()
+                    .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
+                    .setPort(new PortNumber(Uint16.valueOf(9999)))
+                    .setReconnectOnChangedSchema(true)
+                    .setDefaultRequestTimeoutMillis(Uint32.valueOf(1000))
+                    .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(100))
+                    .setKeepaliveDelay(Uint32.valueOf(1000))
+                    .setTcpOnly(true)
+                    .setCredentials(new LoginPasswordBuilder()
+                        .setUsername("testuser")
+                        .setPassword("testpassword")
+                        .build())
+                    .build());
 
         when(newNode.getDataAfter()).thenReturn(nn.build());
 
@@ -202,9 +206,9 @@ public class NetconfTopologyImplTest {
                 .build();
         final NetconfReconnectingClientConfiguration configuration =
                 spyTopology.getClientConfig(sessionListener, testingNode);
-        Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TCP, configuration.getProtocol());
-        Assert.assertNotNull(configuration.getAuthHandler());
-        Assert.assertNull(configuration.getSslHandlerFactory());
+        assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TCP, configuration.getProtocol());
+        assertNotNull(configuration.getAuthHandler());
+        assertNull(configuration.getSslHandlerFactory());
 
 
         final NetconfNode testingNode2 = new NetconfNodeBuilder()
@@ -220,9 +224,9 @@ public class NetconfTopologyImplTest {
                 .build();
         final NetconfReconnectingClientConfiguration configuration2 =
                 spyTopology.getClientConfig(sessionListener, testingNode2);
-        Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, configuration2.getProtocol());
-        Assert.assertNotNull(configuration2.getAuthHandler());
-        Assert.assertNull(configuration2.getSslHandlerFactory());
+        assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, configuration2.getProtocol());
+        assertNotNull(configuration2.getAuthHandler());
+        assertNull(configuration2.getSslHandlerFactory());
 
 
         final NetconfNode testingNode3 = new NetconfNodeBuilder()
@@ -239,9 +243,9 @@ public class NetconfTopologyImplTest {
                 .build();
         final NetconfReconnectingClientConfiguration configuration3 =
                 spyTopology.getClientConfig(sessionListener, testingNode3);
-        Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, configuration3.getProtocol());
-        Assert.assertNotNull(configuration3.getAuthHandler());
-        Assert.assertNull(configuration3.getSslHandlerFactory());
+        assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, configuration3.getProtocol());
+        assertNotNull(configuration3.getAuthHandler());
+        assertNull(configuration3.getSslHandlerFactory());
 
 
         final NetconfNode testingNode4 = new NetconfNodeBuilder()
@@ -258,9 +262,9 @@ public class NetconfTopologyImplTest {
                 .build();
         final NetconfReconnectingClientConfiguration configuration4 =
                 spyTopology.getClientConfig(sessionListener, testingNode4);
-        Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TLS, configuration4.getProtocol());
-        Assert.assertNull(configuration4.getAuthHandler());
-        Assert.assertNotNull(configuration4.getSslHandlerFactory());
+        assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TLS, configuration4.getProtocol());
+        assertNull(configuration4.getAuthHandler());
+        assertNotNull(configuration4.getSslHandlerFactory());
     }
 
     public static class TestingNetconfTopologyImpl extends NetconfTopologyImpl {
@@ -292,25 +296,26 @@ public class NetconfTopologyImplTest {
     public void hideCredentialsTest() {
         final String userName = "admin";
         final String password = "pa$$word";
-        final NetconfNode netconfNode = new NetconfNodeBuilder()
-                .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
-                .setPort(new PortNumber(Uint16.valueOf(9999)))
-                .setReconnectOnChangedSchema(true)
-                .setDefaultRequestTimeoutMillis(Uint32.valueOf(1000))
-                .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(100))
-                .setKeepaliveDelay(Uint32.valueOf(1000))
-                .setTcpOnly(false)
-                .setProtocol(new ProtocolBuilder().setName(Name.TLS).build())
-                .setCredentials(new LoginPasswordBuilder()
-                        .setUsername(userName).setPassword(password).build())
-                .build();
         final Node node = new NodeBuilder()
-                .addAugmentation(NetconfNode.class, netconfNode)
+                .addAugmentation(new NetconfNodeBuilder()
+                    .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
+                    .setPort(new PortNumber(Uint16.valueOf(9999)))
+                    .setReconnectOnChangedSchema(true)
+                    .setDefaultRequestTimeoutMillis(Uint32.valueOf(1000))
+                    .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(100))
+                    .setKeepaliveDelay(Uint32.valueOf(1000))
+                    .setTcpOnly(false)
+                    .setProtocol(new ProtocolBuilder().setName(Name.TLS).build())
+                    .setCredentials(new LoginPasswordBuilder()
+                        .setUsername(userName)
+                        .setPassword(password)
+                        .build())
+                    .build())
                 .setNodeId(NodeId.getDefaultInstance("junos"))
                 .build();
         final String transformedNetconfNode = AbstractNetconfTopology.hideCredentials(node);
-        Assert.assertTrue(transformedNetconfNode.contains("credentials=***"));
-        Assert.assertFalse(transformedNetconfNode.contains(userName));
-        Assert.assertFalse(transformedNetconfNode.contains(password));
+        assertTrue(transformedNetconfNode.contains("credentials=***"));
+        assertFalse(transformedNetconfNode.contains(userName));
+        assertFalse(transformedNetconfNode.contains(password));
     }
 }
index 3cb6f27d48038fb2fc79375b768fa8275ed12f08..80c9a094b8426457c7e02720565d62a2732dabd0 100644 (file)
     <name>${project.artifactId}</name>
     <packaging>bundle</packaging>
 
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.opendaylight.controller</groupId>
-                <artifactId>config-artifacts</artifactId>
-                <version>0.12.0</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
     <dependencies>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
-            <artifactId>akka-actor_2.12</artifactId>
+            <artifactId>akka-actor_2.13</artifactId>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
-            <artifactId>akka-cluster_2.12</artifactId>
+            <artifactId>akka-cluster_2.13</artifactId>
         </dependency>
 
         <dependency>
 
         <dependency>
             <groupId>com.typesafe.akka</groupId>
-            <artifactId>akka-testkit_2.12</artifactId>
+            <artifactId>akka-testkit_2.13</artifactId>
         </dependency>
     </dependencies>
 </project>
index 0d376b74a2dcd766ecd754a9053102ce96c020e1..03347e9c0654b67f2eaef76c89b3c49227532949 100644 (file)
@@ -141,7 +141,7 @@ class MasterSalFacade implements AutoCloseable, RemoteDeviceHandler<NetconfSessi
         // on leader node would be same as on follower node
         final ProxyDOMDataBroker proxyDataBroker = new ProxyDOMDataBroker(id, masterActorRef, actorSystem.dispatcher(),
             actorResponseWaitTime);
-        salProvider.getMountInstance().onTopologyDeviceConnected(currentMountContext.getSchemaContext(),
+        salProvider.getMountInstance().onTopologyDeviceConnected(currentMountContext.getEffectiveModelContext(),
             proxyDataBroker, deviceRpc, notificationService, deviceAction);
     }
 
@@ -150,8 +150,8 @@ class MasterSalFacade implements AutoCloseable, RemoteDeviceHandler<NetconfSessi
     }
 
     private Future<Object> sendInitialDataToActor() {
-        final List<SourceIdentifier> sourceIdentifiers =
-                SchemaContextUtil.getConstituentModuleIdentifiers(currentMountContext.getSchemaContext()).stream()
+        final List<SourceIdentifier> sourceIdentifiers = SchemaContextUtil.getConstituentModuleIdentifiers(
+            currentMountContext.getEffectiveModelContext()).stream()
                 .map(mi -> RevisionSourceIdentifier.create(mi.getName(), mi.getRevision()))
                 .collect(Collectors.toList());
 
index c70de74b8861480c6d7dae242c1336901271c49a..a4d88adbbee4d50de79567dcf89a4272004acad4 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceNotificationService;
 import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceSalProvider;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,7 +41,7 @@ public class SlaveSalFacade {
         this.actorResponseWaitTime = actorResponseWaitTime;
     }
 
-    public void registerSlaveMountPoint(final SchemaContext remoteSchemaContext, final DOMRpcService deviceRpc,
+    public void registerSlaveMountPoint(final EffectiveModelContext remoteSchemaContext, final DOMRpcService deviceRpc,
             final DOMActionService deviceAction, final ActorRef masterActorRef) {
         if (!registered.compareAndSet(false, true)) {
             return;
index 318a8d268f5e88bc12aebba3821ea2c51e0cc90b..cac94da1a19a86bfbe9538fad023b68d50c3d991 100644 (file)
@@ -63,7 +63,6 @@ import org.opendaylight.netconf.topology.singleton.messages.transactions.NewRead
 import org.opendaylight.netconf.topology.singleton.messages.transactions.NewWriteTransactionRequest;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository;
@@ -241,7 +240,7 @@ public class NetconfNodeActor extends AbstractUntypedActor {
         LOG.debug("{}: invokeSlaveRpc for {}, input: {} on rpc service {}", id, schemaPath, normalizedNodeMessage,
                 deviceRpc);
 
-        final ListenableFuture<DOMRpcResult> rpcResult = deviceRpc.invokeRpc(schemaPath,
+        final ListenableFuture<? extends DOMRpcResult> rpcResult = deviceRpc.invokeRpc(schemaPath,
                 normalizedNodeMessage != null ? normalizedNodeMessage.getNode() : null);
 
         Futures.addCallback(rpcResult, new FutureCallback<DOMRpcResult>() {
@@ -346,9 +345,9 @@ public class NetconfNodeActor extends AbstractUntypedActor {
             final SlaveSalFacade localSlaveSalManager, final ActorRef masterReference, final int tries) {
         final ListenableFuture<EffectiveModelContext> schemaContextFuture =
                 schemaContextFactory.createEffectiveModelContext(sourceIdentifiers);
-        Futures.addCallback(schemaContextFuture, new FutureCallback<SchemaContext>() {
+        Futures.addCallback(schemaContextFuture, new FutureCallback<EffectiveModelContext>() {
             @Override
-            public void onSuccess(final SchemaContext result) {
+            public void onSuccess(final EffectiveModelContext result) {
                 executeInSelf(() -> {
                     // Make sure the slaveSalManager instance hasn't changed since we initiated the schema context
                     // resolution.
index b2e2e59dd0ae0ea2536d3f8126eb0e824330a3b1..acc59c117c99a6db6ac07de13d2dbe4745090843 100644 (file)
@@ -35,8 +35,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
                interface="org.opendaylight.netconf.client.NetconfClientDispatcher"
                odl:type="netconf-client-dispatcher"/>
     <reference id="mountPointService"
-               interface="org.opendaylight.mdsal.dom.api.DOMMountPointService"
-               odl:type="default"/>
+               interface="org.opendaylight.mdsal.dom.api.DOMMountPointService"/>
     <reference id="deviceActionFactory"
                interface="org.opendaylight.netconf.sal.connect.api.DeviceActionFactory"/>
     <reference id="schemaManager"
index 9ff232a71b545d0828018b6ee927bc42e24eb014..b6f83ad969764aa8272f1fd7c0835c50a62ea5d1 100644 (file)
@@ -26,6 +26,7 @@ import akka.actor.ActorSystem;
 import akka.testkit.javadsl.TestKit;
 import akka.util.Timeout;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
@@ -38,9 +39,9 @@ import io.netty.util.concurrent.GlobalEventExecutor;
 import io.netty.util.concurrent.SucceededFuture;
 import java.io.File;
 import java.util.AbstractMap.SimpleEntry;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.Set;
@@ -55,6 +56,7 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.aaa.encrypt.AAAEncryptionService;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.controller.cluster.ActorSystemProvider;
 import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.controller.config.threadpool.ThreadPool;
@@ -69,7 +71,6 @@ import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMActionProviderService;
@@ -117,11 +118,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev15
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.topology.singleton.config.rev170419.Config;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.topology.singleton.config.rev170419.ConfigBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.GetTopInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.GetTopOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.PutTopInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.Top;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
@@ -145,13 +148,14 @@ 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.model.api.EffectiveModelContext;
 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.SchemaPath;
 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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -206,13 +210,14 @@ public class MountPointEndToEndTest {
 
     private final EventExecutor eventExecutor = GlobalEventExecutor.INSTANCE;
     private final Config config = new ConfigBuilder().setWriteTransactionIdleTimeout(Uint16.ZERO).build();
-    private SchemaContext deviceSchemaContext;
+    private EffectiveModelContext deviceSchemaContext;
     private YangModuleInfo topModuleInfo;
     private SchemaPath putTopRpcSchemaPath;
     private SchemaPath getTopRpcSchemaPath;
     private BindingNormalizedNodeSerializer bindingToNormalized;
     private YangInstanceIdentifier yangNodeInstanceId;
     private final TopDOMRpcImplementation topRpcImplementation = new TopDOMRpcImplementation();
+    private final ContainerNode getTopInput = ImmutableNodes.containerNode(GetTopInput.QNAME);
 
     private SchemaResourceManager resourceManager;
 
@@ -221,15 +226,14 @@ public class MountPointEndToEndTest {
     public void setUp() throws Exception {
         deleteCacheDir();
 
-        resourceManager = new DefaultSchemaResourceManager(TEST_ROOT_DIRECTORY, TEST_DEFAULT_SUBDIR);
+        resourceManager = new DefaultSchemaResourceManager(new YangParserFactoryImpl(), TEST_ROOT_DIRECTORY,
+            TEST_DEFAULT_SUBDIR);
 
         topModuleInfo = BindingReflections.getModuleInfo(Top.class);
 
-        final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create();
-        moduleContext.addModuleInfos(Arrays.asList(topModuleInfo));
-        deviceSchemaContext = moduleContext.tryToCreateSchemaContext().get();
+        deviceSchemaContext = BindingRuntimeHelpers.createEffectiveModel(Top.class);
 
-        deviceRpcService.onGlobalContextUpdated(deviceSchemaContext);
+        deviceRpcService.onModelContextUpdated(deviceSchemaContext);
 
         putTopRpcSchemaPath = findRpcDefinition("put-top").getPath();
         getTopRpcSchemaPath = findRpcDefinition("get-top").getPath();
@@ -264,7 +268,7 @@ public class MountPointEndToEndTest {
         AbstractConcurrentDataBrokerTest dataBrokerTest = newDataBrokerTest();
         masterDataBroker = dataBrokerTest.getDataBroker();
         deviceDOMDataBroker = dataBrokerTest.getDomBroker();
-        bindingToNormalized = dataBrokerTest.getDataBrokerTestCustomizer().getBindingToNormalized();
+        bindingToNormalized = dataBrokerTest.getDataBrokerTestCustomizer().getAdapterContext().currentSerializer();
 
         masterSystem = ActorSystem.create(ACTOR_SYSTEM_NAME, ConfigFactory.load().getConfig("Master"));
 
@@ -499,23 +503,26 @@ public class MountPointEndToEndTest {
                 RpcResultBuilder.newError(ErrorType.APPLICATION, "tag2", "error2"))));
 
         testGetTopRpc(domRpcService, new DefaultDOMRpcResult(bindingToNormalized.toNormalizedNodeRpcData(
-                new GetTopOutputBuilder().setTopLevelList(Arrays.asList(new TopLevelListBuilder().setName("one")
-                        .build())).build())));
+                new GetTopOutputBuilder().setTopLevelList(oneTopLevelList()).build())));
 
-        testFailedRpc(domRpcService, getTopRpcSchemaPath, null);
+        testFailedRpc(domRpcService, getTopRpcSchemaPath, getTopInput);
     }
 
     private void testPutTopRpc(final DOMRpcService domRpcService, final DOMRpcResult result)
             throws InterruptedException, ExecutionException, TimeoutException {
         ContainerNode putTopInput = bindingToNormalized.toNormalizedNodeRpcData(
-                new PutTopInputBuilder().setTopLevelList(Arrays.asList(new TopLevelListBuilder().setName("one")
-                        .build())).build());
+                new PutTopInputBuilder().setTopLevelList(oneTopLevelList()).build());
         testRpc(domRpcService, putTopRpcSchemaPath, putTopInput, result);
     }
 
+    private static Map<TopLevelListKey, TopLevelList> oneTopLevelList() {
+        final TopLevelListKey key = new TopLevelListKey("one");
+        return ImmutableMap.of(key, new TopLevelListBuilder().withKey(key).build());
+    }
+
     private void testGetTopRpc(final DOMRpcService domRpcService, final DOMRpcResult result)
             throws InterruptedException, ExecutionException, TimeoutException {
-        testRpc(domRpcService, getTopRpcSchemaPath, null, result);
+        testRpc(domRpcService, getTopRpcSchemaPath, getTopInput, result);
     }
 
     private void testRpc(final DOMRpcService domRpcService, final SchemaPath schemaPath,
@@ -563,7 +570,7 @@ public class MountPointEndToEndTest {
             final NormalizedNode<?, ?> input, final FluentFuture<DOMRpcResult> returnFuture)
                     throws InterruptedException, ExecutionException, TimeoutException {
         topRpcImplementation.init(returnFuture);
-        final ListenableFuture<DOMRpcResult> resultFuture = domRpcService.invokeRpc(schemaPath, input);
+        final ListenableFuture<? extends DOMRpcResult> resultFuture = domRpcService.invokeRpc(schemaPath, input);
 
         topRpcImplementation.verify(DOMRpcIdentifier.create(schemaPath), input);
 
@@ -602,21 +609,27 @@ public class MountPointEndToEndTest {
 
     private static void writeNetconfNode(final String cacheDir, final DataBroker databroker)
             throws InterruptedException, ExecutionException, TimeoutException {
-        final NetconfNode netconfNode = new NetconfNodeBuilder()
-                .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
-                .setPort(new PortNumber(Uint16.valueOf(1234)))
-                .setActorResponseWaitTime(Uint16.valueOf(10))
-                .setTcpOnly(Boolean.TRUE)
-                .setSchemaless(Boolean.FALSE)
-                .setKeepaliveDelay(Uint32.ZERO)
-                .setConnectionTimeoutMillis(Uint32.valueOf(5000))
-                .setDefaultRequestTimeoutMillis(Uint32.valueOf(5000))
-                .setMaxConnectionAttempts(Uint32.ONE)
-                .setCredentials(new LoginPwUnencryptedBuilder().setLoginPasswordUnencrypted(
-                        new LoginPasswordUnencryptedBuilder().setUsername("user").setPassword("pass").build()).build())
-                .setSchemaCacheDirectory(cacheDir)
+        final Node node = new NodeBuilder()
+                .setNodeId(NODE_ID)
+                .addAugmentation(new NetconfNodeBuilder()
+                    .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
+                    .setPort(new PortNumber(Uint16.valueOf(1234)))
+                    .setActorResponseWaitTime(Uint16.valueOf(10))
+                    .setTcpOnly(Boolean.TRUE)
+                    .setSchemaless(Boolean.FALSE)
+                    .setKeepaliveDelay(Uint32.ZERO)
+                    .setConnectionTimeoutMillis(Uint32.valueOf(5000))
+                    .setDefaultRequestTimeoutMillis(Uint32.valueOf(5000))
+                    .setMaxConnectionAttempts(Uint32.ONE)
+                    .setCredentials(new LoginPwUnencryptedBuilder()
+                        .setLoginPasswordUnencrypted(new LoginPasswordUnencryptedBuilder()
+                            .setUsername("user")
+                            .setPassword("pass")
+                            .build())
+                        .build())
+                    .setSchemaCacheDirectory(cacheDir)
+                    .build())
                 .build();
-        final Node node = new NodeBuilder().setNodeId(NODE_ID).addAugmentation(NetconfNode.class, netconfNode).build();
 
         final WriteTransaction writeTx = databroker.newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, NODE_INSTANCE_ID, node);
index 34ba4e6703c483246ccb0fb34d0d8783574897a3..21f3c1439da43b61ae940aa4c32d4aa342553ab9 100644 (file)
@@ -85,8 +85,8 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactory;
 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.PotentialSchemaSource;
@@ -129,7 +129,7 @@ public class NetconfNodeManagerTest {
     private NetconfDeviceSchemasResolver mockSchemasResolver;
 
     @Mock
-    private SchemaContextFactory mockSchemaContextFactory;
+    private EffectiveModelContextFactory mockSchemaContextFactory;
 
     private ActorSystem slaveSystem;
     private ActorSystem masterSystem;
@@ -216,7 +216,7 @@ public class NetconfNodeManagerTest {
         // Connected. Expect the slave mount point created and registered.
 
         final NetconfNode netconfNode = newNetconfNode();
-        final Node node = new NodeBuilder().setNodeId(nodeId).addAugmentation(NetconfNode.class, netconfNode).build();
+        final Node node = new NodeBuilder().setNodeId(nodeId).addAugmentation(netconfNode).build();
 
         DataObjectModification<Node> mockDataObjModification = mock(DataObjectModification.class);
         doReturn(Iterables.getLast(nodeListPath.getPathArguments())).when(mockDataObjModification).getIdentifier();
@@ -279,9 +279,10 @@ public class NetconfNodeManagerTest {
         setupMountPointMocks();
 
         final Node updatedNode = new NodeBuilder().setNodeId(nodeId)
-                .addAugmentation(NetconfNode.class, new NetconfNodeBuilder(netconfNode)
-                        .setConnectionStatus(NetconfNodeConnectionStatus.ConnectionStatus.UnableToConnect)
-                        .build()).build();
+                .addAugmentation(new NetconfNodeBuilder(netconfNode)
+                    .setConnectionStatus(NetconfNodeConnectionStatus.ConnectionStatus.UnableToConnect)
+                    .build())
+                .build();
 
         doReturn(SUBTREE_MODIFIED).when(mockDataObjModification).getModificationType();
         doReturn(node).when(mockDataObjModification).getDataBefore();
@@ -308,7 +309,7 @@ public class NetconfNodeManagerTest {
                 nodeKey, topologyId);
 
         final NetconfNode netconfNode = newNetconfNode();
-        final Node node = new NodeBuilder().setNodeId(nodeId).addAugmentation(NetconfNode.class, netconfNode).build();
+        final Node node = new NodeBuilder().setNodeId(nodeId).addAugmentation(netconfNode).build();
 
         DataObjectModification<Node> mockDataObjModification = mock(DataObjectModification.class);
         doReturn(Iterables.getLast(nodeListPath.getPathArguments())).when(mockDataObjModification).getIdentifier();
index fe0e001268d3e0ab9112c48ab080ad1b6a066472..c35842fcdb3d244d7848dc31a150b447237fb6f9 100644 (file)
@@ -81,6 +81,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;
 
 public class NetconfTopologyManagerTest {
     private static final Uint16 ACTOR_RESPONSE_WAIT_TIME = Uint16.valueOf(10);
@@ -131,7 +132,8 @@ public class NetconfTopologyManagerTest {
         netconfTopologyManager = new NetconfTopologyManager(dataBroker, rpcProviderRegistry, actionProviderRegistry,
                 clusterSingletonServiceProvider, keepaliveExecutor, processingThreadPool,
                 actorSystemProvider, eventExecutor, clientDispatcher, TOPOLOGY_ID, config,
-                mountPointService, encryptionService, deviceActionFactory, new DefaultSchemaResourceManager()) {
+                mountPointService, encryptionService, deviceActionFactory,
+                new DefaultSchemaResourceManager(new YangParserFactoryImpl())) {
             @Override
             protected NetconfTopologyContext newNetconfTopologyContext(final NetconfTopologySetup setup,
                 final ServiceGroupIdentifier serviceGroupIdent, final Timeout actorResponseWaitTime,
@@ -192,8 +194,7 @@ public class NetconfTopologyManagerTest {
                 .setPort(new PortNumber(Uint16.valueOf(1111)))
                 .setActorResponseWaitTime(ACTOR_RESPONSE_WAIT_TIME)
                 .build();
-        final Node node1 = new NodeBuilder().setNodeId(nodeId1).addAugmentation(NetconfNode.class,
-                netconfNode1).build();
+        final Node node1 = new NodeBuilder().setNodeId(nodeId1).addAugmentation(netconfNode1).build();
 
         final DataObjectModification<Node> dataObjectModification1 = mock(DataObjectModification.class);
         doReturn(WRITE).when(dataObjectModification1).getModificationType();
@@ -206,8 +207,7 @@ public class NetconfTopologyManagerTest {
                 .setPort(new PortNumber(Uint16.valueOf(2222)))
                 .setActorResponseWaitTime(ACTOR_RESPONSE_WAIT_TIME)
                 .build();
-        final Node node2 = new NodeBuilder().setNodeId(nodeId2).addAugmentation(NetconfNode.class,
-                netconfNode2).build();
+        final Node node2 = new NodeBuilder().setNodeId(nodeId2).addAugmentation(netconfNode2).build();
 
         final DataObjectModification<Node> dataObjectModification2 = mock(DataObjectModification.class);
         doReturn(WRITE).when(dataObjectModification2).getModificationType();
@@ -252,8 +252,7 @@ public class NetconfTopologyManagerTest {
 
         final NetconfNode updatedNetconfNode1 = new NetconfNodeBuilder(netconfNode1)
                 .setPort(new PortNumber(Uint16.valueOf(33333))).build();
-        final Node updatedNode1 = new NodeBuilder().setNodeId(nodeId1).addAugmentation(NetconfNode.class,
-                updatedNetconfNode1).build();
+        final Node updatedNode1 = new NodeBuilder().setNodeId(nodeId1).addAugmentation(updatedNetconfNode1).build();
 
         doReturn(WRITE).when(dataObjectModification1).getModificationType();
         doReturn(node1).when(dataObjectModification1).getDataBefore();
@@ -345,12 +344,14 @@ public class NetconfTopologyManagerTest {
         final InstanceIdentifier<Node> nodeInstanceId = NetconfTopologyUtils.createTopologyNodeListPath(
                 new NodeKey(nodeId), TOPOLOGY_ID);
 
-        final NetconfNode netconfNode = new NetconfNodeBuilder()
-                .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
-                .setPort(new PortNumber(Uint16.valueOf(10)))
-                .setActorResponseWaitTime(ACTOR_RESPONSE_WAIT_TIME).build();
-        final Node node = new NodeBuilder().setNodeId(nodeId).addAugmentation(NetconfNode.class,
-                netconfNode).build();
+        final Node node = new NodeBuilder()
+                .setNodeId(nodeId)
+                .addAugmentation(new NetconfNodeBuilder()
+                    .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
+                    .setPort(new PortNumber(Uint16.valueOf(10)))
+                    .setActorResponseWaitTime(ACTOR_RESPONSE_WAIT_TIME)
+                    .build())
+                .build();
 
         final DataObjectModification<Node> dataObjectModification = mock(DataObjectModification.class);
         doReturn(WRITE).when(dataObjectModification).getModificationType();
index 48dfab7f5f825f5bc0e1910b3614ed679b50ce01..abc5bac4e789cd742433f13e6dbd6756b702334a 100644 (file)
@@ -64,6 +64,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 scala.concurrent.duration.Duration;
 
 public class RemoteDeviceConnectorImplTest {
@@ -138,9 +139,8 @@ public class RemoteDeviceConnectorImplTest {
     @SuppressWarnings("unchecked")
     @Test
     public void testStopRemoteDeviceConnection() {
-        final Credentials credentials = new LoginPasswordBuilder()
-                .setPassword("admin").setUsername("admin").build();
-        final NetconfNode netconfNode = new NetconfNodeBuilder()
+        builder.setNode(new NodeBuilder().setNodeId(NODE_ID)
+            .addAugmentation(new NetconfNodeBuilder()
                 .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
                 .setPort(new PortNumber(Uint16.valueOf(9999)))
                 .setReconnectOnChangedSchema(true)
@@ -148,12 +148,11 @@ public class RemoteDeviceConnectorImplTest {
                 .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(100))
                 .setSchemaless(false)
                 .setTcpOnly(false)
-                .setCredentials(credentials)
-                .build();
-        final Node node = new NodeBuilder().setNodeId(NODE_ID).addAugmentation(NetconfNode.class, netconfNode).build();
-
-        builder.setNode(node);
-
+                .setCredentials(new LoginPasswordBuilder()
+                    .setPassword("admin").setUsername("admin")
+                    .build())
+                .build())
+            .build());
 
         final NetconfDeviceCommunicator communicator = mock(NetconfDeviceCommunicator.class);
         final RemoteDeviceHandler<NetconfSessionPreferences> salFacade = mock(RemoteDeviceHandler.class);
@@ -167,7 +166,6 @@ public class RemoteDeviceConnectorImplTest {
 
         verify(communicator, times(1)).close();
         verify(salFacade, times(1)).close();
-
     }
 
     @SuppressWarnings("unchecked")
@@ -187,9 +185,10 @@ public class RemoteDeviceConnectorImplTest {
                 .setKeepaliveDelay(Uint32.ONE)
                 .build();
 
-        final Node node = new NodeBuilder().setNodeId(NODE_ID).addAugmentation(NetconfNode.class, netconfNode).build();
+        final Node node = new NodeBuilder().setNodeId(NODE_ID).addAugmentation(netconfNode).build();
 
-        builder.setSchemaResourceDTO(new DefaultSchemaResourceManager().getSchemaResources(netconfNode, "foo"));
+        builder.setSchemaResourceDTO(new DefaultSchemaResourceManager(new YangParserFactoryImpl())
+            .getSchemaResources(netconfNode, "foo"));
 
         final RemoteDeviceConnectorImpl remoteDeviceConnection =
                 new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, deviceActionFactory);
index d88e887b7299672ae493e87f6277b1157a289a2a..7b4efba8e62f40e9884acf0ed1d8b832e3152e38 100644 (file)
     <description>NETCONF topology APIs</description>
     <packaging>bundle</packaging>
 
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.opendaylight.controller</groupId>
-                <artifactId>config-artifacts</artifactId>
-                <version>0.12.0</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
     <dependencies>
         <dependency>
             <groupId>org.opendaylight.aaa</groupId>
index 4e3bc987f9f33eb5dea4d7a6b54fc4b3775b8853..43e0c9aa2995a69ffd69ac69d572ce63cb232560 100644 (file)
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.xmlunit</groupId>
-      <artifactId>xmlunit-legacy</artifactId>
-      <scope>test</scope>
-    </dependency>
-   <dependency>
-      <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>mdsal-binding-generator-impl</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>mockito-configuration</artifactId>
       <groupId>org.osgi</groupId>
       <artifactId>osgi.cmpn</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>org.xmlunit</groupId>
+      <artifactId>xmlunit-legacy</artifactId>
+      <scope>test</scope>
+    </dependency>
+   <dependency>
+      <groupId>org.opendaylight.mdsal</groupId>
+      <artifactId>mdsal-binding-generator-impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+   <dependency>
+      <groupId>org.opendaylight.mdsal</groupId>
+      <artifactId>mdsal-binding-runtime-spi</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
index 0580159e1553c316c1d545423b60e592e1aca168..3bf93f8d01068dc142c9de68ff7efdef9a45caba 100644 (file)
@@ -40,6 +40,7 @@ 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;
 import org.slf4j.Logger;
@@ -179,7 +180,7 @@ public final class NetconfUtil {
 
 
     // FIXME: document this interface contract. Does it support RFC8528/RFC8542? How?
-    public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final SchemaContext schemaContext,
+    public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final EffectiveModelContext schemaContext,
             final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException {
         return transformDOMSourceToNormalizedNode(new EmptyMountPointContext(schemaContext), value);
     }
index 3db43872191ddc94077f49cedf1894759776e363..bd9a55c7fa2225b522c437b7f9617aa4e8a79580 100644 (file)
@@ -10,13 +10,10 @@ package org.opendaylight.netconf.util;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
@@ -29,7 +26,6 @@ import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.UsesNode;
 
 /**
@@ -37,42 +33,42 @@ import org.opendaylight.yangtools.yang.model.api.UsesNode;
  */
 public final class NodeContainerProxy implements ContainerSchemaNode {
 
-    private final Map<QName, DataSchemaNode> childNodes;
+    private final Map<QName, ? extends DataSchemaNode> childNodes;
     private final QName qualifiedName;
-    private final Set<AugmentationSchemaNode> availableAugmentations;
+    private final Collection<? extends AugmentationSchemaNode> availableAugmentations;
 
-    public NodeContainerProxy(final QName qualifiedName, final Map<QName, DataSchemaNode> childNodes,
-                              final Set<AugmentationSchemaNode> availableAugmentations) {
+    public NodeContainerProxy(final QName qualifiedName, final Map<QName, ? extends DataSchemaNode> childNodes,
+                              final Collection<? extends AugmentationSchemaNode> availableAugmentations) {
         this.availableAugmentations = availableAugmentations;
         this.childNodes = requireNonNull(childNodes, "childNodes");
         this.qualifiedName = qualifiedName;
     }
 
-    public NodeContainerProxy(final QName qualifiedName, final Collection<DataSchemaNode> childNodes) {
+    public NodeContainerProxy(final QName qualifiedName, final Collection<? extends DataSchemaNode> childNodes) {
         this(qualifiedName, asMap(childNodes), Collections.emptySet());
     }
 
-    public NodeContainerProxy(final QName qualifiedName, final Collection<DataSchemaNode> childNodes,
-                              final Set<AugmentationSchemaNode> availableAugmentations) {
+    public NodeContainerProxy(final QName qualifiedName, final Collection<? extends DataSchemaNode> childNodes,
+                              final Collection<? extends AugmentationSchemaNode> availableAugmentations) {
         this(qualifiedName, asMap(childNodes), availableAugmentations);
     }
 
-    private static Map<QName, DataSchemaNode> asMap(final Collection<DataSchemaNode> childNodes) {
+    private static Map<QName, ? extends DataSchemaNode> asMap(final Collection<? extends DataSchemaNode> childNodes) {
         return Maps.uniqueIndex(childNodes, DataSchemaNode::getQName);
     }
 
     @Override
-    public Set<TypeDefinition<?>> getTypeDefinitions() {
+    public Collection<? extends TypeDefinition<?>> getTypeDefinitions() {
         return Collections.emptySet();
     }
 
     @Override
-    public Set<DataSchemaNode> getChildNodes() {
-        return Sets.newHashSet(childNodes.values());
+    public Collection<? extends DataSchemaNode> getChildNodes() {
+        return childNodes.values();
     }
 
     @Override
-    public Set<GroupingDefinition> getGroupings() {
+    public Collection<? extends GroupingDefinition> getGroupings() {
         return Collections.emptySet();
     }
 
@@ -82,7 +78,7 @@ public final class NodeContainerProxy implements ContainerSchemaNode {
     }
 
     @Override
-    public Set<UsesNode> getUses() {
+    public Collection<? extends UsesNode> getUses() {
         return Collections.emptySet();
     }
 
@@ -92,7 +88,7 @@ public final class NodeContainerProxy implements ContainerSchemaNode {
     }
 
     @Override
-    public Set<AugmentationSchemaNode> getAvailableAugmentations() {
+    public Collection<? extends AugmentationSchemaNode> getAvailableAugmentations() {
         return availableAugmentations;
     }
 
@@ -137,17 +133,12 @@ public final class NodeContainerProxy implements ContainerSchemaNode {
     }
 
     @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public Set<NotificationDefinition> getNotifications() {
+    public Collection<? extends NotificationDefinition> getNotifications() {
         return Collections.emptySet();
     }
 
     @Override
-    public Set<ActionDefinition> getActions() {
+    public Collection<? extends ActionDefinition> getActions() {
         return Collections.emptySet();
     }
 
@@ -157,7 +148,7 @@ public final class NodeContainerProxy implements ContainerSchemaNode {
     }
 
     @Override
-    public Collection<MustDefinition> getMustConstraints() {
+    public Collection<? extends MustDefinition> getMustConstraints() {
         return Collections.emptySet();
     }
 }
index fa2dbe01d59fb3052199e4fa6465ab01e8e52bbf..224db964924d84a5b5ded99eac4ee0f048304fe1 100644 (file)
@@ -107,7 +107,7 @@ abstract class StreamingContext<T extends PathArgument> implements Identifiable<
 
     private static ChoiceSchemaNode findChoice(final Iterable<ChoiceSchemaNode> choices, final QName child) {
         for (final ChoiceSchemaNode choice : choices) {
-            for (final CaseSchemaNode caze : choice.getCases().values()) {
+            for (final CaseSchemaNode caze : choice.getCases()) {
                 if (findChildSchemaNode(caze, child).isPresent()) {
                     return choice;
                 }
@@ -257,7 +257,7 @@ abstract class StreamingContext<T extends PathArgument> implements Identifiable<
             super(NodeIdentifier.create(schema.getQName()));
             final ImmutableMap.Builder<PathArgument, StreamingContext<?>> byArgBuilder = ImmutableMap.builder();
 
-            for (final CaseSchemaNode caze : schema.getCases().values()) {
+            for (final CaseSchemaNode caze : schema.getCases()) {
                 for (final DataSchemaNode cazeChild : caze.getChildNodes()) {
                     final StreamingContext<?> childOp = fromDataSchemaNode(cazeChild);
                     byArgBuilder.put(childOp.getIdentifier(), childOp);
index 04f3e3d8601be4e4029994c202e83ca06d3f1f40..6cf30edc891d3f5ffc220dca32f448f205b893ad 100644 (file)
@@ -18,7 +18,7 @@ import org.custommonkey.xmlunit.XMLUnit;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.$YangModuleInfoImpl;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState;
@@ -57,9 +57,8 @@ public class NetconfUtilTest {
 
     @Test
     public void testWriteNormalizedNode() throws Exception {
-        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-        moduleInfoBackedContext.addModuleInfos(Collections.singletonList($YangModuleInfoImpl.getInstance()));
-        final SchemaContext context = moduleInfoBackedContext.getSchemaContext();
+        final SchemaContext context = BindingRuntimeHelpers.createEffectiveModel(
+            Collections.singletonList($YangModuleInfoImpl.getInstance()));
         final LeafNode<?> username = Builders.leafBuilder()
                 .withNodeIdentifier(new NodeIdentifier(QName.create(Session.QNAME, "username")))
                 .withValue("admin")
index 0ba77e51c52d45609d1a132a02c5bcd2e75f13ef..69435f7b708c70f933fca4ea6fdf7109ea85592c 100644 (file)
@@ -13,7 +13,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 58f54729785133d4ba4e3b6cc3fb7b9e6346cb38..0f3580af0fae5f2137bcfd64a380c804db0b85f2 100644 (file)
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-binding-generator-impl</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal</groupId>
+      <artifactId>mdsal-binding-runtime-spi</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-dom-spi</artifactId>
index 6404842994fbf434d9aa2818b3d8c07a994e9e6d..297e5183a001f819f952ffeaa749e25d5a550231 100644 (file)
@@ -11,7 +11,7 @@ package org.opendaylight.netconf.sal.connect.api;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
 import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
  * Factory for netconf device schemas.
@@ -19,5 +19,5 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 public interface NetconfDeviceSchemasResolver {
     NetconfDeviceSchemas resolve(
             NetconfDeviceRpc deviceRpc, NetconfSessionPreferences remoteSessionCapabilities, RemoteDeviceId id,
-            SchemaContext schemaContext);
+            EffectiveModelContext schemaContext);
 }
index 60f4cf556f10d613092454df11295e57558157fb..9c57490407c3ccf99b75dabf87e574b3cd91ea20 100644 (file)
@@ -22,6 +22,7 @@ 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;
@@ -45,15 +46,18 @@ public final class DefaultSchemaResourceManager implements SchemaResourceManager
     @GuardedBy("this")
     private final Map<String, SchemaResourcesDTO> resources = new HashMap<>();
     private final @NonNull SchemaResourcesDTO defaultResources;
+    private final YangParserFactory parserFactory;
     private final String defaultSubdirectory;
     private final String rootDirectory;
 
     @Inject
-    public DefaultSchemaResourceManager() {
-        this("cache", "schema");
+    public DefaultSchemaResourceManager(final YangParserFactory parserFactory) {
+        this(parserFactory, "cache", "schema");
     }
 
-    public DefaultSchemaResourceManager(final String rootDirectory, final String defaultSubdirectory) {
+    public DefaultSchemaResourceManager(final YangParserFactory parserFactory, final String rootDirectory,
+            final String defaultSubdirectory) {
+        this.parserFactory = requireNonNull(parserFactory);
         this.rootDirectory = requireNonNull(rootDirectory);
         this.defaultSubdirectory = requireNonNull(defaultSubdirectory);
         this.defaultResources = createResources(defaultSubdirectory);
@@ -94,8 +98,7 @@ public final class DefaultSchemaResourceManager implements SchemaResourceManager
 
     private @NonNull SchemaResourcesDTO createResources(final String subdir) {
         // Setup the baseline empty registry
-        // FIXME: add YangParserFactory argument
-        final SharedSchemaRepository repository = new SharedSchemaRepository(subdir);
+        final SharedSchemaRepository repository = new SharedSchemaRepository(subdir, parserFactory);
 
         // Teach the registry how to transform YANG text to ASTSchemaSource internally
         repository.registerSchemaSourceListener(TextToASTTransformer.create(repository, repository));
index a516d4d3da0294cc89ee056cace0ca95a827ce44..0783ad6b64992e947651a2c2d2fd4b04cb775691 100644 (file)
@@ -30,14 +30,15 @@ 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.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.util.AbstractSchemaContextProvider;
+import org.opendaylight.yangtools.yang.model.util.AbstractEffectiveModelContextProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 // TODO: this should really come from rfc8528-data-util
-final class DeviceMountPointContext extends AbstractSchemaContextProvider implements Immutable, MountPointContext {
+final class DeviceMountPointContext extends AbstractEffectiveModelContextProvider implements Immutable,
+        MountPointContext {
     private static final Logger LOG = LoggerFactory.getLogger(DeviceMountPointContext.class);
     private static final NodeIdentifier MOUNT_POINT = NodeIdentifier.create(
         QName.create(SchemaMountConstants.RFC8528_MODULE, "mount-point").intern());
@@ -58,7 +59,7 @@ final class DeviceMountPointContext extends AbstractSchemaContextProvider implem
 
     private final ImmutableMap<MountPointIdentifier, NetconfMountPointContextFactory> mountPoints;
 
-    private DeviceMountPointContext(final SchemaContext schemaContext,
+    private DeviceMountPointContext(final EffectiveModelContext schemaContext,
             final Map<MountPointIdentifier, NetconfMountPointContextFactory> mountPoints) {
         super(schemaContext);
         this.mountPoints = ImmutableMap.copyOf(mountPoints);
@@ -71,7 +72,7 @@ final class DeviceMountPointContext extends AbstractSchemaContextProvider implem
             return emptyContext;
         }
 
-        final SchemaContext schemaContext = emptyContext.getSchemaContext();
+        final EffectiveModelContext schemaContext = emptyContext.getEffectiveModelContext();
         final DataContainerChild<?, ?> mountPoint = optMountPoint.get();
         checkArgument(mountPoint instanceof MapNode, "mount-point list %s is not a MapNode", mountPoint);
 
@@ -83,7 +84,7 @@ final class DeviceMountPointContext extends AbstractSchemaContextProvider implem
                 checkArgument(value instanceof String, "Unexpected module leaf value %s", value);
                 return (String) value;
             }).orElseThrow(() -> new IllegalArgumentException("Mount module missing in " + entry));
-            final Iterator<Module> it = schemaContext.findModules(moduleName).iterator();
+            final Iterator<? extends Module> it = schemaContext.findModules(moduleName).iterator();
             checkArgument(it.hasNext(), "Failed to find a module named %s", moduleName);
             final QNameModule module = it.next().getQNameModule();
 
index 771d5a997b30803c688f2afe987fc719143fa8ee..b7080c6a445213edcadd051981aaa4abc6f2d79d 100644 (file)
@@ -48,7 +48,7 @@ final class DeviceSourcesResolver implements Callable<DeviceSources> {
     @Override
     public DeviceSources call() {
         final NetconfDeviceSchemas availableSchemas = stateSchemasResolver.resolve(deviceRpc, remoteSessionCapabilities,
-            id, baseSchema.getSchemaContext());
+            id, baseSchema.getEffectiveModelContext());
         LOG.debug("{}: Schemas exposed by ietf-netconf-monitoring: {}", id,
             availableSchemas.getAvailableYangSchemasQNames());
 
index 8b0c3ebf804a05278d4f6141454fc3e9a9807e39..ae21d80753688ccc2d29d90b479f0ffcc7a0d422 100644 (file)
@@ -42,7 +42,7 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.dom.DOMSource;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.netconf.sal.connect.api.NetconfDeviceSchemas;
 import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
@@ -69,7 +69,7 @@ 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.SchemaContext;
+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.slf4j.Logger;
@@ -87,14 +87,8 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas {
 
     private static final Logger LOG = LoggerFactory.getLogger(LibraryModulesSchemas.class);
     private static final Pattern DATE_PATTERN = Pattern.compile("(\\d{4}-\\d{2}-\\d{2})");
-    private static final SchemaContext LIBRARY_CONTEXT;
-
-    static {
-        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-        moduleInfoBackedContext.registerModuleInfo(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang
-                .library.rev160621.$YangModuleInfoImpl.getInstance());
-        LIBRARY_CONTEXT = moduleInfoBackedContext.tryToCreateSchemaContext().get();
-    }
+    private static final EffectiveModelContext LIBRARY_CONTEXT = BindingRuntimeHelpers.createEffectiveModel(
+        ModulesState.class);
 
     private static final NodeIdentifier MODULES_STATE_NID = NodeIdentifier.create(ModulesState.QNAME);
     private static final NodeIdentifier MODULE_NID = NodeIdentifier.create(Module.QNAME);
index 917638add44d485fa5c7980a9166a8c3b9e5ddb4..0c589810ca0b3d22d9b847e706a2be25bd0cef1b 100644 (file)
@@ -65,9 +65,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory;
 import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactory;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
@@ -95,7 +95,7 @@ public class NetconfDevice
         NodeIdentifier.create(RFC8528_SCHEMA_MOUNTS_QNAME));
 
     protected final RemoteDeviceId id;
-    protected final SchemaContextFactory schemaContextFactory;
+    protected final EffectiveModelContextFactory schemaContextFactory;
     protected final SchemaSourceRegistry schemaRegistry;
     protected final SchemaRepository schemaRepository;
 
@@ -167,7 +167,7 @@ public class NetconfDevice
         }
 
         // Set up the SchemaContext for the device
-        final ListenableFuture<SchemaContext> futureSchema = Futures.transformAsync(sourceResolverFuture,
+        final ListenableFuture<EffectiveModelContext> futureSchema = Futures.transformAsync(sourceResolverFuture,
             deviceSources -> assembleSchemaContext(deviceSources, remoteSessionCapabilities), processingExecutor);
 
         // Potentially acquire mount point list and interpret it
@@ -295,7 +295,7 @@ public class NetconfDevice
 
     @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",
             justification = "https://github.com/spotbugs/spotbugs/issues/811")
-    private ListenableFuture<SchemaContext> assembleSchemaContext(final DeviceSources deviceSources,
+    private ListenableFuture<EffectiveModelContext> assembleSchemaContext(final DeviceSources deviceSources,
             final NetconfSessionPreferences remoteSessionCapabilities) {
         LOG.debug("{}: Resolved device sources to {}", id, deviceSources);
         final SchemaSourceProvider<YangTextSchemaSource> yangProvider = deviceSources.getSourceProvider();
@@ -308,7 +308,7 @@ public class NetconfDevice
         return new SchemaSetup(deviceSources, remoteSessionCapabilities).startResolution();
     }
 
-    private ListenableFuture<MountPointContext> createMountPointContext(final SchemaContext schemaContext,
+    private ListenableFuture<MountPointContext> createMountPointContext(final EffectiveModelContext schemaContext,
             final BaseSchema baseSchema, final NetconfDeviceCommunicator listener) {
         final MountPointContext emptyContext = new EmptyMountPointContext(schemaContext);
         if (!schemaContext.findModule(SchemaMountConstants.RFC8528_MODULE).isPresent()) {
@@ -381,12 +381,12 @@ public class NetconfDevice
     public static class SchemaResourcesDTO {
         private final SchemaSourceRegistry schemaRegistry;
         private final SchemaRepository schemaRepository;
-        private final SchemaContextFactory schemaContextFactory;
+        private final EffectiveModelContextFactory schemaContextFactory;
         private final NetconfDeviceSchemasResolver stateSchemasResolver;
 
         public SchemaResourcesDTO(final SchemaSourceRegistry schemaRegistry,
                                   final SchemaRepository schemaRepository,
-                                  final SchemaContextFactory schemaContextFactory,
+                                  final EffectiveModelContextFactory schemaContextFactory,
                                   final NetconfDeviceSchemasResolver deviceSchemasResolver) {
             this.schemaRegistry = requireNonNull(schemaRegistry);
             this.schemaRepository = requireNonNull(schemaRepository);
@@ -402,7 +402,7 @@ public class NetconfDevice
             return schemaRepository;
         }
 
-        public SchemaContextFactory getSchemaContextFactory() {
+        public EffectiveModelContextFactory getSchemaContextFactory() {
             return schemaContextFactory;
         }
 
@@ -427,8 +427,8 @@ public class NetconfDevice
     /**
      * Schema builder that tries to build schema context from provided sources or biggest subset of it.
      */
-    private final class SchemaSetup implements FutureCallback<SchemaContext> {
-        private final SettableFuture<SchemaContext> resultFuture = SettableFuture.create();
+    private final class SchemaSetup implements FutureCallback<EffectiveModelContext> {
+        private final SettableFuture<EffectiveModelContext> resultFuture = SettableFuture.create();
 
         private final DeviceSources deviceSources;
         private final NetconfSessionPreferences remoteSessionCapabilities;
@@ -449,13 +449,13 @@ public class NetconfDevice
             requiredSources.removeAll(missingSources);
         }
 
-        ListenableFuture<SchemaContext> startResolution() {
+        ListenableFuture<EffectiveModelContext> startResolution() {
             trySetupSchema();
             return resultFuture;
         }
 
         @Override
-        public void onSuccess(final SchemaContext result) {
+        public void onSuccess(final EffectiveModelContext result) {
             LOG.debug("{}: Schema context built successfully from {}", id, requiredSources);
 
             final Collection<QName> filteredQNames = Sets.difference(deviceSources.getRequiredSourcesQName(),
@@ -497,7 +497,7 @@ public class NetconfDevice
             if (!requiredSources.isEmpty()) {
                 // Initiate async resolution, drive it back based on the result
                 LOG.trace("{}: Trying to build schema context from {}", id, requiredSources);
-                Futures.addCallback(schemaContextFactory.createSchemaContext(requiredSources), this,
+                Futures.addCallback(schemaContextFactory.createEffectiveModelContext(requiredSources), this,
                     MoreExecutors.directExecutor());
             } else {
                 LOG.debug("{}: no more sources for schema context", id);
index 1d8686cfb6c26b6c71b4476c72f5a6cca424cd56..6b314a4750f82633ac315d451263a3e8a0b45d6a 100644 (file)
@@ -13,14 +13,14 @@ 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.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
 
 // TODO: this should really come from mdsal-yanglib-rfc8525
 final class NetconfMountPointContextFactory implements MountPointContextFactory {
     private final MountPointContext mountPoint;
 
-    NetconfMountPointContextFactory(final SchemaContext schemaContext) {
+    NetconfMountPointContextFactory(final EffectiveModelContext schemaContext) {
         mountPoint = new EmptyMountPointContext(schemaContext);
     }
 
index 5c42b212db6dffd5c541926bc322aee3f02e9382..543e19762ac53407add28a8e36b0ca06443ad42f 100644 (file)
@@ -50,7 +50,7 @@ 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.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.xml.sax.SAXException;
@@ -93,7 +93,7 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas {
      */
     static NetconfStateSchemas create(final DOMRpcService deviceRpc,
             final NetconfSessionPreferences remoteSessionCapabilities, final RemoteDeviceId id,
-            final SchemaContext schemaContext) {
+            final EffectiveModelContext schemaContext) {
         if (!remoteSessionCapabilities.isMonitoringSupported()) {
             // TODO - need to search for get-schema support, not just ietf-netconf-monitoring support
             // issue might be a deviation to ietf-netconf-monitoring where get-schema is unsupported...
@@ -159,7 +159,7 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas {
     }
 
     private static Optional<? extends NormalizedNode<?, ?>> findSchemasNode(final NormalizedNode<?, ?> result,
-            final SchemaContext schemaContext) {
+            final EffectiveModelContext schemaContext) {
         if (result == null) {
             return Optional.empty();
         }
index f7c42ba360fb0681cabef36d935f543eb0c2c383..63deb8ed6fb035a9db003e8b570751980c8d9d9d 100644 (file)
@@ -14,7 +14,7 @@ import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
  * Default implementation resolving schemas QNames from netconf-state or from modules-state.
@@ -25,7 +25,7 @@ public final class NetconfStateSchemasResolverImpl implements NetconfDeviceSchem
     @Override
     public NetconfDeviceSchemas resolve(final NetconfDeviceRpc deviceRpc,
             final NetconfSessionPreferences remoteSessionCapabilities,
-            final RemoteDeviceId id, final SchemaContext schemaContext) {
+            final RemoteDeviceId id, final EffectiveModelContext schemaContext) {
         if (remoteSessionCapabilities.isMonitoringSupported()) {
             return NetconfStateSchemas.create(deviceRpc, remoteSessionCapabilities, id, schemaContext);
         }
index 755745650ae2375d4bda7863094abb478561cee4..e4e89572ec6b63c41f0fa2fb8fc72a0a21bfc47c 100644 (file)
@@ -288,11 +288,11 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler<NetconfSess
 
     private static final class ResponseWaiting implements Runnable {
 
-        private final ListenableFuture<DOMRpcResult> rpcResultFuture;
+        private final ListenableFuture<? extends DOMRpcResult> rpcResultFuture;
         private final ResponseWaitingScheduler responseWaitingScheduler;
 
         ResponseWaiting(final ResponseWaitingScheduler responseWaitingScheduler,
-                final ListenableFuture<DOMRpcResult> rpcResultFuture) {
+                final ListenableFuture<? extends DOMRpcResult> rpcResultFuture) {
             this.responseWaitingScheduler = responseWaitingScheduler;
             this.rpcResultFuture = rpcResultFuture;
         }
@@ -324,11 +324,11 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler<NetconfSess
      * it.
      */
     private static final class RequestTimeoutTask implements Runnable {
-        private final ListenableFuture<DOMRpcResult> rpcResultFuture;
+        private final ListenableFuture<? extends DOMRpcResult> rpcResultFuture;
         private final ResponseWaiting responseWaiting;
 
-        RequestTimeoutTask(final ListenableFuture<DOMRpcResult> rpcResultFuture,
-            final ResponseWaiting responseWaiting) {
+        RequestTimeoutTask(final ListenableFuture<? extends DOMRpcResult> rpcResultFuture,
+                final ResponseWaiting responseWaiting) {
             this.rpcResultFuture = rpcResultFuture;
             this.responseWaiting = responseWaiting;
         }
@@ -349,7 +349,6 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler<NetconfSess
      * request-timeout-task to each RPC invocation.
      */
     public static final class KeepaliveDOMRpcService implements DOMRpcService {
-
         private final DOMRpcService deviceRpc;
         private final ResetKeepalive resetKeepaliveTask;
         private final long defaultRequestTimeoutMillis;
@@ -371,8 +370,9 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler<NetconfSess
         }
 
         @Override
-        public ListenableFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
-            final ListenableFuture<DOMRpcResult> rpcResultFuture = deviceRpc.invokeRpc(type, input);
+        public ListenableFuture<? extends DOMRpcResult> invokeRpc(final SchemaPath type,
+                final NormalizedNode<?, ?> input) {
+            final ListenableFuture<? extends DOMRpcResult> rpcResultFuture = deviceRpc.invokeRpc(type, input);
             final ResponseWaiting responseWaiting = new ResponseWaiting(responseWaitingScheduler, rpcResultFuture);
             responseWaiting.start();
             Futures.addCallback(rpcResultFuture, resetKeepaliveTask, MoreExecutors.directExecutor());
index 19de2565df65ff525b9ec31882d376f4a0bac3b6..97f005fd25f37b6545bc5936ea335a1aa7eec858 100644 (file)
@@ -35,7 +35,6 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
  * Invokes RPC by sending netconf message via listener. Also transforms result from NetconfMessage to CompositeNode.
  */
 public final class NetconfDeviceRpc implements DOMRpcService {
-
     private final RemoteDeviceCommunicator<NetconfMessage> communicator;
     private final MessageTransformer<NetconfMessage> transformer;
     private final SchemaContext schemaContext;
index 91ef01eff41e72bc79ddc4e920698d100818bba7..ab214400b6071cad5ca880ef714ee178d69ceb03 100644 (file)
@@ -35,7 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,7 +74,7 @@ public final class NetconfDeviceSalFacade implements AutoCloseable, RemoteDevice
     public synchronized void onDeviceConnected(final MountPointContext mountContext,
                                                final NetconfSessionPreferences netconfSessionPreferences,
                                                final DOMRpcService deviceRpc, final DOMActionService deviceAction) {
-        final SchemaContext schemaContext = mountContext.getSchemaContext();
+        final EffectiveModelContext schemaContext = mountContext.getEffectiveModelContext();
         final NetconfDeviceDataBroker netconfDeviceDataBroker =
                 new NetconfDeviceDataBroker(id, mountContext, deviceRpc, netconfSessionPreferences);
         registerLockListener(netconfDeviceDataBroker);
index ead5348311672a507919a2fd0e645bc113fc75a3..5dd2418603f5899444939893cc3caaf7dc5a87e6 100644 (file)
@@ -25,7 +25,7 @@ import org.opendaylight.mdsal.dom.api.DOMNotificationService;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -117,13 +117,13 @@ public class NetconfDeviceSalProvider implements AutoCloseable {
             this.id = requireNonNull(id);
         }
 
-        public void onTopologyDeviceConnected(final SchemaContext initialCtx,
+        public void onTopologyDeviceConnected(final EffectiveModelContext initialCtx,
                 final DOMDataBroker broker, final DOMRpcService rpc,
                 final NetconfDeviceNotificationService newNotificationService) {
             onTopologyDeviceConnected(initialCtx, broker, rpc, newNotificationService, null);
         }
 
-        public synchronized void onTopologyDeviceConnected(final SchemaContext initialCtx,
+        public synchronized void onTopologyDeviceConnected(final EffectiveModelContext initialCtx,
                 final DOMDataBroker broker, final DOMRpcService rpc,
                 final NetconfDeviceNotificationService newNotificationService, final DOMActionService deviceAction) {
             requireNonNull(mountService, "Closed");
index 208608744e458419987c724f1a5195f6dc265cdd..afbc30970fdc1536e68e55e197c2ceb0747065fa 100644 (file)
@@ -78,18 +78,16 @@ public class NetconfDeviceTopologyAdapter implements AutoCloseable {
 
         createNetworkTopologyIfNotPresent(writeTx);
 
-        final InstanceIdentifier<Node> path = id.getTopologyBindingPath();
-        final NodeBuilder nodeBuilder = getNodeIdBuilder(id);
-        NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder();
-        netconfNodeBuilder.setConnectionStatus(ConnectionStatus.Connecting);
-        netconfNodeBuilder.setHost(id.getHost());
-        netconfNodeBuilder.setPort(new PortNumber(Uint16.valueOf(id.getAddress().getPort())));
-        nodeBuilder.addAugmentation(NetconfNode.class, netconfNodeBuilder.build());
-        Node node = nodeBuilder.build();
+        final Node node = getNodeIdBuilder(id)
+                .addAugmentation(new NetconfNodeBuilder()
+                    .setConnectionStatus(ConnectionStatus.Connecting)
+                    .setHost(id.getHost())
+                    .setPort(new PortNumber(Uint16.valueOf(id.getAddress().getPort()))).build())
+                .build();
 
         LOG.trace("{}: Init device state transaction {} putting if absent operational data started.",
                 id, writeTx.getIdentifier());
-        writeTx.put(LogicalDatastoreType.OPERATIONAL, path, node);
+        writeTx.put(LogicalDatastoreType.OPERATIONAL, id.getTopologyBindingPath(), node);
         LOG.trace("{}: Init device state transaction {} putting operational data ended.", id, writeTx.getIdentifier());
         LOG.trace("{}: Init device state transaction {} putting if absent config data started.",
                 id, writeTx.getIdentifier());
@@ -110,7 +108,7 @@ public class NetconfDeviceTopologyAdapter implements AutoCloseable {
         final WriteTransaction writeTx = txChain.newWriteOnlyTransaction();
         LOG.trace("{}: Update device state transaction {} merging operational data started.",
                 id, writeTx.getIdentifier());
-        writeTx.put(dsType, id.getTopologyBindingPath().augmentation(NetconfNode.class), data, true);
+        writeTx.mergeParentStructurePut(dsType, id.getTopologyBindingPath().augmentation(NetconfNode.class), data);
         LOG.trace("{}: Update device state transaction {} merging operational data ended.",
                 id, writeTx.getIdentifier());
 
@@ -129,8 +127,8 @@ public class NetconfDeviceTopologyAdapter implements AutoCloseable {
         final WriteTransaction writeTx = txChain.newWriteOnlyTransaction();
         LOG.trace("{}: Update device state transaction {} merging operational data started.",
                 id, writeTx.getIdentifier());
-        writeTx.put(LogicalDatastoreType.OPERATIONAL,
-                id.getTopologyBindingPath().augmentation(NetconfNode.class), data, true);
+        writeTx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL,
+                id.getTopologyBindingPath().augmentation(NetconfNode.class), data);
         LOG.trace("{}: Update device state transaction {} merging operational data ended.",
                 id, writeTx.getIdentifier());
 
@@ -149,8 +147,8 @@ public class NetconfDeviceTopologyAdapter implements AutoCloseable {
         LOG.trace(
                 "{}: Setting device state as failed {} putting operational data started.",
                 id, writeTx.getIdentifier());
-        writeTx.put(LogicalDatastoreType.OPERATIONAL,
-                id.getTopologyBindingPath().augmentation(NetconfNode.class), data, true);
+        writeTx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL,
+                id.getTopologyBindingPath().augmentation(NetconfNode.class), data);
         LOG.trace(
                 "{}: Setting device state as failed {} putting operational data ended.",
                 id, writeTx.getIdentifier());
index e4675a870793bce2e8a385b4643a87a822cd6288..5adb6498c8e439812430d08bda25a7d02f962ef4 100644 (file)
@@ -156,7 +156,8 @@ public class NetconfKeystoreAdapter implements ClusteredDataTreeChangeListener<K
 
                     pairs.clear();
                     if (dataAfter != null) {
-                        dataAfter.getKeyCredential().forEach(pair -> pairs.put(pair.key().getKeyId(), pair));
+                        dataAfter.nonnullKeyCredential().values()
+                            .forEach(pair -> pairs.put(pair.key().getKeyId(), pair));
                     }
 
                 } else if (changedChild.getDataType().equals(PrivateKey.class)) {
index 874ad32ff2e77cba99e0b9afdba558c30c06c2d8..3c3c08bf6c908fdac10da42ee63a7e05e05510c9 100644 (file)
@@ -49,7 +49,7 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction {
     protected final RemoteDeviceId id;
     protected final NetconfBaseOps netOps;
     protected final boolean rollbackSupport;
-    protected final List<ListenableFuture<DOMRpcResult>> resultsFutures = new ArrayList<>();
+    protected final List<ListenableFuture<? extends DOMRpcResult>> resultsFutures = new ArrayList<>();
     private final List<TxListener> listeners = new CopyOnWriteArrayList<>();
     // Allow commit to be called only once
     protected volatile boolean finished = false;
index ea79ccd4185d768972e667bd9f116188b7e8cb0e..5cfdd213f5b63a4ad196529ee5947cb1d272a575 100644 (file)
@@ -109,8 +109,8 @@ public class WriteRunningTx extends AbstractWriteTx {
             this.defaultOperation = defaultOperation;
         }
 
-        ListenableFuture<DOMRpcResult> execute(final RemoteDeviceId id, final NetconfBaseOps netOps,
-                                               final boolean rollbackSupport) {
+        ListenableFuture<? extends DOMRpcResult> execute(final RemoteDeviceId id, final NetconfBaseOps netOps,
+                                                         final boolean rollbackSupport) {
             final NetconfRpcFutureCallback editConfigCallback = new NetconfRpcFutureCallback("Edit running", id);
             if (defaultOperation.isPresent()) {
                 return netOps.editConfigRunning(editConfigCallback, editStructure, defaultOperation.get(),
index b6eed98eb6c1d22d4d9e6cf81686a2f9798bfbe4..7a7772871f9ac6c55604bc7b497cbf84b5d0f3dd 100644 (file)
@@ -102,7 +102,7 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource
         final String moduleName = sourceIdentifier.getName();
 
         final Optional<String> revision = sourceIdentifier.getRevision().map(Revision::toString);
-        final NormalizedNode<?, ?> getSchemaRequest = createGetSchemaRequest(moduleName, revision);
+        final ContainerNode getSchemaRequest = createGetSchemaRequest(moduleName, revision);
         LOG.trace("{}: Loading YANG schema source for {}:{}", id, moduleName, revision);
         return Futures.transform(
             rpc.invokeRpc(SchemaPath.create(true, NetconfMessageTransformUtil.GET_SCHEMA_QNAME), getSchemaRequest),
index 224ac0d88f29a25efe83a1dcd6b21bfe4e4e3c8d..6cec8afe814caf4ee428d7d6d2b2bfcb434e9497 100644 (file)
@@ -39,7 +39,7 @@ import org.w3c.dom.Element;
  */
 public class BaseRpcSchemalessTransformer implements MessageTransformer<NetconfMessage> {
 
-    private static final Map<QName, RpcDefinition> MAPPED_RPCS = BaseSchema.BASE_NETCONF_CTX.getMappedRpcs();
+    private static final Map<QName, ? extends RpcDefinition> MAPPED_RPCS = BaseSchema.BASE_NETCONF_CTX.getMappedRpcs();
     private static final SchemaContext SCHEMA_CONTEXT = BaseSchema.BASE_NETCONF_CTX.getSchemaContext();
 
     private final MessageCounter counter;
index 1c381b3b60a469582644d0f109952c9b9ec4a3f5..9a4c8e6a699170e4e8d1a6e7d5b39fa64e0c3984 100644 (file)
@@ -11,15 +11,15 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import java.util.Arrays;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
 
-public enum BaseSchema implements SchemaContextProvider {
+public enum BaseSchema implements EffectiveModelContextProvider {
     BASE_NETCONF_CTX(
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601
             .$YangModuleInfoImpl.getInstance(),
@@ -37,17 +37,15 @@ public enum BaseSchema implements SchemaContextProvider {
             .$YangModuleInfoImpl.getInstance()
     );
 
-    private final @NonNull ImmutableMap<QName, RpcDefinition> mappedRpcs;
+    private final @NonNull ImmutableMap<QName, ? extends RpcDefinition> mappedRpcs;
     private final @NonNull EmptyMountPointContext mountContext;
 
     BaseSchema(final YangModuleInfo... modules) {
-        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-        moduleInfoBackedContext.addModuleInfos(Arrays.asList(modules));
-        mountContext = new EmptyMountPointContext(moduleInfoBackedContext.tryToCreateSchemaContext().get());
+        mountContext = new EmptyMountPointContext(BindingRuntimeHelpers.createEffectiveModel(Arrays.asList(modules)));
         mappedRpcs = Maps.uniqueIndex(getSchemaContext().getOperations(), RpcDefinition::getQName);
     }
 
-    @NonNull ImmutableMap<QName, RpcDefinition> getMappedRpcs() {
+    @NonNull ImmutableMap<QName, ? extends RpcDefinition> getMappedRpcs() {
         return mappedRpcs;
     }
 
@@ -56,7 +54,7 @@ public enum BaseSchema implements SchemaContextProvider {
     }
 
     @Override
-    public @NonNull SchemaContext getSchemaContext() {
-        return mountContext.getSchemaContext();
+    public @NonNull EffectiveModelContext getEffectiveModelContext() {
+        return mountContext.getEffectiveModelContext();
     }
 }
index 5974875ef7551708cc9a13f7ebad038e0f813b11..8f1353d6ccdde6cb7af645d6b0c08cc539d22781 100644 (file)
@@ -78,7 +78,6 @@ import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
 public class NetconfMessageTransformer implements MessageTransformer<NetconfMessage> {
-
     private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageTransformer.class);
 
     private static final ImmutableSet<URI> BASE_OR_NOTIFICATION_NS = ImmutableSet.of(
@@ -90,8 +89,8 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
     private final DataSchemaContextTree contextTree;
     private final BaseSchema baseSchema;
     private final MessageCounter counter;
-    private final ImmutableMap<QName, RpcDefinition> mappedRpcs;
-    private final Multimap<QName, NotificationDefinition> mappedNotifications;
+    private final ImmutableMap<QName, ? extends RpcDefinition> mappedRpcs;
+    private final Multimap<QName, ? extends NotificationDefinition> mappedNotifications;
     private final boolean strictParsing;
     private final ImmutableMap<SchemaPath, ActionDefinition> actions;
 
@@ -133,7 +132,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
                 findAction(innerDataSchemaNode, builder);
             }
         } else if (dataSchemaNode instanceof ChoiceSchemaNode) {
-            for (CaseSchemaNode caze : ((ChoiceSchemaNode) dataSchemaNode).getCases().values()) {
+            for (CaseSchemaNode caze : ((ChoiceSchemaNode) dataSchemaNode).getCases()) {
                 findAction(caze, builder);
             }
         }
@@ -150,7 +149,8 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
             throw new IllegalArgumentException(
                     "Unable to parse notification " + message + ", cannot find namespace", e);
         }
-        final Collection<NotificationDefinition> notificationDefinitions = mappedNotifications.get(notificationNoRev);
+        final Collection<? extends NotificationDefinition> notificationDefinitions =
+                mappedNotifications.get(notificationNoRev);
         Preconditions.checkArgument(notificationDefinitions.size() > 0,
                 "Unable to parse notification %s, unknown notification. Available notifications: %s",
                 notificationDefinitions, mappedNotifications.keySet());
@@ -177,7 +177,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
     }
 
     private static NotificationDefinition getMostRecentNotification(
-            final Collection<NotificationDefinition> notificationDefinitions) {
+            final Collection<? extends NotificationDefinition> notificationDefinitions) {
         return Collections.max(notificationDefinitions, (o1, o2) ->
             Revision.compare(o1.getQName().getRevision(), o2.getQName().getRevision()));
     }
@@ -191,7 +191,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
         // and also check if the device exposed model for base netconf.
         // If no, use pre built base netconf operations model
         final boolean needToUseBaseCtx = mappedRpcs.get(rpcQName) == null && isBaseOrNotificationRpc(rpcQName);
-        final ImmutableMap<QName, RpcDefinition> currentMappedRpcs;
+        final ImmutableMap<QName, ? extends RpcDefinition> currentMappedRpcs;
         if (needToUseBaseCtx) {
             currentMappedRpcs = baseSchema.getMappedRpcs();
         } else {
@@ -280,7 +280,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
             // Determine whether a base netconf operation is being invoked
             // and also check if the device exposed model for base netconf.
             // If no, use pre built base netconf operations model
-            final ImmutableMap<QName, RpcDefinition> currentMappedRpcs;
+            final ImmutableMap<QName, ? extends RpcDefinition> currentMappedRpcs;
             if (mappedRpcs.get(rpcQName) == null && isBaseOrNotificationRpc(rpcQName)) {
                 currentMappedRpcs = baseSchema.getMappedRpcs();
             } else {
index 7564e755e72e4c32c1fb1565921fd7d3ec0f39aa..8994b7f4421a89c84060d848b8d65a6e74007ee5 100644 (file)
@@ -9,8 +9,10 @@ package org.opendaylight.netconf.sal.connect.netconf.util;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
+import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.COMMIT_RPC_CONTENT;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.EDIT_CONTENT_NODEID;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_CANDIDATE_QNAME;
+import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_COMMIT_PATH;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_COPY_CONFIG_NODEID;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_COPY_CONFIG_PATH;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_DEFAULT_OPERATION_NODEID;
@@ -30,6 +32,7 @@ import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTr
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_UNLOCK_NODEID;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_UNLOCK_PATH;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_VALIDATE_NODEID;
+import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_VALIDATE_PATH;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.ROLLBACK_ON_ERROR_OPTION;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.toFilterStructure;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.toId;
@@ -53,13 +56,14 @@ import org.opendaylight.yangtools.yang.common.Empty;
 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.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.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.builder.api.DataContainerNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
  * Provides base operations for netconf e.g. get, get-config, edit-config, (un)lock, commit etc.
@@ -74,7 +78,7 @@ public final class NetconfBaseOps {
     private final RpcStructureTransformer transformer;
 
     @Deprecated
-    public NetconfBaseOps(final DOMRpcService rpc, final SchemaContext schemaContext) {
+    public NetconfBaseOps(final DOMRpcService rpc, final EffectiveModelContext schemaContext) {
         this(rpc, new EmptyMountPointContext(schemaContext));
     }
 
@@ -90,106 +94,112 @@ public final class NetconfBaseOps {
         }
     }
 
-    public ListenableFuture<DOMRpcResult> lock(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
+    public ListenableFuture<? extends DOMRpcResult> lock(final FutureCallback<DOMRpcResult> callback,
+            final QName datastore) {
         requireNonNull(callback);
         requireNonNull(datastore);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH, getLockContent(datastore));
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
+                getLockContent(datastore));
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> lockCandidate(final FutureCallback<DOMRpcResult> callback) {
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
+    public ListenableFuture<? extends DOMRpcResult> lockCandidate(final FutureCallback<DOMRpcResult> callback) {
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
             getLockContent(NETCONF_CANDIDATE_QNAME));
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> lockRunning(final FutureCallback<DOMRpcResult> callback) {
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
+    public ListenableFuture<? extends DOMRpcResult> lockRunning(final FutureCallback<DOMRpcResult> callback) {
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
             getLockContent(NETCONF_RUNNING_QNAME));
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> unlock(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
+    public ListenableFuture<? extends DOMRpcResult> unlock(final FutureCallback<DOMRpcResult> callback,
+            final QName datastore) {
         requireNonNull(callback);
         requireNonNull(datastore);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, getUnLockContent(datastore));
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
+                getUnLockContent(datastore));
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> unlockRunning(final FutureCallback<DOMRpcResult> callback) {
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
+    public ListenableFuture<? extends DOMRpcResult> unlockRunning(final FutureCallback<DOMRpcResult> callback) {
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
             getUnLockContent(NETCONF_RUNNING_QNAME));
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> unlockCandidate(final FutureCallback<DOMRpcResult> callback) {
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
+    public ListenableFuture<? extends DOMRpcResult> unlockCandidate(final FutureCallback<DOMRpcResult> callback) {
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
             getUnLockContent(NETCONF_CANDIDATE_QNAME));
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> discardChanges(final FutureCallback<DOMRpcResult> callback) {
+    public ListenableFuture<? extends DOMRpcResult> discardChanges(final FutureCallback<DOMRpcResult> callback) {
         requireNonNull(callback);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_DISCARD_CHANGES_PATH, null);
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_DISCARD_CHANGES_PATH, null);
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> commit(final FutureCallback<DOMRpcResult> callback) {
+    public ListenableFuture<? extends DOMRpcResult> commit(final FutureCallback<DOMRpcResult> callback) {
         requireNonNull(callback);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_COMMIT_PATH,
-            NetconfMessageTransformUtil.COMMIT_RPC_CONTENT);
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_COMMIT_PATH, COMMIT_RPC_CONTENT);
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> validate(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
+    public ListenableFuture<? extends DOMRpcResult> validate(final FutureCallback<DOMRpcResult> callback,
+            final QName datastore) {
         requireNonNull(callback);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_VALIDATE_PATH,
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_VALIDATE_PATH,
             getValidateContent(requireNonNull(datastore)));
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> validateCandidate(final FutureCallback<DOMRpcResult> callback) {
+    public ListenableFuture<? extends DOMRpcResult> validateCandidate(final FutureCallback<DOMRpcResult> callback) {
         return validate(callback, NETCONF_CANDIDATE_QNAME);
     }
 
-    public ListenableFuture<DOMRpcResult> validateRunning(final FutureCallback<DOMRpcResult> callback) {
+    public ListenableFuture<? extends DOMRpcResult> validateRunning(final FutureCallback<DOMRpcResult> callback) {
         return validate(callback, NETCONF_RUNNING_QNAME);
     }
 
-    public ListenableFuture<DOMRpcResult> copyConfig(final FutureCallback<DOMRpcResult> callback,
-                                                     final QName source, final QName target) {
+    public ListenableFuture<? extends DOMRpcResult> copyConfig(final FutureCallback<DOMRpcResult> callback,
+                                                               final QName source, final QName target) {
         requireNonNull(callback);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_COPY_CONFIG_PATH,
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_COPY_CONFIG_PATH,
             getCopyConfigContent(requireNonNull(source), requireNonNull(target)));
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public ListenableFuture<DOMRpcResult> copyRunningToCandidate(final FutureCallback<DOMRpcResult> callback) {
+    public ListenableFuture<? extends DOMRpcResult> copyRunningToCandidate(
+            final FutureCallback<DOMRpcResult> callback) {
         return copyConfig(callback, NETCONF_RUNNING_QNAME, NETCONF_CANDIDATE_QNAME);
     }
 
-    public ListenableFuture<DOMRpcResult> getConfig(final FutureCallback<DOMRpcResult> callback, final QName datastore,
-                                                    final Optional<YangInstanceIdentifier> filterPath) {
+    public ListenableFuture<? extends DOMRpcResult> getConfig(final FutureCallback<DOMRpcResult> callback,
+                                                              final QName datastore,
+                                                              final Optional<YangInstanceIdentifier> filterPath) {
         requireNonNull(callback);
         requireNonNull(datastore);
 
-        final ListenableFuture<DOMRpcResult> future;
+        final ListenableFuture<? extends DOMRpcResult> future;
         if (isFilterPresent(filterPath)) {
             final DataContainerChild<?, ?> node = transformer.toFilterStructure(filterPath.get());
             future = rpc.invokeRpc(NETCONF_GET_CONFIG_PATH,
@@ -205,45 +215,43 @@ public final class NetconfBaseOps {
 
     public ListenableFuture<Optional<NormalizedNode<?, ?>>> getConfigRunningData(
             final FutureCallback<DOMRpcResult> callback, final Optional<YangInstanceIdentifier> filterPath) {
-        final ListenableFuture<DOMRpcResult> configRunning = getConfigRunning(callback, filterPath);
-        return extractData(filterPath, configRunning);
+        return extractData(filterPath, getConfigRunning(callback, filterPath));
     }
 
     public ListenableFuture<Optional<NormalizedNode<?, ?>>> getData(final FutureCallback<DOMRpcResult> callback,
                                                                     final Optional<YangInstanceIdentifier> filterPath) {
-        final ListenableFuture<DOMRpcResult> configRunning = get(callback, filterPath);
-        return extractData(filterPath, configRunning);
+        return extractData(filterPath, get(callback, filterPath));
     }
 
     private ListenableFuture<Optional<NormalizedNode<?, ?>>> extractData(
-            final Optional<YangInstanceIdentifier> path, final ListenableFuture<DOMRpcResult> configRunning) {
+            final Optional<YangInstanceIdentifier> path, final ListenableFuture<? extends DOMRpcResult> configRunning) {
         return Futures.transform(configRunning, result -> {
             checkArgument(result.getErrors().isEmpty(), "Unable to read data: %s, errors: %s", path,
                 result.getErrors());
-            final DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?> dataNode =
-                    ((ContainerNode) result.getResult()).getChild(NetconfMessageTransformUtil.NETCONF_DATA_NODEID)
-                    .get();
+            final DataContainerChild<?, ?> dataNode = ((ContainerNode) result.getResult())
+                    .getChild(NetconfMessageTransformUtil.NETCONF_DATA_NODEID).get();
             return transformer.selectFromDataStructure(dataNode, path.get());
         }, MoreExecutors.directExecutor());
     }
 
-    public ListenableFuture<DOMRpcResult> getConfigRunning(final FutureCallback<DOMRpcResult> callback,
-                                                           final Optional<YangInstanceIdentifier> filterPath) {
+    public ListenableFuture<? extends DOMRpcResult> getConfigRunning(final FutureCallback<DOMRpcResult> callback,
+            final Optional<YangInstanceIdentifier> filterPath) {
         return getConfig(callback, NETCONF_RUNNING_QNAME, filterPath);
     }
 
-    public ListenableFuture<DOMRpcResult> getConfigCandidate(final FutureCallback<DOMRpcResult> callback,
-                                                             final Optional<YangInstanceIdentifier> filterPath) {
+    public ListenableFuture<? extends DOMRpcResult> getConfigCandidate(final FutureCallback<DOMRpcResult> callback,
+            final Optional<YangInstanceIdentifier> filterPath) {
         return getConfig(callback, NETCONF_CANDIDATE_QNAME, filterPath);
     }
 
-    public ListenableFuture<DOMRpcResult> get(final FutureCallback<DOMRpcResult> callback,
-                                              final Optional<YangInstanceIdentifier> filterPath) {
+    public ListenableFuture<? extends DOMRpcResult> get(final FutureCallback<DOMRpcResult> callback,
+                                                        final Optional<YangInstanceIdentifier> filterPath) {
         requireNonNull(callback);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_GET_PATH, isFilterPresent(filterPath)
-            ? NetconfMessageTransformUtil.wrap(NETCONF_GET_NODEID,
-                toFilterStructure(filterPath.get(), mountContext.getSchemaContext()))
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_GET_PATH,
+                isFilterPresent(filterPath)
+                    ? NetconfMessageTransformUtil.wrap(NETCONF_GET_NODEID,
+                        toFilterStructure(filterPath.get(), mountContext.getSchemaContext()))
                     : NetconfMessageTransformUtil.GET_RPC_CONTENT);
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
@@ -253,48 +261,50 @@ public final class NetconfBaseOps {
         return filterPath.isPresent() && !filterPath.get().isEmpty();
     }
 
-    public ListenableFuture<DOMRpcResult> editConfigCandidate(final FutureCallback<? super DOMRpcResult> callback,
-                                                              final DataContainerChild<?, ?> editStructure,
-                                                              final ModifyAction modifyAction, final boolean rollback) {
+    public ListenableFuture<? extends DOMRpcResult> editConfigCandidate(
+            final FutureCallback<? super DOMRpcResult> callback, final DataContainerChild<?, ?> editStructure,
+            final ModifyAction modifyAction, final boolean rollback) {
         return editConfig(callback, NETCONF_CANDIDATE_QNAME, editStructure, Optional.of(modifyAction), rollback);
     }
 
-    public ListenableFuture<DOMRpcResult> editConfigCandidate(final FutureCallback<? super DOMRpcResult> callback,
-                                                              final DataContainerChild<?, ?> editStructure,
-                                                              final boolean rollback) {
+    public ListenableFuture<? extends DOMRpcResult> editConfigCandidate(
+            final FutureCallback<? super DOMRpcResult> callback, final DataContainerChild<?, ?> editStructure,
+            final boolean rollback) {
         return editConfig(callback, NETCONF_CANDIDATE_QNAME, editStructure, Optional.empty(), rollback);
     }
 
-    public ListenableFuture<DOMRpcResult> editConfigRunning(final FutureCallback<? super DOMRpcResult> callback,
-                                                            final DataContainerChild<?, ?> editStructure,
-                                                            final ModifyAction modifyAction, final boolean rollback) {
+    public ListenableFuture<? extends DOMRpcResult> editConfigRunning(
+            final FutureCallback<? super DOMRpcResult> callback, final DataContainerChild<?, ?> editStructure,
+            final ModifyAction modifyAction, final boolean rollback) {
         return editConfig(callback, NETCONF_RUNNING_QNAME, editStructure, Optional.of(modifyAction), rollback);
     }
 
-    public ListenableFuture<DOMRpcResult> editConfigRunning(final FutureCallback<? super DOMRpcResult> callback,
-                                                            final DataContainerChild<?, ?> editStructure,
-                                                            final boolean rollback) {
+    public ListenableFuture<? extends DOMRpcResult> editConfigRunning(
+            final FutureCallback<? super DOMRpcResult> callback, final DataContainerChild<?, ?> editStructure,
+            final boolean rollback) {
         return editConfig(callback, NETCONF_RUNNING_QNAME, editStructure, Optional.empty(), rollback);
     }
 
-    public ListenableFuture<DOMRpcResult> editConfig(
+    public ListenableFuture<? extends DOMRpcResult> editConfig(
             final FutureCallback<? super DOMRpcResult> callback, final QName datastore,
             final DataContainerChild<?, ?> editStructure, final Optional<ModifyAction> modifyAction,
             final boolean rollback) {
         requireNonNull(callback);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_EDIT_CONFIG_PATH,
+        final ListenableFuture<? extends DOMRpcResult> future = rpc.invokeRpc(NETCONF_EDIT_CONFIG_PATH,
                 getEditConfigContent(requireNonNull(datastore), requireNonNull(editStructure), modifyAction, rollback));
 
         Futures.addCallback(future, callback, MoreExecutors.directExecutor());
         return future;
     }
 
-    public DataContainerChild<?, ?> createEditConfigStrcture(final Optional<NormalizedNode<?, ?>> lastChild,
-                                                             final Optional<ModifyAction> operation,
-                                                             final YangInstanceIdentifier dataPath) {
-        final DOMSourceAnyxmlNode configContent = transformer.createEditConfigStructure(lastChild, dataPath, operation);
-        return Builders.choiceBuilder().withNodeIdentifier(EDIT_CONTENT_NODEID).withChild(configContent).build();
+    public ChoiceNode createEditConfigStrcture(final Optional<NormalizedNode<?, ?>> lastChild,
+                                               final Optional<ModifyAction> operation,
+                                               final YangInstanceIdentifier dataPath) {
+        return Builders.choiceBuilder()
+                .withNodeIdentifier(EDIT_CONTENT_NODEID)
+                .withChild(transformer.createEditConfigStructure(lastChild, dataPath, operation))
+                .build();
     }
 
     private static ContainerNode getEditConfigContent(
@@ -324,11 +334,14 @@ public final class NetconfBaseOps {
         return editBuilder.build();
     }
 
-    public static DataContainerChild<?, ?> getSourceNode(final QName datastore) {
-        return Builders.containerBuilder().withNodeIdentifier(NETCONF_SOURCE_NODEID)
-                .withChild(Builders.choiceBuilder().withNodeIdentifier(CONFIG_SOURCE_NODEID).withChild(
-                    Builders.leafBuilder().withNodeIdentifier(toId(datastore)).withValue(Empty.getInstance()).build())
-                    .build()).build();
+    public static ContainerNode getSourceNode(final QName datastore) {
+        return Builders.containerBuilder()
+                .withNodeIdentifier(NETCONF_SOURCE_NODEID)
+                .withChild(Builders.choiceBuilder()
+                    .withNodeIdentifier(CONFIG_SOURCE_NODEID)
+                    .withChild(ImmutableNodes.leafNode(datastore, Empty.getInstance()))
+                    .build())
+                .build();
     }
 
     public static ContainerNode getLockContent(final QName datastore) {
@@ -336,24 +349,24 @@ public final class NetconfBaseOps {
                 .withChild(getTargetNode(datastore)).build();
     }
 
-    public static DataContainerChild<?, ?> getTargetNode(final QName datastore) {
+    public static ContainerNode getTargetNode(final QName datastore) {
         return Builders.containerBuilder().withNodeIdentifier(NETCONF_TARGET_NODEID)
                 .withChild(Builders.choiceBuilder().withNodeIdentifier(CONFIG_TARGET_NODEID).withChild(
                     Builders.leafBuilder().withNodeIdentifier(toId(datastore)).withValue(Empty.getInstance()).build())
                     .build()).build();
     }
 
-    public static NormalizedNode<?, ?> getCopyConfigContent(final QName source, final QName target) {
+    public static ContainerNode getCopyConfigContent(final QName source, final QName target) {
         return Builders.containerBuilder().withNodeIdentifier(NETCONF_COPY_CONFIG_NODEID)
                 .withChild(getTargetNode(target)).withChild(getSourceNode(source)).build();
     }
 
-    public static NormalizedNode<?, ?> getValidateContent(final QName source) {
+    public static ContainerNode getValidateContent(final QName source) {
         return Builders.containerBuilder().withNodeIdentifier(NETCONF_VALIDATE_NODEID)
                 .withChild(getSourceNode(source)).build();
     }
 
-    public static NormalizedNode<?, ?> getUnLockContent(final QName datastore) {
+    public static ContainerNode getUnLockContent(final QName datastore) {
         return Builders.containerBuilder().withNodeIdentifier(NETCONF_UNLOCK_NODEID)
                 .withChild(getTargetNode(datastore)).build();
     }
index 6608f21e6e9db92ccc1b6123085b7eab3639c4bb..a00213c3e77f746c6d8e41d08674ae7c3da6f797 100644 (file)
@@ -123,11 +123,12 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService {
         LOG.debug("Adding keypairs: {}", input);
 
         final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
-        final List<KeyCredential> keypairs = input.getKeyCredential().stream().map(keypair ->
-                new KeyCredentialBuilder(keypair)
+        final List<KeyCredential> keypairs = input.nonnullKeyCredential().values().stream()
+                .map(keypair -> new KeyCredentialBuilder(keypair)
                         .setPrivateKey(encryptionService.encrypt(keypair.getPrivateKey()))
                         .setPassphrase(encryptionService.encrypt(keypair.getPassphrase()))
-                        .build()).collect(Collectors.toList());
+                        .build())
+                .collect(Collectors.toList());
 
         for (KeyCredential keypair : keypairs) {
             writeTransaction.merge(LogicalDatastoreType.CONFIGURATION,
@@ -158,7 +159,7 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService {
             final AddTrustedCertificateInput input) {
         final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
 
-        for (TrustedCertificate certificate : input.getTrustedCertificate()) {
+        for (TrustedCertificate certificate : input.nonnullTrustedCertificate().values()) {
             writeTransaction.merge(LogicalDatastoreType.CONFIGURATION,
                     keystoreIid.child(TrustedCertificate.class, certificate.key()), certificate);
         }
@@ -216,7 +217,7 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService {
     public ListenableFuture<RpcResult<AddPrivateKeyOutput>> addPrivateKey(final AddPrivateKeyInput input) {
         final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
 
-        for (PrivateKey key: input.getPrivateKey()) {
+        for (PrivateKey key: input.nonnullPrivateKey().values()) {
             writeTransaction.merge(LogicalDatastoreType.CONFIGURATION,
                     keystoreIid.child(PrivateKey.class, key.key()), key);
         }
index 98eeb7d9fe97b5f2c82a5fd07e1188f2d207b329..b7a1489ae901485fba9b12ee5f3596c0de35493c 100644 (file)
@@ -103,7 +103,7 @@ public class NetconfTopologyRPCProvider implements NetconfNodeTopologyService {
         final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
         final InstanceIdentifier<NetconfNode> niid = topologyPath.child(Node.class,
                 new NodeKey(nodeId)).augmentation(NetconfNode.class);
-        writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, niid, node, true);
+        writeTransaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, niid, node);
         writeTransaction.commit().addCallback(new FutureCallback<CommitInfo>() {
 
             @Override
index d21a6d7291edd087590ced5b0c09cf6a26bb8c9b..827144b2d81f3b45a786ffa0bab457aa35b2b2b7 100644 (file)
@@ -11,6 +11,9 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
            xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
            odl:use-default-for-reference-types="true">
 
+    <reference id="parserFactory"
+               interface="org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory"/>
+
     <bean id="deviceActionFactory"
           class="org.opendaylight.netconf.sal.connect.netconf.DeviceActionFactoryImpl">
     </bean>
@@ -21,8 +24,9 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <bean id="schemaResourceManager"
           class="org.opendaylight.netconf.sal.connect.impl.DefaultSchemaResourceManager">
+        <argument ref="parserFactory"/>
     </bean>
 
     <service ref="schemaResourceManager"
              interface="org.opendaylight.netconf.sal.connect.api.SchemaResourceManager"/>
-</blueprint>
\ No newline at end of file
+</blueprint>
index 03977c7a9516e5d9015abd0531d9f5acb58fe387..5c73e06d88c9a1786135724db7df3351b4867cf2 100644 (file)
@@ -9,11 +9,11 @@ package org.opendaylight.netconf.sal.connect.netconf;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public abstract class AbstractTestModelTest {
-    protected static SchemaContext SCHEMA_CONTEXT;
+    protected static EffectiveModelContext SCHEMA_CONTEXT;
 
     @BeforeClass
     public static void beforeClass() {
index 394797673d3cf176ad7d347522c7bac9f9ac1a0d..1313b609d5c7cf6f37ea056fdb4ecec9019a56c2 100644 (file)
@@ -66,9 +66,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory;
 import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactory;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
@@ -124,7 +124,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
         final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
         final NetconfDeviceCommunicator listener = getListener();
 
-        final SchemaContextFactory schemaFactory = getSchemaFactory();
+        final EffectiveModelContextFactory schemaFactory = getSchemaFactory();
         final SchemaRepository schemaRepository = getSchemaRepository();
 
         final SchemaResolutionException schemaResolutionException =
@@ -135,7 +135,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
             } else {
                 return Futures.immediateFuture(SCHEMA_CONTEXT);
             }
-        }).when(schemaFactory).createSchemaContext(anyCollectionOf(SourceIdentifier.class));
+        }).when(schemaFactory).createEffectiveModelContext(anyCollectionOf(SourceIdentifier.class));
 
         final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id,
                 schemaContext) -> {
@@ -164,7 +164,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
 
         Mockito.verify(facade, Mockito.timeout(5000)).onDeviceConnected(any(MountPointContext.class),
             any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class), isNull());
-        Mockito.verify(schemaFactory, times(2)).createSchemaContext(anyCollectionOf(SourceIdentifier.class));
+        Mockito.verify(schemaFactory, times(2)).createEffectiveModelContext(anyCollectionOf(SourceIdentifier.class));
     }
 
     @Test
@@ -174,7 +174,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
         final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
         final NetconfDeviceCommunicator listener = getListener();
 
-        final SchemaContextFactory schemaFactory = getSchemaFactory();
+        final EffectiveModelContextFactory schemaFactory = getSchemaFactory();
         final SchemaRepository schemaRepository = getSchemaRepository();
 
         // Make fallback attempt to fail due to empty resolved sources
@@ -182,7 +182,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
                 = new SchemaResolutionException("fail first",
                 Collections.emptyList(), HashMultimap.create());
         doReturn(Futures.immediateFailedFuture(schemaResolutionException))
-                .when(schemaFactory).createSchemaContext(anyCollectionOf(SourceIdentifier.class));
+                .when(schemaFactory).createEffectiveModelContext(anyCollectionOf(SourceIdentifier.class));
 
         final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice
                 .SchemaResourcesDTO(getSchemaRegistry(), schemaRepository, schemaFactory, STATE_SCHEMAS_RESOLVER);
@@ -200,7 +200,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
 
         Mockito.verify(facade, Mockito.timeout(5000)).onDeviceDisconnected();
         Mockito.verify(listener, Mockito.timeout(5000)).close();
-        Mockito.verify(schemaFactory, times(1)).createSchemaContext(anyCollectionOf(SourceIdentifier.class));
+        Mockito.verify(schemaFactory, times(1)).createEffectiveModelContext(anyCollectionOf(SourceIdentifier.class));
     }
 
     @Test
@@ -208,7 +208,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
         final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
         final NetconfDeviceCommunicator listener = getListener();
 
-        final SchemaContextFactory schemaFactory = getSchemaFactory();
+        final EffectiveModelContextFactory schemaFactory = getSchemaFactory();
         final SchemaRepository schemaRepository = getSchemaRepository();
 
         // Make fallback attempt to fail due to empty resolved sources
@@ -222,7 +222,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
             } else {
                 return Futures.immediateFuture(SCHEMA_CONTEXT);
             }
-        }).when(schemaFactory).createSchemaContext(anyCollectionOf(SourceIdentifier.class));
+        }).when(schemaFactory).createEffectiveModelContext(anyCollectionOf(SourceIdentifier.class));
 
         final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id,
             schemaContext) -> {
@@ -251,7 +251,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
 
         Mockito.verify(facade, Mockito.timeout(5000)).onDeviceConnected(any(MountPointContext.class),
             any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class), isNull());
-        Mockito.verify(schemaFactory, times(1)).createSchemaContext(anyCollectionOf(SourceIdentifier.class));
+        Mockito.verify(schemaFactory, times(1)).createEffectiveModelContext(anyCollectionOf(SourceIdentifier.class));
     }
 
     private static SchemaSourceRegistry getSchemaRegistry() {
@@ -276,9 +276,9 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
     public void testNotificationBeforeSchema() throws Exception {
         final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
         final NetconfDeviceCommunicator listener = getListener();
-        final SchemaContextFactory schemaContextProviderFactory = mock(SchemaContextFactory.class);
+        final EffectiveModelContextFactory schemaContextProviderFactory = mock(EffectiveModelContextFactory.class);
         final SettableFuture<SchemaContext> schemaFuture = SettableFuture.create();
-        doReturn(schemaFuture).when(schemaContextProviderFactory).createSchemaContext(any(Collection.class));
+        doReturn(schemaFuture).when(schemaContextProviderFactory).createEffectiveModelContext(any(Collection.class));
         final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO =
                 new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), getSchemaRepository(),
                         schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER);
@@ -311,7 +311,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
         final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
         final NetconfDeviceCommunicator listener = getListener();
 
-        final SchemaContextFactory schemaContextProviderFactory = getSchemaFactory();
+        final EffectiveModelContextFactory schemaContextProviderFactory = getSchemaFactory();
 
         final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice.SchemaResourcesDTO(
                 getSchemaRegistry(), getSchemaRepository(), schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER);
@@ -326,7 +326,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
                 Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&amp;revision=" + TEST_REVISION));
         device.onRemoteSessionUp(sessionCaps, listener);
 
-        verify(schemaContextProviderFactory, timeout(5000)).createSchemaContext(any(Collection.class));
+        verify(schemaContextProviderFactory, timeout(5000)).createEffectiveModelContext(any(Collection.class));
         verify(facade, timeout(5000)).onDeviceConnected(
                 any(MountPointContext.class), any(NetconfSessionPreferences.class), any(DOMRpcService.class),
                 isNull());
@@ -336,7 +336,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
 
         device.onRemoteSessionUp(sessionCaps, listener);
 
-        verify(schemaContextProviderFactory, timeout(5000).times(2)).createSchemaContext(any(Collection.class));
+        verify(schemaContextProviderFactory, timeout(5000).times(2)).createEffectiveModelContext(any(Collection.class));
         verify(facade, timeout(5000).times(2)).onDeviceConnected(
                 any(MountPointContext.class), any(NetconfSessionPreferences.class), any(DOMRpcService.class),
                 isNull());
@@ -346,9 +346,9 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
     public void testNetconfDeviceDisconnectListenerCallCancellation() throws Exception {
         final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
         final NetconfDeviceCommunicator listener = getListener();
-        final SchemaContextFactory schemaContextProviderFactory = mock(SchemaContextFactory.class);
+        final EffectiveModelContextFactory schemaContextProviderFactory = mock(EffectiveModelContextFactory.class);
         final SettableFuture<SchemaContext> schemaFuture = SettableFuture.create();
-        doReturn(schemaFuture).when(schemaContextProviderFactory).createSchemaContext(any(Collection.class));
+        doReturn(schemaFuture).when(schemaContextProviderFactory).createEffectiveModelContext(any(Collection.class));
         final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO
                 = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), getSchemaRepository(),
                 schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER);
@@ -377,7 +377,7 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
         final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
         final NetconfDeviceCommunicator listener = getListener();
 
-        final SchemaContextFactory schemaContextProviderFactory = getSchemaFactory();
+        final EffectiveModelContextFactory schemaContextProviderFactory = getSchemaFactory();
 
         final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice.SchemaResourcesDTO(
                 getSchemaRegistry(), getSchemaRepository(), schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER);
@@ -411,10 +411,10 @@ public class NetconfDeviceTest extends AbstractTestModelTest {
                                 QName.create(entry.getCapability())).getName(), entry.getCapabilityOrigin().getName()));
     }
 
-    private static SchemaContextFactory getSchemaFactory() throws Exception {
-        final SchemaContextFactory schemaFactory = mockClass(SchemaContextFactory.class);
+    private static EffectiveModelContextFactory getSchemaFactory() throws Exception {
+        final EffectiveModelContextFactory schemaFactory = mockClass(EffectiveModelContextFactory.class);
         doReturn(Futures.immediateFuture(SCHEMA_CONTEXT))
-                .when(schemaFactory).createSchemaContext(any(Collection.class));
+                .when(schemaFactory).createEffectiveModelContext(any(Collection.class));
         return schemaFactory;
     }
 
index 45792d760352843c5d478a5d11329ab17914879a..72734dc92a08d345614134e2d92044ec16b746ee 100644 (file)
@@ -8,10 +8,11 @@
 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.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_GET_QNAME;
@@ -57,7 +58,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeS
 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.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -75,12 +76,12 @@ public class NetconfStateSchemasTest {
     @Mock
     private DOMRpcService rpc;
 
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        schemaContext = BaseSchema.BASE_NETCONF_CTX_WITH_NOTIFICATIONS.getSchemaContext();
+        schemaContext = BaseSchema.BASE_NETCONF_CTX_WITH_NOTIFICATIONS.getEffectiveModelContext();
         final DataSchemaNode schemasNode =
                 ((ContainerSchemaNode) schemaContext
                         .getDataChildByName(NetconfState.QNAME)).getDataChildByName(Schemas.QNAME);
@@ -122,8 +123,8 @@ public class NetconfStateSchemasTest {
                         .NodeIdentifier(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_QNAME))
                 .withChild(data)
                 .build();
-        when(rpc.invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any()))
-            .thenReturn(immediateFluentFuture(new DefaultDOMRpcResult(rpcReply)));
+        doReturn(immediateFluentFuture(new DefaultDOMRpcResult(rpcReply))).when(rpc)
+            .invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any());
         final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext);
         final Set<QName> availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames();
         assertEquals(numberOfLegalSchemas, availableYangSchemasQNames.size());
@@ -152,8 +153,8 @@ public class NetconfStateSchemasTest {
     @Test
     public void testCreateRpcError() throws Exception {
         final RpcError rpcError = RpcResultBuilder.newError(RpcError.ErrorType.RPC, "fail", "fail");
-        when(rpc.invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any()))
-            .thenReturn(immediateFluentFuture(new DefaultDOMRpcResult(rpcError)));
+        doReturn(immediateFluentFuture(new DefaultDOMRpcResult(rpcError))).when(rpc)
+            .invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any());
         final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext);
         final Set<QName> availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames();
         Assert.assertTrue(availableYangSchemasQNames.isEmpty());
@@ -167,8 +168,8 @@ public class NetconfStateSchemasTest {
             final ListenableFuture<DOMRpcResult> interruptedFuture = mock(ListenableFuture.class);
             try {
                 when(interruptedFuture.get()).thenThrow(new InterruptedException("interrupted"));
-                when(rpc.invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any())).thenReturn(
-                        FluentFuture.from(interruptedFuture));
+                doReturn(FluentFuture.from(interruptedFuture)).when(rpc)
+                    .invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any());
                 NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext);
             } catch (final InterruptedException | ExecutionException e) {
                 LOG.info("Operation failed.", e);
index eacbd7d84d2662beebb4ae43a1203346ee780cee..249bf065e85048ad8ce1401e3df6c6054523b6d9 100644 (file)
@@ -13,7 +13,7 @@ import static org.junit.Assert.assertTrue;
 
 import com.google.common.collect.Iterables;
 import java.io.InputStream;
-import java.util.Set;
+import java.util.Collection;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.mdsal.dom.api.DOMEvent;
@@ -24,8 +24,8 @@ 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.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.w3c.dom.Document;
 
@@ -45,8 +45,9 @@ public class NetconfToNotificationTest {
         userNotification = new NetconfMessage(doc);
     }
 
-    static SchemaContext getNotificationSchemaContext(final Class<?> loadClass, final boolean getExceptionTest) {
-        final SchemaContext context;
+    static EffectiveModelContext getNotificationSchemaContext(final Class<?> loadClass,
+            final boolean getExceptionTest) {
+        final EffectiveModelContext context;
         if (getExceptionTest) {
             context = YangParserTestUtils.parseYangResources(loadClass, "/schemas/user-notification4.yang",
                     "/schemas/user-notification3.yang");
@@ -55,7 +56,7 @@ public class NetconfToNotificationTest {
                 "/schemas/user-notification2.yang");
         }
 
-        final Set<Module> modules = context.getModules();
+        final Collection<? extends Module> modules = context.getModules();
         assertTrue(!modules.isEmpty());
         assertNotNull(context);
         return context;
@@ -63,14 +64,14 @@ public class NetconfToNotificationTest {
 
     @Test(expected =  IllegalArgumentException.class)
     public void testMostRecentWrongYangModel() throws Exception {
-        final SchemaContext schemaContext = getNotificationSchemaContext(getClass(), true);
+        final EffectiveModelContext schemaContext = getNotificationSchemaContext(getClass(), true);
         messageTransformer = new NetconfMessageTransformer(new EmptyMountPointContext(schemaContext), true);
         messageTransformer.toNotification(userNotification);
     }
 
     @Test
     public void testToNotificationFunction() throws Exception {
-        final SchemaContext schemaContext = getNotificationSchemaContext(getClass(), false);
+        final EffectiveModelContext schemaContext = getNotificationSchemaContext(getClass(), false);
         messageTransformer = new NetconfMessageTransformer(new EmptyMountPointContext(schemaContext), true);
         final DOMNotification domNotification = messageTransformer.toNotification(userNotification);
         final ContainerNode root = domNotification.getBody();
index de7fa293e219b66eaa6865043cb1e14e817a6ec1..12e6b07fdcc7d17aed348ed7e1cbdbc498accf80 100644 (file)
@@ -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.connect.netconf;
 
 import static org.junit.Assert.assertEquals;
@@ -14,7 +13,7 @@ import static org.junit.Assert.assertTrue;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.toId;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.toPath;
 
-import java.util.Set;
+import java.util.Collection;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.netconf.api.NetconfMessage;
@@ -27,8 +26,8 @@ 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.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.w3c.dom.Document;
 
@@ -49,12 +48,12 @@ public class NetconfToRpcRequestTest {
     private static final QName GET_CONFIG_QNAME =
             QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "get-config");
 
-    static SchemaContext cfgCtx;
+    static EffectiveModelContext cfgCtx;
     static NetconfMessageTransformer messageTransformer;
 
     @BeforeClass
     public static void setup() {
-        final Set<Module> notifModules = YangParserTestUtils.parseYangResource(
+        final Collection<? extends Module> notifModules = YangParserTestUtils.parseYangResource(
             "/schemas/rpc-notification-subscription.yang").getModules();
         assertTrue(!notifModules.isEmpty());
 
index 726b472c30f3d7e8c97f090a419e512223b97c03..30d2a3f53b995a50e0d0f97bdc0484ba8eafe489 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.netconf.sal.connect.netconf.sal;
 
 import static org.mockito.Mockito.after;
 import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfBaseOps.getSourceNode;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_GET_CONFIG_NODEID;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_GET_CONFIG_PATH;
@@ -91,11 +91,11 @@ public class KeepaliveSalFacadeResponseWaitingTest {
         //This settable future object will be never set to any value. The test wants to simulate waiting for the result
         //of the future object.
         final SettableFuture<DOMRpcResult> settableFuture = SettableFuture.create();
-        when(deviceRpc.invokeRpc(null, null)).thenReturn(settableFuture);
+        doReturn(settableFuture).when(deviceRpc).invokeRpc(null, null);
 
         //This settable future will be used to check the invokation of keepalive RPC. Should be never invoked.
         final SettableFuture<DOMRpcResult> keepaliveSettableFuture = SettableFuture.create();
-        when(deviceRpc.invokeRpc(NETCONF_GET_CONFIG_PATH, KEEPALIVE_PAYLOAD)).thenReturn(keepaliveSettableFuture);
+        doReturn(keepaliveSettableFuture).when(deviceRpc).invokeRpc(NETCONF_GET_CONFIG_PATH, KEEPALIVE_PAYLOAD);
         final DOMRpcResult keepaliveResult = new DefaultDOMRpcResult(Builders.containerBuilder().withNodeIdentifier(
                 new YangInstanceIdentifier.NodeIdentifier(NetconfMessageTransformUtil.NETCONF_RUNNING_QNAME)).build());
         keepaliveSettableFuture.set(keepaliveResult);
index 83cea06f68e535a5480f4231127543a1b30fdd51..655ac624f616070eb4395b2f77f27ed230d532ae 100644 (file)
@@ -39,7 +39,7 @@ import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 import org.opendaylight.yangtools.yang.common.RpcError;
 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.ContainerNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
@@ -106,21 +106,21 @@ public class KeepaliveSalFacadeTest {
                 .when(deviceRpc).invokeRpc(any(SchemaPath.class), isNull());
 
         doReturn(FluentFutures.immediateFluentFuture(result))
-                .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
 
         keepaliveSalFacade.onDeviceConnected(null, null, deviceRpc);
 
         verify(underlyingSalFacade).onDeviceConnected(
                 isNull(), isNull(), any(DOMRpcService.class), isNull());
 
-        verify(deviceRpc, timeout(15000).times(5)).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+        verify(deviceRpc, timeout(15000).times(5)).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
     }
 
     @Test
     public void testKeepaliveRpcFailure() {
 
         doReturn(FluentFutures.immediateFailedFluentFuture(new IllegalStateException("illegal-state")))
-                .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
 
         keepaliveSalFacade.onDeviceConnected(null, null, deviceRpc);
 
@@ -128,7 +128,7 @@ public class KeepaliveSalFacadeTest {
 
         // Should disconnect the session
         verify(listener, timeout(15000).times(1)).disconnect();
-        verify(deviceRpc, times(1)).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+        verify(deviceRpc, times(1)).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
     }
 
     @Test
@@ -137,7 +137,7 @@ public class KeepaliveSalFacadeTest {
         final DOMRpcResult rpcSuccessWithError = new DefaultDOMRpcResult(mock(RpcError.class));
 
         doReturn(FluentFutures.immediateFluentFuture(rpcSuccessWithError))
-                .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
 
         keepaliveSalFacade.onDeviceConnected(null, null, deviceRpc);
 
@@ -146,7 +146,7 @@ public class KeepaliveSalFacadeTest {
 
         // Shouldn't disconnect the session
         verify(listener, times(0)).disconnect();
-        verify(deviceRpc, timeout(15000).times(1)).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+        verify(deviceRpc, timeout(15000).times(1)).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
     }
 
     @Test
@@ -158,7 +158,7 @@ public class KeepaliveSalFacadeTest {
             }).when(underlyingSalFacade).onDeviceConnected(isNull(), isNull(), any(DOMRpcService.class), isNull());
 
         doReturn(FluentFutures.immediateFailedFluentFuture(new IllegalStateException("illegal-state")))
-                .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
 
         keepaliveSalFacade =
                 new KeepaliveSalFacade(REMOTE_DEVICE_ID, underlyingSalFacade, executorServiceSpy, 100L, 1L);
@@ -166,7 +166,7 @@ public class KeepaliveSalFacadeTest {
 
         keepaliveSalFacade.onDeviceConnected(null, null, deviceRpc);
 
-        proxyRpc.invokeRpc(mock(SchemaPath.class), mock(NormalizedNode.class));
+        proxyRpc.invokeRpc(mock(SchemaPath.class), mock(ContainerNode.class));
 
         verify(listener, times(1)).disconnect();
     }
index 0d65125d251c270593b4bff40294ff8e30831e05..afeeb90c7493d0057fd626eb7f93755280a86197 100644 (file)
@@ -11,7 +11,6 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import com.google.common.collect.Lists;
 import java.net.InetSocketAddress;
 import org.junit.Assert;
 import org.junit.Before;
@@ -19,7 +18,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
@@ -27,17 +26,17 @@ import org.opendaylight.mdsal.dom.api.DOMNotification;
 import org.opendaylight.mdsal.dom.api.DOMNotificationService;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 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.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class MountInstanceTest {
-
     private static final Logger LOG = LoggerFactory.getLogger(MountInstanceTest.class);
 
-    private static SchemaContext SCHEMA_CONTEXT;
+    private static EffectiveModelContext SCHEMA_CONTEXT;
 
     @Mock
     private DOMMountPointService service;
@@ -58,11 +57,7 @@ public class MountInstanceTest {
 
     @BeforeClass
     public static void suiteSetUp() throws Exception {
-        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-        moduleInfoBackedContext.addModuleInfos(Lists.newArrayList(org.opendaylight.yang.gen
-                .v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.$YangModuleInfoImpl.getInstance()));
-        SCHEMA_CONTEXT = moduleInfoBackedContext.tryToCreateSchemaContext().get();
-
+        SCHEMA_CONTEXT = BindingRuntimeHelpers.createEffectiveModel(IetfNetconfService.class);
     }
 
     @Before
index 1e176a83f2949891f393e136674f8f1e2ffa24b2..251851d8a56bf94890dddb25db9d555ce1d45696 100644 (file)
@@ -9,12 +9,11 @@ package org.opendaylight.netconf.sal.connect.netconf.sal;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_GET_QNAME;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.toPath;
 
-import com.google.common.collect.Lists;
 import java.net.InetSocketAddress;
 import java.util.Arrays;
 import org.junit.AfterClass;
@@ -22,13 +21,13 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
-import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
@@ -38,16 +37,17 @@ import org.opendaylight.netconf.sal.connect.netconf.sal.tx.WriteCandidateTx;
 import org.opendaylight.netconf.sal.connect.netconf.sal.tx.WriteRunningTx;
 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.yang.ietf.netconf.monitoring.extension.rev131210.$YangModuleInfoImpl;
+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.util.concurrent.FluentFutures;
 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.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
+@RunWith(MockitoJUnitRunner.class)
 public class NetconfDeviceDataBrokerTest {
-    private static SchemaContext SCHEMA_CONTEXT;
+    private static EffectiveModelContext SCHEMA_CONTEXT;
 
     @Mock
     private DOMRpcService rpcService;
@@ -55,12 +55,7 @@ public class NetconfDeviceDataBrokerTest {
 
     @BeforeClass
     public static void beforeClass() {
-        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-        moduleInfoBackedContext.addModuleInfos(
-                Lists.newArrayList($YangModuleInfoImpl.getInstance(),
-                        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns
-                                .netconf.base._1._0.rev110601.$YangModuleInfoImpl.getInstance()));
-        SCHEMA_CONTEXT = moduleInfoBackedContext.tryToCreateSchemaContext().get();
+        SCHEMA_CONTEXT = BindingRuntimeHelpers.createEffectiveModel(IetfNetconfService.class, NetconfTcp.class);
     }
 
     @AfterClass
@@ -70,12 +65,8 @@ public class NetconfDeviceDataBrokerTest {
 
     @Before
     public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-
-        DOMRpcResult result = new DefaultDOMRpcResult();
-        when(rpcService.invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)))
-                .thenReturn(FluentFutures.immediateFluentFuture(result));
-
+        doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult())).when(rpcService)
+            .invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
         dataBroker = getDataBroker(NetconfMessageTransformUtil.NETCONF_CANDIDATE_URI.toString());
     }
 
index 9fdc31de1be17394d0f44719423ff5dede7d1917..1d3c6e12e4cb7de7a3c71398740cf91f09900bdd 100644 (file)
@@ -7,24 +7,23 @@
  */
 package org.opendaylight.netconf.sal.connect.netconf.sal;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 
 import com.google.common.util.concurrent.Futures;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
 import org.junit.AfterClass;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.mdsal.dom.api.DOMRpcAvailabilityListener;
 import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
@@ -33,24 +32,23 @@ import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.sal.connect.api.RemoteDeviceCommunicator;
 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.$YangModuleInfoImpl;
+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.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-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;
 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;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.w3c.dom.Node;
 
 public class NetconfDeviceRpcTest {
-    private static SchemaContext SCHEMA_CONTEXT;
+    private static EffectiveModelContext SCHEMA_CONTEXT;
 
     @Mock
     private DOMRpcAvailabilityListener listener;
@@ -63,9 +61,7 @@ public class NetconfDeviceRpcTest {
 
     @BeforeClass
     public static void beforeClass() {
-        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-        moduleInfoBackedContext.addModuleInfos(Collections.singleton($YangModuleInfoImpl.getInstance()));
-        SCHEMA_CONTEXT = moduleInfoBackedContext.tryToCreateSchemaContext().get();
+        SCHEMA_CONTEXT = BindingRuntimeHelpers.createEffectiveModel(IetfNetconfService.class);
     }
 
     @AfterClass
@@ -96,10 +92,10 @@ public class NetconfDeviceRpcTest {
 
     @Test
     public void testInvokeRpc() throws Exception {
-        NormalizedNode<?, ?> input = createNode("urn:ietf:params:xml:ns:netconf:base:1.0", "2011-06-01", "filter");
+        ContainerNode input = createNode("urn:ietf:params:xml:ns:netconf:base:1.0", "2011-06-01", "filter");
         final DOMRpcResult result = rpc.invokeRpc(path, input).get();
-        Assert.assertEquals(expectedReply.getResult().getIdentifier(), result.getResult().getIdentifier());
-        Assert.assertEquals(resolveNode(expectedReply), resolveNode(result));
+        assertEquals(expectedReply.getResult().getIdentifier(), result.getResult().getIdentifier());
+        assertEquals(resolveNode(expectedReply), resolveNode(result));
     }
 
     private static Node resolveNode(final DOMRpcResult result) {
@@ -118,17 +114,17 @@ public class NetconfDeviceRpcTest {
 
         verify(listener).onRpcAvailable(argument.capture());
         final Collection<DOMRpcIdentifier> argValue = argument.getValue();
-        final Set<RpcDefinition> operations = SCHEMA_CONTEXT.getOperations();
-        Assert.assertEquals(argValue.size(), operations.size());
+        final Collection<? extends RpcDefinition> operations = SCHEMA_CONTEXT.getOperations();
+        assertEquals(argValue.size(), operations.size());
         for (RpcDefinition operation : operations) {
             final DOMRpcIdentifier domRpcIdentifier = DOMRpcIdentifier.create(operation.getPath());
-            Assert.assertTrue(argValue.contains(domRpcIdentifier));
+            assertTrue(argValue.contains(domRpcIdentifier));
 
         }
     }
 
     private static ContainerNode createNode(final String namespace, final String date, final String localName) {
         return Builders.containerBuilder().withNodeIdentifier(
-                new YangInstanceIdentifier.NodeIdentifier(QName.create(namespace, date, localName))).build();
+                new NodeIdentifier(QName.create(namespace, date, localName))).build();
     }
 }
index 6d231ad2a2ea105e782e07e04ee06284fdd86fad..d2e2bec004cb5457bb50f4364ac8fe22d38a93df 100644 (file)
@@ -33,7 +33,7 @@ import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPrefe
 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.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class NetconfDeviceSalFacadeTest {
 
@@ -90,7 +90,7 @@ public class NetconfDeviceSalFacadeTest {
 
     @Test
     public void testOnDeviceConnected() {
-        final SchemaContext schemaContext = mock(SchemaContext.class);
+        final EffectiveModelContext schemaContext = mock(EffectiveModelContext.class);
 
         final NetconfSessionPreferences netconfSessionPreferences =
                 NetconfSessionPreferences.fromStrings(getCapabilities());
index acc16d985c49cb551a216440951b0abe3f9132e0..24d521440b089a539e7740c1ee165c42643ede4b 100644 (file)
@@ -46,11 +46,11 @@ 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.impl.schema.builder.impl.ImmutableLeafNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class NetconfDeviceTopologyAdapterTest {
-    private static SchemaContext SCHEMA_CONTEXT;
+    private static EffectiveModelContext SCHEMA_CONTEXT;
 
     private final RemoteDeviceId id = new RemoteDeviceId("test", new InetSocketAddress("localhost", 22));
 
index 2a0577fd1ae6b1a678b88607760bd6513377c4a3..53c1a37ea3ab7705c0add6dcd1f1698c6bf2364b 100644 (file)
@@ -44,10 +44,11 @@ import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 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.ContainerNode;
 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.ImmutableNodes;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 public class NetconfDeviceWriteOnlyTxTest {
@@ -68,14 +69,14 @@ public class NetconfDeviceWriteOnlyTxTest {
         doReturn(successFuture)
                 .doReturn(FluentFutures.immediateFailedFluentFuture(new IllegalStateException("Failed tx")))
                 .doReturn(successFuture)
-                .when(rpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .when(rpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
 
         yangIId = YangInstanceIdentifier.builder().node(NetconfState.QNAME).build();
     }
 
     @Test
     public void testIgnoreNonVisibleData() {
-        final WriteCandidateTx tx = new WriteCandidateTx(id, new NetconfBaseOps(rpc, mock(SchemaContext.class)),
+        final WriteCandidateTx tx = new WriteCandidateTx(id, new NetconfBaseOps(rpc, mock(EffectiveModelContext.class)),
                 false);
         final MapNode emptyList = ImmutableNodes.mapNodeBuilder(NETCONF_FILTER_QNAME).build();
         tx.merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier
@@ -83,7 +84,7 @@ public class NetconfDeviceWriteOnlyTxTest {
         tx.put(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier
                 .create(new YangInstanceIdentifier.NodeIdentifier(NETCONF_FILTER_QNAME)), emptyList);
 
-        verify(rpc, atMost(1)).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+        verify(rpc, atMost(1)).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
     }
 
     @Test
@@ -91,7 +92,7 @@ public class NetconfDeviceWriteOnlyTxTest {
         doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode<?, ?>) null)))
                 .when(rpc).invokeRpc(any(SchemaPath.class), isNull());
 
-        final WriteCandidateTx tx = new WriteCandidateTx(id, new NetconfBaseOps(rpc, mock(SchemaContext.class)),
+        final WriteCandidateTx tx = new WriteCandidateTx(id, new NetconfBaseOps(rpc, mock(EffectiveModelContext.class)),
                 false);
         try {
             tx.commit().get();
@@ -118,9 +119,9 @@ public class NetconfDeviceWriteOnlyTxTest {
                 new DefaultDOMRpcResult(RpcResultBuilder.newError(RpcError.ErrorType.APPLICATION, "a", "m")));
 
         doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode<?, ?>) null)))
-                .doReturn(rpcErrorFuture).when(rpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .doReturn(rpcErrorFuture).when(rpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
 
-        final WriteCandidateTx tx = new WriteCandidateTx(id, new NetconfBaseOps(rpc, mock(SchemaContext.class)),
+        final WriteCandidateTx tx = new WriteCandidateTx(id, new NetconfBaseOps(rpc, mock(EffectiveModelContext.class)),
                 false);
 
         try {
@@ -135,10 +136,10 @@ public class NetconfDeviceWriteOnlyTxTest {
     public void testDiscardChangesNotSentWithoutCandidate() {
         doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode<?, ?>) null)))
                 .doReturn(FluentFutures.immediateFailedFluentFuture(new IllegalStateException("Failed tx")))
-                .when(rpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .when(rpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
 
-        final WriteRunningTx tx = new WriteRunningTx(
-                id, new NetconfBaseOps(rpc, BaseSchema.BASE_NETCONF_CTX_WITH_NOTIFICATIONS.getSchemaContext()), false);
+        final WriteRunningTx tx = new WriteRunningTx(id,
+            new NetconfBaseOps(rpc, BaseSchema.BASE_NETCONF_CTX_WITH_NOTIFICATIONS.getEffectiveModelContext()), false);
 
         tx.delete(LogicalDatastoreType.CONFIGURATION, yangIId);
         tx.commit();
@@ -147,7 +148,7 @@ public class NetconfDeviceWriteOnlyTxTest {
         inOrder.verify(rpc).invokeRpc(toPath(NetconfMessageTransformUtil.NETCONF_LOCK_QNAME),
                 NetconfBaseOps.getLockContent(NETCONF_RUNNING_QNAME));
         inOrder.verify(rpc).invokeRpc(eq(toPath(NetconfMessageTransformUtil.NETCONF_EDIT_CONFIG_QNAME)),
-                any(NormalizedNode.class));
+                any(ContainerNode.class));
         inOrder.verify(rpc).invokeRpc(toPath(NetconfMessageTransformUtil.NETCONF_UNLOCK_QNAME),
                 NetconfBaseOps.getUnLockContent(NETCONF_RUNNING_QNAME));
     }
@@ -155,9 +156,9 @@ public class NetconfDeviceWriteOnlyTxTest {
     @Test
     public void testListenerSuccess() throws Exception {
         doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode<?, ?>) null)))
-                .when(rpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .when(rpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
         final WriteCandidateTx tx = new WriteCandidateTx(
-                id, new NetconfBaseOps(rpc, BaseSchema.BASE_NETCONF_CTX.getSchemaContext()), false);
+                id, new NetconfBaseOps(rpc, BaseSchema.BASE_NETCONF_CTX.getEffectiveModelContext()), false);
         final TxListener listener = mock(TxListener.class);
         tx.addListener(listener);
         tx.delete(LogicalDatastoreType.CONFIGURATION, yangIId);
@@ -173,7 +174,7 @@ public class NetconfDeviceWriteOnlyTxTest {
         doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult((NormalizedNode<?, ?>) null)))
                 .when(rpc).invokeRpc(any(SchemaPath.class), isNull());
         final WriteCandidateTx tx = new WriteCandidateTx(
-                id, new NetconfBaseOps(rpc, BaseSchema.BASE_NETCONF_CTX.getSchemaContext()), false);
+                id, new NetconfBaseOps(rpc, BaseSchema.BASE_NETCONF_CTX.getEffectiveModelContext()), false);
         final TxListener listener = mock(TxListener.class);
         tx.addListener(listener);
         tx.delete(LogicalDatastoreType.CONFIGURATION, yangIId);
@@ -188,9 +189,9 @@ public class NetconfDeviceWriteOnlyTxTest {
     public void testListenerFailure() throws Exception {
         final IllegalStateException cause = new IllegalStateException("Failed tx");
         doReturn(FluentFutures.immediateFailedFluentFuture(cause))
-                .when(rpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .when(rpc).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
         final WriteCandidateTx tx = new WriteCandidateTx(
-                id, new NetconfBaseOps(rpc, BaseSchema.BASE_NETCONF_CTX.getSchemaContext()), false);
+                id, new NetconfBaseOps(rpc, BaseSchema.BASE_NETCONF_CTX.getEffectiveModelContext()), false);
         final TxListener listener = mock(TxListener.class);
         tx.addListener(listener);
         tx.delete(LogicalDatastoreType.CONFIGURATION, yangIId);
index a14c3a39e34d20f02802a520d28bd4763d86b904..f0de12008823482b29adc9f201ec5f47c4356e2e 100644 (file)
@@ -27,8 +27,9 @@ import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransform
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 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;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 public class ReadOnlyTxTest {
@@ -44,43 +45,43 @@ public class ReadOnlyTxTest {
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult(mockedNode))).when(rpc)
-                .invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+                .invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
         doReturn("node").when(mockedNode).toString();
     }
 
     @Test
     public void testRead() throws Exception {
-        final NetconfBaseOps netconfOps = new NetconfBaseOps(rpc, mock(SchemaContext.class));
+        final NetconfBaseOps netconfOps = new NetconfBaseOps(rpc, mock(EffectiveModelContext.class));
 
         final ReadOnlyTx readOnlyTx =
                 new ReadOnlyTx(netconfOps, new RemoteDeviceId("a", new InetSocketAddress("localhost", 196)));
 
         readOnlyTx.read(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.create());
         verify(rpc).invokeRpc(Mockito.eq(NetconfMessageTransformUtil.toPath(
-                NetconfMessageTransformUtil.NETCONF_GET_CONFIG_QNAME)), any(NormalizedNode.class));
+                NetconfMessageTransformUtil.NETCONF_GET_CONFIG_QNAME)), any(ContainerNode.class));
         readOnlyTx.read(LogicalDatastoreType.OPERATIONAL, PATH);
         verify(rpc).invokeRpc(Mockito.eq(NetconfMessageTransformUtil.toPath(
-                NetconfMessageTransformUtil.NETCONF_GET_QNAME)), any(NormalizedNode.class));
+                NetconfMessageTransformUtil.NETCONF_GET_QNAME)), any(ContainerNode.class));
     }
 
     @Test
     public void testExists() throws Exception {
-        final NetconfBaseOps netconfOps = new NetconfBaseOps(rpc, mock(SchemaContext.class));
+        final NetconfBaseOps netconfOps = new NetconfBaseOps(rpc, mock(EffectiveModelContext.class));
 
         final ReadOnlyTx readOnlyTx =
                 new ReadOnlyTx(netconfOps, new RemoteDeviceId("a", new InetSocketAddress("localhost", 196)));
 
         readOnlyTx.exists(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.create());
         verify(rpc).invokeRpc(Mockito.eq(NetconfMessageTransformUtil.toPath(
-                NetconfMessageTransformUtil.NETCONF_GET_CONFIG_QNAME)), any(NormalizedNode.class));
+                NetconfMessageTransformUtil.NETCONF_GET_CONFIG_QNAME)), any(ContainerNode.class));
         readOnlyTx.exists(LogicalDatastoreType.OPERATIONAL, PATH);
         verify(rpc).invokeRpc(Mockito.eq(NetconfMessageTransformUtil.toPath(
-                NetconfMessageTransformUtil.NETCONF_GET_QNAME)), any(NormalizedNode.class));
+                NetconfMessageTransformUtil.NETCONF_GET_QNAME)), any(ContainerNode.class));
     }
 
     @Test
     public void testIdentifier() throws Exception {
-        final NetconfBaseOps netconfOps = new NetconfBaseOps(rpc, mock(SchemaContext.class));
+        final NetconfBaseOps netconfOps = new NetconfBaseOps(rpc, mock(EffectiveModelContext.class));
         final ReadOnlyTx tx1 =
                 new ReadOnlyTx(netconfOps, new RemoteDeviceId("a", new InetSocketAddress("localhost", 196)));
         final ReadOnlyTx tx2 =
index 1a41e2496d4051850db128ae86fc4590dfe7e1d5..78d509e08a875b7ad34320677ff95d247d357d30 100644 (file)
@@ -31,6 +31,7 @@ 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.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;
@@ -55,7 +56,7 @@ public class NetconfRemoteSchemaYangSourceProviderTest {
 
         final DOMRpcResult value = new DefaultDOMRpcResult(getNode(), Collections.emptySet());
         final FluentFuture<DOMRpcResult> response = FluentFutures.immediateFluentFuture(value);
-        doReturn(response).when(service).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class));
+        doReturn(response).when(service).invokeRpc(any(SchemaPath.class), any(ContainerNode.class));
 
         provider = new NetconfRemoteSchemaYangSourceProvider(
                 new RemoteDeviceId("device1", InetSocketAddress.createUnresolved("localhost", 17830)), service);
index 0aae2221882676dd2cd66eac6b56ab89a8ad7764..bb78a324cbf28789e100bff7d76a9314d27f6d76 100644 (file)
@@ -49,7 +49,7 @@ import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.mdsal.dom.api.DOMActionResult;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
@@ -59,7 +59,7 @@ import org.opendaylight.netconf.sal.connect.netconf.schema.NetconfRemoteSchemaYa
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfBaseOps;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
 import org.opendaylight.netconf.util.NetconfUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.$YangModuleInfoImpl;
+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.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas;
@@ -84,7 +84,7 @@ 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.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.w3c.dom.Node;
@@ -160,23 +160,17 @@ public class NetconfMessageTransformerTest {
     private static final SchemaPath CHOICE_ACTION_PATH =
             SchemaPath.create(true, CONFLICT_CHOICE_QNAME, CHOICE_CONT_QNAME, CHOICE_CONT_QNAME, CHOICE_ACTION_QNAME);
 
-    private static SchemaContext PARTIAL_SCHEMA;
-    private static SchemaContext SCHEMA;
-    private static SchemaContext ACTION_SCHEMA;
+    private static EffectiveModelContext PARTIAL_SCHEMA;
+    private static EffectiveModelContext SCHEMA;
+    private static EffectiveModelContext ACTION_SCHEMA;
 
     private NetconfMessageTransformer actionNetconfMessageTransformer;
     private NetconfMessageTransformer netconfMessageTransformer;
 
     @BeforeClass
     public static void beforeClass() {
-        final ModuleInfoBackedContext context = ModuleInfoBackedContext.create();
-        context.addModuleInfos(Collections.singleton(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
-            .netconf.monitoring.rev101004.$YangModuleInfoImpl.getInstance()));
-        PARTIAL_SCHEMA = context.tryToCreateSchemaContext().get();
-
-        context.addModuleInfos(Collections.singleton($YangModuleInfoImpl.getInstance()));
-        SCHEMA = context.tryToCreateSchemaContext().get();
-
+        PARTIAL_SCHEMA = BindingRuntimeHelpers.createEffectiveModel(NetconfState.class);
+        SCHEMA = BindingRuntimeHelpers.createEffectiveModel(IetfNetconfService.class, NetconfState.class);
         ACTION_SCHEMA = YangParserTestUtils.parseYangResources(NetconfMessageTransformerTest.class,
             "/schemas/example-server-farm.yang","/schemas/example-server-farm-2.yang",
             "/schemas/conflicting-actions.yang", "/schemas/augmented-action.yang",
@@ -483,7 +477,7 @@ public class NetconfMessageTransformerTest {
                 + "</rpc>");
     }
 
-    private static NetconfMessageTransformer getTransformer(final SchemaContext schema) {
+    private static NetconfMessageTransformer getTransformer(final EffectiveModelContext schema) {
         return new NetconfMessageTransformer(new EmptyMountPointContext(schema), true);
     }
 
index b015c672fd894ba8c8cf454a73feee3da9c07c8e..99fec9d11ea79a2b325335fd3277df135d7d5ea7 100644 (file)
@@ -15,7 +15,9 @@ import static org.mockito.Mockito.verify;
 import static org.opendaylight.mdsal.common.api.CommitInfo.emptyFluentFuture;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -91,7 +93,7 @@ public class NetconfSalKeystoreServiceTest {
     }
 
     private AddPrivateKeyInput getPrivateKeyInput() throws Exception {
-        final List<PrivateKey> privateKeys = new ArrayList<>();
+        final Map<PrivateKeyKey, PrivateKey> privateKeys = new HashMap<>();
         final Document document = readKeystoreXML();
         final NodeList nodeList = document.getElementsByTagName(XML_ELEMENT_PRIVATE_KEY);
         for (int i = 0; i < nodeList.getLength(); i++) {
@@ -112,20 +114,19 @@ public class NetconfSalKeystoreServiceTest {
                 certChain.add(certNode.getTextContent());
             }
 
-            final PrivateKey privateKey = new PrivateKeyBuilder()
-                    .withKey(new PrivateKeyKey(keyName))
-                    .setName(keyName)
-                    .setData(keyData)
-                    .setCertificateChain(certChain)
-                    .build();
-            privateKeys.add(privateKey);
+            final PrivateKeyKey key = new PrivateKeyKey(keyName);
+            privateKeys.put(key, new PrivateKeyBuilder()
+                .withKey(key)
+                .setData(keyData)
+                .setCertificateChain(certChain)
+                .build());
         }
 
         return new AddPrivateKeyInputBuilder().setPrivateKey(privateKeys).build();
     }
 
     private AddTrustedCertificateInput getTrustedCertificateInput() throws Exception {
-        final List<TrustedCertificate> trustedCertificates = new ArrayList<>();
+        final Map<TrustedCertificateKey, TrustedCertificate> trustedCertificates = new HashMap<>();
         final Document document = readKeystoreXML();
         final NodeList nodeList = document.getElementsByTagName(XML_ELEMENT_TRUSTED_CERT);
         for (int i = 0; i < nodeList.getLength(); i++) {
@@ -137,12 +138,12 @@ public class NetconfSalKeystoreServiceTest {
             final String certName = element.getElementsByTagName(XML_ELEMENT_NAME).item(0).getTextContent();
             final String certData = element.getElementsByTagName(XML_ELEMENT_CERT).item(0).getTextContent();
 
-            final TrustedCertificate certificate = new TrustedCertificateBuilder()
-                    .withKey(new TrustedCertificateKey(certName))
-                    .setName(certName)
-                    .setCertificate(certData)
-                    .build();
-            trustedCertificates.add(certificate);
+            final TrustedCertificateKey key = new TrustedCertificateKey(certName);
+            trustedCertificates.put(key, new TrustedCertificateBuilder()
+                .withKey(key)
+                .setName(certName)
+                .setCertificate(certData)
+                .build());
         }
 
         return new AddTrustedCertificateInputBuilder().setTrustedCertificate(trustedCertificates).build();
index 2c0501e5e1e1e1708911be5f1917e0ad119a4c1f..806b38543c7daf03f961e72b67717a22df693fdc 100644 (file)
@@ -5,14 +5,16 @@
  * 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.connect.netconf.util;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -51,46 +53,46 @@ public class NodeContainerProxyTest {
 
     @Test
     public void testGetQName() throws Exception {
-        Assert.assertEquals(QNAME, proxy.getQName());
+        assertEquals(QNAME, proxy.getQName());
     }
 
     @Test
     public void testGetChildNodes() throws Exception {
-        Assert.assertEquals(2, proxy.getChildNodes().size());
+        assertEquals(2, proxy.getChildNodes().size());
     }
 
     @Test
     public void testGetAvailableAugmentations() throws Exception {
-        final Set<AugmentationSchemaNode> augmentations = proxy.getAvailableAugmentations();
-        Assert.assertEquals(2, augmentations.size());
-        Assert.assertTrue(augmentations.contains(augSchema1));
-        Assert.assertTrue(augmentations.contains(augSchema2));
+        final Collection<? extends AugmentationSchemaNode> augmentations = proxy.getAvailableAugmentations();
+        assertEquals(2, augmentations.size());
+        assertTrue(augmentations.contains(augSchema1));
+        assertTrue(augmentations.contains(augSchema2));
     }
 
     @Test
     public void testGetDataChildByName() throws Exception {
         final DataSchemaNode schemaNode = proxy.getDataChildByName(NODE_1_QNAME);
-        Assert.assertEquals(schemaNode1, schemaNode);
+        assertEquals(schemaNode1, schemaNode);
     }
 
     @Test
     public void testGetTypeDefinitions() throws Exception {
-        Assert.assertTrue(proxy.getTypeDefinitions().isEmpty());
+        assertTrue(proxy.getTypeDefinitions().isEmpty());
     }
 
     @Test
     public void testGetGroupings() throws Exception {
-        Assert.assertTrue(proxy.getGroupings().isEmpty());
+        assertTrue(proxy.getGroupings().isEmpty());
     }
 
     @Test
     public void testGetUses() throws Exception {
-        Assert.assertTrue(proxy.getUses().isEmpty());
+        assertTrue(proxy.getUses().isEmpty());
     }
 
     @Test
     public void testGetUnknownSchemaNodes() throws Exception {
-        Assert.assertTrue(proxy.getUnknownSchemaNodes().isEmpty());
+        assertTrue(proxy.getUnknownSchemaNodes().isEmpty());
     }
 
     @Test(expected = UnsupportedOperationException.class)
index 9aa2f7a31293873843a91184cc80751290480a88..9cd669a91330b2531616ae6b3810bab94295136e 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 166ce152c7c61faf4de966e8bbb85639d8f2cc01..77a9762ce026923699e2556d799f6d3cc9a1cb5b 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>bundle-parent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index ec76f8866b9ba5f0b1ea77f522a883e21a12f133..eef17df333e6d0ae13bc6aa9ac2e0c3211cc9163 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.netconf.test.tool;
 import com.google.common.base.Function;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Collections2;
+import com.google.common.collect.Maps;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -36,7 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.mon
 
 public class DummyMonitoringService implements NetconfMonitoringService {
 
-    private static final Sessions EMPTY_SESSIONS = new SessionsBuilder().setSession(Collections.emptyList()).build();
+    private static final Sessions EMPTY_SESSIONS = new SessionsBuilder().build();
     private static final Function<Capability, Uri> CAPABILITY_URI_FUNCTION =
         capability -> new Uri(capability.getCapabilityUri());
 
@@ -68,8 +69,10 @@ public class DummyMonitoringService implements NetconfMonitoringService {
             }
         }
 
-        this.schemas = new SchemasBuilder().setSchema(
-            new ArrayList<>(Collections2.transform(moduleCapabilities, CAPABILITY_SCHEMA_FUNCTION))).build();
+        this.schemas = new SchemasBuilder()
+                .setSchema(Maps.uniqueIndex(Collections2.transform(moduleCapabilities, CAPABILITY_SCHEMA_FUNCTION),
+                    Schema::key))
+                .build();
     }
 
     @Override
index 49eb3558f110c5ba23bd4dbf31e0dc426820ec02..500258e7f579abbead4114d0dd967d5153c76d88 100644 (file)
@@ -60,8 +60,8 @@ 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.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
+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;
 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider;
 import org.slf4j.Logger;
@@ -73,12 +73,12 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory {
             .getLogger(MdsalOperationProvider.class);
 
     private final Set<Capability> caps;
-    private final SchemaContext schemaContext;
+    private final EffectiveModelContext schemaContext;
     private final SchemaSourceProvider<YangTextSchemaSource> sourceProvider;
 
     MdsalOperationProvider(final SessionIdProvider idProvider,
                            final Set<Capability> caps,
-                           final SchemaContext schemaContext,
+                           final EffectiveModelContext schemaContext,
                            final SchemaSourceProvider<YangTextSchemaSource> sourceProvider) {
         this.caps = caps;
         this.schemaContext = schemaContext;
@@ -106,14 +106,14 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory {
 
     static class MdsalOperationService implements NetconfOperationService {
         private final long currentSessionId;
-        private final SchemaContext schemaContext;
+        private final EffectiveModelContext schemaContext;
         private final Set<Capability> caps;
         private final DOMSchemaService schemaService;
         private final DOMDataBroker dataBroker;
         private final SchemaSourceProvider<YangTextSchemaSource> sourceProvider;
 
         MdsalOperationService(final long currentSessionId,
-                              final SchemaContext schemaContext,
+                              final EffectiveModelContext schemaContext,
                               final Set<Capability> caps,
                               final SchemaSourceProvider<YangTextSchemaSource> sourceProvider) {
             this.currentSessionId = currentSessionId;
@@ -182,7 +182,7 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory {
                             new NodeWithValue<>(location, "NETCONF")).withValue("NETCONF").build();
 
             Map<QName, Object> keyValues = new HashMap<>();
-            for (final Schema schema : monitor.getSchemas().getSchema()) {
+            for (final Schema schema : monitor.getSchemas().getSchema().values()) {
                 keyValues.put(identifier, schema.getIdentifier());
                 keyValues.put(version, schema.getVersion());
                 keyValues.put(format, Yang.QNAME);
@@ -232,20 +232,20 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory {
             return new DOMSchemaService() {
 
                 @Override
-                public SchemaContext getSessionContext() {
+                public EffectiveModelContext getSessionContext() {
                     return schemaContext;
                 }
 
                 @Override
-                public SchemaContext getGlobalContext() {
+                public EffectiveModelContext getGlobalContext() {
                     return schemaContext;
                 }
 
                 @Override
-                public ListenerRegistration<SchemaContextListener> registerSchemaContextListener(
-                        final SchemaContextListener listener) {
-                    listener.onGlobalContextUpdated(getGlobalContext());
-                    return new AbstractListenerRegistration<SchemaContextListener>(listener) {
+                public ListenerRegistration<EffectiveModelContextListener> registerSchemaContextListener(
+                        final EffectiveModelContextListener listener) {
+                    listener.onModelContextUpdated(getGlobalContext());
+                    return new AbstractListenerRegistration<>(listener) {
 
                         @Override
                         protected void removeRegistration() {
index 46ac8a5e7cd53a59de7494e8f246d00804d8ece6..dba9cb0da18354a5afc55912ca3dfa3369f59f90 100644 (file)
@@ -58,8 +58,8 @@ import org.opendaylight.netconf.test.tool.operations.OperationsProvider;
 import org.opendaylight.netconf.test.tool.rpchandler.SettableOperationRpcProvider;
 import org.opendaylight.netconf.test.tool.schemacache.SchemaSourceCache;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 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;
@@ -85,7 +85,7 @@ public class NetconfDeviceSimulator implements Closeable {
     private final ScheduledExecutorService minaTimerExecutor;
     private final ExecutorService nioExecutor;
     private final Configuration configuration;
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
 
     private boolean sendFakeSchema = false;
 
index c7bd7640081af2f3af53290fda778f2c7005648c..ec8beac73c9dd527358ee999cb1c2025d87ac6c6 100644 (file)
@@ -34,12 +34,12 @@ public final class NetconfState {
     @XmlElementWrapper(name = "schemas")
     @XmlElement(name = "schema")
     public Collection<MonitoringSchema> getSchemas() {
-        return Collections2.transform(schemas.getSchema(), MonitoringSchema::new);
+        return Collections2.transform(schemas.nonnullSchema().values(), MonitoringSchema::new);
     }
 
     @XmlElementWrapper(name = "sessions")
     @XmlElement(name = "session")
     public Collection<MonitoringSession> getSessions() {
-        return Collections2.transform(sessions.getSession(), MonitoringSession::new);
+        return Collections2.transform(sessions.nonnullSession().values(), MonitoringSession::new);
     }
 }
index f72671c20e5e8405d3fbdeb064afa68a05c25388..c2eaa8dcce0373c5afc95dea70f6cddbd589f351 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.netconf.test.tool;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.xmlunit.assertj.XmlAssert.assertThat;
 
@@ -148,14 +149,14 @@ public class TestToolTest {
             + "</rpc>";
         Document docResponse = invokeRpc(TCP_SIMULATOR_CONFIG, getSchema);
         Set<YangResource> expectedYangResources = Configuration.DEFAULT_YANG_RESOURCES;
-        assert expectedYangResources.size() > 0;
+        assertEquals(4, expectedYangResources.size());
         assertThat(docResponse)
             .withNamespaceContext(PREFIX_2_URI)
             .valueByXPath("count(//base10:rpc-reply/base10:data/ncmon:netconf-state/ncmon:schemas/ncmon:schema)")
             .isEqualTo(expectedYangResources.size());
     }
 
-    private Document invokeRpc(Configuration simulatorConfig, String xmlRequest)
+    private Document invokeRpc(final Configuration simulatorConfig, final String xmlRequest)
         throws Exception {
         // GIVEN
         int localPort = launchSimulator(simulatorConfig);
@@ -185,7 +186,7 @@ public class TestToolTest {
      * @param configuration The simulator configuration.
      * @return The TCP port number to access the launched simulator.
      */
-    private int launchSimulator(Configuration configuration) {
+    private int launchSimulator(final Configuration configuration) {
         return CACHED_SIMULATORS.computeIfAbsent(configuration, cfg -> {
             NetconfDeviceSimulator simulator = new NetconfDeviceSimulator(cfg);
             simulator.start();
@@ -196,7 +197,7 @@ public class TestToolTest {
     }
 
     @SuppressWarnings("deprecation")
-    private static Configuration getSimulatorConfig(NetconfClientProtocol protocol, User user) {
+    private static Configuration getSimulatorConfig(final NetconfClientProtocol protocol, final User user) {
         return new ConfigurationBuilder()
             .setStartingPort(RANDOM_PORT)
             .setRpcConfigFile(CUSTOM_RPC_CONFIG)
@@ -206,9 +207,9 @@ public class TestToolTest {
     }
 
     @SuppressWarnings("deprecation")
-    private static NetconfClientConfiguration getClientConfig(String host, int port,
-                                                              Configuration simulatorConfig,
-                                                              NetconfClientSessionListener sessionListener) {
+    private static NetconfClientConfiguration getClientConfig(final String host, final int port,
+                                                              final Configuration simulatorConfig,
+                                                              final NetconfClientSessionListener sessionListener) {
         User user = ((InMemoryAuthenticationProvider) simulatorConfig.getAuthProvider()).user;
         return NetconfClientConfigurationBuilder.create()
             .withAddress(new InetSocketAddress(host, port))
@@ -224,7 +225,7 @@ public class TestToolTest {
         private final String username;
         private final String password;
 
-        private User(String username, String password) {
+        private User(final String username, final String password) {
             this.username = username;
             this.password = password;
         }
@@ -234,12 +235,12 @@ public class TestToolTest {
 
         private final User user;
 
-        private InMemoryAuthenticationProvider(User user) {
+        private InMemoryAuthenticationProvider(final User user) {
             this.user = user;
         }
 
         @Override
-        public boolean authenticated(String username, String password) {
+        public boolean authenticated(final String username, final String password) {
             return user.username.equals(username) && user.password.equals(password);
         }
     }
index 8901be0beaff2111bd82b5ff5271167e1ecab13e..eecfd2acdb7464ba48693e91179df1192eae75e0 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 9791e70b632974a6769c54d9c4c536a077cd67e6..049c50e73f25eb7c1fc6024b70f68ffd5217549a 100644 (file)
@@ -13,11 +13,16 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
 import com.google.common.collect.Iterables;
+import com.google.common.io.ByteStreams;
 import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
@@ -31,8 +36,11 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.librar
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.yanglib.impl.rev141210.YanglibConfig;
+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;
@@ -50,7 +58,7 @@ import org.slf4j.LoggerFactory;
  * along with source identifier to
  * ietf-netconf-yang-library/modules-state/module list.
  */
-public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
+public class YangLibProvider implements AutoCloseable, SchemaSourceListener, YangLibService {
     private static final Logger LOG = LoggerFactory.getLogger(YangLibProvider.class);
 
     private static final Predicate<PotentialSchemaSource<?>> YANG_SCHEMA_SOURCE =
@@ -62,10 +70,10 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
     private SchemaListenerRegistration schemaListenerRegistration;
 
     public YangLibProvider(final YanglibConfig yanglibConfig, final DataBroker dataBroker,
-            final SharedSchemaRepository schemaRepository) {
+            final YangParserFactory parserFactory) {
         this.yanglibConfig = requireNonNull(yanglibConfig);
         this.dataBroker = requireNonNull(dataBroker);
-        this.schemaRepository = requireNonNull(schemaRepository);
+        this.schemaRepository = new SharedSchemaRepository("yang-library", parserFactory);
     }
 
     @Override
@@ -101,7 +109,7 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
 
     @Override
     public void schemaSourceRegistered(final Iterable<PotentialSchemaSource<?>> sources) {
-        final List<Module> newModules = new ArrayList<>();
+        final Map<ModuleKey, Module> newModules = new HashMap<>();
 
         for (PotentialSchemaSource<?> potentialYangSource : Iterables.filter(sources, YANG_SCHEMA_SOURCE)) {
             final YangIdentifier moduleName = new YangIdentifier(potentialYangSource.getSourceIdentifier().getName());
@@ -112,7 +120,7 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
                     .setSchema(getUrlForModule(potentialYangSource.getSourceIdentifier()))
                     .build();
 
-            newModules.add(newModule);
+            newModules.put(newModule.key(), newModule);
         }
 
         if (newModules.isEmpty()) {
@@ -146,12 +154,9 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
         }
 
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.delete(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifier.create(ModulesState.class)
-                        .child(Module.class,
-                                new ModuleKey(
-                                        new YangIdentifier(source.getSourceIdentifier().getName()),
-                                        RevisionUtils.fromYangCommon(source.getSourceIdentifier().getRevision()))));
+        tx.delete(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(ModulesState.class)
+            .child(Module.class, new ModuleKey(new YangIdentifier(source.getSourceIdentifier().getName()),
+                RevisionUtils.fromYangCommon(source.getSourceIdentifier().getRevision()))));
 
         tx.commit().addCallback(new FutureCallback<CommitInfo>() {
             @Override
@@ -166,7 +171,22 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
         }, MoreExecutors.directExecutor());
     }
 
-
+    @Override
+    public String getSchema(final String name, final String revision) {
+        LOG.debug("Attempting load for schema source {}:{}", name, revision);
+        final SourceIdentifier sourceId = RevisionSourceIdentifier.create(name,
+            revision.isEmpty() ? null : Revision.of(revision));
+
+        final ListenableFuture<YangTextSchemaSource> sourceFuture = schemaRepository.getSchemaSource(sourceId,
+            YangTextSchemaSource.class);
+
+        try {
+            final YangTextSchemaSource source = sourceFuture.get();
+            return new String(ByteStreams.toByteArray(source.openStream()), Charset.defaultCharset());
+        } catch (InterruptedException | ExecutionException | IOException e) {
+            throw new IllegalStateException("Unable to get schema " + sourceId, e);
+        }
+    }
 
     private Uri getUrlForModule(final SourceIdentifier sourceIdentifier) {
         return new Uri("http://" + yanglibConfig.getBindingAddr() + ':' + yanglibConfig.getBindingPort()
diff --git a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java
deleted file mode 100644 (file)
index 185f1ea..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. 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.yanglib.impl;
-
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.io.ByteStreams;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.util.concurrent.ExecutionException;
-import org.opendaylight.yanglib.api.YangLibService;
-import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository;
-import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Provides schema sources from yang library.
- */
-public class YangLibServiceImpl implements YangLibService {
-    private static final Logger LOG = LoggerFactory.getLogger(YangLibServiceImpl.class);
-
-    private final SchemaRepository schemaRepository;
-
-    public YangLibServiceImpl(final SchemaRepository schemaRepository) {
-        this.schemaRepository = requireNonNull(schemaRepository);
-    }
-
-    @Override
-    public String getSchema(final String name, final String revision) {
-        LOG.debug("Attempting load for schema source {}:{}", name, revision);
-        final SourceIdentifier sourceId = RevisionSourceIdentifier.create(name,
-            revision.isEmpty() ? null : Revision.of(revision));
-
-        final ListenableFuture<YangTextSchemaSource> sourceFuture = schemaRepository.getSchemaSource(sourceId,
-            YangTextSchemaSource.class);
-
-        try {
-            final YangTextSchemaSource source = sourceFuture.get();
-            return new String(ByteStreams.toByteArray(source.openStream()), Charset.defaultCharset());
-        } catch (InterruptedException | ExecutionException | IOException e) {
-            throw new IllegalStateException("Unable to get schema " + sourceId, e);
-        }
-    }
-}
index b67a438e59fa73d18c09fb78b57cf967d5ea8e04..2f6c00511c71b9120cbcf5262cd954bdadf384e5 100644 (file)
   <reference id="webServer" interface="org.opendaylight.aaa.web.WebServer"/>
   <reference id="webContextSecurer" interface="org.opendaylight.aaa.web.WebContextSecurer"/>
   <reference id="servletSupport" interface="org.opendaylight.aaa.web.servlet.ServletSupport" />
-
-  <bean id="schemaRepository" class="org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository">
-    <argument value="yang-library"/>
-  </bean>
-
-  <bean id="yangLibService" class="org.opendaylight.yanglib.impl.YangLibServiceImpl">
-    <argument ref="schemaRepository"/>
-  </bean>
-
-  <bean id="yangLibRestApp" class="org.opendaylight.yanglib.impl.YangLibRestApp">
-    <argument ref="yangLibService"/>
-  </bean>
+  <reference id="parserFactory" interface="org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory" />
 
   <bean id="yangLibProvider" class="org.opendaylight.yanglib.impl.YangLibProvider"
           init-method="init" destroy-method="close">
     <argument ref="yanglibConfig"/>
     <argument ref="dataBroker"/>
-    <argument ref="schemaRepository"/>
+    <argument ref="parserFactory"/>
+  </bean>
+
+  <bean id="yangLibRestApp" class="org.opendaylight.yanglib.impl.YangLibRestApp">
+    <argument ref="yangLibProvider"/>
   </bean>
 
   <bean id="webInitializer" class="org.opendaylight.yanglib.impl.WebInitializer"
index ea7b97ccfab2d5722d531fd0337fec29e990b1fe..7fe78602dafd5b7fdbe45069f69f8ab65fe38486 100644 (file)
@@ -22,7 +22,9 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import org.apache.commons.io.FileUtils;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -52,7 +54,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.repo.SharedSchemaRepository;
+import org.opendaylight.yangtools.yang.parser.impl.YangParserFactoryImpl;
 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.ASTSchemaSource;
 
 public class YangLibProviderTest {
@@ -92,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 SharedSchemaRepository("yang-library"));
+        yangLibProvider = new YangLibProvider(yanglibConfig, dataBroker, new YangParserFactoryImpl());
     }
 
     @Test
@@ -117,7 +119,7 @@ public class YangLibProviderTest {
         doReturn(emptyFluentFuture()).when(writeTransaction).commit();
         yangLibProvider.schemaSourceRegistered(list);
 
-        List<Module> newModulesList = new ArrayList<>();
+        Map<ModuleKey, Module> newModulesList = new HashMap<>();
 
         Module newModule = new ModuleBuilder()
                 .setName(new YangIdentifier("no-revision"))
@@ -125,7 +127,7 @@ public class YangLibProviderTest {
                 .setSchema(new Uri("http://www.fake.com:300/yanglib/schemas/no-revision/"))
                 .build();
 
-        newModulesList.add(newModule);
+        newModulesList.put(newModule.key(), newModule);
 
         newModule = new ModuleBuilder()
                 .setName(new YangIdentifier("with-revision"))
@@ -133,7 +135,7 @@ public class YangLibProviderTest {
                 .setSchema(new Uri("http://www.fake.com:300/yanglib/schemas/with-revision/2016-04-28"))
                 .build();
 
-        newModulesList.add(newModule);
+        newModulesList.put(newModule.key(), newModule);
 
         verify(dataBroker).newWriteOnlyTransaction();
         verify(writeTransaction).merge(eq(LogicalDatastoreType.OPERATIONAL),
diff --git a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibServiceImplTest.java b/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibServiceImplTest.java
deleted file mode 100644 (file)
index d8cd3f2..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. 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.yanglib.impl;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-
-import com.google.common.base.MoreObjects.ToStringHelper;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import org.junit.Test;
-import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException;
-import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
-
-public class YangLibServiceImplTest {
-
-    private static final String TEST_OUTPUT_STRING = "hello world";
-
-    @Test
-    public void testSchema() throws SchemaSourceException {
-
-        final SchemaRepository schemaRepository = mock(SchemaRepository.class);
-        final YangLibServiceImpl yangLibService = new YangLibServiceImpl(schemaRepository);
-
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("name", Revision.of("2016-01-01"));
-
-        final YangTextSchemaSource yangTextSchemaSource = new YangTextSchemaSource(sourceIdentifier) {
-            @Override
-            protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-                return null;
-            }
-
-            @Override
-            public InputStream openStream() throws IOException {
-                return new ByteArrayInputStream(TEST_OUTPUT_STRING.getBytes());
-            }
-        };
-
-        final ListenableFuture<YangTextSchemaSource> sourceFuture = Futures.immediateFuture(yangTextSchemaSource);
-        doReturn(sourceFuture).when(schemaRepository).getSchemaSource(any(SourceIdentifier.class),
-                eq(YangTextSchemaSource.class));
-
-        final String outputStream = yangLibService.getSchema("name", "2016-01-01");
-        assertEquals(TEST_OUTPUT_STRING, outputStream);
-    }
-
-}
index e1c5521558b0aa721275d06ed4ac5b4fe80b7260..1e69b32b92c1b37b3ddf1afbdbeb912aeed00026 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>5.0.9</version>
+    <version>6.0.0</version>
     <relativePath/>
   </parent>
 
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
-        <artifactId>config-artifacts</artifactId>
-        <version>0.12.0</version>
-        <type>pom</type>
-        <scope>import</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.opendaylight.controller</groupId>
-        <artifactId>mdsal-artifacts</artifactId>
-        <version>1.11.0</version>
+        <artifactId>controller-artifacts</artifactId>
+        <version>2.0.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
diff --git a/pom.xml b/pom.xml
index eab9ca6fa0f537c66630ad91c342264260f58773..df2d451579cc1adb5700fb89059b27f307d8bac2 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index d86b8a204a5794e938dbbf99f80b3263fe2f4616..dbf99f9eb7fda3e6d558389f5899a2f56ca36983 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 99cde03fe7de78dc42bbd8fa81abb90857e899ca..526542ce2c5a61307880b51d9e762e4b4be92573 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.restconf.common.context;
 
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 
 public class InstanceIdentifierContext<T extends SchemaNode> {
@@ -17,10 +17,10 @@ public class InstanceIdentifierContext<T extends SchemaNode> {
     private final YangInstanceIdentifier instanceIdentifier;
     private final T schemaNode;
     private final DOMMountPoint mountPoint;
-    private final SchemaContext schemaContext;
+    private final EffectiveModelContext schemaContext;
 
     public InstanceIdentifierContext(final YangInstanceIdentifier instanceIdentifier, final T schemaNode,
-            final DOMMountPoint mountPoint,final SchemaContext context) {
+            final DOMMountPoint mountPoint, final EffectiveModelContext context) {
         this.instanceIdentifier = instanceIdentifier;
         this.schemaNode = schemaNode;
         this.mountPoint = mountPoint;
@@ -39,7 +39,7 @@ public class InstanceIdentifierContext<T extends SchemaNode> {
         return mountPoint;
     }
 
-    public SchemaContext getSchemaContext() {
+    public EffectiveModelContext getSchemaContext() {
         return schemaContext;
     }
 }
index 2e9cdc8692a427ef825c7b59f124f0f61f793683..0936edbaae2066104c039de738d59ea2de6c46eb 100644 (file)
@@ -9,9 +9,11 @@ package org.opendaylight.restconf.common.util;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import org.opendaylight.yangtools.concepts.SemVer;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.YangVersion;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Deviation;
@@ -25,8 +27,50 @@ 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.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.stmt.ModuleEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
+
+abstract class AbstractOperationsModule implements Module, ModuleEffectiveStatement {
+    @Override
+    public final ModuleStatement getDeclared() {
+        return null;
+    }
+
+    @Override
+    public final StatementDefinition statementDefinition() {
+        return YangStmtMapping.MODULE;
+    }
+
+    @Override
+    public final StatementSource getStatementSource() {
+        return StatementSource.CONTEXT;
+    }
+
+    @Override
+    public final <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends V> get(final Class<N> namespace,
+            final K identifier) {
+        return Optional.empty();
+    }
+
+    @Override
+    public final <K, V, N extends IdentifierNamespace<K, V>> Map<K, V> getAll(final Class<N> namespace) {
+        return Map.of();
+    }
+
+    @Override
+    public final String argument() {
+        return getName();
+    }
+
+    @Override
+    public final QNameModule localQNameModule() {
+        return getQNameModule();
+    }
 
-abstract class AbstractOperationsModule implements Module {
     @Override
     public final Set<ModuleImport> getImports() {
         // Yeah, not accurate, but this should not be needed
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
new file mode 100644 (file)
index 0000000..db9c269
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2020 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.restconf.common.util;
+
+import static com.google.common.base.Verify.verify;
+
+import com.google.common.collect.ImmutableMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+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;
+
+final class OperationsEffectiveModuleContext extends SimpleSchemaContext implements EffectiveModelContext {
+    private final Map<QNameModule, ModuleEffectiveStatement> modules;
+
+    OperationsEffectiveModuleContext(final Set<Module> modules) {
+        super(modules);
+        this.modules = modules.stream()
+                .map(module -> {
+                    verify(module instanceof ModuleEffectiveStatement, "Module %s is not an effective statement");
+                    return (ModuleEffectiveStatement) module;
+                })
+                .collect(ImmutableMap.toImmutableMap(ModuleEffectiveStatement::localQNameModule, Function.identity()));
+    }
+
+    @Override
+    public Map<QNameModule, ModuleEffectiveStatement> getModuleStatements() {
+        return modules;
+    }
+}
index 4cae6e5fb84aa6d3480381dd31e7ea70889c7bcf..5733be7d1febee9179c9dbfe09379e8dfad8280a 100644 (file)
@@ -11,11 +11,13 @@ 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;
 import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 
 final class OperationsImportedModule extends AbstractOperationsModule {
     private final Module original;
@@ -48,4 +50,9 @@ final class OperationsImportedModule extends AbstractOperationsModule {
     public Optional<DataSchemaNode> findDataChildByName(final QName name) {
         return Optional.empty();
     }
+
+    @Override
+    public Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+        return List.of();
+    }
 }
index 55a5865dc9bb3f0977434a3a069d1915a82c78e6..443cf4a4669d214c2633ef1fb2316f0686ddce92 100644 (file)
@@ -24,7 +24,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 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.SimpleSchemaContext;
 
 
 public final class OperationsResourceUtils {
@@ -60,6 +59,6 @@ public final class OperationsResourceUtils {
         }
 
         return new NormalizedNodeContext(new InstanceIdentifierContext<>(null, operatationsSchema, mountPoint,
-                SimpleSchemaContext.forModules(ImmutableSet.copyOf(modules))), operationsBuilder.build());
+                new OperationsEffectiveModuleContext(ImmutableSet.copyOf(modules))), operationsBuilder.build());
     }
 }
index bae66cd9df7ba169b905c6fcd67ff48fc35d1259..e4f07543857114a7080ecffd0a8f1b2c81852f89 100644 (file)
@@ -12,14 +12,18 @@ 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.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 QNameModule NAMESPACE = QNameModule.create(URI.create("urn:ietf:params:xml:ns:yang:ietf-restconf"));
+    static final @NonNull QNameModule NAMESPACE =
+            QNameModule.create(URI.create("urn:ietf:params:xml:ns:yang:ietf-restconf"));
 
     private final OperationsContainerSchemaNode operations;
 
@@ -37,6 +41,11 @@ final class OperationsRestconfModule extends AbstractOperationsModule {
         return NAMESPACE;
     }
 
+    @Override
+    public String getPrefix() {
+        return "rc";
+    }
+
     @Override
     public Collection<DataSchemaNode> getChildNodes() {
         return Collections.singleton(operations);
@@ -48,7 +57,8 @@ final class OperationsRestconfModule extends AbstractOperationsModule {
     }
 
     @Override
-    public String getPrefix() {
-        return "rc";
+    public Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+        // This is not accurate, but works for now
+        return List.of();
     }
 }
index d6dfb7dd6d7f8d40b6f975d19606395ba08c88ef..28dd659141cd5ce7d7e9eaa6940fd39575d295ff 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index dc61c21f56d4491f313c697d7987bf8a9fd153c8..6433908b18443f5f9ff69e1a2bda5d8a2d4ff10e 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>mdsal-binding-dom-adapter</artifactId>
+      <artifactId>mdsal-binding-test-utils</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
index 623bdfdc92749912bd92022ad2ba08d6756dead1..31682fa154352c62413cb3a6bbf6d076e4c475b3 100644 (file)
@@ -41,6 +41,7 @@ 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;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
@@ -109,7 +110,7 @@ public class NormalizedNodeXmlBodyWriter implements MessageBodyWriter<Normalized
             final InstanceIdentifierContext<?> pathContext, NormalizedNode<?, ?> data, final Optional<Integer> depth)
             throws IOException {
         final RestconfNormalizedNodeWriter nnWriter;
-        final SchemaContext schemaCtx = pathContext.getSchemaContext();
+        final EffectiveModelContext schemaCtx = pathContext.getSchemaContext();
         if (SchemaPath.ROOT.equals(schemaPath)) {
             nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, schemaPath, depth);
             if (data instanceof DOMSourceAnyxmlNode) {
index a2035ab78ca42ba511d7ea09dd54f4751a7335f4..e3c4b73138e16db16a426dfbb96a0aab3098444e 100644 (file)
@@ -16,7 +16,6 @@ import java.lang.reflect.Type;
 import java.net.URISyntaxException;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Deque;
 import java.util.List;
 import java.util.Optional;
@@ -199,8 +198,7 @@ public class XmlNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsPro
                                                             final String namespace) {
         final Deque<Object> result = new ArrayDeque<>();
         final ArrayList<ChoiceSchemaNode> choiceSchemaNodes = new ArrayList<>();
-        final Collection<DataSchemaNode> children = ((DataNodeContainer) schemaNode).getChildNodes();
-        for (final DataSchemaNode child : children) {
+        for (final DataSchemaNode child : ((DataNodeContainer) schemaNode).getChildNodes()) {
             if (child instanceof ChoiceSchemaNode) {
                 choiceSchemaNodes.add((ChoiceSchemaNode) child);
             } else if (child.getQName().getLocalName().equalsIgnoreCase(elementName)
@@ -222,7 +220,7 @@ public class XmlNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsPro
         }
 
         for (final ChoiceSchemaNode choiceNode : choiceSchemaNodes) {
-            for (final CaseSchemaNode caseNode : choiceNode.getCases().values()) {
+            for (final CaseSchemaNode caseNode : choiceNode.getCases()) {
                 final Deque<Object> resultFromRecursion = findPathToSchemaNodeByName(caseNode, elementName, namespace);
                 if (!resultFromRecursion.isEmpty()) {
                     resultFromRecursion.push(choiceNode);
index b30b00d107cf57d06b16c3f5726147ca6fb99cd4..d49635953893907ac8c6d7aa400bd2fefeea6a96 100644 (file)
@@ -490,7 +490,7 @@ public class BrokerFacade implements Closeable {
     }
 
     // RPC
-    public ListenableFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
+    public ListenableFuture<? extends DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
         if (this.rpcService == null) {
             throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE);
         }
index 237b4a96d15701bd1575e1d7d9f3e4efcf02f79b..261f7129df510a43ce3502bce940eac4b23a9873 100644 (file)
@@ -29,7 +29,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
@@ -63,6 +62,8 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 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.EffectiveModelContextListener;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
@@ -70,7 +71,6 @@ 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.SchemaContextListener;
 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;
@@ -79,7 +79,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Singleton
-public final class ControllerContext implements SchemaContextListener, Closeable {
+public final class ControllerContext implements EffectiveModelContextListener, Closeable {
     // FIXME: this should be in md-sal somewhere
     public static final String MOUNT = "yang-ext:mount";
 
@@ -99,8 +99,8 @@ public final class ControllerContext implements SchemaContextListener, Closeable
 
     private final DOMMountPointService mountService;
     private final DOMYangTextSourceProvider yangTextSourceProvider;
-    private final ListenerRegistration<SchemaContextListener> listenerRegistration;
-    private volatile SchemaContext globalSchema;
+    private final ListenerRegistration<?> listenerRegistration;
+    private volatile EffectiveModelContext globalSchema;
     private volatile DataNormalizer dataNormalizer;
 
     @Inject
@@ -109,7 +109,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         this.mountService = mountService;
         this.yangTextSourceProvider = domSchemaService.getExtensions().getInstance(DOMYangTextSourceProvider.class);
 
-        onGlobalContextUpdated(schemaService.getGlobalContext());
+        onModelContextUpdated(schemaService.getGlobalContext());
         listenerRegistration = schemaService.registerSchemaContextListener(this);
     }
 
@@ -126,7 +126,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         return new ControllerContext(schemaService, mountService, domSchemaService);
     }
 
-    private void setGlobalSchema(final SchemaContext globalSchema) {
+    private void setGlobalSchema(final EffectiveModelContext globalSchema) {
         this.globalSchema = globalSchema;
         this.dataNormalizer = new DataNormalizer(globalSchema);
     }
@@ -147,15 +147,15 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         listenerRegistration.close();
     }
 
-    public void setSchemas(final SchemaContext schemas) {
-        onGlobalContextUpdated(schemas);
+    public void setSchemas(final EffectiveModelContext schemas) {
+        onModelContextUpdated(schemas);
     }
 
     public InstanceIdentifierContext<?> toInstanceIdentifier(final String restconfInstance) {
         return toIdentifier(restconfInstance, false);
     }
 
-    public SchemaContext getGlobalSchema() {
+    public EffectiveModelContext getGlobalSchema() {
         return this.globalSchema;
     }
 
@@ -186,7 +186,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         }
 
         final InstanceIdentifierBuilder builder = YangInstanceIdentifier.builder();
-        final Set<Module> latestModule = this.globalSchema.findModules(startModule);
+        final Collection<? extends Module> latestModule = this.globalSchema.findModules(startModule);
 
         if (latestModule.isEmpty()) {
             throw new RestconfDocumentedException("The module named '" + startModule + "' does not exist.",
@@ -349,14 +349,14 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         return module == null ? null : module.getNamespace();
     }
 
-    public Set<Module> getAllModules(final DOMMountPoint mountPoint) {
+    public Collection<? extends Module> getAllModules(final DOMMountPoint mountPoint) {
         checkPreconditions();
 
         final SchemaContext schemaContext = mountPoint == null ? null : mountPoint.getSchemaContext();
         return schemaContext == null ? null : schemaContext.getModules();
     }
 
-    public Set<Module> getAllModules() {
+    public Collection<? extends Module> getAllModules() {
         checkPreconditions();
         return this.globalSchema.getModules();
     }
@@ -402,9 +402,9 @@ public final class ControllerContext implements SchemaContextListener, Closeable
             return null;
         }
 
-        final Set<GroupingDefinition> groupings = restconfModule.getGroupings();
+        final Collection<? extends GroupingDefinition> groupings = restconfModule.getGroupings();
 
-        final Iterable<GroupingDefinition> filteredGroups = Iterables.filter(groupings,
+        final Iterable<? extends GroupingDefinition> filteredGroups = Iterables.filter(groupings,
             g -> RestConfModule.ERRORS_GROUPING_SCHEMA_NODE.equals(g.getQName().getLocalName()));
 
         final GroupingDefinition restconfGrouping = Iterables.getFirst(filteredGroups, null);
@@ -425,8 +425,8 @@ public final class ControllerContext implements SchemaContextListener, Closeable
             return null;
         }
 
-        final Set<GroupingDefinition> groupings = restconfModule.getGroupings();
-        final Iterable<GroupingDefinition> filteredGroups = Iterables.filter(groupings,
+        final Collection<? extends GroupingDefinition> groupings = restconfModule.getGroupings();
+        final Iterable<? extends GroupingDefinition> filteredGroups = Iterables.filter(groupings,
             g -> RestConfModule.RESTCONF_GROUPING_SCHEMA_NODE.equals(g.getQName().getLocalName()));
         final GroupingDefinition restconfGrouping = Iterables.getFirst(filteredGroups, null);
 
@@ -470,7 +470,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
     }
 
     private static DataSchemaNode childByQName(final ChoiceSchemaNode container, final QName name) {
-        for (final CaseSchemaNode caze : container.getCases().values()) {
+        for (final CaseSchemaNode caze : container.getCases()) {
             final DataSchemaNode ret = childByQName(caze, name);
             if (ret != null) {
                 return ret;
@@ -555,7 +555,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
 
         if (strings.isEmpty()) {
             return createContext(builder.build(), (DataSchemaNode) parentNode,
-                mountPoint,mountPoint != null ? mountPoint.getSchemaContext() : this.globalSchema);
+                mountPoint,mountPoint != null ? mountPoint.getEffectiveModelContext() : this.globalSchema);
         }
 
         final String head = strings.iterator().next();
@@ -591,7 +591,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
                 }
                 final DOMMountPoint mount = mountOpt.get();
 
-                final SchemaContext mountPointSchema = mount.getSchemaContext();
+                final EffectiveModelContext mountPointSchema = mount.getEffectiveModelContext();
                 if (mountPointSchema == null) {
                     throw new RestconfDocumentedException("Mount point does not contain any schema with modules.",
                             ErrorType.APPLICATION, ErrorTag.UNKNOWN_ELEMENT);
@@ -599,7 +599,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
 
                 if (returnJustMountPoint || strings.size() == 1) {
                     final YangInstanceIdentifier instance = YangInstanceIdentifier.builder().build();
-                    return new InstanceIdentifierContext<>(instance, mountPointSchema, mount,mountPointSchema);
+                    return new InstanceIdentifierContext<>(instance, mountPointSchema, mount, mountPointSchema);
                 }
 
                 final String moduleNameBehindMountPoint = toModuleName(strings.get(1));
@@ -609,7 +609,8 @@ public final class ControllerContext implements SchemaContextListener, Closeable
                             ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
                 }
 
-                final Iterator<Module> it = mountPointSchema.findModules(moduleNameBehindMountPoint).iterator();
+                final Iterator<? extends Module> it = mountPointSchema.findModules(moduleNameBehindMountPoint)
+                        .iterator();
                 if (!it.hasNext()) {
                     throw new RestconfDocumentedException("\"" + moduleNameBehindMountPoint
                             + "\" module does not exist in mount point.", ErrorType.PROTOCOL, ErrorTag.UNKNOWN_ELEMENT);
@@ -629,7 +630,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
                             ErrorType.PROTOCOL, ErrorTag.UNKNOWN_ELEMENT);
                 }
             } else {
-                final SchemaContext schemaContext = mountPoint.getSchemaContext();
+                final EffectiveModelContext schemaContext = mountPoint.getEffectiveModelContext();
                 if (schemaContext != null) {
                     module = schemaContext.findModules(moduleName).stream().findFirst().orElse(null);
                 } else {
@@ -653,7 +654,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
                 }
                 if (rpc != null) {
                     return new InstanceIdentifierContext<>(builder.build(), rpc, mountPoint,
-                            mountPoint != null ? mountPoint.getSchemaContext() : this.globalSchema);
+                            mountPoint != null ? mountPoint.getEffectiveModelContext() : this.globalSchema);
                 }
             }
 
@@ -732,11 +733,12 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         }
 
         return createContext(builder.build(), targetNode, mountPoint,
-            mountPoint != null ? mountPoint.getSchemaContext() : this.globalSchema);
+            mountPoint != null ? mountPoint.getEffectiveModelContext() : this.globalSchema);
     }
 
     private static InstanceIdentifierContext<?> createContext(final YangInstanceIdentifier instance,
-            final DataSchemaNode dataSchemaNode, final DOMMountPoint mountPoint, final SchemaContext schemaContext) {
+            final DataSchemaNode dataSchemaNode, final DOMMountPoint mountPoint,
+            final EffectiveModelContext schemaContext) {
         final YangInstanceIdentifier instanceIdentifier = new DataNormalizer(schemaContext).toNormalized(instance);
         return new InstanceIdentifierContext<>(instanceIdentifier, dataSchemaNode, mountPoint, schemaContext);
     }
@@ -763,7 +765,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
     private static void collectInstanceDataNodeContainers(final List<DataSchemaNode> potentialSchemaNodes,
             final DataNodeContainer container, final String name) {
 
-        final Iterable<DataSchemaNode> nodes = Iterables.filter(container.getChildNodes(),
+        final Iterable<? extends DataSchemaNode> nodes = Iterables.filter(container.getChildNodes(),
             node -> name.equals(node.getQName().getLocalName()));
 
         // Can't combine this loop with the filter above because the filter is
@@ -776,8 +778,8 @@ public final class ControllerContext implements SchemaContextListener, Closeable
 
         final Iterable<ChoiceSchemaNode> choiceNodes = Iterables.filter(container.getChildNodes(),
             ChoiceSchemaNode.class);
-        final Iterable<Collection<CaseSchemaNode>> map = Iterables.transform(choiceNodes,
-            choice -> choice.getCases().values());
+        final Iterable<Collection<? extends CaseSchemaNode>> map = Iterables.transform(choiceNodes,
+            ChoiceSchemaNode::getCases);
         for (final CaseSchemaNode caze : Iterables.concat(map)) {
             collectInstanceDataNodeContainers(potentialSchemaNodes, caze, name);
         }
@@ -861,7 +863,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         checkPreconditions();
         final String module = toModuleName(name);
         final String node = toNodeName(name);
-        final Set<Module> modules = schemaContext.findModules(module);
+        final Collection<? extends Module> modules = schemaContext.findModules(module);
         return modules.isEmpty() ? null : QName.create(modules.iterator().next().getQNameModule(), node);
     }
 
@@ -890,9 +892,9 @@ public final class ControllerContext implements SchemaContextListener, Closeable
     }
 
     @Override
-    public void onGlobalContextUpdated(final SchemaContext context) {
+    public void onModelContextUpdated(final EffectiveModelContext context) {
         if (context != null) {
-            final Collection<RpcDefinition> defs = context.getOperations();
+            final Collection<? extends RpcDefinition> defs = context.getOperations();
             final Map<QName, RpcDefinition> newMap = new HashMap<>(defs.size());
 
             for (final RpcDefinition operation : defs) {
index 9dcbb2d4b8d670db7ca1c4eb544306b146f1ed17..f411678ad0b5a40ca8dffd22c74f57afc543775c 100644 (file)
@@ -336,7 +336,7 @@ abstract class DataNormalizationOperation<T extends PathArgument> implements Ide
             final ImmutableMap.Builder<PathArgument, DataNormalizationOperation<?>> byArgBuilder =
                     ImmutableMap.builder();
 
-            for (final CaseSchemaNode caze : schema.getCases().values()) {
+            for (final CaseSchemaNode caze : schema.getCases()) {
                 for (final DataSchemaNode cazeChild : caze.getChildNodes()) {
                     final DataNormalizationOperation<?> childOp = fromDataSchemaNode(cazeChild);
                     byArgBuilder.put(childOp.getIdentifier(), childOp);
@@ -373,7 +373,7 @@ abstract class DataNormalizationOperation<T extends PathArgument> implements Ide
 
     private static @Nullable ChoiceSchemaNode findChoice(final DataNodeContainer parent, final QName child) {
         for (final ChoiceSchemaNode choice : Iterables.filter(parent.getChildNodes(), ChoiceSchemaNode.class)) {
-            for (final CaseSchemaNode caze : choice.getCases().values()) {
+            for (final CaseSchemaNode caze : choice.getCases()) {
                 if (findChildSchemaNode(caze, child) != null) {
                     return choice;
                 }
index d30170fd5718dff28d87beb857019f0dc2c9ea9d..0eb122f960e431b9906cace3eb2edc98943a70fe 100644 (file)
@@ -19,6 +19,7 @@ import com.google.common.collect.Maps;
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.net.URI;
 import java.time.Instant;
 import java.time.format.DateTimeFormatter;
@@ -104,6 +105,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableCo
 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;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
@@ -195,10 +197,9 @@ public final class RestconfImpl implements RestconfService {
 
     @Override
     public NormalizedNodeContext getModules(final UriInfo uriInfo) {
-        final Set<Module> allModules = this.controllerContext.getAllModules();
-        final MapNode allModuleMap = makeModuleMapNode(allModules);
+        final MapNode allModuleMap = makeModuleMapNode(controllerContext.getAllModules());
 
-        final SchemaContext schemaContext = this.controllerContext.getGlobalSchema();
+        final EffectiveModelContext schemaContext = this.controllerContext.getGlobalSchema();
 
         final Module restconfModule = getRestconfModule();
         final DataSchemaNode modulesSchemaNode = this.controllerContext.getRestconfModuleRestConfSchemaNode(
@@ -229,8 +230,7 @@ public final class RestconfImpl implements RestconfService {
         final InstanceIdentifierContext<?> mountPointIdentifier =
                 this.controllerContext.toMountPointIdentifier(identifier);
         final DOMMountPoint mountPoint = mountPointIdentifier.getMountPoint();
-        final Set<Module> modules = this.controllerContext.getAllModules(mountPoint);
-        final MapNode mountPointModulesMap = makeModuleMapNode(modules);
+        final MapNode mountPointModulesMap = makeModuleMapNode(controllerContext.getAllModules(mountPoint));
 
         final Module restconfModule = getRestconfModule();
         final DataSchemaNode modulesSchemaNode = this.controllerContext.getRestconfModuleRestConfSchemaNode(
@@ -253,14 +253,14 @@ public final class RestconfImpl implements RestconfService {
         final Entry<String, Revision> nameRev = getModuleNameAndRevision(identifier);
         Module module = null;
         DOMMountPoint mountPoint = null;
-        final SchemaContext schemaContext;
+        final EffectiveModelContext schemaContext;
         if (identifier.contains(ControllerContext.MOUNT)) {
             final InstanceIdentifierContext<?> mountPointIdentifier =
                     this.controllerContext.toMountPointIdentifier(identifier);
             mountPoint = mountPointIdentifier.getMountPoint();
             module = this.controllerContext.findModuleByNameAndRevision(mountPoint, nameRev.getKey(),
                 nameRev.getValue());
-            schemaContext = mountPoint.getSchemaContext();
+            schemaContext = mountPoint.getEffectiveModelContext();
         } else {
             module = this.controllerContext.findModuleByNameAndRevision(nameRev.getKey(), nameRev.getValue());
             schemaContext = this.controllerContext.getGlobalSchema();
@@ -287,7 +287,7 @@ public final class RestconfImpl implements RestconfService {
 
     @Override
     public NormalizedNodeContext getAvailableStreams(final UriInfo uriInfo) {
-        final SchemaContext schemaContext = this.controllerContext.getGlobalSchema();
+        final EffectiveModelContext schemaContext = this.controllerContext.getGlobalSchema();
         final Set<String> availableStreams = Notificator.getStreamNames();
         final Module restconfModule = getRestconfModule();
         final DataSchemaNode streamSchemaNode = this.controllerContext
@@ -387,9 +387,9 @@ public final class RestconfImpl implements RestconfService {
 
         final SchemaPath type = payload.getInstanceIdentifierContext().getSchemaNode().getPath();
         final URI namespace = payload.getInstanceIdentifierContext().getSchemaNode().getQName().getNamespace();
-        final ListenableFuture<DOMRpcResult> response;
+        final ListenableFuture<? extends DOMRpcResult> response;
         final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint();
-        final SchemaContext schemaContext;
+        final EffectiveModelContext schemaContext;
 
         if (mountPoint != null) {
             final Optional<DOMRpcService> mountRpcServices = mountPoint.getService(DOMRpcService.class);
@@ -397,7 +397,7 @@ public final class RestconfImpl implements RestconfService {
                 LOG.debug("Error: Rpc service is missing.");
                 throw new RestconfDocumentedException("Rpc service is missing.");
             }
-            schemaContext = mountPoint.getSchemaContext();
+            schemaContext = mountPoint.getEffectiveModelContext();
             response = mountRpcServices.get().invokeRpc(type, payload.getData());
         } else {
             if (namespace.toString().equals(SAL_REMOTE_NAMESPACE)) {
@@ -436,34 +436,35 @@ public final class RestconfImpl implements RestconfService {
         }
     }
 
+    @SuppressFBWarnings(value = "NP_LOAD_OF_KNOWN_NULL_VALUE",
+            justification = "Looks like a false positive, see below FIXME")
     private NormalizedNodeContext invokeRpc(final String identifier, final UriInfo uriInfo) {
-
-        DOMMountPoint mountPoint = null;
+        final DOMMountPoint mountPoint;
         final String identifierEncoded;
-        final SchemaContext schemaContext;
+        final EffectiveModelContext schemaContext;
         if (identifier.contains(ControllerContext.MOUNT)) {
             // mounted RPC call - look up mount instance.
             final InstanceIdentifierContext<?> mountPointId = this.controllerContext.toMountPointIdentifier(identifier);
             mountPoint = mountPointId.getMountPoint();
-            schemaContext = mountPoint.getSchemaContext();
+            schemaContext = mountPoint.getEffectiveModelContext();
             final int startOfRemoteRpcName =
                     identifier.lastIndexOf(ControllerContext.MOUNT) + ControllerContext.MOUNT.length() + 1;
             final String remoteRpcName = identifier.substring(startOfRemoteRpcName);
             identifierEncoded = remoteRpcName;
 
-        } else if (identifier.indexOf('/') != CHAR_NOT_FOUND) {
+        } else if (identifier.indexOf('/') == CHAR_NOT_FOUND) {
+            identifierEncoded = identifier;
+            mountPoint = null;
+            schemaContext = this.controllerContext.getGlobalSchema();
+        } else {
             LOG.debug("Identifier {} cannot contain slash character (/).", identifier);
             throw new RestconfDocumentedException(String.format("Identifier %n%s%ncan\'t contain slash character (/).%n"
                     + "If slash is part of identifier name then use %%2F placeholder.", identifier), ErrorType.PROTOCOL,
                 ErrorTag.INVALID_VALUE);
-        } else {
-            identifierEncoded = identifier;
-            schemaContext = this.controllerContext.getGlobalSchema();
         }
 
         final String identifierDecoded = ControllerContext.urlPathArgDecode(identifierEncoded);
-
-        RpcDefinition rpc;
+        final RpcDefinition rpc;
         if (mountPoint == null) {
             rpc = this.controllerContext.getRpcDefinition(identifierDecoded);
         } else {
@@ -481,7 +482,7 @@ public final class RestconfImpl implements RestconfService {
                     + " with an input section defined", ErrorType.RPC, ErrorTag.MISSING_ELEMENT);
         }
 
-        final ListenableFuture<DOMRpcResult> response;
+        final ListenableFuture<? extends DOMRpcResult> response;
         if (mountPoint != null) {
             final Optional<DOMRpcService> mountRpcServices = mountPoint.getService(DOMRpcService.class);
             if (!mountRpcServices.isPresent()) {
@@ -492,18 +493,24 @@ public final class RestconfImpl implements RestconfService {
             response = this.broker.invokeRpc(rpc.getPath(), null);
         }
 
-        final DOMRpcResult result = checkRpcResponse(response);
-
-        if (result.getResult() != null && ((ContainerNode) result.getResult()).getValue().isEmpty()) {
+        final NormalizedNode<?, ?> result = checkRpcResponse(response).getResult();
+        if (result != null && ((ContainerNode) result).getValue().isEmpty()) {
             throw new WebApplicationException(Response.Status.NO_CONTENT);
-        } else {
-            return new NormalizedNodeContext(new InstanceIdentifierContext<>(null, rpc, mountPoint, schemaContext),
-                    result.getResult(), QueryParametersParser.parseWriterParameters(uriInfo));
         }
+
+        // FIXME: in reference to the above @SupressFBWarnings: "mountPoint" reference here trips up SpotBugs, as it
+        //        thinks it can only ever be null. Except it can very much be non-null. The core problem is the horrible
+        //        structure of this code where we have a sh*tload of checks for mountpoint above and all over the
+        //        codebase where all that difference should have been properly encapsulated.
+        //
+        //        This is legacy code, so if anybody cares to do that refactor, feel free to contribute, but I am not
+        //        doing that work.
+        return new NormalizedNodeContext(new InstanceIdentifierContext<>(null, rpc, mountPoint, schemaContext), result,
+            QueryParametersParser.parseWriterParameters(uriInfo));
     }
 
     @SuppressWarnings("checkstyle:avoidHidingCauseException")
-    private static DOMRpcResult checkRpcResponse(final ListenableFuture<DOMRpcResult> response) {
+    private static DOMRpcResult checkRpcResponse(final ListenableFuture<? extends DOMRpcResult> response) {
         if (response == null) {
             return null;
         }
@@ -521,24 +528,22 @@ public final class RestconfImpl implements RestconfService {
         } catch (final ExecutionException e) {
             LOG.debug("Execution RpcError: ", e);
             Throwable cause = e.getCause();
-            if (cause != null) {
-                while (cause.getCause() != null) {
-                    cause = cause.getCause();
-                }
-
-                if (cause instanceof IllegalArgumentException) {
-                    throw new RestconfDocumentedException(cause.getMessage(), ErrorType.PROTOCOL,
-                            ErrorTag.INVALID_VALUE);
-                } else if (cause instanceof DOMRpcImplementationNotAvailableException) {
-                    throw new RestconfDocumentedException(cause.getMessage(), ErrorType.APPLICATION,
-                            ErrorTag.OPERATION_NOT_SUPPORTED);
-                }
+            if (cause == null) {
                 throw new RestconfDocumentedException("The operation encountered an unexpected error while executing.",
-                        cause);
-            } else {
-                throw new RestconfDocumentedException("The operation encountered an unexpected error while executing.",
-                        e);
+                    e);
+            }
+            while (cause.getCause() != null) {
+                cause = cause.getCause();
+            }
+
+            if (cause instanceof IllegalArgumentException) {
+                throw new RestconfDocumentedException(cause.getMessage(), ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
+            } else if (cause instanceof DOMRpcImplementationNotAvailableException) {
+                throw new RestconfDocumentedException(cause.getMessage(), ErrorType.APPLICATION,
+                    ErrorTag.OPERATION_NOT_SUPPORTED);
             }
+            throw new RestconfDocumentedException("The operation encountered an unexpected error while executing.",
+                cause);
         } catch (final CancellationException e) {
             final String errMsg = "The operation was cancelled while executing.";
             LOG.debug("Cancel RpcExecution: {}", errMsg, e);
@@ -1121,7 +1126,7 @@ public final class RestconfImpl implements RestconfService {
      */
     private InstanceIdentifierContext<?> prepareIIDSubsStreamOutput() {
         final QName qnameBase = QName.create("subscribe:to:notification", "2016-10-28", "notifi");
-        final SchemaContext schemaCtx = controllerContext.getGlobalSchema();
+        final EffectiveModelContext schemaCtx = controllerContext.getGlobalSchema();
         final DataSchemaNode location = ((ContainerSchemaNode) schemaCtx
                 .findModule(qnameBase.getModule()).orElse(null)
                 .getDataChildByName(qnameBase)).getDataChildByName(QName.create(qnameBase, "location"));
@@ -1341,7 +1346,7 @@ public final class RestconfImpl implements RestconfService {
         return result;
     }
 
-    private MapNode makeModuleMapNode(final Set<Module> modules) {
+    private MapNode makeModuleMapNode(final Collection<? extends Module> modules) {
         Preconditions.checkNotNull(modules);
         final Module restconfModule = getRestconfModule();
         final DataSchemaNode moduleSchemaNode = this.controllerContext
index 2a1aad59c77d37483900f9aeeac9b82d05523c49..1302507731cf52c6ba010cd3b4eea4034fb84d53 100644 (file)
@@ -37,7 +37,7 @@
   <reference id="dOMDataBroker" interface="org.opendaylight.mdsal.dom.api.DOMDataBroker"
           ext:filter="(type=@{databroker-service-type})"/>
 
-  <bean id="webSocketPort" class="org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber">
+  <bean id="webSocketPort" class="org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber" factory-method="getDefaultInstance">
     <argument value="${websocket-port}"/>
   </bean>
 
index b04b42b0bff0529ed539b8dc9dd6f268925bed8d..3cb8c8798aa92fd3447a3c34af726cc8cf79f484 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.controller.md.sal.rest.common;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 
@@ -42,9 +43,9 @@ import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
 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.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.slf4j.Logger;
@@ -60,16 +61,17 @@ public final class TestRestconfUtils {
         throw new UnsupportedOperationException("Test utility class");
     }
 
-    public static ControllerContext newControllerContext(final SchemaContext schemaContext) {
+    public static ControllerContext newControllerContext(final EffectiveModelContext schemaContext) {
         return newControllerContext(schemaContext, null);
     }
 
-    public static ControllerContext newControllerContext(final SchemaContext schemaContext,
+    public static ControllerContext newControllerContext(final EffectiveModelContext schemaContext,
             final DOMMountPoint mountInstance) {
         final DOMMountPointService mockMountService = mock(DOMMountPointService.class);
 
         if (mountInstance != null) {
-            doReturn(schemaContext).when(mountInstance).getSchemaContext();
+            doReturn(schemaContext).when(mountInstance).getEffectiveModelContext();
+            doCallRealMethod().when(mountInstance).getSchemaContext();
             doReturn(Optional.ofNullable(mountInstance)).when(mockMountService).getMountPoint(
                 any(YangInstanceIdentifier.class));
         }
@@ -84,7 +86,8 @@ public final class TestRestconfUtils {
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
-    public static SchemaContext loadSchemaContext(final String yangPath, final SchemaContext schemaContext) {
+    public static EffectiveModelContext loadSchemaContext(final String yangPath,
+            final EffectiveModelContext schemaContext) {
         try {
             Preconditions.checkArgument(yangPath != null, "Path can not be null.");
             Preconditions.checkArgument(!yangPath.isEmpty(), "Path can not be empty.");
@@ -141,8 +144,7 @@ public final class TestRestconfUtils {
         final String schemaNodeName = iiContext.getSchemaNode().getQName().getLocalName();
 
         if (!schemaNodeName.equalsIgnoreCase(docRootElm)) {
-            final Collection<DataSchemaNode> children = ((DataNodeContainer) schemaNode).getChildNodes();
-            for (final DataSchemaNode child : children) {
+            for (final DataSchemaNode child : ((DataNodeContainer) schemaNode).getChildNodes()) {
                 if (child.getQName().getLocalName().equalsIgnoreCase(docRootElm)) {
                     schemaNode = child;
                     break;
index 02b084f5ef623a583c849f272526c6c556ce7cc9..97a957009475f768d2f4f06a425adf595aeeedd5 100644 (file)
@@ -16,14 +16,14 @@ 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.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class InstanceIdentifierTypeLeafTest {
 
     @Test
     public void stringToInstanceIdentifierTest() throws Exception {
-        final SchemaContext schemaContext =
+        final EffectiveModelContext schemaContext =
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/instanceidentifier"));
         ControllerContext controllerContext = TestRestconfUtils.newControllerContext(schemaContext);
         final InstanceIdentifierContext<?> instanceIdentifier =
index 3977920e637df4263315a1d5dfcbbe8df3e53130..57c6ef2943170d3927c56a555f7f31ed33de81f5 100644 (file)
@@ -26,7 +26,7 @@ import org.opendaylight.netconf.sal.rest.impl.AbstractIdentifierAwareJaxRsProvid
 import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.patch.PatchContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public abstract class AbstractBodyReaderTest {
     private static Field uriField;
@@ -48,7 +48,7 @@ public abstract class AbstractBodyReaderTest {
     protected final ControllerContext controllerContext;
     protected final MediaType mediaType;
 
-    protected AbstractBodyReaderTest(final SchemaContext schemaContext, final DOMMountPoint mountInstance) {
+    protected AbstractBodyReaderTest(final EffectiveModelContext schemaContext, final DOMMountPoint mountInstance) {
         this.mediaType = getMediaType();
 
         controllerContext = TestRestconfUtils.newControllerContext(schemaContext, mountInstance);
@@ -56,8 +56,8 @@ public abstract class AbstractBodyReaderTest {
 
     protected abstract MediaType getMediaType();
 
-    protected static SchemaContext schemaContextLoader(final String yangPath,
-            final SchemaContext schemaContext) {
+    protected static EffectiveModelContext schemaContextLoader(final String yangPath,
+            final EffectiveModelContext schemaContext) {
         return TestRestconfUtils.loadSchemaContext(yangPath, schemaContext);
     }
 
index cffbea138b0f570d628180d1012b3cff78bfd414..d83bd512a0bd682f0f36c19d831f448c24bc134b 100644 (file)
@@ -34,14 +34,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
 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.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class TestJsonBodyReader extends AbstractBodyReaderTest {
 
     private final JsonNormalizedNodeBodyReader jsonBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create(
         URI.create("instance:identifier:module"), Revision.of("2014-01-17"));
index 4a44715668bc5e907b24639bdba0502e43d1d0d9..96d661515c13f8734cdb5efb2bdc5f7b52c1b35c 100644 (file)
@@ -33,13 +33,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class TestJsonBodyReaderMountPoint extends AbstractBodyReaderTest {
 
     private final JsonNormalizedNodeBodyReader jsonBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create(
         URI.create("instance:identifier:module"), Revision.of("2014-01-17"));
@@ -120,13 +120,11 @@ public class TestJsonBodyReaderMountPoint extends AbstractBodyReaderTest {
                 .getChild(yangCont.getLastPathArgument());
         assertTrue(contDataNode.isPresent());
         assertTrue(contDataNode.get() instanceof ContainerNode);
-        final YangInstanceIdentifier yangleaf = YangInstanceIdentifier.of(QName
-                .create(inputNode.getNodeType(), "lf"));
+        final YangInstanceIdentifier yangleaf = YangInstanceIdentifier.of(QName.create(inputNode.getNodeType(), "lf"));
         final Optional<DataContainerChild<? extends PathArgument, ?>> leafDataNode =
                 ((ContainerNode) contDataNode.get()).getChild(yangleaf.getLastPathArgument());
         assertTrue(leafDataNode.isPresent());
-        assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().getValue()
-                .toString()));
+        assertTrue("lf-test".equalsIgnoreCase(leafDataNode.get().getValue().toString()));
     }
 
     private void checkExpectValueNormalizeNodeContext(
@@ -142,17 +140,13 @@ public class TestJsonBodyReaderMountPoint extends AbstractBodyReaderTest {
                 .of(dataSchemaNode.getQName());
         final DOMMountPoint mountPoint = nnContext
                 .getInstanceIdentifierContext().getMountPoint();
-        final DataSchemaNode mountDataSchemaNode = mountPoint
-                .getSchemaContext().getDataChildByName(
+        final DataSchemaNode mountDataSchemaNode = mountPoint.getSchemaContext().getDataChildByName(
                         dataSchemaNode.getQName());
         assertNotNull(mountDataSchemaNode);
         if (qualifiedName != null && dataSchemaNode instanceof DataNodeContainer) {
-            final DataSchemaNode child = ((DataNodeContainer) dataSchemaNode)
-                    .getDataChildByName(qualifiedName);
-            dataNodeIdent = YangInstanceIdentifier.builder(dataNodeIdent)
-                    .node(child.getQName()).build();
-            assertTrue(nnContext.getInstanceIdentifierContext().getSchemaNode()
-                    .equals(child));
+            final DataSchemaNode child = ((DataNodeContainer) dataSchemaNode).getDataChildByName(qualifiedName);
+            dataNodeIdent = YangInstanceIdentifier.builder(dataNodeIdent).node(child.getQName()).build();
+            assertTrue(nnContext.getInstanceIdentifierContext().getSchemaNode().equals(child));
         } else {
             assertTrue(mountDataSchemaNode.equals(dataSchemaNode));
         }
index 24c58a03ad5e0c8191c0207ead99e6a4918503ab..4a61461e45164b2d54628f82882a51288932bf8f 100644 (file)
@@ -22,14 +22,14 @@ import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
 import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader;
 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class TestJsonBodyWriter extends AbstractBodyReaderTest {
 
     private final JsonNormalizedNodeBodyReader jsonBodyReader;
     private final NormalizedNodeJsonBodyWriter jsonBodyWriter;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public TestJsonBodyWriter() {
         super(schemaContext, null);
index b29136702d3869538ffc65ad3688d7e69a0a7665..d1c23ed6bd209fed3744a99e59a7c7ee2c3e265d 100644 (file)
@@ -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.controller.sal.rest.impl.test.providers;
 
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@@ -19,12 +18,12 @@ import org.junit.Test;
 import org.opendaylight.netconf.sal.rest.impl.JsonToPatchBodyReader;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.patch.PatchContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class TestJsonPatchBodyReader extends AbstractBodyReaderTest {
 
     private final JsonToPatchBodyReader jsonToPatchBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public TestJsonPatchBodyReader() {
         super(schemaContext, null);
index d316bcd9e2836b650314c592141d67ac31833a91..c3bee822fdc5392ab5021b24e63b34453c5302a4 100644 (file)
@@ -20,12 +20,11 @@ import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.netconf.sal.rest.impl.JsonToPatchBodyReader;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.patch.PatchContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class TestJsonPatchBodyReaderMountPoint extends AbstractBodyReaderTest {
-
     private final JsonToPatchBodyReader jsonToPatchBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private static final String MOUNT_POINT = "instance-identifier-module:cont/yang-ext:mount";
 
     public TestJsonPatchBodyReaderMountPoint() {
index c5c16e0f4cc4e75d35e46fa5c6acec299b69d5d6..2486f02108da3fbc2a9b446b6bf0c1828e5c114d 100644 (file)
@@ -38,14 +38,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
 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.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class TestXmlBodyReader extends AbstractBodyReaderTest {
 
     private final XmlNormalizedNodeBodyReader xmlBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create(
         URI.create("instance:identifier:module"), Revision.of("2014-01-17"));
 
index bb1465459a41905b46efbb46f1cdefd3d2d42952..3e720c131cbb3165a670040e3ae42144b8d7dd83 100644 (file)
@@ -37,12 +37,12 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class TestXmlBodyReaderMountPoint extends AbstractBodyReaderTest {
     private final XmlNormalizedNodeBodyReader xmlBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create(
         URI.create("instance:identifier:module"), Revision.of("2014-01-17"));
index ef1bffee3871d2ba0e30209c80c82407de23caa6..037b8fb5efbafc39132164d449a890e0bf110e03 100644 (file)
@@ -20,13 +20,13 @@ import org.junit.Test;
 import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class TestXmlBodyWriter extends AbstractBodyReaderTest {
 
     private final NormalizedNodeXmlBodyWriter xmlBodyWriter;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public TestXmlBodyWriter() {
         super(schemaContext, null);
index 9850f57452ccb40b27b5d7929fea38e27aa7ef47..9e3f54cd824c49f82a6b3f175b082938bbb425b0 100644 (file)
@@ -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.controller.sal.rest.impl.test.providers;
 
 import static org.junit.Assert.assertEquals;
@@ -18,12 +17,12 @@ import org.junit.Test;
 import org.opendaylight.netconf.sal.rest.impl.XmlToPatchBodyReader;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.patch.PatchContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class TestXmlPatchBodyReader extends AbstractBodyReaderTest {
 
     private final XmlToPatchBodyReader xmlToPatchBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public TestXmlPatchBodyReader() {
         super(schemaContext, null);
index b82fd45ed236598ecf90fbc75c2e9340b5996532..cb791543d059a3ab92a9b4090bc24d6b20cd9de8 100644 (file)
@@ -19,12 +19,12 @@ import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.netconf.sal.rest.impl.XmlToPatchBodyReader;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.patch.PatchContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class TestXmlPatchBodyReaderMountPoint extends AbstractBodyReaderTest {
 
     private final XmlToPatchBodyReader xmlToPatchBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private static final String MOUNT_POINT = "instance-identifier-module:cont/yang-ext:mount";
 
     public TestXmlPatchBodyReaderMountPoint() {
index 90d917335d8876f2d97710d4cf08f088e6a99e05..7b76453c7e43a7fca6f981b7a028759961dbf5c1 100644 (file)
@@ -49,12 +49,13 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
 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;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 public class RestPutListDataTest {
-    private static SchemaContext schemaContextTestModule;
+    private static EffectiveModelContext schemaContextTestModule;
 
     private static BrokerFacade brokerFacade;
     private static RestconfImpl restconfImpl;
index e3bb5c31f785eee62734e3a6bf9ed9f330d9b2de..db75081e8bbfbb1573c304edd2c91b48ce852e33 100644 (file)
@@ -18,12 +18,12 @@ import org.opendaylight.controller.sal.rest.impl.test.providers.AbstractBodyRead
 import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class JsonIdentityrefToNnTest extends AbstractBodyReaderTest {
 
     private final JsonNormalizedNodeBodyReader jsonBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public JsonIdentityrefToNnTest() {
         super(schemaContext, null);
index d25e36101202cc09eace5a187e87ad2a30d80708..7476a63ecb9a869e73093a6a1c965480d99024d1 100644 (file)
@@ -18,12 +18,12 @@ import org.opendaylight.controller.sal.rest.impl.test.providers.AbstractBodyRead
 import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class JsonLeafrefToNnTest extends AbstractBodyReaderTest {
 
     private final JsonNormalizedNodeBodyReader jsonBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public JsonLeafrefToNnTest() {
         super(schemaContext, null);
index 8c021273645b195caa0e9e588a80c09071aec0eb..0bd9a62ed369ae301a2c9fce1e055c126fd780bf 100644 (file)
@@ -27,7 +27,7 @@ import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,7 +37,7 @@ public class JsonToNnTest extends AbstractBodyReaderTest {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractBodyReaderTest.class);
 
     private final JsonNormalizedNodeBodyReader jsonBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public JsonToNnTest() {
         super(schemaContext, null);
index 43e950c9e9980748154a0c4a3f34fb2238e1d5e2..dca57eda148e0cc15b8f0161d9b5703917f1e117 100644 (file)
@@ -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.controller.sal.restconf.impl.nn.to.json.test;
 
 import static org.junit.Assert.assertTrue;
@@ -19,11 +18,11 @@ import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
 import org.opendaylight.controller.sal.rest.impl.test.providers.AbstractBodyReaderTest;
 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class NnJsonChoiceCaseTest extends AbstractBodyReaderTest {
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private final NormalizedNodeJsonBodyWriter jsonBodyWriter;
 
     public NnJsonChoiceCaseTest()  {
index cb1bf574c848cffc4399853cb975bfd73c3d2b54..85a09ab2d23449e4ce0e416cc80a6447d7c9efc3 100644 (file)
@@ -21,11 +21,11 @@ import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
 import org.opendaylight.controller.sal.rest.impl.test.providers.AbstractBodyReaderTest;
 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class NnToJsonLeafrefType extends AbstractBodyReaderTest {
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private final NormalizedNodeJsonBodyWriter jsonBodyWriter;
 
     public NnToJsonLeafrefType() {
index 0623a07be5357ab2f23b22527b1c6e70969570ce..c19a8c95ff0b0f739b5685ba37333ac60aef81e3 100644 (file)
@@ -21,12 +21,12 @@ import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
 import org.opendaylight.controller.sal.rest.impl.test.providers.AbstractBodyReaderTest;
 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 @Deprecated
 public class NnToJsonWithAugmentTest extends AbstractBodyReaderTest {
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private final NormalizedNodeJsonBodyWriter xmlBodyWriter;
 
     public NnToJsonWithAugmentTest() {
index 5c6e629508b2ffcad3c220bf5af878d63356723e..6aea684fb66173b7033120b14cf46ba325fd7f54 100644 (file)
@@ -38,14 +38,14 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuil
 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.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 public class NnInstanceIdentifierToXmlTest extends AbstractBodyReaderTest {
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     NormalizedNodeXmlBodyWriter xmlBodyWriter;
 
     public NnInstanceIdentifierToXmlTest() {
index 1e2ca7aab0ff4f9559bd7c6c0509a6cdb573449e..7374458bb5515b07a77d34159be0023103490f11 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 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.impl.codec.TypeDefinitionAwareCodec;
@@ -34,8 +35,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 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.SchemaContext;
 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;
@@ -50,7 +51,7 @@ public class NnToXmlTest extends AbstractBodyReaderTest {
     public ExpectedException thrown = ExpectedException.none();
 
     private final NormalizedNodeXmlBodyWriter xmlBodyWriter;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public NnToXmlTest() {
         super(schemaContext, null);
@@ -192,10 +193,10 @@ public class NnToXmlTest extends AbstractBodyReaderTest {
     public void nnAsYangBitsToXmlTest() throws Exception {
         final BitsTypeDefinition.Bit mockBit1 = Mockito.mock(BitsTypeDefinition.Bit.class);
         Mockito.when(mockBit1.getName()).thenReturn("one");
-        Mockito.when(mockBit1.getPosition()).thenReturn(1L);
+        Mockito.when(mockBit1.getPosition()).thenReturn(Uint32.ONE);
         final BitsTypeDefinition.Bit mockBit2 = Mockito.mock(BitsTypeDefinition.Bit.class);
         Mockito.when(mockBit2.getName()).thenReturn("two");
-        Mockito.when(mockBit2.getPosition()).thenReturn(2L);
+        Mockito.when(mockBit2.getPosition()).thenReturn(Uint32.TWO);
         final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(Mockito.mock(SchemaPath.class));
         bitsTypeBuilder.addBit(mockBit1);
         bitsTypeBuilder.addBit(mockBit2);
@@ -245,10 +246,10 @@ public class NnToXmlTest extends AbstractBodyReaderTest {
     public void nnAsYangUnionToXmlTest() throws Exception {
         final BitsTypeDefinition.Bit mockBit1 = Mockito.mock(BitsTypeDefinition.Bit.class);
         Mockito.when(mockBit1.getName()).thenReturn("first");
-        Mockito.when(mockBit1.getPosition()).thenReturn(1L);
+        Mockito.when(mockBit1.getPosition()).thenReturn(Uint32.ONE);
         final BitsTypeDefinition.Bit mockBit2 = Mockito.mock(BitsTypeDefinition.Bit.class);
         Mockito.when(mockBit2.getName()).thenReturn("second");
-        Mockito.when(mockBit2.getPosition()).thenReturn(2L);
+        Mockito.when(mockBit2.getPosition()).thenReturn(Uint32.TWO);
 
         final BitsTypeBuilder bitsTypeBuilder = BaseTypes.bitsTypeBuilder(Mockito.mock(SchemaPath.class));
         bitsTypeBuilder.addBit(mockBit1);
index 58581acca23a53027da0a3c8adc794f3d74da164..a2299de40e5c3a66d5247b306957017abb41f7d8 100644 (file)
@@ -31,13 +31,13 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 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.SchemaContext;
 
 public class NnToXmlWithChoiceTest extends AbstractBodyReaderTest {
 
     private final NormalizedNodeXmlBodyWriter xmlBodyWriter;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public NnToXmlWithChoiceTest() {
         super(schemaContext, null);
index b61dae3bff333e4403222ee9b5e593394f7ea06a..c9dd5c5ad6f551a578b7c78a5ccb292295d9612c 100644 (file)
@@ -33,14 +33,14 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 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.SchemaContext;
 
 public class NnToXmlWithDataFromSeveralModulesTest extends
         AbstractBodyReaderTest {
 
     private final NormalizedNodeXmlBodyWriter xmlBodyWriter;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public NnToXmlWithDataFromSeveralModulesTest() {
         super(schemaContext, null);
index e5be1fa141a168bc7d7f77fb119a60e802ec09c4..cc3e8ff062dbec94dae601a97e59b4c0e9d54633 100644 (file)
@@ -187,7 +187,8 @@ public class BrokerFacadeTest {
         final DOMRpcResult expResult = mock(DOMRpcResult.class);
         doReturn(immediateFluentFuture(expResult)).when(this.mockRpcService).invokeRpc(this.type, this.dummyNode);
 
-        final ListenableFuture<DOMRpcResult> actualFuture = this.brokerFacade.invokeRpc(this.type, this.dummyNode);
+        final ListenableFuture<? extends DOMRpcResult> actualFuture = this.brokerFacade.invokeRpc(this.type,
+            this.dummyNode);
         assertNotNull("Future is null", actualFuture);
         final DOMRpcResult actualResult = actualFuture.get();
         assertSame("invokeRpc", expResult, actualResult);
index 669c7601fe0e6ea208dc006dbe03ecef72a1fc9e..fe084356f86573094f4e49b392d5e6a9bb707e95 100644 (file)
@@ -19,15 +19,15 @@ import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 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.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 public class Bug3595Test {
 
     private static final QName CONT_QNAME = QName.create("leafref:module", "2014-04-17", "cont");
     private static final QName LST_WITH_LFREF_KEY_QNAME = QName.create(CONT_QNAME, "lst-with-lfref-key");
     private static final QName LFREF_KEY_QNAME = QName.create(CONT_QNAME, "lfref-key");
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private final ControllerContext controllerContext = TestRestconfUtils.newControllerContext(schemaContext);
 
index 81ec299c2985d0014581b90afd90728c22f1570f..6bb6f607aa419b05832c862be59c24a0970174b7 100644 (file)
@@ -8,14 +8,12 @@
 package org.opendaylight.controller.sal.restconf.impl.test;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 
 import java.io.FileNotFoundException;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
@@ -25,7 +23,7 @@ import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 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.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 
@@ -37,7 +35,7 @@ public class Bug8072Test {
     private static final QName TYPE_QNAME = QName.create("test:module", "2014-01-09", "type");
     private static final QName MODULE_TYPE_QNAME = QName.create("test:module", "2014-01-09", "module-type");
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private final ControllerContext controllerContext;
 
@@ -45,15 +43,13 @@ public class Bug8072Test {
         final SchemaContext mountPointContext = TestUtils.loadSchemaContext("/full-versions/test-module");
         final DOMMountPoint mountInstance = mock(DOMMountPoint.class);
         controllerContext = TestRestconfUtils.newControllerContext(schemaContext, mountInstance);
-        doReturn(mountPointContext).when(mountInstance).getSchemaContext();
+        doReturn(mountPointContext).when(mountInstance).getEffectiveModelContext();
     }
 
     @BeforeClass
     public static void init() throws FileNotFoundException, ReactorException {
         schemaContext = TestUtils.loadSchemaContext("/full-versions/yangs");
         assertEquals(0, schemaContext.findModules(EXTERNAL_MODULE_NAME).size());
-        final Set<Module> allModules = schemaContext.getModules();
-        assertNotNull(allModules);
     }
 
     @Test
index bd5af828b365f098883029ee86f0fc5edc1b8933..2110848bf2297cbf5de5949ff323929fb0ccf299 100644 (file)
@@ -29,7 +29,6 @@ import org.opendaylight.netconf.sal.rest.impl.XmlNormalizedNodeBodyReader;
 import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade;
 import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 
 public class CodecsExceptionsCatchingTest extends JerseyTest {
@@ -40,8 +39,8 @@ public class CodecsExceptionsCatchingTest extends JerseyTest {
     @Before
     public void init() throws FileNotFoundException, ReactorException {
         restConf = RestconfImpl.newInstance(mock(BrokerFacade.class), controllerContext);
-        final SchemaContext schemaContext = TestUtils.loadSchemaContext("/decoding-exception/yang");
-        controllerContext = TestRestconfUtils.newControllerContext(schemaContext);
+        controllerContext = TestRestconfUtils.newControllerContext(TestUtils.loadSchemaContext(
+            "/decoding-exception/yang"));
     }
 
     @Override
index 6c448e26ee1bd5e7653c178a1b456110006689aa..d45519a71fe0359aae6776bb75e6db3550aa151b 100644 (file)
@@ -59,8 +59,8 @@ 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.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -72,7 +72,7 @@ public class CutDataToCorrectDepthTest extends JerseyTest {
     private static NormalizedNode<?, ?> depth1Cont;
     private static NormalizedNode<?, ?> depth2Cont1;
     private NormalizedNode<?, ?> globalPayload;
-    private static SchemaContext schemaContextModules;
+    private static EffectiveModelContext schemaContextModules;
 
     private final ControllerContext controllerContext =
             TestRestconfUtils.newControllerContext(schemaContextModules, null);
index 27cff5d9c0780cb02c4a5a02ec5a20a8dd024fd9..be5170a03e8ab89421c4765f45df37d9594489c7 100644 (file)
@@ -26,9 +26,9 @@ 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.Set;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
@@ -64,6 +64,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
 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.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
@@ -75,7 +76,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 public class InvokeRpcMethodTest {
 
     private static UriInfo uriInfo;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private final RestconfImpl restconfImpl;
     private final ControllerContext controllerContext;
@@ -89,7 +90,7 @@ public class InvokeRpcMethodTest {
     @BeforeClass
     public static void init() throws FileNotFoundException, ReactorException {
         schemaContext = TestUtils.loadSchemaContext("/full-versions/yangs", "/invoke-rpc");
-        final Set<Module> allModules = schemaContext.getModules();
+        final Collection<? extends Module> allModules = schemaContext.getModules();
         assertNotNull(allModules);
         final Module module = TestUtils.resolveModule("invoke-rpc-module", allModules);
         assertNotNull(module);
@@ -124,14 +125,13 @@ public class InvokeRpcMethodTest {
     }
 
     private NormalizedNodeContext prepareDomPayload() {
-        final SchemaContext schema = controllerContext.getGlobalSchema();
+        final EffectiveModelContext schema = controllerContext.getGlobalSchema();
         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");
-        final Set<RpcDefinition> setRpcs = rpcModule.getRpcs();
         ContainerSchemaNode rpcInputSchemaNode = null;
-        for (final RpcDefinition rpc : setRpcs) {
+        for (final RpcDefinition rpc : rpcModule.getRpcs()) {
             if (rpcQName.isEqualWithoutRevision(rpc.getQName())) {
                 rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName);
                 break;
@@ -284,11 +284,9 @@ public class InvokeRpcMethodTest {
         final QName rpcQName = QName.create(rpcModule.getQNameModule(), "make-toast");
         final QName rpcInputQName = QName.create(rpcModule.getQNameModule(),"input");
 
-        final Set<RpcDefinition> setRpcs = rpcModule.getRpcs();
         RpcDefinition rpcDef = null;
         ContainerSchemaNode rpcInputSchemaNode = null;
-
-        for (final RpcDefinition rpc : setRpcs) {
+        for (final RpcDefinition rpc : rpcModule.getRpcs()) {
             if (rpcQName.isEqualWithoutRevision(rpc.getQName())) {
                 rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName);
                 rpcDef = rpc;
@@ -333,10 +331,9 @@ public class InvokeRpcMethodTest {
         final QName rpcQName = QName.create(rpcModule.getQNameModule(), "testOutput");
         final QName rpcOutputQName = QName.create(rpcModule.getQNameModule(),"output");
 
-        final Set<RpcDefinition> setRpcs = rpcModule.getRpcs();
         RpcDefinition rpcDef = null;
         ContainerSchemaNode rpcOutputSchemaNode = null;
-        for (final RpcDefinition rpc : setRpcs) {
+        for (final RpcDefinition rpc : rpcModule.getRpcs()) {
             if (rpcQName.isEqualWithoutRevision(rpc.getQName())) {
                 rpcOutputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcOutputQName);
                 rpcDef = rpc;
index 18c7be7a024a24a0b68644287496ed3a8c4c251b..d1da5f8e9086cbbe011760f650f2475df727d9f9 100644 (file)
@@ -17,6 +17,7 @@ import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.ArgumentMatchers.notNull;
 import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -69,6 +70,7 @@ 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.ImmutableNodes;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
@@ -107,7 +109,7 @@ public class JSONRestconfServiceImplTest {
     static final QName TEST_OUTPUT_QNAME = QName.create(TOASTER_MODULE_NS, TOASTER_MODULE_VERSION, "testOutput");
     static final QName TEXT_OUT_QNAME = QName.create(TOASTER_MODULE_NS, TOASTER_MODULE_VERSION, "textOut");
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private final BrokerFacade brokerFacade = mock(BrokerFacade.class);
     private final DOMMountPoint mockMountPoint = mock(DOMMountPoint.class);
@@ -123,7 +125,8 @@ public class JSONRestconfServiceImplTest {
         final SchemaContext mountPointSchemaContext = TestUtils.loadSchemaContext("/full-versions/test-module");
         final ControllerContext controllerContext =
                 TestRestconfUtils.newControllerContext(schemaContext, mockMountPoint);
-        doReturn(mountPointSchemaContext).when(mockMountPoint).getSchemaContext();
+        doCallRealMethod().when(mockMountPoint).getSchemaContext();
+        doReturn(mountPointSchemaContext).when(mockMountPoint).getEffectiveModelContext();
 
         service = new JSONRestconfServiceImpl(controllerContext,
                 RestconfImpl.newInstance(brokerFacade, controllerContext));
index 371466d759cdfbac28c321c66c8aa2ced5a46a58..3ebbf2868fee3deb15af493b4542ff38cde71cd7 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.controller.sal.restconf.impl.test;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
@@ -17,7 +16,6 @@ import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediate
 
 import java.io.FileNotFoundException;
 import java.io.UnsupportedEncodingException;
-import java.util.Set;
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
@@ -25,9 +23,9 @@ import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
 import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader;
 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter;
 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter;
@@ -38,12 +36,11 @@ 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.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 
 public class RestDeleteOperationTest extends JerseyTest {
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private ControllerContext controllerContext;
     private BrokerFacade brokerFacade;
@@ -52,8 +49,6 @@ public class RestDeleteOperationTest extends JerseyTest {
     @BeforeClass
     public static void init() throws FileNotFoundException, ReactorException {
         schemaContext = TestUtils.loadSchemaContext("/test-config-data/yang1");
-        final Set<Module> allModules = schemaContext.getModules();
-        assertNotNull(allModules);
     }
 
     @Override
index e9488c18115fbf30ffa067cc3e5307e553b452e3..42000ae233d3e72834645893cffb6436cf0a0f16 100644 (file)
@@ -20,11 +20,11 @@ import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
 import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class RestGetAugmentedElementWhenEqualNamesTest {
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private final ControllerContext controllerContext = TestRestconfUtils.newControllerContext(schemaContext);
 
index f29942df1061113756a50e7d249fa8c6403815a1..e09f6c2bdbbc4b7365cc3366e5c8ebc09eab1119 100644 (file)
@@ -64,6 +64,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 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.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -83,10 +84,10 @@ public class RestGetOperationTest extends JerseyTest {
         }
     }
 
-    private static SchemaContext schemaContextYangsIetf;
-    private static SchemaContext schemaContextTestModule;
-    private static SchemaContext schemaContextModules;
-    private static SchemaContext schemaContextBehindMountPoint;
+    private static EffectiveModelContext schemaContextYangsIetf;
+    private static EffectiveModelContext schemaContextTestModule;
+    private static EffectiveModelContext schemaContextModules;
+    private static EffectiveModelContext schemaContextBehindMountPoint;
 
     @SuppressWarnings("rawtypes")
     private static NormalizedNode answerFromGet;
@@ -129,7 +130,7 @@ public class RestGetOperationTest extends JerseyTest {
         return resourceConfig;
     }
 
-    private void setControllerContext(final SchemaContext schemaContext) {
+    private void setControllerContext(final EffectiveModelContext schemaContext) {
         controllerContext.setSchemas(schemaContext);
     }
 
index df5f423e014a8beeb7e4785c62f8e4d60a8d81de..599875a1ee3eeef52b4ac88e53e5304da75e19aa 100644 (file)
@@ -46,8 +46,8 @@ import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 
 public class RestPostOperationTest extends JerseyTest {
 
@@ -55,9 +55,9 @@ public class RestPostOperationTest extends JerseyTest {
     private static String xmlData3;
     private static String xmlData4;
 
-    private static SchemaContext schemaContextYangsIetf;
-    private static SchemaContext schemaContextTestModule;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContextYangsIetf;
+    private static EffectiveModelContext schemaContextTestModule;
+    private static EffectiveModelContext schemaContext;
 
     private BrokerFacade brokerFacade;
     private RestconfImpl restconfImpl;
@@ -65,7 +65,7 @@ public class RestPostOperationTest extends JerseyTest {
     private DOMMountPoint mountInstance;
 
     @BeforeClass
-    public static void init() throws URISyntaxException, IOException, ReactorException {
+    public static void init() throws URISyntaxException, IOException {
         schemaContextYangsIetf = TestUtils.loadSchemaContext("/full-versions/yangs");
         schemaContextTestModule = TestUtils.loadSchemaContext("/full-versions/test-module");
         schemaContext = TestUtils.loadSchemaContext("/test-config-data/yang1");
@@ -93,7 +93,7 @@ public class RestPostOperationTest extends JerseyTest {
         return resourceConfig;
     }
 
-    private void setSchemaControllerContext(final SchemaContext schema) {
+    private void setSchemaControllerContext(final EffectiveModelContext schema) {
         controllerContext.setSchemas(schema);
     }
 
index be7060d1e2792dc8bc7b7dce7a359da8bc5a1ec8..480ee30d5d84fa81e50790dedb206140ac42b84f 100644 (file)
@@ -33,12 +33,12 @@ 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.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 @RunWith(MockitoJUnitRunner.class)
 public class RestPutConfigTest {
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private RestconfImpl restconfService;
     private ControllerContext controllerCx;
 
index 6e94128c5f808def8c3c76877f028bf91ded66d6..4737efd57337f0c92ddccd266909dcafd9896db0 100644 (file)
@@ -46,6 +46,7 @@ import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 
@@ -57,8 +58,8 @@ public class RestPutOperationTest extends JerseyTest {
     private static String xmlData2;
     private static String xmlData3;
 
-    private static SchemaContext schemaContextYangsIetf;
-    private static SchemaContext schemaContextTestModule;
+    private static EffectiveModelContext schemaContextYangsIetf;
+    private static EffectiveModelContext schemaContextTestModule;
 
     private BrokerFacade brokerFacade;
     private RestconfImpl restconfImpl;
index 2ef40bec8977b358f1fd6ac8e7f12378e00d8e71..563c14ceb645d6aff5bb0270656a5e5606403657 100644 (file)
@@ -68,7 +68,7 @@ import org.opendaylight.restconf.common.errors.RestconfError;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorType;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -125,7 +125,7 @@ public class RestconfDocumentedExceptionMapperTest extends JerseyTest {
     static XPathExpression ERROR_APP_TAG;
     static XPathExpression ERROR_INFO;
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     @BeforeClass
     public static void init() throws Exception {
index 2fff6d79f44025ccfc0ef42bb97415a2dffc68de..5166562443b1846feb9175fcaaff6732bdce2272 100644 (file)
@@ -41,14 +41,14 @@ 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.tree.DataTreeCandidate;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class RestconfImplNotificationSubscribingTest {
 
     private final String identifier = "data-change-event-subscription/datastore=OPERATIONAL/scope=ONE";
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     @Mock
     private BrokerFacade broker;
index 0498291fe501564c7dd2f2d536328027b33361d9..7657f6c5d30ef0062ec51c212006655e4bd17c19 100644 (file)
@@ -63,9 +63,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.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 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.parser.spi.meta.ReactorException;
@@ -75,7 +74,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
  */
 public class RestconfImplTest {
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private final BrokerFacade brokerFacade = mock(BrokerFacade.class);
     private final ControllerContext controllerContext = TestRestconfUtils.newControllerContext(schemaContext);
@@ -84,8 +83,6 @@ public class RestconfImplTest {
     @BeforeClass
     public static void init() throws FileNotFoundException, ReactorException {
         schemaContext = TestUtils.loadSchemaContext("/full-versions/yangs");
-        final Set<Module> allModules = schemaContext.getModules();
-        assertNotNull(allModules);
     }
 
     @AfterClass
index 8a72334a5b777ad31912970a321d69e76541c079..0e0c3f88f06ecb1375a6a0b10fdf2ea252200fb4 100644 (file)
@@ -23,10 +23,10 @@ import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.text.ParseException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.xml.transform.OutputKeys;
@@ -46,8 +46,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 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;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,7 +62,7 @@ public final class TestUtils {
 
     }
 
-    public static SchemaContext loadSchemaContext(final String... yangPath) throws FileNotFoundException {
+    public static EffectiveModelContext loadSchemaContext(final String... yangPath) throws FileNotFoundException {
         final List<File> files = new ArrayList<>();
         for (final String path : yangPath) {
             final String pathToFile = TestUtils.class.getResource(path).getPath();
@@ -83,7 +83,7 @@ public final class TestUtils {
         return YangParserTestUtils.parseYangFiles(files);
     }
 
-    public static Module findModule(final Set<Module> modules, final String moduleName) {
+    public static Module findModule(final Collection<? extends Module> modules, final String moduleName) {
         for (final Module module : modules) {
             if (module.getName().equals(moduleName)) {
                 return module;
@@ -130,7 +130,7 @@ public final class TestUtils {
      * module set has only one element then this element is returned.
      *
      */
-    public static Module resolveModule(final String searchedModuleName, final Set<Module> modules) {
+    public static Module resolveModule(final String searchedModuleName, final Collection<? extends Module> modules) {
         assertNotNull("Modules can't be null.", modules);
         if (searchedModuleName != null) {
             for (final Module m : modules) {
index 808361346e936179890afc2f6200df745b9fb7f4..efbebda0055f86a8e8f05a2810310476e9d77d9e 100644 (file)
@@ -15,15 +15,14 @@ import static org.mockito.Mockito.when;
 
 import com.google.common.base.Preconditions;
 import java.io.FileNotFoundException;
-import java.util.Set;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade;
 import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl;
@@ -47,10 +46,10 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 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.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.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
@@ -111,16 +110,15 @@ public class URIParametersParsing {
     }
 
     private NormalizedNodeContext prepareDomRpcNode(final String datastore, final String scope) {
-        final SchemaContext schema = this.controllerContext.getGlobalSchema();
+        final EffectiveModelContext schema = this.controllerContext.getGlobalSchema();
         final Module rpcSalRemoteModule = schema.findModule("sal-remote", Revision.of("2014-01-14")).get();
-        final Set<RpcDefinition> setRpcs = rpcSalRemoteModule.getRpcs();
         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);
         ContainerSchemaNode rpcInputSchemaNode = null;
-        for (final RpcDefinition rpc : setRpcs) {
+        for (final RpcDefinition rpc : rpcSalRemoteModule.getRpcs()) {
             if (rpcQName.isEqualWithoutRevision(rpc.getQName())) {
                 rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName);
                 break;
index 5e1d59d7c70f481195caaacf0374a214bd5f8892..39e7373cd33c2e63a1c5421269b22ecafd6e5ab3 100644 (file)
@@ -26,13 +26,13 @@ import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 
 public class URITest {
 
-    private static SchemaContext schemaContext;
-    private static SchemaContext mountSchemaContext;
+    private static EffectiveModelContext schemaContext;
+    private static EffectiveModelContext mountSchemaContext;
 
     private final DOMMountPoint mountInstance = mock(DOMMountPoint.class);
     private final ControllerContext controllerContext =
index b1562b1433c9eca6a5af56d303e0f929897c9483..9192691f9fd6947ee2bcccaae617b36ae3fb7bfd 100644 (file)
@@ -11,13 +11,12 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
 import java.io.FileNotFoundException;
-import java.util.Set;
+import java.util.Collection;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 
 public abstract class YangAndXmlAndDataSchemaLoader {
-
-    protected static Set<Module> modules;
+    protected static Collection<? extends Module> modules;
     protected static DataSchemaNode dataSchemaNode;
     protected static String searchedModuleName;
     protected static String searchedDataSchemaName;
index 951bb92c46320c8224a09e6e1edee7e4ceca17e7..0163ce0fdead4b5bbe6ce197bafb0ee3d35d0bb6 100644 (file)
@@ -34,7 +34,7 @@ import org.opendaylight.netconf.sal.rest.impl.XmlNormalizedNodeBodyReader;
 import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade;
 import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
 import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -42,7 +42,7 @@ import org.w3c.dom.Node;
 
 public class RestStreamTest extends JerseyTest {
 
-    private static SchemaContext schemaContextYangsIetf;
+    private static EffectiveModelContext schemaContextYangsIetf;
 
     private BrokerFacade brokerFacade;
     private RestconfImpl restconfImpl;
@@ -84,7 +84,7 @@ public class RestStreamTest extends JerseyTest {
         createAndSubscribe("odl-leaf-nodes-only", "true");
     }
 
-    private void createAndSubscribe(String queryParamName, Object... values)
+    private void createAndSubscribe(final String queryParamName, final Object... values)
                                                 throws UnsupportedEncodingException, InterruptedException {
         String uri = "/operations/sal-remote:create-data-change-event-subscription";
         String rpcInput = getRpcInput();
@@ -112,7 +112,7 @@ public class RestStreamTest extends JerseyTest {
         return target(uri).request(mediaType).post(Entity.entity(data, mediaType));
     }
 
-    private Response get(final String uri, final String mediaType, String queryParam, Object... values) {
+    private Response get(final String uri, final String mediaType, final String queryParam, final Object... values) {
         if (queryParam != null) {
             return target(uri).queryParam(queryParam, values).request(mediaType).get();
         } else {
index e85efe1f0d3c19dfbc8ab1dc24475778eeed9eea..e0d48bb6daf733a2051d393750473ad2063ee558 100644 (file)
@@ -20,11 +20,11 @@ import org.opendaylight.restconf.common.util.IdentityValuesDTO;
 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.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class InstanceIdentifierCodecImplTest {
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private InstanceIdentifierCodecImpl instanceIdentifierDTO;
     private YangInstanceIdentifier instanceIdentifierBadNamespace;
index 4362192cdf9a479195354a5f8aeed05f23cf52d9..194f756fcc6b7ac64eb223cfc0b9413a94df6380 100644 (file)
@@ -36,7 +36,7 @@ import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.p
 import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.skyscreamer.jsonassert.JSONAssert;
 import org.slf4j.Logger;
@@ -55,7 +55,7 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
     private static final YangInstanceIdentifier PATCH_CONT_YIID =
             YangInstanceIdentifier.create(new YangInstanceIdentifier.NodeIdentifier(PatchCont.QNAME));
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private DataBroker dataBroker;
     private DOMDataBroker domDataBroker;
@@ -137,13 +137,13 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
         MyList1Builder builder = new MyList1Builder().setMyLeaf11("Jed").setName("Althea");
         InstanceIdentifier<MyList1> iid = InstanceIdentifier.create(PatchCont.class)
                 .child(MyList1.class, new MyList1Key("Althea"));
-        writeTransaction.put(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
+        writeTransaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
         writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_CREATE));
 
         writeTransaction = dataBroker.newWriteOnlyTransaction();
         builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha");
-        writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
+        writeTransaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
         writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_UPDATE));
 
@@ -166,13 +166,13 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
         MyList1Builder builder = new MyList1Builder().setMyLeaf11("Jed").setName("Althea");
         InstanceIdentifier<MyList1> iid = InstanceIdentifier.create(PatchCont.class)
                 .child(MyList1.class, new MyList1Key("Althea"));
-        writeTransaction.put(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
+        writeTransaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
         writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_CREATE));
 
         writeTransaction = dataBroker.newWriteOnlyTransaction();
         builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha");
-        writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
+        writeTransaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
         writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_UPDATE));
 
index 7038e2366639b8d4e2ad929297a52c8a8a4fc24e..b642129fb830716dbc591d47c0a9e38f8e6e488f 100644 (file)
@@ -45,13 +45,13 @@ 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.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 public class NotificationListenerTest {
     private static final QNameModule MODULE = QNameModule.create(URI.create("notifi:mod"), Revision.of("2016-11-23"));
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private ControllerContext controllerContext;
 
index 99257930d8b3eda26a18811f4c85c80ba9e32d6b..12b7332f673ff2571785d1271fa8ff536a5903c0 100644 (file)
@@ -405,7 +405,7 @@ public final class RestCodec {
     private static void collectInstanceDataNodeContainers(final List<DataSchemaNode> potentialSchemaNodes,
             final DataNodeContainer container, final String name) {
 
-        final Iterable<DataSchemaNode> nodes =
+        final Iterable<? extends DataSchemaNode> nodes =
                 Iterables.filter(container.getChildNodes(), node -> name.equals(node.getQName().getLocalName()));
 
         // Can't combine this loop with the filter above because the filter is
@@ -418,8 +418,8 @@ public final class RestCodec {
 
         final Iterable<ChoiceSchemaNode> choiceNodes =
                 Iterables.filter(container.getChildNodes(), ChoiceSchemaNode.class);
-        final Iterable<Collection<CaseSchemaNode>> map = Iterables.transform(choiceNodes,
-            choice -> choice.getCases().values());
+        final Iterable<Collection<? extends CaseSchemaNode>> map = Iterables.transform(choiceNodes,
+            choice -> choice.getCases());
         for (final CaseSchemaNode caze : Iterables.concat(map)) {
             collectInstanceDataNodeContainers(potentialSchemaNodes, caze, name);
         }
index 26cc056ed847777f9912491147260c395a46dd0e..c40bf84c5741673fd5600d3116f48f36e08ccdf9 100644 (file)
@@ -34,9 +34,8 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum
 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.tree.ConflictingModificationAppliedException;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,9 +52,9 @@ public class SchemaContextHandler implements SchemaContextListenerHandler, AutoC
 
     private final TransactionChainHandler transactionChainHandler;
     private final DOMSchemaService domSchemaService;
-    private ListenerRegistration<SchemaContextListener> listenerRegistration;
+    private ListenerRegistration<?> listenerRegistration;
 
-    private volatile SchemaContext schemaContext;
+    private volatile EffectiveModelContext schemaContext;
 
     /**
      * Constructor.
@@ -90,7 +89,7 @@ public class SchemaContextHandler implements SchemaContextListenerHandler, AutoC
 
     @Override
     @SuppressWarnings("checkstyle:hiddenField")
-    public void onGlobalContextUpdated(final SchemaContext context) {
+    public void onModelContextUpdated(final EffectiveModelContext context) {
         schemaContext = requireNonNull(context);
 
         final Module ietfYangLibraryModule =
@@ -112,7 +111,7 @@ public class SchemaContextHandler implements SchemaContextListenerHandler, AutoC
     }
 
     @Override
-    public SchemaContext get() {
+    public EffectiveModelContext get() {
         return schemaContext;
     }
 
index 4af1ba859877bb2c1de3270e754ef01db36b6cfd..9b1743609368451a7cb5742ebc5590273f78e614 100644 (file)
@@ -7,9 +7,9 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.handlers;
 
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 
-interface SchemaContextListenerHandler extends Handler<SchemaContext>, SchemaContextListener {
+interface SchemaContextListenerHandler extends Handler<EffectiveModelContext>, EffectiveModelContextListener {
 
 }
index 0dfe3a04640e46a110d7c97da6e33acbac8da611..5b779de9504726a97a6f5ecd8c8edc46e35eb482 100644 (file)
@@ -15,7 +15,6 @@ import java.io.InputStream;
 import java.net.URISyntaxException;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Deque;
 import java.util.List;
 import javax.ws.rs.Consumes;
@@ -173,8 +172,7 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
                                                             final String namespace) {
         final Deque<Object> result = new ArrayDeque<>();
         final ArrayList<ChoiceSchemaNode> choiceSchemaNodes = new ArrayList<>();
-        final Collection<DataSchemaNode> children = ((DataNodeContainer) schemaNode).getChildNodes();
-        for (final DataSchemaNode child : children) {
+        for (final DataSchemaNode child : ((DataNodeContainer) schemaNode).getChildNodes()) {
             if (child instanceof ChoiceSchemaNode) {
                 choiceSchemaNodes.add((ChoiceSchemaNode) child);
             } else if (child.getQName().getLocalName().equalsIgnoreCase(elementName)
@@ -196,7 +194,7 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
         }
 
         for (final ChoiceSchemaNode choiceNode : choiceSchemaNodes) {
-            for (final CaseSchemaNode caseNode : choiceNode.getCases().values()) {
+            for (final CaseSchemaNode caseNode : choiceNode.getCases()) {
                 final Deque<Object> resultFromRecursion = findPathToSchemaNodeByName(caseNode, elementName, namespace);
                 if (!resultFromRecursion.isEmpty()) {
                     resultFromRecursion.push(choiceNode);
index 6cd43cf3dcdcd0ce0742a4b47eb227609db0ce15..09f708cb7ee237b5e43402ae6af75da3f6bf8f1c 100644 (file)
@@ -27,7 +27,7 @@ import org.opendaylight.restconf.nb.rfc8040.handlers.DOMMountPointServiceHandler
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
 import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
 import org.opendaylight.restconf.nb.rfc8040.utils.parser.ParserIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public abstract class AbstractIdentifierAwareJaxRsProvider<T> implements MessageBodyReader<T> {
 
@@ -96,7 +96,7 @@ public abstract class AbstractIdentifierAwareJaxRsProvider<T> implements Message
         return this.uriInfo;
     }
 
-    protected SchemaContext getSchemaContext() {
+    protected EffectiveModelContext getSchemaContext() {
         return schemaContextHandler.get();
     }
 
index aded90b50db9c5a2bccda9e72d7bedf3aae4a6e3..ba2407344173e9d23dc20ef0b791eaf64327270f 100644 (file)
@@ -9,53 +9,53 @@ package org.opendaylight.restconf.nb.rfc8040.references;
 
 import java.lang.ref.SoftReference;
 import java.net.URI;
+import java.util.Collection;
 import java.util.Date;
 import java.util.Optional;
-import java.util.Set;
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.restconf.nb.rfc8040.Rfc8040;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 /**
- * This class creates {@link SoftReference} of actual {@link SchemaContext}
+ * This class creates {@link SoftReference} of actual {@link EffectiveModelContext}
  * object and even if the {@link SchemaContext} changes, this will be sticks
  * reference to the old {@link SchemaContext} and provides work with the old
- * {@link SchemaContext}.
+ * {@link EffectiveModelContext}.
  *
  */
 public final class SchemaContextRef {
 
-    private final SoftReference<SchemaContext> schemaContextRef;
+    private final SoftReference<EffectiveModelContext> schemaContextRef;
 
     /**
-     * Create {@link SoftReference} of actual {@link SchemaContext}.
+     * Create {@link SoftReference} of actual {@link EffectiveModelContext}.
      *
      * @param schemaContext
-     *             actual {@link SchemaContext}
+     *             actual {@link EffectiveModelContext}
      */
-    public SchemaContextRef(final SchemaContext schemaContext) {
+    public SchemaContextRef(final EffectiveModelContext schemaContext) {
         this.schemaContextRef = new SoftReference<>(schemaContext);
     }
 
     /**
-     * Get {@link SchemaContext} from reference.
+     * Get {@link EffectiveModelContext} from reference.
      *
-     * @return {@link SchemaContext}
+     * @return {@link EffectiveModelContext}
      */
-    public SchemaContext get() {
+    public EffectiveModelContext get() {
         return this.schemaContextRef.get();
     }
 
     /**
-     * Get all modules like {@link Set} of {@link Module} from
-     * {@link SchemaContext}.
+     * Get all modules like {@link Collection} of {@link Module} from {@link SchemaContext}.
      *
-     * @return {@link Set} of {@link Module}
+     * @return {@link Collection} of {@link Module}
      */
-    public Set<Module> getModules() {
+    public Collection<? extends Module> getModules() {
         return get().getModules();
     }
 
index 3324904029a37d6f9544e765425bdad2e7d40e33..b6ec00c8b8fcae8840947eb928f235a58e203e53 100644 (file)
@@ -188,7 +188,7 @@ public class RestconfDataServiceImpl implements RestconfDataService {
             ref = new SchemaContextRef(this.schemaContextHandler.get());
         } else {
             localTransactionChainHandler = transactionChainOfMountPoint(mountPoint);
-            ref = new SchemaContextRef(mountPoint.getSchemaContext());
+            ref = new SchemaContextRef(mountPoint.getEffectiveModelContext());
         }
 
         final TransactionVarsWrapper transactionNode = new TransactionVarsWrapper(
@@ -316,7 +316,7 @@ public class RestconfDataServiceImpl implements RestconfDataService {
             ref = new SchemaContextRef(this.schemaContextHandler.get());
         } else {
             localTransactionChainHandler = transactionChainOfMountPoint(mountPoint);
-            ref = new SchemaContextRef(mountPoint.getSchemaContext());
+            ref = new SchemaContextRef(mountPoint.getEffectiveModelContext());
         }
 
         final TransactionVarsWrapper transactionNode = new TransactionVarsWrapper(
@@ -331,7 +331,7 @@ public class RestconfDataServiceImpl implements RestconfDataService {
 
     private SchemaContextRef getSchemaContext(final DOMMountPoint mountPoint) {
         return mountPoint == null ? new SchemaContextRef(schemaContextHandler.get())
-                : new SchemaContextRef(mountPoint.getSchemaContext());
+                : new SchemaContextRef(mountPoint.getEffectiveModelContext());
     }
 
     /**
@@ -377,7 +377,7 @@ public class RestconfDataServiceImpl implements RestconfDataService {
         if (mountPoint != null) {
             response = RestconfInvokeOperationsUtil.invokeActionViaMountPoint(mountPoint, (ContainerNode) data,
                 schemaPath, yangIIdContext);
-            schemaContextRef = new SchemaContextRef(mountPoint.getSchemaContext());
+            schemaContextRef = new SchemaContextRef(mountPoint.getEffectiveModelContext());
         } else {
             response = RestconfInvokeOperationsUtil.invokeAction((ContainerNode) data, schemaPath,
                 this.actionServiceHandler, yangIIdContext);
index 58942fbca199dc9cacc2a950339efaf497a97974..bce3b528abb537e3759d1fec635e23fd8b1f3c38 100644 (file)
@@ -84,7 +84,7 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat
             schemaContextRef = new SchemaContextRef(this.schemaContextHandler.get());
         } else {
             response = RestconfInvokeOperationsUtil.invokeRpcViaMountPoint(mountPoint, payload.getData(), schemaPath);
-            schemaContextRef = new SchemaContextRef(mountPoint.getSchemaContext());
+            schemaContextRef = new SchemaContextRef(mountPoint.getEffectiveModelContext());
         }
 
         final DOMRpcResult result = RestconfInvokeOperationsUtil.checkResponse(response);
index 04adf477e3dc36fe39d097e88687a0856d2cbd31..d1857be0df6943f37c540d2360f7241eb0f29a6b 100644 (file)
@@ -9,10 +9,8 @@
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import com.google.common.util.concurrent.FluentFuture;
-
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
-
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
@@ -28,10 +26,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * Util class for plain patch data to DS.
- *
  */
 public final class PlainPatchDataTransactionUtil {
 
index f1f395ba40e9948e1a0d6c9891655880382f1ad7..564e255b55ae46d820ab826cb4b78d673a2df7de 100644 (file)
@@ -34,6 +34,7 @@ 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.ImmutableNodes;
 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.SchemaContext;
 
@@ -97,7 +98,7 @@ public final class PostDataTransactionUtil {
      */
     private static FluentFuture<? extends CommitInfo> submitData(final YangInstanceIdentifier path,
             final NormalizedNode<?, ?> data, final TransactionVarsWrapper transactionNode,
-            final SchemaContext schemaContext, final String insert, final String point) {
+            final EffectiveModelContext schemaContext, final String insert, final String point) {
         final DOMTransactionChain transactionChain = transactionNode.getTransactionChain();
         final DOMDataTreeReadWriteTransaction newReadWriteTransaction = transactionChain.newReadWriteTransaction();
         if (insert == null) {
@@ -220,7 +221,7 @@ public final class PostDataTransactionUtil {
 
     private static void insertWithPointLeafListPost(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode<?, ?> payload,
-            final SchemaContext schemaContext, final String point, final OrderedLeafSetNode<?> readLeafList,
+            final EffectiveModelContext schemaContext, final String point, final OrderedLeafSetNode<?> readLeafList,
             final boolean before, final DOMTransactionChain transactionChain) {
         rwTransaction.delete(datastore, path.getParent().getParent());
         final InstanceIdentifierContext<?> instanceIdentifier =
@@ -255,7 +256,7 @@ public final class PostDataTransactionUtil {
 
     private static void insertWithPointListPost(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode<?, ?> payload,
-            final SchemaContext schemaContext, final String point, final MapNode readList, final boolean before,
+            final EffectiveModelContext schemaContext, final String point, final MapNode readList, final boolean before,
             final DOMTransactionChain transactionChain) {
         rwTransaction.delete(datastore, path.getParent().getParent());
         final InstanceIdentifierContext<?> instanceIdentifier =
index 72ee864ad3e2d25fc79a6102c519c68b5d1a0001..203d67a97f2f94db7c5b6c03adcdf8e67d0c83a0 100644 (file)
@@ -43,6 +43,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -159,7 +160,7 @@ public final class PutDataTransactionUtil {
     public static Response putData(final NormalizedNodeContext payload, final SchemaContextRef schemaCtxRef,
                                final TransactionVarsWrapper transactionNode, final String insert, final String point) {
         final YangInstanceIdentifier path = payload.getInstanceIdentifierContext().getInstanceIdentifier();
-        final SchemaContext schemaContext = schemaCtxRef.get();
+        final EffectiveModelContext schemaContext = schemaCtxRef.get();
 
         final DOMDataTreeReadWriteTransaction readWriteTransaction =
                 transactionNode.getTransactionChain().newReadWriteTransaction();
@@ -197,7 +198,7 @@ public final class PutDataTransactionUtil {
      * @return {@link FluentFuture}
      */
     private static FluentFuture<? extends CommitInfo> submitData(final YangInstanceIdentifier path,
-            final SchemaContext schemaContext, final TransactionChainHandler transactionChainHandler,
+            final EffectiveModelContext schemaContext, final TransactionChainHandler transactionChainHandler,
             final DOMDataTreeReadWriteTransaction readWriteTransaction,
             final NormalizedNode<?, ?> data, final String insert, final String point) {
         if (insert == null) {
@@ -296,8 +297,9 @@ public final class PutDataTransactionUtil {
         }
     }
 
-    public static NormalizedNode<?, ?> readList(final YangInstanceIdentifier path, final SchemaContext schemaContext,
-            final TransactionChainHandler transactionChainHandler, final DataSchemaNode schemaNode) {
+    public static NormalizedNode<?, ?> readList(final YangInstanceIdentifier path,
+            final EffectiveModelContext schemaContext, final TransactionChainHandler transactionChainHandler,
+            final DataSchemaNode schemaNode) {
         final InstanceIdentifierContext<?> iid = new InstanceIdentifierContext<SchemaNode>(
                 path.getParent(), schemaNode, null, schemaContext);
         final TransactionVarsWrapper transactionNode = new TransactionVarsWrapper(iid, null, transactionChainHandler);
@@ -308,7 +310,7 @@ public final class PutDataTransactionUtil {
 
     private static void insertWithPointLeafListPut(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path,
-            final NormalizedNode<?, ?> data, final SchemaContext schemaContext, final String point,
+            final NormalizedNode<?, ?> data, final EffectiveModelContext schemaContext, final String point,
             final OrderedLeafSetNode<?> readLeafList, final boolean before) {
         rwTransaction.delete(datastore, path.getParent());
         final InstanceIdentifierContext<?> instanceIdentifier =
@@ -338,7 +340,7 @@ public final class PutDataTransactionUtil {
 
     private static void insertWithPointListPut(final DOMDataTreeReadWriteTransaction writeTx,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path,
-            final NormalizedNode<?, ?> data, final SchemaContext schemaContext, final String point,
+            final NormalizedNode<?, ?> data, final EffectiveModelContext schemaContext, final String point,
             final OrderedMapNode readList, final boolean before) {
         writeTx.delete(datastore, path.getParent());
         final InstanceIdentifierContext<?> instanceIdentifier =
index 8e1304ea5bfb8682b4683746c4dcd2da6f3d4959..353c2e3911b5cf7044d1605a42660937a8be373c 100644 (file)
@@ -35,10 +35,8 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Util class for rpc.
- *
  */
 public final class RestconfInvokeOperationsUtil {
-
     private static final Logger LOG = LoggerFactory.getLogger(RestconfInvokeOperationsUtil.class);
 
     private RestconfInvokeOperationsUtil() {
@@ -60,8 +58,7 @@ public final class RestconfInvokeOperationsUtil {
             final SchemaPath schemaPath) {
         final Optional<DOMRpcService> mountPointService = mountPoint.getService(DOMRpcService.class);
         if (mountPointService.isPresent()) {
-            final ListenableFuture<DOMRpcResult> rpc = mountPointService.get().invokeRpc(schemaPath, data);
-            return prepareResult(rpc);
+            return prepareResult(mountPointService.get().invokeRpc(schemaPath, data));
         }
         final String errmsg = "RPC service is missing.";
         LOG.debug(errmsg);
@@ -86,8 +83,7 @@ public final class RestconfInvokeOperationsUtil {
             throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE);
         }
 
-        final ListenableFuture<DOMRpcResult> rpc = rpcService.invokeRpc(schemaPath, data);
-        return prepareResult(rpc);
+        return prepareResult(rpcService.invokeRpc(schemaPath, data));
     }
 
     /**
@@ -114,7 +110,7 @@ public final class RestconfInvokeOperationsUtil {
         }
     }
 
-    private static DOMRpcResult prepareResult(final ListenableFuture<DOMRpcResult> rpc) {
+    private static DOMRpcResult prepareResult(final ListenableFuture<? extends DOMRpcResult> rpc) {
         final RpcResultFactory dataFactory = new RpcResultFactory();
         FutureCallbackTx.addCallback(rpc, RestconfDataServiceConstant.PostData.POST_TX_TYPE, dataFactory);
         return dataFactory.build();
index acfc6437c05d9d2d86ccc209c00f120d7afd253b..1baaaf11b0b58974fe48872949c63588fcf1d909 100644 (file)
@@ -57,6 +57,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 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.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -210,7 +211,7 @@ public final class SubscribeToStreamUtil {
         final URI uri = prepareUriByStreamName(uriInfo, streamName);
         final DOMTransactionChain transactionChain = handlersHolder.getTransactionChainHandler().get();
         final DOMDataTreeReadWriteTransaction writeTransaction = transactionChain.newReadWriteTransaction();
-        final SchemaContext schemaContext = handlersHolder.getSchemaHandler().get();
+        final EffectiveModelContext schemaContext = handlersHolder.getSchemaHandler().get();
         final boolean exist = checkExist(schemaContext, writeTransaction);
 
         final NormalizedNode mapToStreams = RestconfMappingNodeUtil
index e3db40ba725c62d726dfe600d688cb361c1cf783..016ebf3a084e0b94e5c3303b41f3b5707ab0521b 100644 (file)
@@ -19,9 +19,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 
 @Path("/")
@@ -35,7 +35,7 @@ public class RestconfImpl implements RestconfService {
 
     @Override
     public NormalizedNodeContext getLibraryVersion() {
-        final SchemaContext context = this.schemaContextHandler.get();
+        final EffectiveModelContext context = this.schemaContextHandler.get();
         SchemaNode schemaNode = null;
         for (final GroupingDefinition groupingDefinition : context
                 .findModule(RestconfModule.IETF_RESTCONF_QNAME.getModule()).get().getGroupings()) {
index df9a8282ede8c1a5ee34301e06dfaf8136f8ffaf..eb979bc340c50c1de0ade813bcadd19105da2f14 100644 (file)
@@ -13,8 +13,8 @@ import java.time.OffsetDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.Collection;
+import java.util.List;
 import java.util.Optional;
-import java.util.Set;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.Rfc8040.IetfYangLibrary;
 import org.opendaylight.restconf.nb.rfc8040.Rfc8040.MonitoringModule;
@@ -41,6 +41,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuil
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Deviation;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
@@ -75,8 +76,8 @@ public final class RestconfMappingNodeUtil {
      * @return mapped data as {@link NormalizedNode}
      */
     public static NormalizedNode<NodeIdentifier, Collection<DataContainerChild<? extends PathArgument, ?>>>
-            mapModulesByIetfYangLibraryYang(final Set<Module> modules, final Module ietfYangLibraryModule,
-                    final SchemaContext context, final String moduleSetId) {
+            mapModulesByIetfYangLibraryYang(final Collection<? extends Module> modules,
+                    final Module ietfYangLibraryModule, final SchemaContext context, final String moduleSetId) {
         final DataSchemaNode modulesStateSch =
                 ietfYangLibraryModule.getDataChildByName(IetfYangLibrary.MODUELS_STATE_CONT_QNAME);
         final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> modulesStateBuilder =
@@ -196,7 +197,8 @@ public final class RestconfMappingNodeUtil {
         for (final Deviation deviation : module.getDeviations()) {
             final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> deviationEntryNode =
                     Builders.mapEntryBuilder((ListSchemaNode) deviationsSchema);
-            final QName lastComponent = deviation.getTargetPath().getLastComponent();
+            final List<QName> ids = deviation.getTargetPath().getNodeIdentifiers();
+            final QName lastComponent = ids.get(ids.size() - 1);
             addCommonLeafs(context.findModule(lastComponent.getModule()).get(), deviationEntryNode,
                 ietfYangLibraryModule);
             deviations.withChild(deviationEntryNode.build());
@@ -218,7 +220,7 @@ public final class RestconfMappingNodeUtil {
      */
     private static void addFeatureLeafList(final QName qnameOfFeaturesLeafList,
             final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder,
-            final Set<FeatureDefinition> features, final Module ietfYangLibraryModule) {
+            final Collection<? extends FeatureDefinition> features, final Module ietfYangLibraryModule) {
         final DataSchemaNode schemaNode =
                 findSchemaInListOfModulesSchema(qnameOfFeaturesLeafList, ietfYangLibraryModule);
         final ListNodeBuilder<Object, LeafSetEntryNode<Object>> leafSetBuilder =
@@ -454,8 +456,8 @@ public final class RestconfMappingNodeUtil {
      */
     @SuppressWarnings("rawtypes")
     public static NormalizedNode mapYangNotificationStreamByIetfRestconfMonitoring(final QName notifiQName,
-            final Set<NotificationDefinition> notifications, final Instant start, final String outputType,
-            final URI uri, final Module monitoringModule, final boolean existParent) {
+            final Collection<? extends NotificationDefinition> notifications, final Instant start,
+            final String outputType, final URI uri, final Module monitoringModule, final boolean existParent) {
         for (final NotificationDefinition notificationDefinition : notifications) {
             if (notificationDefinition.getQName().equals(notifiQName)) {
                 final DataSchemaNode streamListSchema = ((ContainerSchemaNode) ((ContainerSchemaNode) monitoringModule
@@ -556,7 +558,7 @@ public final class RestconfMappingNodeUtil {
     @SuppressWarnings("rawtypes")
     public static NormalizedNode mapDataChangeNotificationStreamByIetfRestconfMonitoring(
             final YangInstanceIdentifier path, final Instant start, final String outputType, final URI uri,
-            final Module monitoringModule, final boolean existParent, final SchemaContext schemaContext) {
+            final Module monitoringModule, final boolean existParent, final EffectiveModelContext schemaContext) {
         final SchemaNode schemaNode = ParserIdentifier
                 .toInstanceIdentifier(ParserIdentifier.stringFromYangInstanceIdentifier(path, schemaContext),
                         schemaContext, Optional.empty())
index ae37df0ee6c9d58c05b8379322e781a7781dce19..62f2ce7cd483f51852279338ff76890d98cbc94a 100644 (file)
@@ -37,6 +37,7 @@ import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -75,10 +76,8 @@ public final class ParserIdentifier {
      *           - mount point service
      * @return {@link InstanceIdentifierContext}
      */
-    public static InstanceIdentifierContext<?> toInstanceIdentifier(
-            final String identifier,
-            final SchemaContext schemaContext,
-            final Optional<DOMMountPointService> mountPointService) {
+    public static InstanceIdentifierContext<?> toInstanceIdentifier(final String identifier,
+            final EffectiveModelContext schemaContext, final Optional<DOMMountPointService> mountPointService) {
         if (identifier == null || !identifier.contains(RestconfConstants.MOUNT)) {
             return createIIdContext(schemaContext, identifier, null);
         }
@@ -93,7 +92,7 @@ public final class ParserIdentifier {
                 .orElseThrow(() -> new RestconfDocumentedException("Mount point does not exist.",
                     ErrorType.PROTOCOL, ErrorTag.DATA_MISSING));
 
-        final SchemaContext mountSchemaContext = mountPoint.getSchemaContext();
+        final EffectiveModelContext mountSchemaContext = mountPoint.getEffectiveModelContext();
         final String pathId = pathsIt.next().replaceFirst("/", "");
         return createIIdContext(mountSchemaContext, pathId, mountPoint);
     }
@@ -108,8 +107,8 @@ public final class ParserIdentifier {
      * @return {@link InstanceIdentifierContext}
      * @throws RestconfDocumentedException if the path cannot be resolved
      */
-    private static InstanceIdentifierContext<?> createIIdContext(final SchemaContext schemaContext, final String url,
-            final @Nullable DOMMountPoint mountPoint) {
+    private static InstanceIdentifierContext<?> createIIdContext(final EffectiveModelContext schemaContext,
+            final String url, final @Nullable DOMMountPoint mountPoint) {
         final YangInstanceIdentifier urlPath = IdentifierCodec.deserialize(url, schemaContext);
         return new InstanceIdentifierContext<>(urlPath, getPathSchema(schemaContext, urlPath), mountPoint,
                 schemaContext);
@@ -224,14 +223,14 @@ public final class ParserIdentifier {
      * {@link SchemaExportContext}.
      *
      * @param schemaContext
-     *             {@link SchemaContext}
+     *             {@link EffectiveModelContext}
      * @param identifier
      *             path parameter
      * @param domMountPointService
      *             {@link DOMMountPointService}
      * @return {@link SchemaExportContext}
      */
-    public static SchemaExportContext toSchemaExportContextFromIdentifier(final SchemaContext schemaContext,
+    public static SchemaExportContext toSchemaExportContextFromIdentifier(final EffectiveModelContext schemaContext,
             final String identifier, final DOMMountPointService domMountPointService,
             final DOMYangTextSourceProvider sourceProvider) {
         final Iterable<String> pathComponents = RestconfConstants.SLASH_SPLITTER.split(identifier);
index 2a2181c02bb0b0dcb68ffbe78566b108e6e528f4..c2f7ea8f6b1d3d9c80e15eff461c32656cdcd4e0 100644 (file)
@@ -347,7 +347,7 @@ public final class YangInstanceIdentifierDeserializer {
 
     private static <T extends DataNodeContainer & SchemaNode & ActionNodeContainer> QName getQNameOfDataSchemaNode(
             final T parent, final String nodeName) {
-        final Optional<ActionDefinition> actionDef = findActionDefinition(parent, nodeName);
+        final Optional<? extends ActionDefinition> actionDef = findActionDefinition(parent, nodeName);
         final SchemaNode node;
         if (actionDef.isPresent()) {
             node = actionDef.get();
@@ -357,7 +357,7 @@ public final class YangInstanceIdentifierDeserializer {
         return node.getQName();
     }
 
-    private static Optional<ActionDefinition> findActionDefinition(final SchemaNode dataSchemaNode,
+    private static Optional<? extends ActionDefinition> findActionDefinition(final SchemaNode dataSchemaNode,
             final String nodeName) {
         requireNonNull(dataSchemaNode, "DataSchema Node must not be null.");
         if (dataSchemaNode instanceof ActionNodeContainer) {
index 4249b206c8da82b3f8f9a10f5edfff7d398b8fe7..9fd81a2f394add87c8f03602f16f17e2e9fbd82d 100644 (file)
@@ -32,9 +32,9 @@ import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
 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.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.slf4j.Logger;
@@ -51,7 +51,8 @@ public final class TestRestconfUtils {
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
-    public static SchemaContext loadSchemaContext(final String yangPath, final SchemaContext schemaContext) {
+    public static EffectiveModelContext loadSchemaContext(final String yangPath,
+            final EffectiveModelContext schemaContext) {
         try {
             Preconditions.checkArgument(yangPath != null, "Path can not be null.");
             Preconditions.checkArgument(!yangPath.isEmpty(), "Path can not be empty.");
@@ -72,7 +73,7 @@ public final class TestRestconfUtils {
 
     @SuppressWarnings("checkstyle:IllegalCatch")
     public static NormalizedNodeContext loadNormalizedContextFromXmlFile(final String pathToInputFile,
-            final String uri, final SchemaContext schemaContext) {
+            final String uri, final EffectiveModelContext schemaContext) {
         final InstanceIdentifierContext<?> iiContext =
                 ParserIdentifier.toInstanceIdentifier(uri, schemaContext, Optional.empty());
         final InputStream inputStream = TestRestconfUtils.class.getResourceAsStream(pathToInputFile);
@@ -109,8 +110,7 @@ public final class TestRestconfUtils {
         final String schemaNodeName = iiContext.getSchemaNode().getQName().getLocalName();
 
         if (!schemaNodeName.equalsIgnoreCase(docRootElm)) {
-            final Collection<DataSchemaNode> children = ((DataNodeContainer) schemaNode).getChildNodes();
-            for (final DataSchemaNode child : children) {
+            for (final DataSchemaNode child : ((DataNodeContainer) schemaNode).getChildNodes()) {
                 if (child.getQName().getLocalName().equalsIgnoreCase(docRootElm)) {
                     schemaNode = child;
                     break;
index 4a6f7607a6538f05a40f12034a9b3a1c78f0f1a6..10455b5f32500dcd8ab149d6bcea0299e75eff82 100644 (file)
@@ -58,8 +58,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 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;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -74,7 +74,7 @@ public final class TestUtils {
 
     }
 
-    public static SchemaContext loadSchemaContext(final String... yangPath)
+    public static EffectiveModelContext loadSchemaContext(final String... yangPath)
             throws FileNotFoundException {
         final List<File> files = new ArrayList<>();
         for (final String path : yangPath) {
@@ -274,7 +274,7 @@ public final class TestUtils {
         return mapEntryNode.build();
     }
 
-    public static SchemaContextHandler newSchemaContextHandler(final SchemaContext schemaContext) {
+    public static SchemaContextHandler newSchemaContextHandler(final EffectiveModelContext schemaContext) {
         DOMDataBroker mockDataBroker = mock(DOMDataBroker.class);
         DOMTransactionChain mockChain = mock(DOMTransactionChain.class);
         DOMDataTreeWriteTransaction mockTx = mock(DOMDataTreeWriteTransaction.class);
@@ -284,7 +284,7 @@ public final class TestUtils {
         doReturn(mockChain).when(mockDataBroker).createTransactionChain(any());
         SchemaContextHandler schemaContextHandler = SchemaContextHandler.newInstance(
                 new TransactionChainHandler(mockDataBroker), Mockito.mock(DOMSchemaService.class));
-        schemaContextHandler.onGlobalContextUpdated(schemaContext);
+        schemaContextHandler.onModelContextUpdated(schemaContext);
         return schemaContextHandler;
     }
 }
index 2f3e738e62557d7b68025a3dc94356f1f4b3e883..71eec71a1f5ed4a58180de7875cc0c154fe360a3 100644 (file)
@@ -20,6 +20,7 @@ import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
@@ -32,7 +33,7 @@ public class SchemaContextHandlerTest {
     private static final String PATH_FOR_NEW_SCHEMA_CONTEXT = "/modules/modules-behind-mount-point";
 
     private SchemaContextHandler schemaContextHandler;
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
     private final DOMSchemaService mockDOMSchemaService = Mockito.mock(DOMSchemaService.class);
 
     @Before
@@ -48,7 +49,7 @@ public class SchemaContextHandlerTest {
 
         this.schemaContext =
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles(PATH_FOR_ACTUAL_SCHEMA_CONTEXT));
-        this.schemaContextHandler.onGlobalContextUpdated(this.schemaContext);
+        this.schemaContextHandler.onModelContextUpdated(this.schemaContext);
     }
 
     /**
@@ -92,9 +93,9 @@ public class SchemaContextHandlerTest {
     @Test
     public void onGlobalContextUpdateTest() throws Exception {
         // create new SchemaContext and update SchemaContextHandler
-        final SchemaContext newSchemaContext =
+        final EffectiveModelContext newSchemaContext =
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles(PATH_FOR_NEW_SCHEMA_CONTEXT));
-        this.schemaContextHandler.onGlobalContextUpdated(newSchemaContext);
+        this.schemaContextHandler.onModelContextUpdated(newSchemaContext);
 
         assertNotEquals("SchemaContextHandler should not has reference to old SchemaContext",
                 this.schemaContext, this.schemaContextHandler.get());
index 7bc0937822a5e3a696d26daf65072efef04b598b..60097ecd8e434ea07eed3ed41aac27e4c0764ddf 100644 (file)
@@ -37,12 +37,12 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class XmlBodyReaderMountPointTest extends AbstractBodyReaderTest {
     private final XmlNormalizedNodeBodyReader xmlBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME =  QNameModule.create(
         URI.create("instance:identifier:module"), Revision.of("2014-01-17"));
index 4730d31c83ba68c5d254312e0699f7d3af2ca276..5149c271dff1e3b031892c82ff311508140d6a6c 100644 (file)
@@ -20,12 +20,12 @@ import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.patch.PatchContext;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.AbstractBodyReaderTest;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.JsonBodyReaderTest;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class JsonPatchBodyReaderMountPointTest extends AbstractBodyReaderTest {
 
     private static final String MOUNT_POINT = "instance-identifier-module:cont/yang-ext:mount/";
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private final JsonToPatchBodyReader jsonToPatchBodyReader;
 
     public JsonPatchBodyReaderMountPointTest() throws Exception {
index f84917da6f40ddc76ef01ed7b96910fe38a707f9..150e7b301d559bdc95d238b5f447381246a62a91 100644 (file)
@@ -20,12 +20,12 @@ import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.patch.PatchContext;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.AbstractBodyReaderTest;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.JsonBodyReaderTest;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class JsonPatchBodyReaderTest extends AbstractBodyReaderTest {
 
     private final JsonToPatchBodyReader jsonToPatchBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public JsonPatchBodyReaderTest() throws Exception {
         super(schemaContext);
index cfe49159387518906164f31510efc9570999bb3b..97b2da238d311aef101e82edd932497bf7939466 100644 (file)
@@ -19,12 +19,12 @@ import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.patch.PatchContext;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.AbstractBodyReaderTest;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.XmlBodyReaderTest;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class XmlPatchBodyReaderMountPointTest extends AbstractBodyReaderTest {
 
     private final XmlToPatchBodyReader xmlToPatchBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private static final String MOUNT_POINT = "instance-identifier-module:cont/yang-ext:mount/";
 
     public XmlPatchBodyReaderMountPointTest() throws Exception {
index 2733f9001ab61eae860aeacf1318e62ecf703d2f..d8d7bb17c2bd4e6febc43b502fd085a2fa92421f 100644 (file)
@@ -19,12 +19,12 @@ import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.patch.PatchContext;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.AbstractBodyReaderTest;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.test.XmlBodyReaderTest;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class XmlPatchBodyReaderTest extends AbstractBodyReaderTest {
 
     private final XmlToPatchBodyReader xmlToPatchBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     public XmlPatchBodyReaderTest() throws Exception {
         super(schemaContext);
index 30eba6a6518822e1339dac01b6dd2ba49065f386..31b7e7c323a9c473ce7a387c77f1d49b3d0bd131 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.restconf.nb.rfc8040.jersey.providers.test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -31,7 +32,7 @@ import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.spi.AbstractIdentifierAwareJaxRsProvider;
 import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public abstract class AbstractBodyReaderTest {
 
@@ -39,7 +40,7 @@ public abstract class AbstractBodyReaderTest {
     protected final SchemaContextHandler schemaContextHandler;
     protected final DOMMountPointServiceHandler mountPointServiceHandler;
 
-    protected AbstractBodyReaderTest(final SchemaContext schemaContext) throws NoSuchFieldException,
+    protected AbstractBodyReaderTest(final EffectiveModelContext schemaContext) throws NoSuchFieldException,
             IllegalAccessException {
         mediaType = getMediaType();
 
@@ -48,15 +49,16 @@ public abstract class AbstractBodyReaderTest {
         final DOMMountPointService mountPointService = mock(DOMMountPointService.class);
         final DOMMountPoint mountPoint = mock(DOMMountPoint.class);
         doReturn(Optional.of(mountPoint)).when(mountPointService).getMountPoint(any(YangInstanceIdentifier.class));
-        doReturn(schemaContext).when(mountPoint).getSchemaContext();
+        doReturn(schemaContext).when(mountPoint).getEffectiveModelContext();
+        doCallRealMethod().when(mountPoint).getSchemaContext();
 
         mountPointServiceHandler = DOMMountPointServiceHandler.newInstance(mountPointService);
     }
 
     protected abstract MediaType getMediaType();
 
-    protected static SchemaContext schemaContextLoader(final String yangPath,
-            final SchemaContext schemaContext) {
+    protected static EffectiveModelContext schemaContextLoader(final String yangPath,
+            final EffectiveModelContext schemaContext) {
         return TestRestconfUtils.loadSchemaContext(yangPath, schemaContext);
     }
 
index 2e02284470695e7bc3191707c8fd229085aa0ca9..8480d1f4f75340a8eed2cf19a1e36b945bc0b11e 100644 (file)
@@ -33,8 +33,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 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.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
@@ -42,7 +42,7 @@ import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 public class JsonBodyReaderTest extends AbstractBodyReaderTest {
 
     private final JsonNormalizedNodeBodyReader jsonBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create(
         URI.create("instance:identifier:module"), Revision.of("2014-01-17"));
index fef810d0e422bb0b1e7eb9dd3e466cd542dbf316..51926fee805b52a8429f72a92d00bf6ab40b4723 100644 (file)
@@ -39,14 +39,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 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.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class XmlBodyReaderTest extends AbstractBodyReaderTest {
 
     private final XmlNormalizedNodeBodyReader xmlBodyReader;
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private static final QNameModule INSTANCE_IDENTIFIER_MODULE_QNAME = QNameModule.create(
         URI.create("instance:identifier:module"), Revision.of("2014-01-17"));
 
index e39c261bb99694494a43297487e8d53763582ba3..1666e2f79ba1c0e44e4454ccc0bd984b15088d9a 100644 (file)
@@ -18,6 +18,7 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.ArgumentMatchers.notNull;
+import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -82,6 +83,7 @@ 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.ImmutableNodes;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
@@ -119,7 +121,7 @@ public class JSONRestconfServiceRfc8040ImplTest {
     static final QName TEST_OUTPUT_QNAME = QName.create(TOASTER_MODULE_NS, TOASTER_MODULE_VERSION, "testOutput");
     static final QName TEXT_OUT_QNAME = QName.create(TOASTER_MODULE_NS, TOASTER_MODULE_VERSION, "textOut");
 
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
 
     @Mock
     private DOMTransactionChain mockTxChain;
@@ -581,7 +583,8 @@ public class JSONRestconfServiceRfc8040ImplTest {
     DOMMountPoint setupTestMountPoint() throws FileNotFoundException, ReactorException {
         final SchemaContext schemaContextTestModule = TestUtils.loadSchemaContext("/full-versions/test-module");
         final DOMMountPoint mockMountPoint = mock(DOMMountPoint.class);
-        doReturn(schemaContextTestModule).when(mockMountPoint).getSchemaContext();
+        doReturn(schemaContextTestModule).when(mockMountPoint).getEffectiveModelContext();
+        doCallRealMethod().when(mockMountPoint).getSchemaContext();
 
         doReturn(Optional.of(mockDOMDataBroker)).when(mockMountPoint).getService(DOMDataBroker.class);
 
index 7d474846ab1cd8475680ec78ba7d78c3dcec74ee..ad79f89f2a17274e7f111ac325cbd43c226c8033 100644 (file)
@@ -13,6 +13,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.opendaylight.restconf.common.patch.PatchEditOperation.CREATE;
@@ -199,13 +200,14 @@ public class RestconfDataServiceImplTest {
         final SchemaContextHandler schemaContextHandler = SchemaContextHandler.newInstance(transactionChainHandler,
                 Mockito.mock(DOMSchemaService.class));
 
-        schemaContextHandler.onGlobalContextUpdated(this.contextRef.get());
+        schemaContextHandler.onModelContextUpdated(this.contextRef.get());
         this.dataService = new RestconfDataServiceImpl(schemaContextHandler, this.transactionChainHandler,
                 DOMMountPointServiceHandler.newInstance(mountPointService), this.delegRestconfSubscrService,
                 this.actionServiceHandler);
         doReturn(Optional.of(this.mountPoint)).when(this.mountPointService)
                 .getMountPoint(any(YangInstanceIdentifier.class));
-        doReturn(this.contextRef.get()).when(this.mountPoint).getSchemaContext();
+        doCallRealMethod().when(this.mountPoint).getSchemaContext();
+        doReturn(this.contextRef.get()).when(this.mountPoint).getEffectiveModelContext();
         doReturn(Optional.of(this.mountDataBroker)).when(this.mountPoint).getService(DOMDataBroker.class);
         doReturn(this.mountTransactionChain).when(this.mountDataBroker)
                 .createTransactionChain(any(DOMTransactionChainListener.class));
index 31f6229957b3585cf4d123b3778ccd9a242e1183..57e8017970c926f14bbdc08b851b6c387c78314f 100644 (file)
@@ -68,7 +68,7 @@ public class RestconfInvokeOperationsServiceImplTest {
         doReturn(CommitInfo.emptyFluentFuture()).when(wTx).commit();
         final SchemaContextHandler schemaContextHandler = SchemaContextHandler.newInstance(txHandler,
             mock(DOMSchemaService.class));
-        schemaContextHandler.onGlobalContextUpdated(contextRef.get());
+        schemaContextHandler.onModelContextUpdated(contextRef.get());
         this.invokeOperationsService =
                 new RestconfInvokeOperationsServiceImpl(this.rpcServiceHandler, schemaContextHandler);
         when(this.rpcServiceHandler.get()).thenReturn(this.rpcService);
@@ -117,7 +117,7 @@ public class RestconfInvokeOperationsServiceImplTest {
         doReturn(schemaNode).when(context).getSchemaNode();
         final NormalizedNode<?, ?> data = mock(NormalizedNode.class);
         final DOMRpcResult domRpcResult = mock(DOMRpcResult.class);
-        when(this.rpcService.invokeRpc(schemaPath, data)).thenReturn(immediateFluentFuture(domRpcResult));
+        doReturn(immediateFluentFuture(domRpcResult)).when(this.rpcService).invokeRpc(schemaPath, data);
         doReturn(result).when(domRpcResult).getResult();
         return new NormalizedNodeContext(context, data);
     }
index 2cf0be2556922352504ca0432fe91211e6680dde..f535851fd5e6dc65bb71a7baa0c4cdb33484391e 100644 (file)
@@ -113,7 +113,7 @@ public class RestconfStreamsSubscriptionServiceImplTest {
         when(uriInfo.getBaseUriBuilder()).thenReturn(baseUriBuilder);
         final URI uri = new URI("http://127.0.0.1/" + URI);
         when(uriInfo.getAbsolutePath()).thenReturn(uri);
-        this.schemaHandler.onGlobalContextUpdated(
+        this.schemaHandler.onModelContextUpdated(
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/notifications")));
     }
 
index e471da63afd7720c6d194edd34928287827578b7..0eaabe0d4fcca99be546085fb519acde0f6501a7 100644 (file)
@@ -13,7 +13,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.Collections;
-import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.MockitoAnnotations;
@@ -32,10 +31,10 @@ 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.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.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.test.util.YangParserTestUtils;
 
@@ -81,13 +80,12 @@ public class CreateStreamUtilTest {
 
     private NormalizedNodeContext prepareDomPayload(final String rpcName, final String inputOutput,
             final String toasterValue, final String inputOutputName) {
-        final SchemaContext schema = this.refSchemaCtx.get();
+        final EffectiveModelContext schema = this.refSchemaCtx.get();
         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);
-        final Set<RpcDefinition> setRpcs = rpcModule.getRpcs();
         ContainerSchemaNode rpcInputSchemaNode = null;
-        for (final RpcDefinition rpc : setRpcs) {
+        for (final RpcDefinition rpc : rpcModule.getRpcs()) {
             if (rpcQName.isEqualWithoutRevision(rpc.getQName())) {
                 rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName);
                 break;
index 6c0ba762e043fb0abc62a7c2c48f39e5c9f96763..f983b0bf526b4d9b34433ee0a0059f5e31fba1fe 100644 (file)
@@ -42,7 +42,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 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.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class PlainPatchDataTransactionUtilTest {
@@ -65,7 +65,7 @@ public class PlainPatchDataTransactionUtilTest {
     private LeafNode leafGap;
     private ContainerNode jukeboxContainerWithPlayer;
     private ContainerNode jukeboxContainerWithPlaylist;
-    private SchemaContext schema;
+    private EffectiveModelContext schema;
     private DataSchemaNode schemaNodeForGap;
     private YangInstanceIdentifier iidGap;
     private DataSchemaNode schemaNodeForJukebox;
index 73263156b8b302d0c61ddab60321f526752d2263..92c83a46e25a839e109a14599f185a2efd00339b 100644 (file)
@@ -48,7 +48,7 @@ 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.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.w3c.dom.DOMException;
@@ -75,7 +75,7 @@ public class PostDataTransactionUtilTest {
     private TransactionChainHandler transactionChainHandler;
     private SchemaContextRef refSchemaCtx;
     private ContainerNode buildBaseCont;
-    private SchemaContext schema;
+    private EffectiveModelContext schema;
     private YangInstanceIdentifier iid2;
     private MapNode buildList;
 
index 27a0a0631f044da279b7555a16da20e8d76ba2c5..1cc826e9581af805eb217160a582b46d47107105 100644 (file)
@@ -42,7 +42,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 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.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class PutDataTransactionUtilTest {
@@ -66,7 +66,7 @@ public class PutDataTransactionUtilTest {
     private ContainerNode buildBaseCont;
     private ContainerNode buildBaseContWithList;
     private MapEntryNode buildListEntry;
-    private SchemaContext schema;
+    private EffectiveModelContext schema;
     private DataSchemaNode schemaNode;
     private YangInstanceIdentifier iid;
     private DataSchemaNode schemaNode2;
index bb4d19f62f4a137fc0901a632949e6ddbd9ad1ca..995073f8605142cef2143150fa8219c2deafe66e 100644 (file)
@@ -49,8 +49,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 public class ReadDataTransactionUtilTest {
 
@@ -66,7 +66,7 @@ public class ReadDataTransactionUtilTest {
     @Mock
     private DOMDataTreeReadTransaction read;
     @Mock
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
     @Mock
     private ContainerSchemaNode containerSchemaNode;
     @Mock
index 01aa0f409e15c317ba15b34c9eb7ac727b69f43a..342473c4e65b8fe303c280110985df987003f0fb 100644 (file)
@@ -16,16 +16,13 @@ import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
 import org.opendaylight.restconf.nb.rfc8040.TestUtils;
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class RestconfImplTest {
-
     @Test
     public void restImplTest() throws Exception {
-        final SchemaContext schemaContext =
-                YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/restconf/impl"));
-        final SchemaContextHandler schemaContextHandler = TestUtils.newSchemaContextHandler(schemaContext);
+        final SchemaContextHandler schemaContextHandler = TestUtils.newSchemaContextHandler(
+            YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/restconf/impl")));
         final RestconfImpl restconfImpl = new RestconfImpl(schemaContextHandler);
         final NormalizedNodeContext libraryVersion = restconfImpl.getLibraryVersion();
         final LeafNode<?> value = (LeafNode<?>) libraryVersion.getData();
index 6db9b954e98931622f229a4a9daeaa3deb9605fd..c971a2761a4b83ddba56d47a83983e625e180bac 100644 (file)
@@ -30,7 +30,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule;
 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.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class RestconfOperationsServiceTest {
@@ -41,7 +41,7 @@ public class RestconfOperationsServiceTest {
     @Mock
     private UriInfo uriInfo;
 
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
     private SchemaContextHandler schemaContextHandler;
     private DOMMountPointServiceHandler domMountPointServiceHandler;
 
index c711cdd4ca2a133ded9440e3052b3e8b74ad8684..82373d9b99935fa03b1579e8662023166750ddec 100644 (file)
@@ -33,8 +33,8 @@ import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
 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.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 /**
@@ -61,11 +61,11 @@ public class RestconfSchemaServiceTest {
     private DOMYangTextSourceProvider sourceProvider;
 
     // schema context with modules
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
     // schema context with modules behind mount point
-    private SchemaContext schemaContextBehindMountPoint;
+    private EffectiveModelContext schemaContextBehindMountPoint;
     // schema context with mount points
-    private SchemaContext schemaContextWithMountPoints;
+    private EffectiveModelContext schemaContextWithMountPoints;
 
     // mount point service
     private DOMMountPointService mountPointService;
@@ -218,7 +218,7 @@ public class RestconfSchemaServiceTest {
         when(this.mockContextHandler.get()).thenReturn(this.schemaContextWithMountPoints);
 
         // make test - call service on mount point with null schema context
-        this.thrown.expect(NullPointerException.class);
+        this.thrown.expect(IllegalStateException.class);
         // NULL_MOUNT_POINT contains null schema context
         this.schemaService.getSchema(NULL_MOUNT_POINT + TEST_MODULE_BEHIND_MOUNT_POINT);
     }
index 54d4fe2be1198e367834beac1db715b9681f85f5..84b9ef19e33133af496d4990d395500b92647e51 100644 (file)
@@ -42,7 +42,7 @@ import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.p
 import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.skyscreamer.jsonassert.JSONAssert;
 import org.slf4j.Logger;
@@ -61,7 +61,7 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
     private static final YangInstanceIdentifier PATCH_CONT_YIID =
             YangInstanceIdentifier.create(new YangInstanceIdentifier.NodeIdentifier(PatchCont.QNAME));
 
-    private static SchemaContext SCHEMA_CONTEXT;
+    private static EffectiveModelContext SCHEMA_CONTEXT;
 
     private DataBroker dataBroker;
     private DOMDataBroker domDataBroker;
@@ -87,7 +87,7 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
         transactionChainHandler = new TransactionChainHandler(domDataBroker);
         schemaContextHandler = SchemaContextHandler.newInstance(transactionChainHandler,
                 Mockito.mock(DOMSchemaService.class));
-        schemaContextHandler.onGlobalContextUpdated(SCHEMA_CONTEXT);
+        schemaContextHandler.onModelContextUpdated(SCHEMA_CONTEXT);
     }
 
     class ListenerAdapterTester extends ListenerAdapter {
@@ -154,13 +154,13 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
         MyList1Builder builder = new MyList1Builder().setMyLeaf11("Jed").setName("Althea");
         InstanceIdentifier<MyList1> iid = InstanceIdentifier.create(PatchCont.class)
                 .child(MyList1.class, new MyList1Key("Althea"));
-        writeTransaction.put(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
+        writeTransaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
         writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_CREATE));
 
         writeTransaction = dataBroker.newWriteOnlyTransaction();
         builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha");
-        writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
+        writeTransaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
         writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_UPDATE));
 
@@ -185,13 +185,13 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
         MyList1Builder builder = new MyList1Builder().setMyLeaf11("Jed").setName("Althea");
         InstanceIdentifier<MyList1> iid = InstanceIdentifier.create(PatchCont.class)
                 .child(MyList1.class, new MyList1Key("Althea"));
-        writeTransaction.put(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
+        writeTransaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
         writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_CREATE));
 
         writeTransaction = dataBroker.newWriteOnlyTransaction();
         builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha");
-        writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
+        writeTransaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
         writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_UPDATE));
 
index da40353684c2673f4927541efd9dc4ddc9aee476..7c53872ac7f3eb40b7e150c32401347cbd4daa20 100644 (file)
@@ -16,6 +16,7 @@ import java.io.IOException;
 import java.net.URISyntaxException;
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.opendaylight.aaa.filterchain.configuration.CustomFilterAdapterConfiguration;
@@ -34,13 +35,14 @@ import org.opendaylight.restconf.nb.rfc8040.services.wrapper.ServicesWrapper;
 import org.opendaylight.restconf.nb.rfc8040.streams.websockets.WebSocketConfiguration;
 import org.opendaylight.restconf.nb.rfc8040.test.incubate.InMemoryMdsalModule;
 import org.opendaylight.restconf.nb.rfc8040.web.WebInitializer;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider;
 
 /**
  * Tests if the {@link Rfc8040RestConfWiring} works.
  *
  * @author Michael Vorburger.ch
  */
+@Ignore
 public class Rfc8040RestConfWiringTest {
 
     public static class TestModule extends AbstractModule {
@@ -75,12 +77,12 @@ public class Rfc8040RestConfWiringTest {
     @Inject WebServer webServer;
     @Inject TestWebClient webClient;
 
-    @Inject SchemaContextProvider schemaContextProvider;
+    @Inject EffectiveModelContextProvider schemaContextProvider;
     @Inject SchemaContextHandler schemaContextHandler;
 
     @Test
     public void testWiring() throws IOException, InterruptedException, URISyntaxException {
-        schemaContextHandler.onGlobalContextUpdated(schemaContextProvider.getSchemaContext());
+        schemaContextHandler.onModelContextUpdated(schemaContextProvider.getEffectiveModelContext());
         assertEquals(200, webClient.request("GET", "/rests/yang-library-version").statusCode());
     }
 }
index c08e40814c7a7ed5b49e332f3f5760e08da16fba..9e089035416a1ea76d850d14cecd5a8540fa47ab 100644 (file)
@@ -21,7 +21,6 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -49,10 +48,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.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.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -74,11 +73,11 @@ public class RestconfMappingNodeUtilTest {
     @Mock private LeafSchemaNode leafReplayLog;
     @Mock private LeafSchemaNode leafEvents;
 
-    private static Set<Module> modules;
-    private static SchemaContext schemaContext;
-    private static SchemaContext schemaContextMonitoring;
+    private static Collection<? extends Module> modules;
+    private static EffectiveModelContext schemaContext;
+    private static EffectiveModelContext schemaContextMonitoring;
 
-    private static Set<Module> modulesRest;
+    private static Collection<? extends Module> modulesRest;
 
     @BeforeClass
     public static void loadTestSchemaContextAndModules() throws Exception {
@@ -278,7 +277,7 @@ public class RestconfMappingNodeUtilTest {
      * @param expectedModules Modules from <code>SchemaContext</code>
      * @param loadedModules Loaded modules into Restconf module
      */
-    private static void verifyLoadedModules(final Set<Module> expectedModules,
+    private static void verifyLoadedModules(final Collection<? extends Module> expectedModules,
             final Map<String, String> loadedModules) {
         assertEquals("Number of loaded modules is not as expected", expectedModules.size(), loadedModules.size());
         for (final Module m : expectedModules) {
index 656e098182810de93d5eff2a2bdea24fc5cd8c35..6ba6bfe86294d9f6c321bf91ae0186402194b915 100644 (file)
@@ -32,9 +32,9 @@ 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.model.api.ContainerSchemaNode;
+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.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 /**
@@ -132,16 +132,16 @@ public class ParserFieldsParameterTest {
 
     @Before
     public void setUp() throws Exception {
-        final SchemaContext schemaContextJukebox =
+        final EffectiveModelContext schemaContextJukebox =
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/jukebox"));
         initJukeboxSchemaNodes(schemaContextJukebox);
 
-        final SchemaContext schemaContextTestServices =
+        final EffectiveModelContext schemaContextTestServices =
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/test-services"));
         initTestServicesSchemaNodes(schemaContextTestServices);
     }
 
-    private void initJukeboxSchemaNodes(final SchemaContext schemaContext) {
+    private void initJukeboxSchemaNodes(final EffectiveModelContext schemaContext) {
         Mockito.when(identifierJukebox.getSchemaContext()).thenReturn(schemaContext);
         Mockito.when(containerJukebox.getQName()).thenReturn(JUKEBOX_Q_NAME);
         Mockito.when(identifierJukebox.getSchemaNode()).thenReturn(containerJukebox);
@@ -163,7 +163,7 @@ public class ParserFieldsParameterTest {
         Mockito.when(listAlbum.getDataChildByName(NAME_Q_NAME)).thenReturn(leafName);
     }
 
-    private void initTestServicesSchemaNodes(final SchemaContext schemaContext) {
+    private void initTestServicesSchemaNodes(final EffectiveModelContext schemaContext) {
         Mockito.when(identifierTestServices.getSchemaContext()).thenReturn(schemaContext);
         Mockito.when(containerTestData.getQName()).thenReturn(TEST_DATA_Q_NAME);
         Mockito.when(identifierTestServices.getSchemaNode()).thenReturn(containerTestData);
index d5f3568b6b1a0baf16307a83c48c52ad4d8175c1..ca871654ea848dc0dfb7ea2700975edaff5f025e 100644 (file)
@@ -38,8 +38,8 @@ import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
 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.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 /**
@@ -78,9 +78,9 @@ public class ParserIdentifierTest {
             "parser-identifier:cont2/listTest/list-in-grouping=name/leaf-A.B";
 
     // schema context with test modules
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
     // contains the same modules but it is different object (it can be compared with equals)
-    private SchemaContext schemaContextOnMountPoint;
+    private EffectiveModelContext schemaContextOnMountPoint;
 
     private static final String TEST_MODULE_NAME = "test-module";
     private static final String TEST_MODULE_REVISION = "2016-06-02";
@@ -127,7 +127,7 @@ public class ParserIdentifierTest {
                 .getInstance();
 
         // register mount point with null schema context
-        when(this.mockMountPoint.getSchemaContext()).thenReturn(null);
+        when(this.mockMountPoint.getEffectiveModelContext()).thenReturn(null);
         when(this.mockMountPointService.getMountPoint(YangInstanceIdentifier.empty()))
                 .thenReturn(Optional.of(this.mockMountPoint));
     }
index 5ff648e711cf0e7d457a45240b821bc05258277a..5145b1181eea78daa8783f3743f124bab9a0ad0f 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index bfac921a818d633fcf80b88448614e17df810845..377059638658c421454b4f34298b42b0cc8096bb 100644 (file)
@@ -10,10 +10,8 @@ package org.opendaylight.netconf.sal.rest.doc.impl;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
-
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
-
 import org.opendaylight.netconf.sal.rest.doc.api.ApiDocService;
 import org.opendaylight.netconf.sal.rest.doc.mountpoints.MountPointSwagger;
 import org.opendaylight.netconf.sal.rest.doc.swagger.ApiDeclaration;
index 9ee11ccd7b1469650d4436950d15c03f0fe61f43..7e0aac21e43f76c50ccb1146c68fe2be6312915f 100644 (file)
@@ -96,7 +96,7 @@ public abstract class BaseYangSwaggerGenerator {
      * Return list of modules converted to swagger compliant resource list.
      */
     public ResourceList getResourceListing(final UriInfo uriInfo, final SchemaContext schemaContext,
-        final String context, final int pageNum, boolean all, final URIType uriType) {
+        final String context, final int pageNum, final boolean all, final URIType uriType) {
 
         final ResourceList resourceList = createResourceList();
 
@@ -201,7 +201,7 @@ public abstract class BaseYangSwaggerGenerator {
         final List<Api> apis = new ArrayList<>();
         boolean hasAddRootPostLink = false;
 
-        final Collection<DataSchemaNode> dataSchemaNodes = module.getChildNodes();
+        final Collection<? extends DataSchemaNode> dataSchemaNodes = module.getChildNodes();
         LOG.debug("child nodes size [{}]", dataSchemaNodes.size());
         for (final DataSchemaNode node : dataSchemaNodes) {
             if (node instanceof ListSchemaNode || node instanceof ContainerSchemaNode) {
@@ -241,8 +241,7 @@ public abstract class BaseYangSwaggerGenerator {
             }
         }
 
-        final Set<RpcDefinition> rpcs = module.getRpcs();
-        for (final RpcDefinition rpcDefinition : rpcs) {
+        for (final RpcDefinition rpcDefinition : module.getRpcs()) {
             final String resourcePath;
             resourcePath = getDataStorePath("operations", context);
             addOperations(rpcDefinition, apis, resourcePath, schemaContext);
@@ -305,7 +304,7 @@ public abstract class BaseYangSwaggerGenerator {
         LOG.debug("Adding path: [{}]", resourcePath);
         api.setPath(resourcePath.concat(getContent(dataStore)));
 
-        Iterable<DataSchemaNode> childSchemaNodes = Collections.emptySet();
+        Iterable<? extends DataSchemaNode> childSchemaNodes = Collections.emptySet();
         if (node instanceof ListSchemaNode || node instanceof ContainerSchemaNode) {
             final DataNodeContainer dataNodeContainer = (DataNodeContainer) node;
             childSchemaNodes = dataNodeContainer.getChildNodes();
@@ -314,9 +313,9 @@ public abstract class BaseYangSwaggerGenerator {
         apis.add(api);
 
         if (uriType.equals(URIType.RFC8040)) {
-            ((ActionNodeContainer) node).getActions().forEach((actionDef -> {
+            ((ActionNodeContainer) node).getActions().forEach(actionDef -> {
                 addOperations(actionDef, apis, resourcePath, schemaContext);
-            }));
+            });
         }
 
         for (final DataSchemaNode childNode : childSchemaNodes) {
@@ -333,7 +332,7 @@ public abstract class BaseYangSwaggerGenerator {
 
     public abstract String getContent(String dataStore);
 
-    private static boolean containsListOrContainer(final Iterable<DataSchemaNode> nodes) {
+    private static boolean containsListOrContainer(final Iterable<? extends DataSchemaNode> nodes) {
         for (final DataSchemaNode child : nodes) {
             if (child instanceof ListSchemaNode || child instanceof ContainerSchemaNode) {
                 return true;
@@ -343,7 +342,8 @@ public abstract class BaseYangSwaggerGenerator {
     }
 
     private static List<Operation> operation(final DataSchemaNode node, final List<Parameter> pathParams,
-            final boolean isConfig, final Iterable<DataSchemaNode> childSchemaNodes, final String parentName) {
+            final boolean isConfig, final Iterable<? extends DataSchemaNode> childSchemaNodes,
+            final String parentName) {
         final List<Operation> operations = new ArrayList<>();
 
         final Get getBuilder = new Get(node, isConfig);
@@ -436,8 +436,6 @@ public abstract class BaseYangSwaggerGenerator {
             return new TreeSet<>();
         }
 
-        final Set<Module> modules = schemaContext.getModules();
-
         final SortedSet<Module> sortedModules = new TreeSet<>((module1, module2) -> {
             int result = module1.getName().compareTo(module2.getName());
             if (result == 0) {
@@ -448,7 +446,7 @@ public abstract class BaseYangSwaggerGenerator {
             }
             return result;
         });
-        for (final Module m : modules) {
+        for (final Module m : schemaContext.getModules()) {
             if (m != null) {
                 sortedModules.add(m);
             }
index 97937936beb47c9ceceacab9325c8c978ac7f196..996c34120b182155410c4954eaa890e31ba39341 100644 (file)
@@ -18,9 +18,9 @@ import com.google.common.collect.Range;
 import com.google.common.collect.RangeSet;
 import com.mifmif.common.regex.Generex;
 import java.io.IOException;
+import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
 import java.util.regex.Pattern;
 import org.opendaylight.netconf.sal.rest.doc.model.builder.OperationBuilder;
 import org.opendaylight.netconf.sal.rest.doc.model.builder.OperationBuilder.Post;
@@ -120,7 +120,7 @@ public class ModelGenerator {
         processModules(module, models, schemaContext);
         processContainersAndLists(module, models, schemaContext);
         processRPCs(module, models, schemaContext);
-        processIdentities(module, models);
+        processIdentities(schemaContext, module, models);
         return models;
     }
 
@@ -244,10 +244,11 @@ public class ModelGenerator {
      * @param module The module from which the identity stmt will be processed
      * @param models The ObjectNode in which the parsed identity will be put as a 'model' obj
      */
-    private static void processIdentities(final Module module, final ObjectNode models) {
+    private static void processIdentities(final SchemaContext schemaContext, final Module module,
+            final ObjectNode models) {
 
         final String moduleName = module.getName();
-        final Set<IdentitySchemaNode> idNodes = module.getIdentities();
+        final Collection<? extends IdentitySchemaNode> idNodes = module.getIdentities();
         LOG.debug("Processing Identities for module {} . Found {} identity statements", moduleName, idNodes.size());
 
         for (final IdentitySchemaNode idNode : idNodes) {
@@ -265,15 +266,13 @@ public class ModelGenerator {
                  * This is a base identity. So lets see if it has sub types. If it does, then add them to the model
                  * definition.
                  */
-                final Set<IdentitySchemaNode> derivedIds = idNode.getDerivedIdentities();
-
-                if (derivedIds != null) {
+                final Collection<? extends IdentitySchemaNode> derivedIds = schemaContext.getDerivedIdentities(idNode);
+                if (!derivedIds.isEmpty()) {
                     final ArrayNode subTypes = new ArrayNode(JsonNodeFactory.instance);
                     for (final IdentitySchemaNode derivedId : derivedIds) {
                         subTypes.add(derivedId.getQName().getLocalName());
                     }
                     identityObj.set(SUB_TYPES_KEY, subTypes);
-
                 }
             } else {
                 /*
@@ -292,10 +291,9 @@ public class ModelGenerator {
             final DataNodeContainer dataNode, final String parentName, final ObjectNode models, final boolean isConfig,
             final SchemaContext schemaContext) throws IOException {
         if (dataNode instanceof ListSchemaNode || dataNode instanceof ContainerSchemaNode) {
-            final Iterable<DataSchemaNode> containerChildren = dataNode.getChildNodes();
             final String localName = ((SchemaNode) dataNode).getQName().getLocalName();
-            final ObjectNode properties =
-                    processChildren(containerChildren, parentName + "/" + localName, models, isConfig, schemaContext);
+            final ObjectNode properties = processChildren(dataNode.getChildNodes(), parentName + "/" + localName,
+                models, isConfig, schemaContext);
             final String nodeName = parentName + (isConfig ? OperationBuilder.CONFIG : OperationBuilder.OPERATIONAL)
                     + localName;
 
@@ -349,7 +347,7 @@ public class ModelGenerator {
      * Processes the nodes.
      */
     private ObjectNode processChildren(
-            final Iterable<DataSchemaNode> nodes, final String parentName, final ObjectNode models,
+            final Iterable<? extends DataSchemaNode> nodes, final String parentName, final ObjectNode models,
             final boolean isConfig, final SchemaContext schemaContext) throws IOException {
         final ObjectNode properties = JsonNodeFactory.instance.objectNode();
         for (final DataSchemaNode node : nodes) {
@@ -367,8 +365,8 @@ public class ModelGenerator {
                     property = processLeafListNode((LeafListSchemaNode) node, schemaContext);
 
                 } else if (node instanceof ChoiceSchemaNode) {
-                    if (((ChoiceSchemaNode) node).getCases().values().iterator().hasNext()) {
-                        processChoiceNode(((ChoiceSchemaNode) node).getCases().values().iterator().next()
+                    if (((ChoiceSchemaNode) node).getCases().iterator().hasNext()) {
+                        processChoiceNode(((ChoiceSchemaNode) node).getCases().iterator().next()
                             .getChildNodes(), parentName, models, schemaContext, isConfig, properties);
                     }
                     continue;
@@ -421,7 +419,7 @@ public class ModelGenerator {
     }
 
     private void processChoiceNode(
-            final Iterable<DataSchemaNode> nodes, final String moduleName, final ObjectNode models,
+            final Iterable<? extends DataSchemaNode> nodes, final String moduleName, final ObjectNode models,
             final SchemaContext schemaContext, final boolean isConfig, final ObjectNode properties)
            throws IOException {
         for (final DataSchemaNode node : nodes) {
@@ -439,8 +437,8 @@ public class ModelGenerator {
                 property = processLeafListNode((LeafListSchemaNode) node, schemaContext);
 
             } else if (node instanceof ChoiceSchemaNode) {
-                if (((ChoiceSchemaNode) node).getCases().values().iterator().hasNext()) {
-                    processChoiceNode(((ChoiceSchemaNode) node).getCases().values().iterator().next().getChildNodes(),
+                if (((ChoiceSchemaNode) node).getCases().iterator().hasNext()) {
+                    processChoiceNode(((ChoiceSchemaNode) node).getCases().iterator().next().getChildNodes(),
                             moduleName, models, schemaContext, isConfig, properties);
                 }
                 continue;
@@ -617,8 +615,7 @@ public class ModelGenerator {
         property.put(MIN_ITEMS, 0);
         property.put(UNIQUE_ITEMS_KEY, true);
         ArrayNode enumNames = new ArrayNode(JsonNodeFactory.instance);
-        final List<Bit> bits = bitsType.getBits();
-        for (final Bit bit : bits) {
+        for (final Bit bit : bitsType.getBits()) {
             enumNames.add(new TextNode(bit.getName()));
         }
         property.set(ENUM, enumNames);
index ac91b379dc9e8195337e2f9bb014da7cb7190d08..9fac54084c01c168587d8cf09c656e7d2c2181e2 100644 (file)
@@ -34,8 +34,8 @@ import org.opendaylight.netconf.sal.rest.doc.swagger.Operation;
 import org.opendaylight.netconf.sal.rest.doc.swagger.Parameter;
 import org.opendaylight.netconf.sal.rest.doc.swagger.Resource;
 import org.opendaylight.netconf.sal.rest.doc.swagger.ResourceList;
+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 ApiDocGeneratorTest {
 
@@ -47,7 +47,7 @@ public class ApiDocGeneratorTest {
     private static final Date REVISION_2 = Date.valueOf(STRING_DATE);
     private ApiDocGeneratorDraftO2 generator;
     private DocGenTestHelper helper;
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
 
     @Before
     public void setUp() throws Exception {
index b4072327e553b804f78fe1a79c95317b61c4c693..63b37dd2b971764385fc403b33501989ff1f0eb2 100644 (file)
@@ -28,7 +28,7 @@ import org.opendaylight.netconf.sal.rest.doc.impl.MountPointSwaggerGeneratorDraf
 import org.opendaylight.netconf.sal.rest.doc.impl.MountPointSwaggerGeneratorRFC8040;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class ApiDocServiceImplTest {
     private static final String HTTP_URL = "http://localhost/path";
@@ -47,7 +47,7 @@ public class ApiDocServiceImplTest {
         this.helper = new DocGenTestHelper();
         this.helper.setUp();
 
-        final SchemaContext context = this.helper.createMockSchemaContext();
+        final EffectiveModelContext context = this.helper.createMockSchemaContext();
         final DOMSchemaService schemaService = this.helper.createMockSchemaService(context);
 
         final DOMMountPoint mountPoint = mock(DOMMountPoint.class);
index af8670c63654d4ebd4a80c5a7a8a84eb00f3a23b..0da601bade468493b11f1068ad061830f3ec5ec6 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.controller.sal.rest.doc.impl;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -19,25 +20,24 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
 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.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class DocGenTestHelper {
 
-    private Set<Module> modules;
+    private Collection<? extends Module> modules;
     private ObjectMapper mapper;
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
 
-    public Set<Module> loadModules(final String resourceDirectory) throws URISyntaxException, FileNotFoundException {
+    public Collection<? extends Module> loadModules(final String resourceDirectory)
+            throws URISyntaxException, FileNotFoundException {
 
         final URI resourceDirUri = getClass().getResource(resourceDirectory).toURI();
         final File testDir = new File(resourceDirUri);
@@ -54,7 +54,7 @@ public class DocGenTestHelper {
         return this.schemaContext.getModules();
     }
 
-    public Collection<Module> getModules() {
+    public Collection<? extends Module> getModules() {
         return this.modules;
     }
 
@@ -64,11 +64,11 @@ public class DocGenTestHelper {
         this.mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
     }
 
-    public SchemaContext getSchemaContext() {
+    public EffectiveModelContext getSchemaContext() {
         return this.schemaContext;
     }
 
-    public DOMSchemaService createMockSchemaService(SchemaContext mockContext) {
+    public DOMSchemaService createMockSchemaService(EffectiveModelContext mockContext) {
         if (mockContext == null) {
             mockContext = createMockSchemaContext();
         }
@@ -78,9 +78,9 @@ public class DocGenTestHelper {
         return mockSchemaService;
     }
 
-    public SchemaContext createMockSchemaContext() {
-        final SchemaContext mockContext = mock(SchemaContext.class);
-        when(mockContext.getModules()).thenReturn(this.modules);
+    public EffectiveModelContext createMockSchemaContext() {
+        final EffectiveModelContext mockContext = mock(EffectiveModelContext.class);
+        doReturn(this.modules).when(mockContext).getModules();
 
         final ArgumentCaptor<String> moduleCapture = ArgumentCaptor.forClass(String.class);
         final ArgumentCaptor<Optional> dateCapture = ArgumentCaptor.forClass(Optional.class);
@@ -89,7 +89,7 @@ public class DocGenTestHelper {
             invocation -> {
                 final String module = moduleCapture.getValue();
                 final Optional<?> date = dateCapture.getValue();
-                for (final Module m : Collections.unmodifiableSet(DocGenTestHelper.this.modules)) {
+                for (final Module m : DocGenTestHelper.this.modules) {
                     if (m.getName().equals(module) && m.getRevision().equals(date)) {
                         return Optional.of(m);
                     }
@@ -100,7 +100,7 @@ public class DocGenTestHelper {
             invocation -> {
                 final URI namespace = namespaceCapture.getValue();
                 final Optional<?> date = dateCapture.getValue();
-                for (final Module m : Collections.unmodifiableSet(DocGenTestHelper.this.modules)) {
+                for (final Module m : DocGenTestHelper.this.modules) {
                     if (m.getNamespace().equals(namespace) && m.getRevision().equals(date)) {
                         return Optional.of(m);
                     }
index 08cab58ddfb774a6ac6d262808f11f92fce8ee87..b33ea404d3aa5d4bee7dca3f38f46cca867afa9c 100644 (file)
@@ -33,6 +33,7 @@ import org.opendaylight.netconf.sal.rest.doc.swagger.Resource;
 import org.opendaylight.netconf.sal.rest.doc.swagger.ResourceList;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 public class MountPointSwaggerTest {
@@ -57,7 +58,7 @@ public class MountPointSwaggerTest {
         // We are sharing the global schema service and the mount schema service
         // in our test.
         // OK for testing - real thing would have seperate instances.
-        final SchemaContext context = this.helper.createMockSchemaContext();
+        final EffectiveModelContext context = this.helper.createMockSchemaContext();
         final DOMSchemaService schemaService = this.helper.createMockSchemaService(context);
 
         final DOMMountPoint mountPoint = mock(DOMMountPoint.class);