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.controller.sal.core.api.model.SchemaService;
22 import org.opendaylight.yangtools.yang.binding.DataObject;
23 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
24 import org.opendaylight.yangtools.yang.common.RpcResult;
25 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
26 import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService;
28 import com.google.common.base.Optional;
29 import com.google.common.util.concurrent.ListenableFuture;
32 * The DataBrokerImpl simply defers to the DOMDataBroker for all its operations.
33 * All transactions and listener registrations are wrapped by the DataBrokerImpl
34 * to allow binding aware components to use the DataBroker transparently.
36 * Besides this the DataBrokerImpl and it's collaborators also cache data that
37 * is already transformed from the binding independent to binding aware format
39 * TODO : All references in this class to CompositeNode should be switched to
40 * NormalizedNode once the MappingService is updated
43 public class ForwardedBindingDataBroker extends AbstractForwardedDataBroker implements BindingDataBroker {
45 public ForwardedBindingDataBroker(final DOMDataBroker domDataBroker, final BindingIndependentMappingService mappingService, final SchemaService schemaService) {
46 super(domDataBroker, mappingService,schemaService);
50 public BindingDataReadTransaction newReadOnlyTransaction() {
51 return new BindingDataReadTransactionImpl(getDelegate().newReadOnlyTransaction(),getCodec());
55 public BindingDataReadWriteTransaction newReadWriteTransaction() {
56 return new BindingDataReadWriteTransactionImpl(getDelegate().newReadWriteTransaction(),getCodec());
60 public BindingDataWriteTransaction newWriteOnlyTransaction() {
61 return new BindingDataWriteTransactionImpl<DOMDataWriteTransaction>(getDelegate().newWriteOnlyTransaction(),getCodec());
64 private abstract class AbstractBindingTransaction<T extends AsyncTransaction<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>>>
65 extends AbstractForwardedTransaction<T> implements AsyncTransaction<InstanceIdentifier<?>, DataObject> {
67 protected AbstractBindingTransaction(final T delegate, final BindingToNormalizedNodeCodec codec) {
68 super(delegate, codec);
72 public Object getIdentifier() {
73 return getDelegate().getIdentifier();
78 getDelegate().close();
83 private class BindingDataReadTransactionImpl extends AbstractBindingTransaction<DOMDataReadTransaction> implements
84 BindingDataReadTransaction {
86 protected BindingDataReadTransactionImpl(final DOMDataReadTransaction delegate,
87 final BindingToNormalizedNodeCodec codec) {
88 super(delegate, codec);
92 public ListenableFuture<Optional<DataObject>> read(final LogicalDatastoreType store,
93 final InstanceIdentifier<?> path) {
94 return doRead(getDelegate(), store, path);
98 private class BindingDataWriteTransactionImpl<T extends DOMDataWriteTransaction> extends
99 AbstractBindingTransaction<T> implements BindingDataWriteTransaction {
101 protected BindingDataWriteTransactionImpl(final T delegate, final BindingToNormalizedNodeCodec codec) {
102 super(delegate, codec);
107 public void cancel() {
108 doCancel(getDelegate());
112 public void put(final LogicalDatastoreType store, final InstanceIdentifier<?> path, final DataObject data) {
113 doPut(getDelegate(), store, path, data);
117 public void merge(final LogicalDatastoreType store, final InstanceIdentifier<?> path, final DataObject data) {
118 doMerge(getDelegate(), store, path, data);
122 public void delete(final LogicalDatastoreType store, final InstanceIdentifier<?> path) {
123 doDelete(getDelegate(), store, path);
127 public ListenableFuture<RpcResult<TransactionStatus>> commit() {
128 return doCommit(getDelegate());
132 private class BindingDataReadWriteTransactionImpl extends
133 BindingDataWriteTransactionImpl<DOMDataReadWriteTransaction> implements BindingDataReadWriteTransaction {
135 protected BindingDataReadWriteTransactionImpl(final DOMDataReadWriteTransaction delegate,
136 final BindingToNormalizedNodeCodec codec) {
137 super(delegate, codec);
141 public ListenableFuture<Optional<DataObject>> read(final LogicalDatastoreType store,
142 final InstanceIdentifier<?> path) {
143 return doRead(getDelegate(), store, path);