1 package org.opendaylight.controller.md.sal.dom.store.impl;
6 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
7 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
8 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
10 import com.google.common.collect.ImmutableMap;
11 import com.google.common.collect.ImmutableSet;
13 public final class DOMImmutableDataChangeEvent implements
14 AsyncDataChangeEvent<InstanceIdentifier, NormalizedNode<?, ?>> {
16 private final NormalizedNode<?, ?> original;
17 private final NormalizedNode<?, ?> updated;
18 private final Map<InstanceIdentifier, ? extends NormalizedNode<?, ?>> originalData;
19 private final Map<InstanceIdentifier, NormalizedNode<?, ?>> createdData;
20 private final Map<InstanceIdentifier, NormalizedNode<?, ?>> updatedData;
21 private final Set<InstanceIdentifier> removedPaths;
23 private DOMImmutableDataChangeEvent(final Builder change) {
24 original = change.before;
25 updated = change.after;
26 originalData = change.original.build();
27 createdData = change.created.build();
28 updatedData = change.updated.build();
29 removedPaths = change.removed.build();
32 public static final Builder builder() {
37 public NormalizedNode<?, ?> getOriginalSubtree() {
42 public NormalizedNode<?, ?> getUpdatedSubtree() {
47 public Map<InstanceIdentifier, ? extends NormalizedNode<?, ?>> getOriginalData() {
52 public Map<InstanceIdentifier, NormalizedNode<?, ?>> getCreatedData() {
57 public Map<InstanceIdentifier, NormalizedNode<?, ?>> getUpdatedData() {
62 public Set<InstanceIdentifier> getRemovedPaths() {
67 public String toString() {
68 return "DOMImmutableDataChangeEvent [created=" + createdData.keySet() + ", updated=" + updatedData.keySet()
69 + ", removed=" + removedPaths + "]";
72 public static class Builder {
74 private NormalizedNode<?, ?> after;
75 private NormalizedNode<?, ?> before;
77 private final ImmutableMap.Builder<InstanceIdentifier, NormalizedNode<?, ?>> original = ImmutableMap.builder();
78 private final ImmutableMap.Builder<InstanceIdentifier, NormalizedNode<?, ?>> created = ImmutableMap.builder();
79 private final ImmutableMap.Builder<InstanceIdentifier, NormalizedNode<?, ?>> updated = ImmutableMap.builder();
80 private final ImmutableSet.Builder<InstanceIdentifier> removed = ImmutableSet.builder();
86 public Builder setAfter(final NormalizedNode<?, ?> node) {
91 public DOMImmutableDataChangeEvent build() {
93 return new DOMImmutableDataChangeEvent(this);
96 public void merge(final DOMImmutableDataChangeEvent nestedChanges) {
98 original.putAll(nestedChanges.getOriginalData());
99 created.putAll(nestedChanges.getCreatedData());
100 updated.putAll(nestedChanges.getUpdatedData());
101 removed.addAll(nestedChanges.getRemovedPaths());
105 public Builder setBefore(final NormalizedNode<?, ?> node) {
110 public Builder addCreated(final InstanceIdentifier path, final NormalizedNode<?, ?> node) {
111 created.put(path, node);
115 public Builder addRemoved(final InstanceIdentifier path, final NormalizedNode<?, ?> node) {
116 original.put(path, node);
121 public Builder addUpdated(final InstanceIdentifier path, final NormalizedNode<?, ?> before,
122 final NormalizedNode<?, ?> after) {
123 original.put(path, before);
124 updated.put(path, after);