1 package org.opendaylight.controller.sal.binding.impl.connect.dom;
4 import java.util.concurrent.ConcurrentMap;
6 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
7 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
8 import org.opendaylight.controller.sal.common.util.CommitHandlerTransactions;
9 import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
10 import org.opendaylight.controller.sal.core.api.data.DataProviderService;
11 import org.opendaylight.yangtools.yang.binding.DataObject;
12 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
13 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
14 import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
19 * @deprecated This is part of the legacy DataBrokerService
22 class BindingToDomCommitHandler implements
23 DataCommitHandler<InstanceIdentifier<? extends DataObject>, DataObject> {
25 private final Logger LOG = LoggerFactory.getLogger(BindingToDomCommitHandler.class);
27 private final ConcurrentMap<Object, DomToBindingTransaction> bindingOpenedTransactions;
28 private final ConcurrentMap<Object, BindingToDomTransaction> domOpenedTransactions;
29 private org.opendaylight.controller.sal.core.api.data.DataProviderService biDataService;
30 private BindingIndependentMappingService mappingService;
32 BindingToDomCommitHandler(final ConcurrentMap<Object, DomToBindingTransaction> bindingOpenedTransactions,
33 final ConcurrentMap<Object, BindingToDomTransaction> domOpenedTransactions) {
34 this.bindingOpenedTransactions = bindingOpenedTransactions;
35 this.domOpenedTransactions = domOpenedTransactions;
38 public void setBindingIndependentDataService(final DataProviderService biDataService) {
39 this.biDataService = biDataService;
42 public void setMappingService(final BindingIndependentMappingService mappingService) {
43 this.mappingService = mappingService;
47 public org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction<InstanceIdentifier<? extends DataObject>, DataObject> requestCommit(
48 final DataModification<InstanceIdentifier<? extends DataObject>, DataObject> bindingTransaction) {
51 * Transaction was created as DOM transaction, in that case we do
52 * not need to forward it back.
54 if (bindingOpenedTransactions.containsKey(bindingTransaction.getIdentifier())) {
55 return CommitHandlerTransactions.allwaysSuccessfulTransaction(bindingTransaction);
57 DataModificationTransaction domTransaction = createBindingToDomTransaction(bindingTransaction);
58 BindingToDomTransaction wrapped = new BindingToDomTransaction(domTransaction, bindingTransaction, domOpenedTransactions);
59 LOG.trace("Forwarding Binding Transaction: {} as DOM Transaction: {} .",
60 bindingTransaction.getIdentifier(), domTransaction.getIdentifier());
64 private DataModificationTransaction createBindingToDomTransaction(
65 final DataModification<InstanceIdentifier<? extends DataObject>, DataObject> source) {
66 if (biDataService == null) {
67 final String msg = "Binding Independent Service is not initialized correctly! Binding to DOM Transaction cannot be created for ";
68 LOG.error(msg + "{}", source);
69 throw new IllegalStateException(msg + source);
71 if (mappingService == null) {
72 final String msg = "Mapping Service is not initialized correctly! Binding to DOM Transaction cannot be created for ";
73 LOG.error(msg + "{}", source);
74 throw new IllegalStateException(msg + source);
76 DataModificationTransaction target = biDataService.beginTransaction();
77 LOG.debug("Created DOM Transaction {} for {},", target.getIdentifier(), source.getIdentifier());
78 for (InstanceIdentifier<? extends DataObject> entry : source.getRemovedConfigurationData()) {
79 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier biEntry = mappingService.toDataDom(entry);
80 target.removeConfigurationData(biEntry);
81 LOG.debug("Delete of Binding Configuration Data {} is translated to {}", entry, biEntry);
83 for (InstanceIdentifier<? extends DataObject> entry : source.getRemovedOperationalData()) {
84 org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier biEntry = mappingService.toDataDom(entry);
85 target.removeOperationalData(biEntry);
86 LOG.debug("Delete of Binding Operational Data {} is translated to {}", entry, biEntry);
88 for (Map.Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry : source.getUpdatedConfigurationData()
90 Map.Entry<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> biEntry = mappingService
92 target.putConfigurationData(biEntry.getKey(), biEntry.getValue());
93 LOG.debug("Update of Binding Configuration Data {} is translated to {}", entry, biEntry);
95 for (Map.Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry : source.getUpdatedOperationalData()
97 Map.Entry<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> biEntry = mappingService
99 target.putOperationalData(biEntry.getKey(), biEntry.getValue());
100 LOG.debug("Update of Binding Operational Data {} is translated to {}", entry, biEntry);