2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. 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.sal.core.compat;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.collect.ClassToInstanceMap;
13 import com.google.common.collect.ForwardingObject;
14 import com.google.common.collect.ImmutableClassToInstanceMap;
15 import com.google.common.collect.ImmutableClassToInstanceMap.Builder;
17 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
18 import org.opendaylight.controller.md.sal.dom.api.DOMDataBrokerExtension;
19 import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
20 import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeCommitCohortRegistry;
21 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
22 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
23 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
24 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
25 import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
28 public class DOMDataBrokerAdapter extends ForwardingObject implements org.opendaylight.mdsal.dom.api.DOMDataBroker {
29 private final ClassToInstanceMap<org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension> extensions;
30 private final DOMDataBroker delegate;
32 public DOMDataBrokerAdapter(final DOMDataBroker delegate) {
33 this.delegate = requireNonNull(delegate);
35 Map<Class<? extends DOMDataBrokerExtension>, DOMDataBrokerExtension> delegateExtensions =
36 delegate.getSupportedExtensions();
37 Builder<org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension> extBuilder =
38 ImmutableClassToInstanceMap.builder();
40 final DOMDataTreeChangeService delegateTreeChangeService = (DOMDataTreeChangeService) delegateExtensions.get(
41 DOMDataTreeChangeService.class);
42 if (delegateTreeChangeService != null) {
43 extBuilder.put(org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService.class,
44 new DOMDataTreeChangeServiceAdapter(delegateTreeChangeService));
47 final DOMDataTreeCommitCohortRegistry delegateCohortRegistry =
48 (DOMDataTreeCommitCohortRegistry) delegateExtensions.get(DOMDataTreeCommitCohortRegistry.class);
49 if (delegateCohortRegistry != null) {
50 extBuilder.put(DOMDataTreeCommitCohortRegistry.class, delegateCohortRegistry::registerCommitCohort);
53 extensions = extBuilder.build();
57 public DOMDataTreeReadTransaction newReadOnlyTransaction() {
58 return new DOMDataTreeReadTransactionAdapter(delegate.newReadOnlyTransaction());
62 public DOMDataTreeWriteTransaction newWriteOnlyTransaction() {
63 return new DOMDataTreeWriteTransactionAdapter(delegate.newWriteOnlyTransaction());
67 public DOMDataTreeReadWriteTransaction newReadWriteTransaction() {
68 return new DOMDataTreeReadWriteTransactionAdapter(delegate.newReadWriteTransaction());
72 public ClassToInstanceMap<org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension> getExtensions() {
77 public DOMTransactionChain createTransactionChain(final DOMTransactionChainListener listener) {
78 return new DOMTransactionChainAdapter(listener, delegate::createTransactionChain);
82 protected DOMDataBroker delegate() {