*/
package org.opendaylight.controller.cluster.datastore.persisted;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
-import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataInput;
-import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataOutput;
-import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.yangtools.concepts.Immutable;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.stream.ReusableStreamReceiver;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNodes;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataInput;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataOutput;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeStreamVersion;
+import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
+import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode;
+import org.opendaylight.yangtools.yang.data.tree.api.ModificationType;
+import org.opendaylight.yangtools.yang.data.tree.spi.DataTreeCandidateNodes;
+import org.opendaylight.yangtools.yang.data.tree.spi.DataTreeCandidates;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
}
}
- public static DataTreeCandidate readDataTreeCandidate(final DataInput in, final ReusableStreamReceiver receiver)
- throws IOException {
- final NormalizedNodeDataInput reader = NormalizedNodeInputOutput.newDataInput(in);
+ @NonNullByDefault
+ public static final class DataTreeCandidateWithVersion implements Immutable {
+ private final DataTreeCandidate candidate;
+ private final NormalizedNodeStreamVersion version;
+
+ public DataTreeCandidateWithVersion(final DataTreeCandidate candidate,
+ final NormalizedNodeStreamVersion version) {
+ this.candidate = requireNonNull(candidate);
+ this.version = requireNonNull(version);
+ }
+
+ public DataTreeCandidate getCandidate() {
+ return candidate;
+ }
+
+ public NormalizedNodeStreamVersion getVersion() {
+ return version;
+ }
+ }
+
+ public static DataTreeCandidateWithVersion readDataTreeCandidate(final DataInput in,
+ final ReusableStreamReceiver receiver) throws IOException {
+ final NormalizedNodeDataInput reader = NormalizedNodeDataInput.newDataInput(in);
final YangInstanceIdentifier rootPath = reader.readYangInstanceIdentifier();
final byte type = reader.readByte();
throw new IllegalArgumentException("Unhandled node type " + type);
}
- return DataTreeCandidates.newDataTreeCandidate(rootPath, rootNode);
+ return new DataTreeCandidateWithVersion(DataTreeCandidates.newDataTreeCandidate(rootPath, rootNode),
+ reader.getVersion());
}
private static void writeChildren(final NormalizedNodeDataOutput out,
}
}
- public static void writeDataTreeCandidate(final DataOutput out, final DataTreeCandidate candidate)
- throws IOException {
- try (NormalizedNodeDataOutput writer = NormalizedNodeInputOutput.newDataOutput(out,
- PayloadVersion.current().getStreamVersion())) {
+ @VisibleForTesting
+ public static void writeDataTreeCandidate(final DataOutput out, final PayloadVersion version,
+ final DataTreeCandidate candidate) throws IOException {
+ try (NormalizedNodeDataOutput writer = version.getStreamVersion().newDataOutput(out)) {
writer.writeYangInstanceIdentifier(candidate.getRootPath());
final DataTreeCandidateNode node = candidate.getRootNode();
}
}
+ public static void writeDataTreeCandidate(final DataOutput out, final DataTreeCandidate candidate)
+ throws IOException {
+ writeDataTreeCandidate(out, PayloadVersion.current(), candidate);
+ }
+
private static void throwUnhandledNodeType(final DataTreeCandidateNode node) {
throw new IllegalArgumentException("Unhandled node type " + node.getModificationType());
}