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%2Futil%2FInstanceIdentifierUtils.java;h=64a1e3a18a4a89fb2af3c681a93834d9eeb1589d;hp=55cb341086078b79406d574c11cec8961813e6b6;hb=d0bfebae1d8f056220bc2f5b043f1f13b3b8d4e6;hpb=c911a187bdcd6160c1929e53466cd9de681c2098 diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/InstanceIdentifierUtils.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/InstanceIdentifierUtils.java index 55cb341086..64a1e3a18a 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/InstanceIdentifierUtils.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/InstanceIdentifierUtils.java @@ -11,12 +11,18 @@ package org.opendaylight.controller.cluster.datastore.util; import org.opendaylight.controller.cluster.datastore.node.utils.NodeIdentifierFactory; +import org.opendaylight.controller.cluster.datastore.node.utils.QNameFactory; +import org.opendaylight.controller.cluster.datastore.node.utils.serialization.PathArgumentSerializer; +import org.opendaylight.controller.cluster.datastore.node.utils.serialization.QNameDeSerializationContext; +import org.opendaylight.controller.cluster.datastore.node.utils.serialization.QNameDeSerializationContextImpl; +import org.opendaylight.controller.cluster.datastore.node.utils.serialization.QNameSerializationContext; +import org.opendaylight.controller.cluster.datastore.node.utils.serialization.QNameSerializationContextImpl; import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages; +import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages.InstanceIdentifier.Builder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -40,61 +46,54 @@ public class InstanceIdentifierUtils { protected static final Logger logger = LoggerFactory .getLogger(InstanceIdentifierUtils.class); - @Deprecated - public static YangInstanceIdentifier from(String path) { - String[] ids = path.split("/"); - - List pathArguments = - new ArrayList<>(); - for (String nodeId : ids) { - if (!"".equals(nodeId)) { - pathArguments - .add(NodeIdentifierFactory.getArgument(nodeId)); - } - } - final YangInstanceIdentifier instanceIdentifier = - YangInstanceIdentifier.create(pathArguments); - return instanceIdentifier; - } - - /** * Convert an MD-SAL YangInstanceIdentifier into a protocol buffer version of it * * @param path an MD-SAL YangInstanceIdentifier * @return a protocol buffer version of the MD-SAL YangInstanceIdentifier */ - public static NormalizedNodeMessages.InstanceIdentifier toSerializable(YangInstanceIdentifier path){ + public static NormalizedNodeMessages.InstanceIdentifier toSerializable(YangInstanceIdentifier path) { + QNameSerializationContextImpl context = new QNameSerializationContextImpl(); + Builder builder = toSerializableBuilder(path, context); + return builder.addAllCode(context.getCodes()).build(); + } + + public static NormalizedNodeMessages.InstanceIdentifier toSerializable( + YangInstanceIdentifier path, QNameSerializationContext context) { + return toSerializableBuilder(path, context).build(); + } + + private static NormalizedNodeMessages.InstanceIdentifier.Builder toSerializableBuilder( + YangInstanceIdentifier path, QNameSerializationContext context) { NormalizedNodeMessages.InstanceIdentifier.Builder builder = NormalizedNodeMessages.InstanceIdentifier.newBuilder(); try { - - for (org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument pathArgument : path - .getPathArguments()) { - - String nodeType = ""; - if(!(pathArgument instanceof YangInstanceIdentifier.AugmentationIdentifier)){ - nodeType = pathArgument.getNodeType().toString(); + for (org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier. + PathArgument pathArgument : path.getPathArguments()) { + NormalizedNodeMessages.PathArgument serializablePathArgument; + if(context == null) { + String nodeType = ""; + if(!(pathArgument instanceof YangInstanceIdentifier.AugmentationIdentifier)){ + nodeType = pathArgument.getNodeType().toString(); + } + + serializablePathArgument = NormalizedNodeMessages.PathArgument.newBuilder() + .setValue(pathArgument.toString()) + .setType(pathArgument.getClass().getSimpleName()) + .setNodeType(NormalizedNodeMessages.QName.newBuilder().setValue(nodeType)) + .addAllAttributes(getPathArgumentAttributes(pathArgument)).build(); + } else { + serializablePathArgument = PathArgumentSerializer.serialize(context, pathArgument); } - NormalizedNodeMessages.PathArgument serializablePathArgument = - NormalizedNodeMessages.PathArgument.newBuilder() - .setValue(pathArgument.toString()) - .setType(pathArgument.getClass().getSimpleName()) - .setNodeType(NormalizedNodeMessages.QName.newBuilder() - .setValue(nodeType)) - .addAllAttributes(getPathArgumentAttributes( - pathArgument)) - .build(); - builder.addArguments(serializablePathArgument); } - } catch(Exception e){ logger.error("An exception occurred", e); } - return builder.build(); + + return builder; } @@ -105,21 +104,24 @@ public class InstanceIdentifierUtils { * @param path a protocol buffer version of the MD-SAL YangInstanceIdentifier * @return an MD-SAL YangInstanceIdentifier */ - public static YangInstanceIdentifier fromSerializable(NormalizedNodeMessages.InstanceIdentifier path){ - - List pathArguments = - new ArrayList<>(); + public static YangInstanceIdentifier fromSerializable(NormalizedNodeMessages.InstanceIdentifier path) { + return fromSerializable(path, new QNameDeSerializationContextImpl(path.getCodeList())); + } - for(NormalizedNodeMessages.PathArgument pathArgument : path.getArgumentsList()){ + public static YangInstanceIdentifier fromSerializable(NormalizedNodeMessages.InstanceIdentifier path, + QNameDeSerializationContext context) { - pathArguments - .add(parsePathArgument(pathArgument)); + List pathArguments = new ArrayList<>(); + for(NormalizedNodeMessages.PathArgument pathArgument : path.getArgumentsList()) { + if(context == null || pathArgument.hasType()) { + pathArguments.add(parsePathArgument(pathArgument)); + } else { + pathArguments.add(PathArgumentSerializer.deSerialize(context, pathArgument)); + } } - final YangInstanceIdentifier instanceIdentifier = YangInstanceIdentifier.create(pathArguments); - - return instanceIdentifier; + return YangInstanceIdentifier.create(pathArguments); } /** @@ -217,12 +219,13 @@ public class InstanceIdentifierUtils { * @param pathArgument protocol buffer PathArgument * @return MD-SAL PathArgument */ - private static YangInstanceIdentifier.PathArgument parsePathArgument(NormalizedNodeMessages.PathArgument pathArgument) { + private static YangInstanceIdentifier.PathArgument parsePathArgument( + NormalizedNodeMessages.PathArgument pathArgument) { if (YangInstanceIdentifier.NodeWithValue.class.getSimpleName().equals(pathArgument.getType())) { YangInstanceIdentifier.NodeWithValue nodeWithValue = new YangInstanceIdentifier.NodeWithValue( - QName.create(pathArgument.getNodeType().getValue()), + QNameFactory.create(pathArgument.getNodeType().getValue()), parseAttribute(pathArgument.getAttributes(0))); return nodeWithValue; @@ -232,7 +235,7 @@ public class InstanceIdentifierUtils { YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifierWithPredicates = new YangInstanceIdentifier.NodeIdentifierWithPredicates( - QName.create(pathArgument.getNodeType().getValue()), toAttributesMap(pathArgument.getAttributesList())); + QNameFactory.create(pathArgument.getNodeType().getValue()), toAttributesMap(pathArgument.getAttributesList())); return nodeIdentifierWithPredicates; @@ -241,7 +244,7 @@ public class InstanceIdentifierUtils { Set qNameSet = new HashSet<>(); for(NormalizedNodeMessages.Attribute attribute : pathArgument.getAttributesList()){ - qNameSet.add(QName.create(attribute.getValue())); + qNameSet.add(QNameFactory.create(attribute.getValue())); } return new YangInstanceIdentifier.AugmentationIdentifier(qNameSet); @@ -259,7 +262,7 @@ public class InstanceIdentifierUtils { String name = attribute.getName(); Object value = parseAttribute(attribute); - map.put(QName.create(name), value); + map.put(QNameFactory.create(name), value); } return map;