Merge "Fix issue where NodeConnector ADDED events were propagated as NodeConnector...
[controller.git] / opendaylight / md-sal / sal-common-impl / src / main / java / org / opendaylight / controller / md / sal / common / impl / service / ListenerStateCapture.java
1 package org.opendaylight.controller.md.sal.common.impl.service;
2
3 import java.util.Map;
4
5 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
6 import org.opendaylight.controller.md.sal.common.api.data.DataChangeListener;
7 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
8 import org.opendaylight.yangtools.concepts.Path;
9
10 import com.google.common.base.Predicate;
11
12 public final class ListenerStateCapture<P extends Path<P>, D, DCL extends DataChangeListener<P, D>> {
13
14     final P path;
15
16     final Iterable<DataChangeListenerRegistration<P, D, DCL>> listeners;
17
18     D initialOperationalState;
19
20     D initialConfigurationState;
21
22     D finalConfigurationState;
23
24     D finalOperationalState;
25
26     Map<P, D> additionalConfigOriginal;
27     Map<P, D> additionalConfigCreated;
28     Map<P, D> additionalConfigUpdated;
29     Map<P, D> additionalConfigDeleted;
30
31     Map<P, D> additionalOperOriginal;
32     Map<P, D> additionalOperCreated;
33     Map<P, D> additionalOperUpdated;
34     Map<P, D> additionalOperDeleted;
35
36     RootedChangeSet<P, D> normalizedConfigurationChanges;
37     RootedChangeSet<P, D> normalizedOperationalChanges;
38
39     private final Predicate<P> containsPredicate;
40
41     public ListenerStateCapture(P path, Iterable<DataChangeListenerRegistration<P, D, DCL>> listeners,
42             Predicate<P> containsPredicate) {
43         super();
44         this.path = path;
45         this.listeners = listeners;
46         this.containsPredicate = containsPredicate;
47     }
48
49     protected D getInitialOperationalState() {
50         return initialOperationalState;
51     }
52
53     protected void setInitialOperationalState(D initialOperationalState) {
54         this.initialOperationalState = initialOperationalState;
55     }
56
57     protected D getInitialConfigurationState() {
58         return initialConfigurationState;
59     }
60
61     protected void setInitialConfigurationState(D initialConfigurationState) {
62         this.initialConfigurationState = initialConfigurationState;
63     }
64
65     protected P getPath() {
66         return path;
67     }
68
69     protected Iterable<DataChangeListenerRegistration<P, D, DCL>> getListeners() {
70         return listeners;
71     }
72
73     protected D getFinalConfigurationState() {
74         return finalConfigurationState;
75     }
76
77     protected void setFinalConfigurationState(D finalConfigurationState) {
78         this.finalConfigurationState = finalConfigurationState;
79     }
80
81     protected D getFinalOperationalState() {
82         return finalOperationalState;
83     }
84
85     protected void setFinalOperationalState(D finalOperationalState) {
86         this.finalOperationalState = finalOperationalState;
87     }
88
89     protected RootedChangeSet<P, D> getNormalizedConfigurationChanges() {
90         return normalizedConfigurationChanges;
91     }
92
93     protected void setNormalizedConfigurationChanges(RootedChangeSet<P, D> normalizedConfigurationChanges) {
94         this.normalizedConfigurationChanges = normalizedConfigurationChanges;
95     }
96
97     protected RootedChangeSet<P, D> getNormalizedOperationalChanges() {
98         return normalizedOperationalChanges;
99     }
100
101     protected void setNormalizedOperationalChanges(RootedChangeSet<P, D> normalizedOperationalChange) {
102         this.normalizedOperationalChanges = normalizedOperationalChange;
103     }
104
105     protected DataChangeEvent<P, D> createEvent(DataModification<P, D> modification) {
106         return ImmutableDataChangeEvent.<P, D> builder()//
107                 .addTransaction(modification, containsPredicate) //
108                 .addConfigurationChangeSet(normalizedConfigurationChanges) //
109                 .addOperationalChangeSet(normalizedOperationalChanges) //
110                 .setOriginalConfigurationSubtree(initialConfigurationState) //
111                 .setOriginalOperationalSubtree(initialOperationalState) //
112                 .setUpdatedConfigurationSubtree(finalConfigurationState) //
113                 .setUpdatedOperationalSubtree(finalOperationalState) //
114                 .build();
115
116     }
117
118 }