2 * Copyright (c) 2014 Brocade Communications Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.cluster.datastore.node.utils.stream;
10 import java.io.DataInput;
11 import java.io.DataOutput;
12 import java.io.IOException;
13 import java.util.Optional;
14 import org.eclipse.jdt.annotation.NonNull;
15 import org.eclipse.jdt.annotation.Nullable;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
17 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
18 import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataInput;
19 import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataOutput;
20 import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeStreamVersion;
23 * Provides various utility methods for serialization and de-serialization.
25 * @author Thomas Pantelis
27 public final class SerializationUtils {
28 private SerializationUtils() {
33 public interface Applier<T> {
34 void apply(T instance, YangInstanceIdentifier path, NormalizedNode node);
37 public static Optional<NormalizedNode> readNormalizedNode(final DataInput in) throws IOException {
38 if (!in.readBoolean()) {
39 return Optional.empty();
41 return Optional.of(NormalizedNodeDataInput.newDataInput(in).readNormalizedNode());
44 public static void writeNormalizedNode(final DataOutput out, final @Nullable NormalizedNode node)
46 writeNormalizedNode(out, NormalizedNodeStreamVersion.POTASSIUM, node);
49 public static void writeNormalizedNode(final DataOutput out, final NormalizedNodeStreamVersion version,
50 final @Nullable NormalizedNode node) throws IOException {
52 out.writeBoolean(true);
54 try (NormalizedNodeDataOutput stream = version.newDataOutput(out)) {
55 stream.writeNormalizedNode(node);
58 out.writeBoolean(false);
62 public static YangInstanceIdentifier readPath(final DataInput in) throws IOException {
63 return NormalizedNodeDataInput.newDataInput(in).readYangInstanceIdentifier();
66 public static void writePath(final DataOutput out, final @NonNull YangInstanceIdentifier path)
68 writePath(out, NormalizedNodeStreamVersion.POTASSIUM, path);
71 public static void writePath(final DataOutput out, final NormalizedNodeStreamVersion version,
72 final @NonNull YangInstanceIdentifier path) throws IOException {
73 try (NormalizedNodeDataOutput stream = version.newDataOutput(out)) {
74 stream.writeYangInstanceIdentifier(path);
78 public static <T> void readNodeAndPath(final DataInput in, final T instance, final Applier<T> applier)
80 final NormalizedNodeDataInput stream = NormalizedNodeDataInput.newDataInput(in);
81 NormalizedNode node = stream.readNormalizedNode();
82 YangInstanceIdentifier path = stream.readYangInstanceIdentifier();
83 applier.apply(instance, path, node);
86 public static void writeNodeAndPath(final DataOutput out, final NormalizedNodeStreamVersion version,
87 final YangInstanceIdentifier path, final NormalizedNode node) throws IOException {
88 try (NormalizedNodeDataOutput stream = version.newDataOutput(out)) {
89 stream.writeNormalizedNode(node);
90 stream.writeYangInstanceIdentifier(path);
94 public static void writeNodeAndPath(final DataOutput out, final YangInstanceIdentifier path,
95 final NormalizedNode node) throws IOException {
96 writeNodeAndPath(out, NormalizedNodeStreamVersion.POTASSIUM, path, node);
99 public static <T> void readPathAndNode(final DataInput in, final T instance, final Applier<T> applier)
101 final NormalizedNodeDataInput stream = NormalizedNodeDataInput.newDataInput(in);
102 YangInstanceIdentifier path = stream.readYangInstanceIdentifier();
103 NormalizedNode node = stream.readNormalizedNode();
104 applier.apply(instance, path, node);
107 public static void writePathAndNode(final DataOutput out,
108 final org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeStreamVersion version,
109 final YangInstanceIdentifier path, final NormalizedNode node) throws IOException {
110 try (NormalizedNodeDataOutput stream = version.newDataOutput(out)) {
111 stream.writeYangInstanceIdentifier(path);
112 stream.writeNormalizedNode(node);
116 public static void writePathAndNode(final DataOutput out, final YangInstanceIdentifier path,
117 final NormalizedNode node) throws IOException {
118 writePathAndNode(out, NormalizedNodeStreamVersion.POTASSIUM, path, node);