Merge "Added threadpool config tests."
[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         super(dataBroker);
26         identifier = new Object();
27         broker = dataBroker;
28         status = TransactionStatus.NEW;
29         listeners = new ListenerRegistry<>();
30     }
31
32     @Override
33     public Future<RpcResult<TransactionStatus>> commit() {
34         return broker.commit(this);
35     }
36
37     @Override
38     public DataObject readConfigurationData(
39             org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject> path) {
40         return broker.readConfigurationData(path);
41     }
42
43     @Override
44     public DataObject readOperationalData(InstanceIdentifier<? extends DataObject> path) {
45         return broker.readOperationalData(path);
46     }
47
48     @Override
49     public int hashCode() {
50         final int prime = 31;
51         int result = 1;
52         result = prime * result + ((broker == null) ? 0 : broker.hashCode());
53         result = prime * result + ((identifier == null) ? 0 : identifier.hashCode());
54         return result;
55     }
56
57     @Override
58     public boolean equals(Object obj) {
59         if (this == obj)
60             return true;
61         if (obj == null)
62             return false;
63         if (getClass() != obj.getClass())
64             return false;
65         DataTransactionImpl other = (DataTransactionImpl) obj;
66         if (broker == null) {
67             if (other.broker != null)
68                 return false;
69         } else if (!broker.equals(other.broker))
70             return false;
71         if (identifier == null) {
72             if (other.identifier != null)
73                 return false;
74         } else if (!identifier.equals(other.identifier))
75             return false;
76         return true;
77     }
78
79     @Override
80     public TransactionStatus getStatus() {
81         return status;
82     }
83
84     @Override
85     public Object getIdentifier() {
86         return identifier;
87     }
88
89     @Override
90     public ListenerRegistration<DataTransactionListener> registerListener(DataTransactionListener listener) {
91         return listeners.register(listener);
92     }
93
94     public void changeStatus(TransactionStatus status) {
95         this.status = status;
96         Iterable<ListenerRegistration<DataTransactionListener>> listenersToNotify = listeners.getListeners();
97         for (ListenerRegistration<DataTransactionListener> listenerRegistration : listenersToNotify) {
98             listenerRegistration.getInstance().onStatusUpdated(this, status);
99         }
100     }
101 }