Update mdsal-binding-api with DataObject{Identifier,Reference} 69/104969/36
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 2 Jul 2024 17:45:27 +0000 (19:45 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 4 Jul 2024 19:45:47 +0000 (21:45 +0200)
commit6b09ffdf3c48bf3d25ff8c7bc8d098258388e726
tree30efbb0ca637e793238d8f15b77b4b191ba02049
parent1193dfc9194df085906b91ec7c3c95dba79d17ba
Update mdsal-binding-api with DataObject{Identifier,Reference}

InstanceIdentifier is an overloaded thing, representing two distinct
contracts:
- an 'instance-identifier', in RFC7950 sense, pointing to at most one
  DataObject
- a wildcard match on the above, pointing to one or more DataObjects

The two constructs are now properly modeled via
- yangtools.binding.DataObjectIdentifier (first construct)
- yangtools.binding.DataObjectReference (second construct)

yangtools.yang.binding.InstanceIdentifier is the sole survivor of the
MD-SAL -> YANG Tools move, presenting a special-case implementation of
DataObjectReference contract, which does not expose isWildcarded()==true
in its class hierarchy -- but can be converted to an object which can be
be switch(obj)'d on. It is deprecated and will be removed soon.

This patch updates binding-api to reflect new capabilities:

1) {Read,Write}Operations operate primarily on DataObjectIdentifier, with
   ReadOperations.exists() optionally supporting any
   DataObjectReference. API/ABI compatibility is maintained via defaults
   methods performing correct appropriate checks and conversions

2) MountPoint is identified by a DataObjectIdentifier, matching the
   yang-ext.yang modeling intent. Unfortunately InstanceIdentifier is
   captured in the generic class signature, hence this is an
   API-incompatible change. Downstream migration is trivial via
   toLegacy() and toIdentifier() conversions

3) DataTreeService is updated to use
   LogicalDatastoreType/DataObjectReference for tree change listeners
   and LogicalDatastoreType/DataObjectIdentifier for data listeners

4) DataObjectModification uses DataObjectIdentifier instead of
   DataTreeIdentifier

5) ActionSpec and InstanceNotificationSpec are using
   DataObjectReference

6) MountPointService exposes findMountPoint(DataObjectIdentifier) and
   allows registration on any DataObjectReference

7) ActionService, InstanceNotificationPublishService and RpcProviderService
   operate on DataObjectIdentifiers

8) InstanceNotificationService operates on DataObjectReferences and the
   listeners receive DataObjectIdentifiers

9) DataTreeCommitCohortRegistry works on top of DataObjectReferences

10) DataTreeIdentifier is DataTreeMatch, operating on
    DataObjectReferences

JIRA: MDSAL-817
Change-Id: Ibad30e0ae1dfdd66181d6df8b3e62ab7ebc95a99
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
56 files changed:
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionProviderService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionSpec.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ClusteredDataTreeChangeListener.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataObjectModification.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeChangeService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCommitCohortRegistry.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeIdentifier.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeModification.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/InstanceNotificationPublishService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/InstanceNotificationService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/InstanceNotificationSpec.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/LegacyUtils.java [new file with mode: 0644]
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/MountPoint.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/MountPointService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ReadOperations.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/RpcProviderService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/WriteOperations.java
binding/mdsal-binding-api/src/test/java/org/opendaylight/mdsal/binding/api/DataDataTreeIdentifierTest.java [moved from binding/mdsal-binding-api/src/test/java/org/opendaylight/mdsal/binding/api/DataTreeIdentifierTest.java with 75% similarity]
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractForwardedTransaction.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractInstanceNotificationListenerAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataBrokerAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeListenerAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMMountPointListenerAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMMountPointServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMReadTransactionAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMReadWriteTransactionAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcProviderServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingMountPointAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/InstanceNotificationListenerAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/InstanceNotificationServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/KeyedInstanceNotificationListenerAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataTreeModification.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/PublisherAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionProviderService.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiDataBroker.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiMountPointService.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiRpcProviderService.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcIntegrationTest.java
binding/mdsal-binding-spi/src/main/java/org/opendaylight/mdsal/binding/spi/ForwardingDataBroker.java
binding/mdsal-binding-spi/src/main/java/org/opendaylight/mdsal/binding/spi/ForwardingReadTransaction.java
binding/mdsal-binding-spi/src/main/java/org/opendaylight/mdsal/binding/spi/ForwardingReadWriteTransaction.java
binding/mdsal-binding-spi/src/main/java/org/opendaylight/mdsal/binding/spi/ForwardingWriteTransaction.java
binding/mdsal-binding-util/src/main/java/org/opendaylight/mdsal/binding/util/TransactionAdapter.java
binding/mdsal-binding-util/src/main/java/org/opendaylight/mdsal/binding/util/TypedReadTransaction.java
binding/mdsal-binding-util/src/main/java/org/opendaylight/mdsal/binding/util/TypedReadTransactionImpl.java
binding/mdsal-binding-util/src/main/java/org/opendaylight/mdsal/binding/util/TypedReadWriteTransactionImpl.java
binding/mdsal-binding-util/src/main/java/org/opendaylight/mdsal/binding/util/TypedWriteTransaction.java
binding/mdsal-binding-util/src/main/java/org/opendaylight/mdsal/binding/util/TypedWriteTransactionImpl.java
binding/mdsal-binding-util/src/test/java/org/opendaylight/mdsal/binding/util/ManagedNewTransactionRunnerImplTest.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMMountPointListener.java