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;
26 import org.opendaylight.mdsal.dom.spi.PingPongMergingDOMDataBroker;
29 public class DOMDataBrokerAdapter extends ForwardingObject implements PingPongMergingDOMDataBroker {
30 private final ClassToInstanceMap<org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension> extensions;
31 private final DOMDataBroker delegate;
33 public DOMDataBrokerAdapter(final DOMDataBroker delegate) {
34 this.delegate = requireNonNull(delegate);
36 Map<Class<? extends DOMDataBrokerExtension>, DOMDataBrokerExtension> delegateExtensions =
37 delegate.getSupportedExtensions();
38 Builder<org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension> extBuilder =
39 ImmutableClassToInstanceMap.builder();
41 final DOMDataTreeChangeService delegateTreeChangeService = (DOMDataTreeChangeService) delegateExtensions.get(
42 DOMDataTreeChangeService.class);
43 if (delegateTreeChangeService != null) {
44 extBuilder.put(org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService.class,
45 new DOMDataTreeChangeServiceAdapter(delegateTreeChangeService));
48 final DOMDataTreeCommitCohortRegistry delegateCohortRegistry =
49 (DOMDataTreeCommitCohortRegistry) delegateExtensions.get(DOMDataTreeCommitCohortRegistry.class);
50 if (delegateCohortRegistry != null) {
51 extBuilder.put(DOMDataTreeCommitCohortRegistry.class, delegateCohortRegistry::registerCommitCohort);
54 extensions = extBuilder.build();
58 public DOMDataTreeReadTransaction newReadOnlyTransaction() {
59 return new DOMDataTreeReadTransactionAdapter(delegate.newReadOnlyTransaction());
63 public DOMDataTreeWriteTransaction newWriteOnlyTransaction() {
64 return new DOMDataTreeWriteTransactionAdapter(delegate.newWriteOnlyTransaction());
68 public DOMDataTreeReadWriteTransaction newReadWriteTransaction() {
69 return new DOMDataTreeReadWriteTransactionAdapter(delegate.newReadWriteTransaction());
73 public ClassToInstanceMap<org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension> getExtensions() {
78 public DOMTransactionChain createTransactionChain(final DOMTransactionChainListener listener) {
79 return new DOMTransactionChainAdapter(listener, delegate::createTransactionChain);
83 protected DOMDataBroker delegate() {