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;
15 public final class ImmutableDataChangeEvent<P extends Path<P>, D> implements DataChangeEvent<P,D> {
17 private final D updatedOperationalSubtree;
18 private final Map<P, D> updatedOperational;
19 private final D updatedConfigurationSubtree;
20 private final Map<P, D> updatedConfiguration;
21 private final Set<P> removedOperational;
22 private final Set<P> removedConfiguration;
23 private final D originalOperationalSubtree;
24 private final Map<P, D> originalOperational;
25 private final D originalConfigurationSubtree;
26 private final Map<P, D> originalConfiguration;
27 private final Map<P, D> createdOperational;
28 private final Map<P, D> createdConfiguration;
31 private ImmutableDataChangeEvent(final Builder<P, D> builder) {
33 createdConfiguration = builder.getCreatedConfiguration().build();
34 createdOperational = builder.getCreatedOperational().build();
35 originalConfiguration = builder.getOriginalConfiguration().build();
36 originalConfigurationSubtree = builder.getOriginalConfigurationSubtree();
37 originalOperational = builder.getOriginalOperational().build();
38 originalOperationalSubtree = builder.getOriginalOperationalSubtree();
39 removedConfiguration = builder.getRemovedConfiguration().build();
40 removedOperational = builder.getRemovedOperational().build();
41 updatedConfiguration = builder.getUpdatedConfiguration().build();
42 updatedConfigurationSubtree = builder.getUpdatedConfigurationSubtree();
43 updatedOperational = builder.getUpdatedOperational().build();
44 updatedOperationalSubtree = builder.getUpdatedOperationalSubtree();
48 public Map<P, D> getCreatedConfigurationData() {
49 return createdConfiguration;
53 public Map<P, D> getCreatedOperationalData() {
54 return createdOperational;
58 public Map<P, D> getOriginalConfigurationData() {
59 return originalConfiguration;
62 public D getOriginalConfigurationSubtree() {
63 return originalConfigurationSubtree;
66 public Map<P, D> getOriginalOperationalData() {
67 return originalOperational;
70 public D getOriginalOperationalSubtree() {
71 return originalOperationalSubtree;
74 public Set<P> getRemovedConfigurationData() {
75 return removedConfiguration;
78 public Set<P> getRemovedOperationalData() {
79 return removedOperational;
82 public Map<P, D> getUpdatedConfigurationData() {
83 return updatedConfiguration;
86 public D getUpdatedConfigurationSubtree() {
87 return updatedConfigurationSubtree;
90 public Map<P, D> getUpdatedOperationalData() {
91 return updatedOperational;
94 public D getUpdatedOperationalSubtree() {
95 return updatedOperationalSubtree;
98 public static final <P extends Path<P>,D> Builder<P, D> builder() {
99 return new Builder<>();
102 public static final class Builder<P extends Path<P>,D> {
104 private D updatedOperationalSubtree;
105 private D originalOperationalSubtree;
106 private D originalConfigurationSubtree;
107 private D updatedConfigurationSubtree;
109 private final ImmutableMap.Builder<P, D> updatedOperational = ImmutableMap.builder();
110 private final ImmutableMap.Builder<P, D> updatedConfiguration = ImmutableMap.builder();
111 private final ImmutableSet.Builder<P> removedOperational = ImmutableSet.builder();
112 private final ImmutableSet.Builder<P> removedConfiguration = ImmutableSet.builder();
113 private final ImmutableMap.Builder<P, D> originalOperational = ImmutableMap.builder();
115 private final ImmutableMap.Builder<P, D> originalConfiguration = ImmutableMap.builder();
116 private final ImmutableMap.Builder<P, D> createdOperational = ImmutableMap.builder();
117 private final ImmutableMap.Builder<P, D> createdConfiguration = ImmutableMap.builder();
123 protected Builder<P,D> addTransaction(final DataModification<P, D> data, final Predicate<P> keyFilter) {
124 updatedOperational.putAll(Maps.filterKeys(data.getUpdatedOperationalData(), keyFilter));
125 updatedConfiguration.putAll(Maps.filterKeys(data.getUpdatedConfigurationData(), keyFilter));
126 originalConfiguration.putAll(Maps.filterKeys(data.getOriginalConfigurationData(), keyFilter));
127 originalOperational.putAll(Maps.filterKeys(data.getOriginalOperationalData(), keyFilter));
128 createdOperational.putAll(Maps.filterKeys(data.getCreatedOperationalData(), keyFilter));
129 createdConfiguration.putAll(Maps.filterKeys(data.getCreatedConfigurationData(), keyFilter));
133 protected Builder<P, D> addConfigurationChangeSet(final RootedChangeSet<P, D> changeSet) {
134 if(changeSet == null) {
138 originalConfiguration.putAll(changeSet.getOriginal());
139 createdConfiguration.putAll(changeSet.getCreated());
140 updatedConfiguration.putAll(changeSet.getUpdated());
141 removedConfiguration.addAll(changeSet.getRemoved());
145 protected Builder<P, D> addOperationalChangeSet(final RootedChangeSet<P, D> changeSet) {
146 if(changeSet == null) {
149 originalOperational.putAll(changeSet.getOriginal());
150 createdOperational.putAll(changeSet.getCreated());
151 updatedOperational.putAll(changeSet.getUpdated());
152 removedOperational.addAll(changeSet.getRemoved());
156 public ImmutableDataChangeEvent<P, D> build() {
157 return new ImmutableDataChangeEvent<P,D>(this);
160 protected D getUpdatedOperationalSubtree() {
161 return updatedOperationalSubtree;
164 public Builder<P, D> setUpdatedOperationalSubtree(final D updatedOperationalSubtree) {
165 this.updatedOperationalSubtree = updatedOperationalSubtree;
169 protected D getOriginalOperationalSubtree() {
170 return originalOperationalSubtree;
173 public Builder<P,D> setOriginalOperationalSubtree(final D originalOperationalSubtree) {
174 this.originalOperationalSubtree = originalOperationalSubtree;
178 protected D getOriginalConfigurationSubtree() {
179 return originalConfigurationSubtree;
182 public Builder<P, D> setOriginalConfigurationSubtree(final D originalConfigurationSubtree) {
183 this.originalConfigurationSubtree = originalConfigurationSubtree;
187 protected D getUpdatedConfigurationSubtree() {
188 return updatedConfigurationSubtree;
191 public Builder<P,D> setUpdatedConfigurationSubtree(final D updatedConfigurationSubtree) {
192 this.updatedConfigurationSubtree = updatedConfigurationSubtree;
196 protected ImmutableMap.Builder<P, D> getUpdatedOperational() {
197 return updatedOperational;
200 protected ImmutableMap.Builder<P, D> getUpdatedConfiguration() {
201 return updatedConfiguration;
204 protected ImmutableSet.Builder<P> getRemovedOperational() {
205 return removedOperational;
208 protected ImmutableSet.Builder<P> getRemovedConfiguration() {
209 return removedConfiguration;
212 protected ImmutableMap.Builder<P, D> getOriginalOperational() {
213 return originalOperational;
216 protected ImmutableMap.Builder<P, D> getOriginalConfiguration() {
217 return originalConfiguration;
220 protected ImmutableMap.Builder<P, D> getCreatedOperational() {
221 return createdOperational;
224 protected ImmutableMap.Builder<P, D> getCreatedConfiguration() {
225 return createdConfiguration;
228 public Builder<P,D> putOriginalOperational(final Map<? extends P, ? extends D> originalData) {
229 originalOperational.putAll(originalData);
233 public Builder<P,D> putCreatedOperational(final Map<? extends P, ? extends D> originalData) {
234 createdOperational.putAll(originalData);
238 public Builder<P,D> putUpdatedOperational(final Map<? extends P, ? extends D> originalData) {
239 updatedOperational.putAll(originalData);
243 public Builder<P,D> putRemovedOperational(final Set<? extends P> originalData) {
244 removedOperational.addAll(originalData);