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%2Fserialization%2FPathArgumentSerializer.java;h=ed9073b5582ad96c5cbc74f7894c24213574ac0d;hb=4e696d9795fe7eef40369c05c340d137394126f3;hp=4fb676e5189bcb70158cccd1a563f3e54ba36405;hpb=879a57936375ca3dec48c5bf52b0b5988c807bae;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/PathArgumentSerializer.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/PathArgumentSerializer.java index 4fb676e518..ed9073b558 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/PathArgumentSerializer.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/PathArgumentSerializer.java @@ -8,29 +8,30 @@ package org.opendaylight.controller.cluster.datastore.node.utils.serialization; -import com.google.common.base.Preconditions; - -import org.opendaylight.controller.cluster.datastore.node.utils.NodeIdentifierFactory; -import org.opendaylight.controller.cluster.datastore.node.utils.QNameFactory; -import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import static org.opendaylight.controller.cluster.datastore.node.utils.serialization.PathArgumentType.getSerializablePathArgumentType; +import com.google.common.base.Preconditions; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; - -import static org.opendaylight.controller.cluster.datastore.node.utils.serialization.PathArgumentType.getSerializablePathArgumentType; +import org.opendaylight.controller.cluster.datastore.node.utils.NodeIdentifierFactory; +import org.opendaylight.controller.cluster.datastore.node.utils.QNameFactory; +import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; public class PathArgumentSerializer { private static final String REVISION_ARG = "?revision="; - private static final Map pathArgumentAttributesGetters = new HashMap<>(); + private static final Map, PathArgumentAttributesGetter> PATH_ARGUMENT_ATTRIBUTES_GETTERS = new HashMap<>(); - public static NormalizedNodeMessages.PathArgument serialize(NormalizedNodeSerializationContext context, YangInstanceIdentifier.PathArgument pathArgument){ + public static NormalizedNodeMessages.PathArgument serialize(QNameSerializationContext context, + YangInstanceIdentifier.PathArgument pathArgument) { Preconditions.checkNotNull(context, "context should not be null"); Preconditions.checkNotNull(pathArgument, "pathArgument should not be null"); @@ -53,7 +54,8 @@ public class PathArgumentSerializer { } - public static YangInstanceIdentifier.PathArgument deSerialize(NormalizedNodeDeSerializationContext context, NormalizedNodeMessages.PathArgument pathArgument){ + public static YangInstanceIdentifier.PathArgument deSerialize(QNameDeSerializationContext context, + NormalizedNodeMessages.PathArgument pathArgument) { Preconditions.checkNotNull(context, "context should not be null"); Preconditions.checkNotNull(pathArgument, "pathArgument should not be null"); @@ -61,97 +63,62 @@ public class PathArgumentSerializer { } - private static interface PathArgumentAttributesGetter { - Iterable get(NormalizedNodeSerializationContext context, - YangInstanceIdentifier.PathArgument pathArgument); + private interface PathArgumentAttributesGetter { + Iterable get( + QNameSerializationContext context, YangInstanceIdentifier.PathArgument pathArgument); } static { - pathArgumentAttributesGetters.put(YangInstanceIdentifier.NodeWithValue.class, new PathArgumentAttributesGetter() { - @Override - public Iterable get( - NormalizedNodeSerializationContext context, - YangInstanceIdentifier.PathArgument pathArgument) { - List attributes = - new ArrayList<>(); + PATH_ARGUMENT_ATTRIBUTES_GETTERS.put(YangInstanceIdentifier.NodeWithValue.class, (context, pathArgument) -> { + YangInstanceIdentifier.NodeWithValue identifier = (YangInstanceIdentifier.NodeWithValue) pathArgument; - YangInstanceIdentifier.NodeWithValue identifier - = (YangInstanceIdentifier.NodeWithValue) pathArgument; + NormalizedNodeMessages.PathArgumentAttribute attribute = buildAttribute(context, null, + identifier.getValue()); - NormalizedNodeMessages.PathArgumentAttribute attribute = - buildAttribute(context, null, identifier.getValue()); - - attributes.add(attribute); - - return attributes; - - } + return Arrays.asList(attribute); }); - pathArgumentAttributesGetters.put(YangInstanceIdentifier.NodeIdentifierWithPredicates.class, new PathArgumentAttributesGetter() { - @Override - public Iterable get( - NormalizedNodeSerializationContext context, - YangInstanceIdentifier.PathArgument pathArgument) { + PATH_ARGUMENT_ATTRIBUTES_GETTERS.put(YangInstanceIdentifier.NodeIdentifierWithPredicates.class, + (context, pathArgument) -> { + YangInstanceIdentifier.NodeIdentifierWithPredicates identifier = + (YangInstanceIdentifier.NodeIdentifierWithPredicates) pathArgument; - List attributes = - new ArrayList<>(); - - YangInstanceIdentifier.NodeIdentifierWithPredicates identifier - = (YangInstanceIdentifier.NodeIdentifierWithPredicates) pathArgument; - - for (QName key : identifier.getKeyValues().keySet()) { - Object value = identifier.getKeyValues().get(key); - NormalizedNodeMessages.PathArgumentAttribute attribute = - buildAttribute(context, key, value); + Map keyValues = identifier.getKeyValues(); + List attributes = new ArrayList<>(keyValues.size()); + for (Entry e : keyValues.entrySet()) { + NormalizedNodeMessages.PathArgumentAttribute attribute = buildAttribute(context, e.getKey(), + e.getValue()); attributes.add(attribute); - } return attributes; + }); - } - }); - - pathArgumentAttributesGetters.put(YangInstanceIdentifier.AugmentationIdentifier.class, new PathArgumentAttributesGetter() { - @Override - public Iterable get( - NormalizedNodeSerializationContext context, - YangInstanceIdentifier.PathArgument pathArgument) { + PATH_ARGUMENT_ATTRIBUTES_GETTERS.put(YangInstanceIdentifier.AugmentationIdentifier.class, + (context, pathArgument) -> { + YangInstanceIdentifier.AugmentationIdentifier identifier = + (YangInstanceIdentifier.AugmentationIdentifier) pathArgument; - List attributes = - new ArrayList<>(); - - YangInstanceIdentifier.AugmentationIdentifier identifier - = (YangInstanceIdentifier.AugmentationIdentifier) pathArgument; - - for (QName key : identifier.getPossibleChildNames()) { + Set possibleChildNames = identifier.getPossibleChildNames(); + List attributes = new ArrayList<>( + possibleChildNames.size()); + for (QName key : possibleChildNames) { Object value = key; - NormalizedNodeMessages.PathArgumentAttribute attribute = - buildAttribute(context, key, value); + NormalizedNodeMessages.PathArgumentAttribute attribute = buildAttribute(context, key, value); attributes.add(attribute); - } return attributes; + }); - } - }); - - - pathArgumentAttributesGetters.put(YangInstanceIdentifier.NodeIdentifier.class, new PathArgumentAttributesGetter() { - @Override - public Iterable get( - NormalizedNodeSerializationContext context, - YangInstanceIdentifier.PathArgument pathArgument) { - return Collections.emptyList(); - } - }); + PATH_ARGUMENT_ATTRIBUTES_GETTERS.put(YangInstanceIdentifier.NodeIdentifier.class, + (context, pathArgument) -> Collections.emptyList()); } - private static NormalizedNodeMessages.PathArgumentAttribute buildAttribute(NormalizedNodeSerializationContext context,QName name, Object value){ + private static NormalizedNodeMessages.PathArgumentAttribute buildAttribute( + QNameSerializationContext context, QName name, Object value) { NormalizedNodeMessages.PathArgumentAttribute.Builder builder = NormalizedNodeMessages.PathArgumentAttribute.newBuilder(); @@ -162,46 +129,42 @@ public class PathArgumentSerializer { } - private static NormalizedNodeMessages.QName.Builder encodeQName(NormalizedNodeSerializationContext context, QName qName){ - if(qName == null){ + private static NormalizedNodeMessages.QName.Builder encodeQName(QNameSerializationContext context, QName qname) { + if (qname == null) { return NormalizedNodeMessages.QName.getDefaultInstance().toBuilder(); } - NormalizedNodeMessages.QName.Builder qNameBuilder = - NormalizedNodeMessages.QName.newBuilder(); + NormalizedNodeMessages.QName.Builder qnameBuilder = NormalizedNodeMessages.QName.newBuilder(); - qNameBuilder.setNamespace(context.addNamespace(qName.getNamespace())); + qnameBuilder.setNamespace(context.addNamespace(qname.getNamespace())); - qNameBuilder.setRevision(context.addRevision(qName.getRevision())); + qnameBuilder.setRevision(context.addRevision(qname.getRevision())); - qNameBuilder.setLocalName(context.addLocalName(qName.getLocalName())); + qnameBuilder.setLocalName(context.addLocalName(qname.getLocalName())); - return qNameBuilder; + return qnameBuilder; } private static Iterable getPathArgumentAttributes( - NormalizedNodeSerializationContext context, - YangInstanceIdentifier.PathArgument pathArgument) { - - return pathArgumentAttributesGetters.get(pathArgument.getClass()).get(context, pathArgument); + QNameSerializationContext context, YangInstanceIdentifier.PathArgument pathArgument) { + return PATH_ARGUMENT_ATTRIBUTES_GETTERS.get(pathArgument.getClass()).get(context, pathArgument); } - private static String qNameToString(NormalizedNodeDeSerializationContext context, - NormalizedNodeMessages.QName qName){ + private static String qNameToString(QNameDeSerializationContext context, NormalizedNodeMessages.QName qname) { // If this serializer is used qName cannot be null (see encodeQName) // adding null check only in case someone tried to deSerialize a protocol buffer node // that was not serialized using the PathArgumentSerializer // Preconditions.checkNotNull(qName, "qName should not be null"); // Preconditions.checkArgument(qName.getNamespace() != -1, "qName.namespace should be valid"); - String namespace = context.getNamespace(qName.getNamespace()); - String localName = context.getLocalName(qName.getLocalName()); + String namespace = context.getNamespace(qname.getNamespace()); + String localName = context.getLocalName(qname.getLocalName()); StringBuilder sb; - if(qName.getRevision() != -1){ - String revision = context.getRevision(qName.getRevision()); - sb = new StringBuilder(namespace.length() + REVISION_ARG.length() + revision.length() + - localName.length() + 2); + if (qname.getRevision() != -1) { + String revision = context.getRevision(qname.getRevision()); + sb = new StringBuilder(namespace.length() + REVISION_ARG.length() + revision.length() + + localName.length() + 2); sb.append('(').append(namespace).append(REVISION_ARG).append( revision).append(')').append(localName); } else { @@ -213,20 +176,18 @@ public class PathArgumentSerializer { } /** - * Parse a protocol buffer PathArgument and return an MD-SAL PathArgument + * Parse a protocol buffer PathArgument and return an MD-SAL PathArgument. * * @param pathArgument protocol buffer PathArgument * @return MD-SAL PathArgument */ private static YangInstanceIdentifier.PathArgument parsePathArgument( - NormalizedNodeDeSerializationContext context, - NormalizedNodeMessages.PathArgument pathArgument) { + QNameDeSerializationContext context, NormalizedNodeMessages.PathArgument pathArgument) { - switch(PathArgumentType.values()[pathArgument.getIntType()]){ + switch (PathArgumentType.values()[pathArgument.getIntType()]) { case NODE_IDENTIFIER_WITH_VALUE : { - - YangInstanceIdentifier.NodeWithValue nodeWithValue = - new YangInstanceIdentifier.NodeWithValue( + YangInstanceIdentifier.NodeWithValue nodeWithValue = + new YangInstanceIdentifier.NodeWithValue<>( QNameFactory.create(qNameToString(context, pathArgument.getNodeType())), parseAttribute(context, pathArgument.getAttribute(0))); @@ -234,7 +195,6 @@ public class PathArgumentSerializer { } case NODE_IDENTIFIER_WITH_PREDICATES : { - YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifierWithPredicates = new YangInstanceIdentifier.NodeIdentifierWithPredicates( @@ -245,14 +205,13 @@ public class PathArgumentSerializer { } case AUGMENTATION_IDENTIFIER: { + Set qnameSet = new HashSet<>(); - Set qNameSet = new HashSet<>(); - - for(NormalizedNodeMessages.PathArgumentAttribute attribute : pathArgument.getAttributeList()){ - qNameSet.add(QNameFactory.create(qNameToString(context, attribute.getName()))); + for (NormalizedNodeMessages.PathArgumentAttribute attribute : pathArgument.getAttributeList()) { + qnameSet.add(QNameFactory.create(qNameToString(context, attribute.getName()))); } - return new YangInstanceIdentifier.AugmentationIdentifier(qNameSet); + return new YangInstanceIdentifier.AugmentationIdentifier(qnameSet); } default: { @@ -264,11 +223,11 @@ public class PathArgumentSerializer { } private static Map toAttributesMap( - NormalizedNodeDeSerializationContext context, - List attributesList) { + QNameDeSerializationContext context, + List attributesList) { Map map; - if(attributesList.size() == 1) { + if (attributesList.size() == 1) { NormalizedNodeMessages.PathArgumentAttribute attribute = attributesList.get(0); NormalizedNodeMessages.QName name = attribute.getName(); Object value = parseAttribute(context, attribute); @@ -276,7 +235,7 @@ public class PathArgumentSerializer { } else { map = new HashMap<>(); - for(NormalizedNodeMessages.PathArgumentAttribute attribute : attributesList){ + for (NormalizedNodeMessages.PathArgumentAttribute attribute : attributesList) { NormalizedNodeMessages.QName name = attribute.getName(); Object value = parseAttribute(context, attribute); @@ -287,8 +246,8 @@ public class PathArgumentSerializer { return map; } - private static Object parseAttribute(NormalizedNodeDeSerializationContext context, NormalizedNodeMessages.PathArgumentAttribute attribute){ + private static Object parseAttribute(QNameDeSerializationContext context, + NormalizedNodeMessages.PathArgumentAttribute attribute) { return ValueSerializer.deSerialize(context, attribute); } - }