1 package org.opendaylight.controller.md.sal.dom.broker.impl.compat;
3 import javax.annotation.concurrent.ThreadSafe;
5 import org.opendaylight.controller.md.sal.common.api.RegistrationListener;
6 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
7 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration;
8 import org.opendaylight.controller.md.sal.common.api.data.DataReader;
9 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
10 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
11 import org.opendaylight.controller.sal.common.DataStoreIdentifier;
12 import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
13 import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
14 import org.opendaylight.controller.sal.core.api.data.DataProviderService;
15 import org.opendaylight.controller.sal.core.api.data.DataValidator;
16 import org.opendaylight.controller.sal.core.api.model.SchemaService;
17 import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
18 import org.opendaylight.yangtools.concepts.ListenerRegistration;
19 import org.opendaylight.yangtools.concepts.Registration;
20 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
22 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
23 import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
24 import org.opendaylight.yangtools.yang.model.api.SchemaServiceListener;
27 public class BackwardsCompatibleDataBroker implements DataProviderService {
29 private final DOMDataBroker backingBroker;
30 private volatile DataNormalizer normalizer;
31 private final ListenerRegistration<SchemaServiceListener> schemaReg;
33 public BackwardsCompatibleDataBroker(final DOMDataBroker newBiDataImpl, final SchemaService schemaService) {
34 backingBroker = newBiDataImpl;
35 schemaReg = schemaService.registerSchemaServiceListener(new SchemaListener());
39 public CompositeNode readConfigurationData(final YangInstanceIdentifier legacyPath) {
40 final BackwardsCompatibleTransaction<?> tx = BackwardsCompatibleTransaction.readOnlyTransaction(backingBroker.newReadOnlyTransaction(),normalizer);
42 return tx.readConfigurationData(legacyPath);
49 public CompositeNode readOperationalData(final YangInstanceIdentifier legacyPath) {
50 final BackwardsCompatibleTransaction<?> tx = BackwardsCompatibleTransaction.readOnlyTransaction(backingBroker.newReadOnlyTransaction(),normalizer);
52 return tx.readOperationalData(legacyPath);
59 public DataModificationTransaction beginTransaction() {
60 return BackwardsCompatibleTransaction.readWriteTransaction(backingBroker.newReadWriteTransaction(), normalizer);
64 public ListenerRegistration<DataChangeListener> registerDataChangeListener(final YangInstanceIdentifier legacyPath,
65 final DataChangeListener listener) {
66 final YangInstanceIdentifier normalizedPath = normalizer.toNormalized(legacyPath);
68 final TranslatingListenerInvoker translatingCfgListener =
69 TranslatingListenerInvoker.createConfig(listener, normalizer);
70 translatingCfgListener.register(backingBroker, normalizedPath);
72 final TranslatingListenerInvoker translatingOpListener =
73 TranslatingListenerInvoker.createOperational(listener, normalizer);
74 translatingOpListener.register(backingBroker, normalizedPath);
76 return new DelegateListenerRegistration(translatingCfgListener, translatingOpListener, listener);
80 public Registration registerCommitHandler(
81 final YangInstanceIdentifier path, final DataCommitHandler<YangInstanceIdentifier, CompositeNode> commitHandler) {
82 // FIXME Do real forwarding
83 return new AbstractObjectRegistration<DataCommitHandler<YangInstanceIdentifier,CompositeNode>>(commitHandler) {
85 protected void removeRegistration() {
92 public ListenerRegistration<RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>>> registerCommitHandlerListener(
93 final RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>> commitHandlerListener) {
97 // Obsolete functionality
100 public void addValidator(final DataStoreIdentifier store, final DataValidator validator) {
101 throw new UnsupportedOperationException();
105 public void removeValidator(final DataStoreIdentifier store, final DataValidator validator) {
106 throw new UnsupportedOperationException();
110 public void addRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
111 throw new UnsupportedOperationException();
115 public void removeRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
116 throw new UnsupportedOperationException();
120 public Registration registerConfigurationReader(
121 final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
122 throw new UnsupportedOperationException("Data Reader contract is not supported.");
126 public Registration registerOperationalReader(
127 final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
128 throw new UnsupportedOperationException("Data Reader contract is not supported.");
131 private static class DelegateListenerRegistration implements ListenerRegistration<DataChangeListener> {
132 private final TranslatingListenerInvoker translatingCfgListener;
133 private final TranslatingListenerInvoker translatingOpListener;
134 private final DataChangeListener listener;
136 public DelegateListenerRegistration(final TranslatingListenerInvoker translatingCfgListener, final TranslatingListenerInvoker translatingOpListener, final DataChangeListener listener) {
137 this.translatingCfgListener = translatingCfgListener;
138 this.translatingOpListener = translatingOpListener;
139 this.listener = listener;
143 public void close() {
144 translatingCfgListener.close();
145 translatingOpListener.close();
149 public DataChangeListener getInstance() {
154 private class SchemaListener implements SchemaContextListener {
157 public void onGlobalContextUpdated(final SchemaContext ctx) {
158 normalizer = new DataNormalizer(ctx);