2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html.
8 package org.opendaylight.controller.md.sal.dom.broker.impl.compat;
10 import javax.annotation.concurrent.ThreadSafe;
11 import org.opendaylight.controller.md.sal.common.api.RegistrationListener;
12 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
13 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration;
14 import org.opendaylight.controller.md.sal.common.api.data.DataReader;
15 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
16 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
17 import org.opendaylight.controller.sal.common.DataStoreIdentifier;
18 import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
19 import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
20 import org.opendaylight.controller.sal.core.api.data.DataProviderService;
21 import org.opendaylight.controller.sal.core.api.data.DataValidator;
22 import org.opendaylight.controller.sal.core.api.model.SchemaService;
23 import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
24 import org.opendaylight.yangtools.concepts.ListenerRegistration;
25 import org.opendaylight.yangtools.concepts.Registration;
26 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
27 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
28 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
29 import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
33 public class BackwardsCompatibleDataBroker implements DataProviderService {
35 private final DOMDataBroker backingBroker;
36 private volatile DataNormalizer normalizer;
37 private final ListenerRegistration<SchemaContextListener> schemaReg;
39 public BackwardsCompatibleDataBroker(final DOMDataBroker newBiDataImpl, final SchemaService schemaService) {
40 backingBroker = newBiDataImpl;
41 schemaReg = schemaService.registerSchemaContextListener(new SchemaListener());
45 public CompositeNode readConfigurationData(final YangInstanceIdentifier legacyPath) {
46 final BackwardsCompatibleTransaction<?> tx = BackwardsCompatibleTransaction.readOnlyTransaction(backingBroker.newReadOnlyTransaction(),normalizer);
48 return tx.readConfigurationData(legacyPath);
55 public CompositeNode readOperationalData(final YangInstanceIdentifier legacyPath) {
56 final BackwardsCompatibleTransaction<?> tx = BackwardsCompatibleTransaction.readOnlyTransaction(backingBroker.newReadOnlyTransaction(),normalizer);
58 return tx.readOperationalData(legacyPath);
65 public DataModificationTransaction beginTransaction() {
66 return BackwardsCompatibleTransaction.readWriteTransaction(backingBroker.newReadWriteTransaction(), normalizer);
70 public ListenerRegistration<DataChangeListener> registerDataChangeListener(final YangInstanceIdentifier legacyPath,
71 final DataChangeListener listener) {
72 final YangInstanceIdentifier normalizedPath = normalizer.toNormalized(legacyPath);
74 final TranslatingListenerInvoker translatingCfgListener =
75 TranslatingListenerInvoker.createConfig(listener, normalizer);
76 translatingCfgListener.register(backingBroker, normalizedPath);
78 final TranslatingListenerInvoker translatingOpListener =
79 TranslatingListenerInvoker.createOperational(listener, normalizer);
80 translatingOpListener.register(backingBroker, normalizedPath);
82 return new DelegateListenerRegistration(translatingCfgListener, translatingOpListener, listener);
86 public Registration registerCommitHandler(
87 final YangInstanceIdentifier path, final DataCommitHandler<YangInstanceIdentifier, CompositeNode> commitHandler) {
88 // FIXME Do real forwarding
89 return new AbstractObjectRegistration<DataCommitHandler<YangInstanceIdentifier,CompositeNode>>(commitHandler) {
91 protected void removeRegistration() {
98 public ListenerRegistration<RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>>> registerCommitHandlerListener(
99 final RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>> commitHandlerListener) {
103 // Obsolete functionality
106 public void addValidator(final DataStoreIdentifier store, final DataValidator validator) {
107 throw new UnsupportedOperationException();
111 public void removeValidator(final DataStoreIdentifier store, final DataValidator validator) {
112 throw new UnsupportedOperationException();
116 public void addRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
117 throw new UnsupportedOperationException();
121 public void removeRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
122 throw new UnsupportedOperationException();
126 public Registration registerConfigurationReader(
127 final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
128 throw new UnsupportedOperationException("Data Reader contract is not supported.");
132 public Registration registerOperationalReader(
133 final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
134 throw new UnsupportedOperationException("Data Reader contract is not supported.");
137 private static class DelegateListenerRegistration implements ListenerRegistration<DataChangeListener> {
138 private final TranslatingListenerInvoker translatingCfgListener;
139 private final TranslatingListenerInvoker translatingOpListener;
140 private final DataChangeListener listener;
142 public DelegateListenerRegistration(final TranslatingListenerInvoker translatingCfgListener, final TranslatingListenerInvoker translatingOpListener, final DataChangeListener listener) {
143 this.translatingCfgListener = translatingCfgListener;
144 this.translatingOpListener = translatingOpListener;
145 this.listener = listener;
149 public void close() {
150 translatingCfgListener.close();
151 translatingOpListener.close();
155 public DataChangeListener getInstance() {
160 private class SchemaListener implements SchemaContextListener {
163 public void onGlobalContextUpdated(final SchemaContext ctx) {
164 normalizer = new DataNormalizer(ctx);