Remove deprecated NormalizedNodeInputStreamReader ctor
[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.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
22 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
23 import org.opendaylight.controller.md.sal.dom.store.impl.DOMImmutableDataChangeEvent;
24 import org.opendaylight.controller.md.sal.dom.store.impl.DOMImmutableDataChangeEvent.Builder;
25 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
26 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
27
28 public class DataChanged implements Externalizable {
29     private static final long serialVersionUID = 1L;
30
31     private AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change;
32
33     public DataChanged() {
34     }
35
36     public DataChanged(AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change) {
37         this.change = change;
38     }
39
40     public AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> getChange() {
41         return change;
42     }
43
44     @Override
45     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
46         in.readShort(); // Read the version
47
48         NormalizedNodeDataInput streamReader = NormalizedNodeInputOutput.newDataInputWithoutValidation(in);
49
50         // Note: the scope passed to builder is not actually used.
51         Builder builder = DOMImmutableDataChangeEvent.builder(DataChangeScope.SUBTREE);
52
53         // Read created data
54
55         int size = in.readInt();
56         for (int i = 0; i < size; i++) {
57             YangInstanceIdentifier path = streamReader.readYangInstanceIdentifier();
58             NormalizedNode<?, ?> node = streamReader.readNormalizedNode();
59             builder.addCreated(path, node);
60         }
61
62         // Read updated data
63
64         size = in.readInt();
65         for (int i = 0; i < size; i++) {
66             YangInstanceIdentifier path = streamReader.readYangInstanceIdentifier();
67             NormalizedNode<?, ?> before = streamReader.readNormalizedNode();
68             NormalizedNode<?, ?> after = streamReader.readNormalizedNode();
69             builder.addUpdated(path, before, after);
70         }
71
72         // Read removed data
73
74         size = in.readInt();
75         for (int i = 0; i < size; i++) {
76             YangInstanceIdentifier path = streamReader.readYangInstanceIdentifier();
77             NormalizedNode<?, ?> node = streamReader.readNormalizedNode();
78             builder.addRemoved(path, node);
79         }
80
81         // Read original subtree
82
83         boolean present = in.readBoolean();
84         if (present) {
85             builder.setBefore(streamReader.readNormalizedNode());
86         }
87
88         // Read updated subtree
89
90         present = in.readBoolean();
91         if (present) {
92             builder.setAfter(streamReader.readNormalizedNode());
93         }
94
95         change = builder.build();
96     }
97
98     @Override
99     public void writeExternal(ObjectOutput out) throws IOException {
100         out.writeShort(DataStoreVersions.CURRENT_VERSION);
101
102         NormalizedNodeDataOutput streamWriter = NormalizedNodeInputOutput.newDataOutput(out);
103
104         // Write created data
105
106         Map<YangInstanceIdentifier, NormalizedNode<?, ?>> createdData = change.getCreatedData();
107         out.writeInt(createdData.size());
108         for (Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> e: createdData.entrySet()) {
109             streamWriter.writeYangInstanceIdentifier(e.getKey());
110             streamWriter.writeNormalizedNode(e.getValue());
111         }
112
113         // Write updated data
114
115         Map<YangInstanceIdentifier, NormalizedNode<?, ?>> originalData = change.getOriginalData();
116         Map<YangInstanceIdentifier, NormalizedNode<?, ?>> updatedData = change.getUpdatedData();
117         out.writeInt(updatedData.size());
118         for (Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> e: updatedData.entrySet()) {
119             streamWriter.writeYangInstanceIdentifier(e.getKey());
120             streamWriter.writeNormalizedNode(originalData.get(e.getKey()));
121             streamWriter.writeNormalizedNode(e.getValue());
122         }
123
124         // Write removed data
125
126         Set<YangInstanceIdentifier> removed = change.getRemovedPaths();
127         out.writeInt(removed.size());
128         for (YangInstanceIdentifier path: removed) {
129             streamWriter.writeYangInstanceIdentifier(path);
130             streamWriter.writeNormalizedNode(originalData.get(path));
131         }
132
133         // Write original subtree
134
135         NormalizedNode<?, ?> originalSubtree = change.getOriginalSubtree();
136         out.writeBoolean(originalSubtree != null);
137         if (originalSubtree != null) {
138             streamWriter.writeNormalizedNode(originalSubtree);
139         }
140
141         // Write original subtree
142
143         NormalizedNode<?, ?> updatedSubtree = change.getUpdatedSubtree();
144         out.writeBoolean(updatedSubtree != null);
145         if (updatedSubtree != null) {
146             streamWriter.writeNormalizedNode(updatedSubtree);
147         }
148     }
149 }