X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2Futils%2Fstream%2FSerializationUtils.java;h=6735cdb684ccaf3f2abc18c1460381c1de61a27b;hb=01d87e48543865be3d802c6b5497191623b0ae37;hp=4d01702215867d29a6b35ade6eda539fdeb30abe;hpb=6a32d897d2dcb4fa54977b3b2defe76dc0a5d5e2;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtils.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtils.java index 4d01702215..6735cdb684 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtils.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtils.java @@ -7,11 +7,10 @@ */ package org.opendaylight.controller.cluster.datastore.node.utils.stream; -import java.io.ByteArrayInputStream; import java.io.DataInput; -import java.io.DataInputStream; import java.io.DataOutput; import java.io.IOException; +import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -23,67 +22,41 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * @author Thomas Pantelis */ public final class SerializationUtils { - public static final ThreadLocal REUSABLE_READER_TL = new ThreadLocal<>(); - private SerializationUtils() { + } + @FunctionalInterface public interface Applier { void apply(T instance, YangInstanceIdentifier path, NormalizedNode node); } - private static NormalizedNodeDataInput streamReader(final DataInput in) throws IOException { - NormalizedNodeDataInput streamReader = REUSABLE_READER_TL.get(); - if (streamReader == null) { - streamReader = NormalizedNodeInputOutput.newDataInput(in); - } - - return streamReader; - } - - public static void deserializePathAndNode(final DataInput in, final T instance, final Applier applier) { - try { - NormalizedNodeDataInput streamReader = streamReader(in); - NormalizedNode node = streamReader.readNormalizedNode(); - YangInstanceIdentifier path = streamReader.readYangInstanceIdentifier(); - applier.apply(instance, path, node); - } catch (IOException e) { - throw new IllegalArgumentException("Error deserializing path and Node", e); + public static Optional> readNormalizedNode(final DataInput in) throws IOException { + if (!in.readBoolean()) { + return Optional.empty(); } + return Optional.of(NormalizedNodeInputOutput.newDataInput(in).readNormalizedNode()); } - private static NormalizedNode tryDeserializeNormalizedNode(final DataInput in) throws IOException { - boolean present = in.readBoolean(); - if (present) { - NormalizedNodeDataInput streamReader = streamReader(in); - return streamReader.readNormalizedNode(); - } - - return null; - } - - public static NormalizedNode deserializeNormalizedNode(final DataInput in) { - try { - return tryDeserializeNormalizedNode(in); - } catch (IOException e) { - throw new IllegalArgumentException("Error deserializing NormalizedNode", e); - } - } + public static void writeNormalizedNode(final DataOutput out, final @Nullable NormalizedNode node) + throws IOException { + if (node != null) { + out.writeBoolean(true); - public static NormalizedNode deserializeNormalizedNode(final byte [] bytes) { - try { - return tryDeserializeNormalizedNode(new DataInputStream(new ByteArrayInputStream(bytes))); - } catch (IOException e) { - throw new IllegalArgumentException("Error deserializing NormalizedNode", e); + try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { + stream.writeNormalizedNode(node); + } + } else { + out.writeBoolean(false); } } - public static void writeNormalizedNode(final DataOutput out, final @Nullable NormalizedNode node) - throws IOException { + public static void writeNormalizedNode(final DataOutput out, final NormalizedNodeStreamVersion version, + final @Nullable NormalizedNode node) throws IOException { if (node != null) { out.writeBoolean(true); - try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { + try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out, version)) { stream.writeNormalizedNode(node); } } else { @@ -91,6 +64,10 @@ public final class SerializationUtils { } } + public static YangInstanceIdentifier readPath(final DataInput in) throws IOException { + return NormalizedNodeInputOutput.newDataInput(in).readYangInstanceIdentifier(); + } + public static void writePath(final DataOutput out, final @NonNull YangInstanceIdentifier path) throws IOException { try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { @@ -98,6 +75,21 @@ public final class SerializationUtils { } } + public static void writePath(final DataOutput out, final NormalizedNodeStreamVersion version, + final @NonNull YangInstanceIdentifier path) throws IOException { + try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out, version)) { + stream.writeYangInstanceIdentifier(path); + } + } + + public static void readNodeAndPath(final DataInput in, final T instance, final Applier applier) + throws IOException { + final NormalizedNodeDataInput stream = NormalizedNodeInputOutput.newDataInput(in); + NormalizedNode node = stream.readNormalizedNode(); + YangInstanceIdentifier path = stream.readYangInstanceIdentifier(); + applier.apply(instance, path, node); + } + public static void writeNodeAndPath(final DataOutput out, final YangInstanceIdentifier path, final NormalizedNode node) throws IOException { try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { @@ -106,6 +98,14 @@ public final class SerializationUtils { } } + public static void readPathAndNode(final DataInput in, final T instance, final Applier applier) + throws IOException { + final NormalizedNodeDataInput stream = NormalizedNodeInputOutput.newDataInput(in); + YangInstanceIdentifier path = stream.readYangInstanceIdentifier(); + NormalizedNode node = stream.readNormalizedNode(); + applier.apply(instance, path, node); + } + public static void writePathAndNode(final DataOutput out, final YangInstanceIdentifier path, final NormalizedNode node) throws IOException { try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) { @@ -113,13 +113,4 @@ public final class SerializationUtils { stream.writeNormalizedNode(node); } } - - public static YangInstanceIdentifier deserializePath(final DataInput in) { - try { - NormalizedNodeDataInput streamReader = streamReader(in); - return streamReader.readYangInstanceIdentifier(); - } catch (IOException e) { - throw new IllegalArgumentException("Error deserializing path", e); - } - } }