X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2Futils%2Fserialization%2FNormalizedNodeSerializer.java;h=c7bf7d1f7ac2d90d9eb548b5a73a05701f5bab92;hp=3e1bd35632385d3ec973ba96c882587867170b94;hb=443d331f01bcc9e3aa8442f60b84211b2f175967;hpb=9cd4e7995210f8381892004373acc71c8b3ae7af diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/NormalizedNodeSerializer.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/NormalizedNodeSerializer.java index 3e1bd35632..c7bf7d1f7a 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/NormalizedNodeSerializer.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/NormalizedNodeSerializer.java @@ -9,8 +9,9 @@ package org.opendaylight.controller.cluster.datastore.node.utils.serialization; import com.google.common.base.Preconditions; +import org.opendaylight.controller.cluster.datastore.util.InstanceIdentifierUtils; import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages; -import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; +import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages.Node.Builder; import org.opendaylight.yangtools.yang.data.api.Node; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; @@ -32,14 +33,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeAttrBuilder; - -import java.net.URI; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.EnumMap; import java.util.Map; - import static org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeType.ANY_XML_NODE_TYPE; import static org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeType.AUGMENTATION_NODE_TYPE; import static org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeType.CHOICE_NODE_TYPE; @@ -86,11 +81,15 @@ public class NormalizedNodeSerializer { * @param node * @return */ - public static NormalizedNodeMessages.Node serialize(NormalizedNode node){ + public static NormalizedNodeMessages.Node serialize(NormalizedNode node){ Preconditions.checkNotNull(node, "node should not be null"); return new Serializer(node).serialize(); } + public static Serializer newSerializer(NormalizedNode node) { + Preconditions.checkNotNull(node, "node should not be null"); + return new Serializer(node); + } /** * DeSerialize a protocol buffer message back into a NormalizedNode @@ -98,8 +97,15 @@ public class NormalizedNodeSerializer { * @param node * @return */ - public static NormalizedNode deSerialize(NormalizedNodeMessages.Node node){ - return new DeSerializer(node).deSerialize(); + public static NormalizedNode deSerialize(NormalizedNodeMessages.Node node) { + Preconditions.checkNotNull(node, "node should not be null"); + return new DeSerializer(null, node).deSerialize(); + } + + public static DeSerializer newDeSerializer(NormalizedNodeMessages.InstanceIdentifier path, + NormalizedNodeMessages.Node node) { + Preconditions.checkNotNull(node, "node should not be null"); + return new DeSerializer(path, node); } /** @@ -115,29 +121,40 @@ public class NormalizedNodeSerializer { * @param pathArgument * @return */ - public static YangInstanceIdentifier.PathArgument deSerialize(NormalizedNodeMessages.Node node, NormalizedNodeMessages.PathArgument pathArgument){ + public static YangInstanceIdentifier.PathArgument deSerialize(NormalizedNodeMessages.Node node, + NormalizedNodeMessages.PathArgument pathArgument){ Preconditions.checkNotNull(node, "node should not be null"); Preconditions.checkNotNull(pathArgument, "pathArgument should not be null"); - return new DeSerializer(node).deSerialize(pathArgument); + return new DeSerializer(null, node).deSerialize(pathArgument); } - private static class Serializer implements NormalizedNodeSerializationContext { + public static class Serializer extends QNameSerializationContextImpl + implements NormalizedNodeSerializationContext { - private final NormalizedNode node; + private final NormalizedNode node; - private final Map codeMap = new HashMap<>(); - private final List codes = new ArrayList<>(); + private NormalizedNodeMessages.InstanceIdentifier serializedPath; - private Serializer(NormalizedNode node) { + private Serializer(NormalizedNode node) { this.node = node; } - private NormalizedNodeMessages.Node serialize() { - return this.serialize(node).addAllCode(codes).build(); + public NormalizedNodeMessages.InstanceIdentifier getSerializedPath() { + return serializedPath; + } + + public NormalizedNodeMessages.Node serialize() { + return this.serialize(node).addAllCode(getCodes()).build(); + } + + public NormalizedNodeMessages.Node serialize(YangInstanceIdentifier path) { + Builder builder = serialize(node); + serializedPath = InstanceIdentifierUtils.toSerializable(path, this); + return builder.addAllCode(getCodes()).build(); } private NormalizedNodeMessages.Node.Builder serialize( - NormalizedNode node) { + NormalizedNode node) { NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder(); @@ -162,17 +179,17 @@ public class NormalizedNodeSerializer { ValueSerializer.serialize(builder, this, value); } else if (value instanceof Iterable) { - Iterable iterable = (Iterable) value; + Iterable iterable = (Iterable) value; for (Object o : iterable) { if (o instanceof NormalizedNode) { - builder.addChild(serialize((NormalizedNode) o)); + builder.addChild(serialize((NormalizedNode) o)); } } } else if (value instanceof NormalizedNode) { - builder.addChild(serialize((NormalizedNode) value)); + builder.addChild(serialize((NormalizedNode) value)); } else { @@ -181,63 +198,17 @@ public class NormalizedNodeSerializer { return builder; } - - - @Override public int addNamespace(URI namespace) { - int namespaceInt = getCode(namespace); - - if(namespaceInt == -1) { - namespaceInt = addCode(namespace, namespace.toString()); - } - return namespaceInt; - } - - @Override public int addRevision(Date revision) { - if(revision == null){ - return -1; - } - - int revisionInt = getCode(revision); - if(revisionInt == -1) { - String formattedRevision = - SimpleDateFormatUtil.getRevisionFormat().format(revision); - revisionInt = addCode(revision, formattedRevision); - } - return revisionInt; - } - - @Override public int addLocalName(String localName) { - int localNameInt = getCode(localName); - if(localNameInt == -1) { - localNameInt = addCode(localName, localName.toString()); - } - return localNameInt; - - } - - public int addCode(Object code, String codeStr){ - int count = codes.size(); - codes.add(codeStr); - codeMap.put(code, Integer.valueOf(count)); - return count; - } - - public int getCode(Object code){ - if(codeMap.containsKey(code)){ - return codeMap.get(code); - } - return -1; - } } - private static class DeSerializer implements NormalizedNodeDeSerializationContext { + public static class DeSerializer extends QNameDeSerializationContextImpl + implements NormalizedNodeDeSerializationContext { private static Map - deSerializationFunctions = new HashMap<>(); + deSerializationFunctions = new EnumMap<>(NormalizedNodeType.class); static { deSerializationFunctions.put(CONTAINER_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { DataContainerNodeAttrBuilder @@ -255,7 +226,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(LEAF_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { NormalizedNodeAttrBuilder> @@ -272,7 +243,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(MAP_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { CollectionNodeBuilder @@ -284,7 +255,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(MAP_ENTRY_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { DataContainerNodeAttrBuilder @@ -299,7 +270,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(AUGMENTATION_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { DataContainerNodeBuilder @@ -315,7 +286,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(LEAF_SET_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { ListNodeBuilder> @@ -327,7 +298,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(LEAF_SET_ENTRY_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { NormalizedNodeAttrBuilder> @@ -342,7 +313,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(CHOICE_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { DataContainerNodeBuilder @@ -359,7 +330,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(ORDERED_LEAF_SET_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { ListNodeBuilder> @@ -374,7 +345,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(ORDERED_MAP_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { CollectionNodeBuilder @@ -387,7 +358,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(UNKEYED_LIST_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { CollectionNodeBuilder @@ -400,7 +371,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(UNKEYED_LIST_ENTRY_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { DataContainerNodeAttrBuilder @@ -418,7 +389,7 @@ public class NormalizedNodeSerializer { deSerializationFunctions.put(ANY_XML_NODE_TYPE, new DeSerializationFunction() { - @Override public NormalizedNode apply( + @Override public NormalizedNode apply( DeSerializer deSerializer, NormalizedNodeMessages.Node node) { NormalizedNodeAttrBuilder, AnyXmlNode> @@ -436,25 +407,40 @@ public class NormalizedNodeSerializer { } private final NormalizedNodeMessages.Node node; + private final NormalizedNodeMessages.InstanceIdentifier path; + private YangInstanceIdentifier deserializedPath; - public DeSerializer(NormalizedNodeMessages.Node node){ + public DeSerializer(NormalizedNodeMessages.InstanceIdentifier path, + NormalizedNodeMessages.Node node) { + super(node.getCodeList()); + this.path = path; this.node = node; } - public NormalizedNode deSerialize(){ - return deSerialize(node); + public YangInstanceIdentifier getDeserializedPath() { + return deserializedPath; + } + + public NormalizedNode deSerialize() { + NormalizedNode deserializedNode = deSerialize(node); + if(path != null) { + deserializedPath = InstanceIdentifierUtils.fromSerializable(path, this); + } + + return deserializedNode; } - private NormalizedNode deSerialize(NormalizedNodeMessages.Node node){ + private NormalizedNode deSerialize(NormalizedNodeMessages.Node node){ Preconditions.checkNotNull(node, "node should not be null"); - DeSerializationFunction deSerializationFunction = - Preconditions.checkNotNull(deSerializationFunctions.get(NormalizedNodeType.values()[node.getIntType()]), "Unknown type " + node); + + DeSerializationFunction deSerializationFunction = deSerializationFunctions.get( + NormalizedNodeType.values()[node.getIntType()]); return deSerializationFunction.apply(this, node); } - private NormalizedNode buildCollectionNode( + private NormalizedNode buildCollectionNode( CollectionNodeBuilder builder, NormalizedNodeMessages.Node node) { @@ -468,7 +454,7 @@ public class NormalizedNodeSerializer { } - private NormalizedNode buildListNode( + private NormalizedNode buildListNode( ListNodeBuilder> builder, NormalizedNodeMessages.Node node) { builder.withNodeIdentifier(toNodeIdentifier(node.getPathArgument())); @@ -480,7 +466,7 @@ public class NormalizedNodeSerializer { return builder.build(); } - private NormalizedNode buildDataContainer(DataContainerNodeBuilder builder, NormalizedNodeMessages.Node node){ + private NormalizedNode buildDataContainer(DataContainerNodeBuilder builder, NormalizedNodeMessages.Node node){ for(NormalizedNodeMessages.Node child : node.getChildList()){ builder.withChild((DataContainerChild) deSerialize(child)); @@ -491,7 +477,7 @@ public class NormalizedNodeSerializer { return builder.build(); } - private NormalizedNode buildNormalizedNode(NormalizedNodeAttrBuilder builder, NormalizedNodeMessages.Node node){ + private NormalizedNode buildNormalizedNode(NormalizedNodeAttrBuilder builder, NormalizedNodeMessages.Node node){ builder.withValue(ValueSerializer.deSerialize(this, node)); @@ -523,29 +509,13 @@ public class NormalizedNodeSerializer { this, path); } - @Override public String getNamespace(int namespace) { - return node.getCode(namespace); - } - - @Override public String getRevision(int revision) { - return node.getCode(revision); - } - - @Override public String getLocalName(int localName) { - return node.getCode(localName); - } - public YangInstanceIdentifier.PathArgument deSerialize( NormalizedNodeMessages.PathArgument pathArgument) { return PathArgumentSerializer.deSerialize(this, pathArgument); } private static interface DeSerializationFunction { - NormalizedNode apply(DeSerializer deserializer, NormalizedNodeMessages.Node node); + NormalizedNode apply(DeSerializer deserializer, NormalizedNodeMessages.Node node); } } - - - - }