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.binding.impl;
10 import org.opendaylight.controller.md.sal.binding.api.BindingDataBroker;
11 import org.opendaylight.controller.md.sal.binding.api.BindingDataReadTransaction;
12 import org.opendaylight.controller.md.sal.binding.api.BindingDataReadWriteTransaction;
13 import org.opendaylight.controller.md.sal.binding.api.BindingDataWriteTransaction;
14 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
15 import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
16 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
17 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
18 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction;
19 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
20 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
21 import org.opendaylight.yangtools.yang.binding.DataObject;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
23 import org.opendaylight.yangtools.yang.common.RpcResult;
24 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
25 import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService;
27 import com.google.common.base.Optional;
28 import com.google.common.util.concurrent.ListenableFuture;
31 * The DataBrokerImpl simply defers to the DOMDataBroker for all its operations.
32 * All transactions and listener registrations are wrapped by the DataBrokerImpl
33 * to allow binding aware components to use the DataBroker transparently.
35 * Besides this the DataBrokerImpl and it's collaborators also cache data that
36 * is already transformed from the binding independent to binding aware format
38 * TODO : All references in this class to CompositeNode should be switched to
39 * NormalizedNode once the MappingService is updated
42 public class ForwardedBindingDataBroker extends AbstractForwardedDataBroker implements BindingDataBroker {
44 public ForwardedBindingDataBroker(final DOMDataBroker domDataBroker, final BindingIndependentMappingService mappingService) {
45 super(domDataBroker, mappingService);
49 public BindingDataReadTransaction newReadOnlyTransaction() {
50 return new BindingDataReadTransactionImpl(getDelegate().newReadOnlyTransaction(),getCodec());
54 public BindingDataReadWriteTransaction newReadWriteTransaction() {
55 return new BindingDataReadWriteTransactionImpl(getDelegate().newReadWriteTransaction(),getCodec());
59 public BindingDataWriteTransaction newWriteOnlyTransaction() {
60 return new BindingDataWriteTransactionImpl<DOMDataWriteTransaction>(getDelegate().newWriteOnlyTransaction(),getCodec());
63 private abstract class AbstractBindingTransaction<T extends AsyncTransaction<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>>>
64 extends AbstractForwardedTransaction<T> implements AsyncTransaction<InstanceIdentifier<?>, DataObject> {
66 protected AbstractBindingTransaction(final T delegate, final BindingToNormalizedNodeCodec codec) {
67 super(delegate, codec);
71 public Object getIdentifier() {
72 return getDelegate().getIdentifier();
77 getDelegate().close();
82 private class BindingDataReadTransactionImpl extends AbstractBindingTransaction<DOMDataReadTransaction> implements
83 BindingDataReadTransaction {
85 protected BindingDataReadTransactionImpl(final DOMDataReadTransaction delegate,
86 final BindingToNormalizedNodeCodec codec) {
87 super(delegate, codec);
91 public ListenableFuture<Optional<DataObject>> read(final LogicalDatastoreType store,
92 final InstanceIdentifier<?> path) {
93 return doRead(getDelegate(), store, path);
97 private class BindingDataWriteTransactionImpl<T extends DOMDataWriteTransaction> extends
98 AbstractBindingTransaction<T> implements BindingDataWriteTransaction {
100 protected BindingDataWriteTransactionImpl(final T delegate, final BindingToNormalizedNodeCodec codec) {
101 super(delegate, codec);
106 public void cancel() {
107 doCancel(getDelegate());
111 public void put(final LogicalDatastoreType store, final InstanceIdentifier<?> path, final DataObject data) {
112 doPut(getDelegate(), store, path, data);
116 public void merge(final LogicalDatastoreType store, final InstanceIdentifier<?> path, final DataObject data) {
117 doMerge(getDelegate(), store, path, data);
121 public void delete(final LogicalDatastoreType store, final InstanceIdentifier<?> path) {
122 doDelete(getDelegate(), store, path);
126 public ListenableFuture<RpcResult<TransactionStatus>> commit() {
127 return doCommit(getDelegate());
131 private class BindingDataReadWriteTransactionImpl extends
132 BindingDataWriteTransactionImpl<DOMDataReadWriteTransaction> implements BindingDataReadWriteTransaction {
134 protected BindingDataReadWriteTransactionImpl(final DOMDataReadWriteTransaction delegate,
135 final BindingToNormalizedNodeCodec codec) {
136 super(delegate, codec);
140 public ListenableFuture<Optional<DataObject>> read(final LogicalDatastoreType store,
141 final InstanceIdentifier<?> path) {
142 return doRead(getDelegate(), store, path);