/*
 * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */
package org.opendaylight.controller.cluster.datastore.node.utils.stream;

import com.google.common.annotations.Beta;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.eclipse.jdt.annotation.NonNull;

@Beta
public final class NormalizedNodeInputOutput {
    private NormalizedNodeInputOutput() {
        throw new UnsupportedOperationException();
    }

    /**
     * Creates a new {@link NormalizedNodeDataInput} instance that reads from the given input. This method first reads
     * and validates that the input contains a valid NormalizedNode stream.
     *
     * @param input the DataInput to read from
     * @return a new {@link NormalizedNodeDataInput} instance
     * @throws IOException if an error occurs reading from the input
     */
    public static NormalizedNodeDataInput newDataInput(final @NonNull DataInput input) throws IOException {
        return new VersionedNormalizedNodeDataInput(input).delegate();
    }

    /**
     * Creates a new {@link NormalizedNodeDataInput} instance that reads from the given input. This method does not
     * perform any initial validation of the input stream.
     *
     * @param input the DataInput to read from
     * @return a new {@link NormalizedNodeDataInput} instance
     */
    public static NormalizedNodeDataInput newDataInputWithoutValidation(final @NonNull DataInput input) {
        return new VersionedNormalizedNodeDataInput(input);
    }

    /**
     * Creates a new {@link NormalizedNodeDataOutput} instance that writes to the given output and latest current
     * stream version.
     *
     * @param output the DataOutput to write to
     * @return a new {@link NormalizedNodeDataOutput} instance
     */
    public static NormalizedNodeDataOutput newDataOutput(final @NonNull DataOutput output) {
        return new NeonSR2NormalizedNodeOutputStreamWriter(output);
    }

    /**
     * Creates a new {@link NormalizedNodeDataOutput} instance that writes to the given output.
     *
     * @param output the DataOutput to write to
     * @param version Streaming version to use
     * @return a new {@link NormalizedNodeDataOutput} instance
     */
    public static NormalizedNodeDataOutput newDataOutput(final @NonNull DataOutput output,
            final @NonNull NormalizedNodeStreamVersion version) {
        switch (version) {
            case LITHIUM:
                return new LithiumNormalizedNodeOutputStreamWriter(output);
            case NEON_SR2:
                return new NeonSR2NormalizedNodeOutputStreamWriter(output);
            case SODIUM_SR1:
                return new SodiumSR1DataOutput(output);
            case MAGNESIUM:
                return new MagnesiumDataOutput(output);
            default:
                throw new IllegalStateException("Unhandled version " + version);
        }
    }

}

@@ -2145,47 +2145,27 @@
 new 
-NeonSR2NormalizedNodeOutputStreamWriter
+SodiumSR1DataOutput
 (out

Switch default stream output to Sodium SR1