1 package org.opendaylight.controller.md.sal.common.impl.service;
6 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
7 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
8 import org.opendaylight.yangtools.concepts.Path;
10 import com.google.common.base.Predicate;
11 import com.google.common.collect.ImmutableMap;
12 import com.google.common.collect.ImmutableSet;
13 import com.google.common.collect.Maps;
14 import com.google.common.collect.Sets;
16 public final class ImmutableDataChangeEvent<P extends Path<P>, D> implements DataChangeEvent<P,D> {
18 private final D updatedOperationalSubtree;
19 private final Map<P, D> updatedOperational;
20 private final D updatedConfigurationSubtree;
21 private final Map<P, D> updatedConfiguration;
22 private final Set<P> removedOperational;
23 private final Set<P> removedConfiguration;
24 private final D originalOperationalSubtree;
25 private final Map<P, D> originalOperational;
26 private final D originalConfigurationSubtree;
27 private final Map<P, D> originalConfiguration;
28 private final Map<P, D> createdOperational;
29 private final Map<P, D> createdConfiguration;
32 private ImmutableDataChangeEvent(final Builder<P, D> builder) {
34 createdConfiguration = builder.getCreatedConfiguration().build();
35 createdOperational = builder.getCreatedOperational().build();
36 originalConfiguration = builder.getOriginalConfiguration().build();
37 originalConfigurationSubtree = builder.getOriginalConfigurationSubtree();
38 originalOperational = builder.getOriginalOperational().build();
39 originalOperationalSubtree = builder.getOriginalOperationalSubtree();
40 removedConfiguration = builder.getRemovedConfiguration().build();
41 removedOperational = builder.getRemovedOperational().build();
42 updatedConfiguration = builder.getUpdatedConfiguration().build();
43 updatedConfigurationSubtree = builder.getUpdatedConfigurationSubtree();
44 updatedOperational = builder.getUpdatedOperational().build();
45 updatedOperationalSubtree = builder.getUpdatedOperationalSubtree();
49 public Map<P, D> getCreatedConfigurationData() {
50 return createdConfiguration;
54 public Map<P, D> getCreatedOperationalData() {
55 return createdOperational;
59 public Map<P, D> getOriginalConfigurationData() {
60 return originalConfiguration;
63 public D getOriginalConfigurationSubtree() {
64 return originalConfigurationSubtree;
67 public Map<P, D> getOriginalOperationalData() {
68 return originalOperational;
71 public D getOriginalOperationalSubtree() {
72 return originalOperationalSubtree;
75 public Set<P> getRemovedConfigurationData() {
76 return removedConfiguration;
79 public Set<P> getRemovedOperationalData() {
80 return removedOperational;
83 public Map<P, D> getUpdatedConfigurationData() {
84 return updatedConfiguration;
87 public D getUpdatedConfigurationSubtree() {
88 return updatedConfigurationSubtree;
91 public Map<P, D> getUpdatedOperationalData() {
92 return updatedOperational;
95 public D getUpdatedOperationalSubtree() {
96 return updatedOperationalSubtree;
99 public static final <P extends Path<P>,D> Builder<P, D> builder() {
100 return new Builder<>();
103 public static final class Builder<P extends Path<P>,D> {
105 private D updatedOperationalSubtree;
106 private D originalOperationalSubtree;
107 private D originalConfigurationSubtree;
108 private D updatedConfigurationSubtree;
110 private final ImmutableMap.Builder<P, D> updatedOperational = ImmutableMap.builder();
111 private final ImmutableMap.Builder<P, D> updatedConfiguration = ImmutableMap.builder();
112 private final ImmutableSet.Builder<P> removedOperational = ImmutableSet.builder();
113 private final ImmutableSet.Builder<P> removedConfiguration = ImmutableSet.builder();
114 private final ImmutableMap.Builder<P, D> originalOperational = ImmutableMap.builder();
116 private final ImmutableMap.Builder<P, D> originalConfiguration = ImmutableMap.builder();
117 private final ImmutableMap.Builder<P, D> createdOperational = ImmutableMap.builder();
118 private final ImmutableMap.Builder<P, D> createdConfiguration = ImmutableMap.builder();
124 protected Builder<P,D> addTransaction(final DataModification<P, D> data, final Predicate<P> keyFilter) {
125 updatedOperational.putAll(Maps.filterKeys(data.getUpdatedOperationalData(), keyFilter));
126 updatedConfiguration.putAll(Maps.filterKeys(data.getUpdatedConfigurationData(), keyFilter));
127 originalConfiguration.putAll(Maps.filterKeys(data.getOriginalConfigurationData(), keyFilter));
128 originalOperational.putAll(Maps.filterKeys(data.getOriginalOperationalData(), keyFilter));
129 createdOperational.putAll(Maps.filterKeys(data.getCreatedOperationalData(), keyFilter));
130 createdConfiguration.putAll(Maps.filterKeys(data.getCreatedConfigurationData(), keyFilter));
131 removedOperational.addAll(Sets.filter(data.getRemovedOperationalData(), keyFilter));
132 removedConfiguration.addAll(Sets.filter(data.getRemovedConfigurationData(), keyFilter));
136 protected Builder<P, D> addConfigurationChangeSet(final RootedChangeSet<P, D> changeSet) {
137 if(changeSet == null) {
141 originalConfiguration.putAll(changeSet.getOriginal());
142 createdConfiguration.putAll(changeSet.getCreated());
143 updatedConfiguration.putAll(changeSet.getUpdated());
144 removedConfiguration.addAll(changeSet.getRemoved());
148 protected Builder<P, D> addOperationalChangeSet(final RootedChangeSet<P, D> changeSet) {
149 if(changeSet == null) {
152 originalOperational.putAll(changeSet.getOriginal());
153 createdOperational.putAll(changeSet.getCreated());
154 updatedOperational.putAll(changeSet.getUpdated());
155 removedOperational.addAll(changeSet.getRemoved());
159 public ImmutableDataChangeEvent<P, D> build() {
160 return new ImmutableDataChangeEvent<P,D>(this);
163 protected D getUpdatedOperationalSubtree() {
164 return updatedOperationalSubtree;
167 public Builder<P, D> setUpdatedOperationalSubtree(final D updatedOperationalSubtree) {
168 this.updatedOperationalSubtree = updatedOperationalSubtree;
172 protected D getOriginalOperationalSubtree() {
173 return originalOperationalSubtree;
176 public Builder<P,D> setOriginalOperationalSubtree(final D originalOperationalSubtree) {
177 this.originalOperationalSubtree = originalOperationalSubtree;
181 protected D getOriginalConfigurationSubtree() {
182 return originalConfigurationSubtree;
185 public Builder<P, D> setOriginalConfigurationSubtree(final D originalConfigurationSubtree) {
186 this.originalConfigurationSubtree = originalConfigurationSubtree;
190 protected D getUpdatedConfigurationSubtree() {
191 return updatedConfigurationSubtree;
194 public Builder<P,D> setUpdatedConfigurationSubtree(final D updatedConfigurationSubtree) {
195 this.updatedConfigurationSubtree = updatedConfigurationSubtree;
199 protected ImmutableMap.Builder<P, D> getUpdatedOperational() {
200 return updatedOperational;
203 protected ImmutableMap.Builder<P, D> getUpdatedConfiguration() {
204 return updatedConfiguration;
207 protected ImmutableSet.Builder<P> getRemovedOperational() {
208 return removedOperational;
211 protected ImmutableSet.Builder<P> getRemovedConfiguration() {
212 return removedConfiguration;
215 protected ImmutableMap.Builder<P, D> getOriginalOperational() {
216 return originalOperational;
219 protected ImmutableMap.Builder<P, D> getOriginalConfiguration() {
220 return originalConfiguration;
223 protected ImmutableMap.Builder<P, D> getCreatedOperational() {
224 return createdOperational;
227 protected ImmutableMap.Builder<P, D> getCreatedConfiguration() {
228 return createdConfiguration;
231 public Builder<P,D> putOriginalOperational(final Map<? extends P, ? extends D> originalData) {
232 originalOperational.putAll(originalData);
236 public Builder<P,D> putCreatedOperational(final Map<? extends P, ? extends D> originalData) {
237 createdOperational.putAll(originalData);
241 public Builder<P,D> putUpdatedOperational(final Map<? extends P, ? extends D> originalData) {
242 updatedOperational.putAll(originalData);
246 public Builder<P,D> putRemovedOperational(final Set<? extends P> originalData) {
247 removedOperational.addAll(originalData);