Added DELETE support for Bridge and Port resources
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / main / java / org / opendaylight / controller / sal / binding / impl / DataTransactionImpl.java
1 package org.opendaylight.controller.sal.binding.impl;
2
3 import java.util.concurrent.Future;
4
5 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
6 import org.opendaylight.controller.md.sal.common.impl.AbstractDataModification;
7 import org.opendaylight.controller.md.sal.common.impl.ListenerRegistry;
8 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
9 import org.opendaylight.yangtools.concepts.ListenerRegistration;
10 import org.opendaylight.yangtools.yang.binding.DataObject;
11 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
12 import org.opendaylight.yangtools.yang.common.RpcResult;
13
14 public class DataTransactionImpl extends AbstractDataModification<InstanceIdentifier<? extends DataObject>, DataObject>
15         implements DataModificationTransaction {
16
17     private final Object identifier;
18
19     private TransactionStatus status;
20     private ListenerRegistry<DataTransactionListener> listeners;
21
22     final DataBrokerImpl broker;
23
24     public DataTransactionImpl(DataBrokerImpl dataBroker) {
25         identifier = new Object();
26         broker = dataBroker;
27         status = TransactionStatus.NEW;
28         listeners = new ListenerRegistry<>();
29     }
30
31     @Override
32     public Future<RpcResult<TransactionStatus>> commit() {
33         return broker.commit(this);
34     }
35
36     @Override
37     public DataObject readConfigurationData(
38             org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject> path) {
39         return broker.readConfigurationData(path);
40     }
41
42     @Override
43     public DataObject readOperationalData(InstanceIdentifier<? extends DataObject> path) {
44         return broker.readOperationalData(path);
45     }
46
47     @Override
48     public int hashCode() {
49         final int prime = 31;
50         int result = 1;
51         result = prime * result + ((broker == null) ? 0 : broker.hashCode());
52         result = prime * result + ((identifier == null) ? 0 : identifier.hashCode());
53         return result;
54     }
55
56     @Override
57     public boolean equals(Object obj) {
58         if (this == obj)
59             return true;
60         if (obj == null)
61             return false;
62         if (getClass() != obj.getClass())
63             return false;
64         DataTransactionImpl other = (DataTransactionImpl) obj;
65         if (broker == null) {
66             if (other.broker != null)
67                 return false;
68         } else if (!broker.equals(other.broker))
69             return false;
70         if (identifier == null) {
71             if (other.identifier != null)
72                 return false;
73         } else if (!identifier.equals(other.identifier))
74             return false;
75         return true;
76     }
77
78     @Override
79     public TransactionStatus getStatus() {
80         return status;
81     }
82
83     @Override
84     public Object getIdentifier() {
85         return identifier;
86     }
87
88     @Override
89     public ListenerRegistration<DataTransactionListener> registerListener(DataTransactionListener listener) {
90         return listeners.register(listener);
91     }
92
93     public void changeStatus(TransactionStatus status) {
94         this.status = status;
95         Iterable<ListenerRegistration<DataTransactionListener>> listenersToNotify = listeners.getListeners();
96         for (ListenerRegistration<DataTransactionListener> listenerRegistration : listenersToNotify) {
97             listenerRegistration.getInstance().onStatusUpdated(this, status);
98         }
99     }
100 }