Fix warnings/javadocs in sal-distributed-datastore
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / messages / DataChanged.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.cluster.datastore.messages;
10
11 import java.io.Externalizable;
12 import java.io.IOException;
13 import java.io.ObjectInput;
14 import java.io.ObjectOutput;
15 import java.util.Map;
16 import java.util.Set;
17 import org.opendaylight.controller.cluster.datastore.DataStoreVersions;
18 import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataInput;
19 import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataOutput;
20 import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput;
21 import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader;
22 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
23 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
24 import org.opendaylight.controller.md.sal.dom.store.impl.DOMImmutableDataChangeEvent;
25 import org.opendaylight.controller.md.sal.dom.store.impl.DOMImmutableDataChangeEvent.Builder;
26 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
27 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
28
29 public class DataChanged implements Externalizable {
30     private static final long serialVersionUID = 1L;
31
32     private AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change;
33
34     public DataChanged() {
35     }
36
37     public DataChanged(AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change) {
38         this.change = change;
39     }
40
41     public AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> getChange() {
42         return change;
43     }
44
45     @Override
46     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
47         in.readShort(); // Read the version
48
49         NormalizedNodeDataInput streamReader = new NormalizedNodeInputStreamReader(in);
50
51         // Note: the scope passed to builder is not actually used.
52         Builder builder = DOMImmutableDataChangeEvent.builder(DataChangeScope.SUBTREE);
53
54         // Read created data
55
56         int size = in.readInt();
57         for (int i = 0; i < size; i++) {
58             YangInstanceIdentifier path = streamReader.readYangInstanceIdentifier();
59             NormalizedNode<?, ?> node = streamReader.readNormalizedNode();
60             builder.addCreated(path, node);
61         }
62
63         // Read updated data
64
65         size = in.readInt();
66         for (int i = 0; i < size; i++) {
67             YangInstanceIdentifier path = streamReader.readYangInstanceIdentifier();
68             NormalizedNode<?, ?> before = streamReader.readNormalizedNode();
69             NormalizedNode<?, ?> after = streamReader.readNormalizedNode();
70             builder.addUpdated(path, before, after);
71         }
72
73         // Read removed data
74
75         size = in.readInt();
76         for (int i = 0; i < size; i++) {
77             YangInstanceIdentifier path = streamReader.readYangInstanceIdentifier();
78             NormalizedNode<?, ?> node = streamReader.readNormalizedNode();
79             builder.addRemoved(path, node);
80         }
81
82         // Read original subtree
83
84         boolean present = in.readBoolean();
85         if (present) {
86             builder.setBefore(streamReader.readNormalizedNode());
87         }
88
89         // Read updated subtree
90
91         present = in.readBoolean();
92         if (present) {
93             builder.setAfter(streamReader.readNormalizedNode());
94         }
95
96         change = builder.build();
97     }
98
99     @Override
100     public void writeExternal(ObjectOutput out) throws IOException {
101         out.writeShort(DataStoreVersions.CURRENT_VERSION);
102
103         NormalizedNodeDataOutput streamWriter = NormalizedNodeInputOutput.newDataOutput(out);
104
105         // Write created data
106
107         Map<YangInstanceIdentifier, NormalizedNode<?, ?>> createdData = change.getCreatedData();
108         out.writeInt(createdData.size());
109         for (Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> e: createdData.entrySet()) {
110             streamWriter.writeYangInstanceIdentifier(e.getKey());
111             streamWriter.writeNormalizedNode(e.getValue());
112         }
113
114         // Write updated data
115
116         Map<YangInstanceIdentifier, NormalizedNode<?, ?>> originalData = change.getOriginalData();
117         Map<YangInstanceIdentifier, NormalizedNode<?, ?>> updatedData = change.getUpdatedData();
118         out.writeInt(updatedData.size());
119         for (Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> e: updatedData.entrySet()) {
120             streamWriter.writeYangInstanceIdentifier(e.getKey());
121             streamWriter.writeNormalizedNode(originalData.get(e.getKey()));
122             streamWriter.writeNormalizedNode(e.getValue());
123         }
124
125         // Write removed data
126
127         Set<YangInstanceIdentifier> removed = change.getRemovedPaths();
128         out.writeInt(removed.size());
129         for (YangInstanceIdentifier path: removed) {
130             streamWriter.writeYangInstanceIdentifier(path);
131             streamWriter.writeNormalizedNode(originalData.get(path));
132         }
133
134         // Write original subtree
135
136         NormalizedNode<?, ?> originalSubtree = change.getOriginalSubtree();
137         out.writeBoolean(originalSubtree != null);
138         if (originalSubtree != null) {
139             streamWriter.writeNormalizedNode(originalSubtree);
140         }
141
142         // Write original subtree
143
144         NormalizedNode<?, ?> updatedSubtree = change.getUpdatedSubtree();
145         out.writeBoolean(updatedSubtree != null);
146         if (updatedSubtree != null) {
147             streamWriter.writeNormalizedNode(updatedSubtree);
148         }
149     }
150 }