From: Robert Varga Date: Fri, 22 May 2015 16:14:47 +0000 (+0200) Subject: Take advantage of YangInstanceIdentifier methods X-Git-Tag: release/beryllium~503 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=d6fe0f5e53edb5ff3bc90024c984baeab3e788be Take advantage of YangInstanceIdentifier methods YangInstanceIdentifier provides new, fast methods to acquire parent, check if it empty and size of path arguments. Take advantage of them. Change-Id: I527ff8cefb2799cb188ffe294c69e3b81a0d6909 Signed-off-by: Robert Varga (cherry picked from commit ad7a6537b709a72e763835cae683b8cc12401ce1) --- diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractWriteTransaction.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractWriteTransaction.java index 4597f0646c..7e1f112c4a 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractWriteTransaction.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractWriteTransaction.java @@ -9,9 +9,7 @@ package org.opendaylight.controller.md.sal.binding.impl; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.collect.Iterables; import com.google.common.util.concurrent.CheckedFuture; -import java.util.Collections; import java.util.Map.Entry; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; @@ -20,7 +18,6 @@ import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.Identifiable; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; 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.NormalizedNode; /** @@ -98,25 +95,20 @@ public abstract class AbstractWriteTransaction path, final Entry> normalized) { if (Identifiable.class.isAssignableFrom(path.getTargetType())) { - YangInstanceIdentifier parentMapPath = getParent(normalized.getKey()).get(); + YangInstanceIdentifier parentMapPath = normalized.getKey().getParent(); + Preconditions.checkArgument(parentMapPath != null, "Map path %s does not have a parent", path); + NormalizedNode emptyParent = getCodec().getDefaultNodeFor(parentMapPath); getDelegate().merge(store, parentMapPath, emptyParent); } } - // FIXME (should be probaly part of InstanceIdentifier) - protected static Optional getParent( - final YangInstanceIdentifier child) { - - Iterable mapEntryItemPath = child.getPathArguments(); - int parentPathSize = Iterables.size(mapEntryItemPath) - 1; - if (parentPathSize > 1) { - return Optional.of(YangInstanceIdentifier.create(Iterables.limit(mapEntryItemPath, parentPathSize))); - } else if(parentPathSize == 0) { - return Optional.of(YangInstanceIdentifier.create(Collections.emptyList())); - } else { - return Optional.absent(); - } + /** + * @deprecated Use {@link YangInstanceIdentifier#getParent()} instead. + */ + @Deprecated + protected static Optional getParent(final YangInstanceIdentifier child) { + return Optional.fromNullable(child.getParent()); } /** diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java index 1ea94e9862..35776bb1a9 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java @@ -11,11 +11,11 @@ package org.opendaylight.controller.cluster.datastore.node.utils.stream; import com.google.common.base.Preconditions; -import com.google.common.collect.Iterables; import java.io.DataOutput; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -270,9 +270,8 @@ public class NormalizedNodeOutputStreamWriter implements NormalizedNodeStreamWri } private void writeYangInstanceIdentifierInternal(YangInstanceIdentifier identifier) throws IOException { - Iterable pathArguments = identifier.getPathArguments(); - int size = Iterables.size(pathArguments); - output.writeInt(size); + Collection pathArguments = identifier.getPathArguments(); + output.writeInt(pathArguments.size()); for(YangInstanceIdentifier.PathArgument pathArgument : pathArguments) { writePathArgument(pathArgument); diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NetconfMessageTransformUtil.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NetconfMessageTransformUtil.java index a547eb0891..9dc455c051 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NetconfMessageTransformUtil.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NetconfMessageTransformUtil.java @@ -10,7 +10,6 @@ package org.opendaylight.controller.sal.connect.netconf.util; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import java.io.IOException; import java.net.URI; @@ -279,7 +278,7 @@ public class NetconfMessageTransformUtil { final Optional operation, final Optional> lastChildOverride) { final NormalizedNode configContent; - if(Iterables.isEmpty(dataPath.getPathArguments())) { + if (dataPath.isEmpty()) { Preconditions.checkArgument(lastChildOverride.isPresent(), "Data has to be present when creating structure for top level element"); Preconditions.checkArgument(lastChildOverride.get() instanceof DataContainerChild, "Data has to be either container or a list node when creating structure for top level element, but was: %s", lastChildOverride.get()); diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java index 08ba91fe85..f07dda0cec 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java @@ -30,7 +30,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -541,7 +540,7 @@ public class RestconfImpl implements RestconfService { final YangInstanceIdentifier pathIdentifier = ((YangInstanceIdentifier) pathValue); String streamName = null; - if (!Iterables.isEmpty(pathIdentifier.getPathArguments())) { + if (!pathIdentifier.isEmpty()) { final String fullRestconfIdentifier = controllerContext.toFullRestconfIdentifier(pathIdentifier, null); LogicalDatastoreType datastore = parseEnumTypeParameter(value, LogicalDatastoreType.class, @@ -785,19 +784,18 @@ public class RestconfImpl implements RestconfService { final YangInstanceIdentifier identifier) { final String payloadName = node.getData().getNodeType().getLocalName(); - final Iterator pathArguments = identifier.getReversePathArguments().iterator(); //no arguments - if ( ! pathArguments.hasNext()) { + if (identifier.isEmpty()) { //no "data" payload - if ( ! node.getData().getNodeType().equals(NETCONF_BASE_QNAME)) { + if (!node.getData().getNodeType().equals(NETCONF_BASE_QNAME)) { throw new RestconfDocumentedException("Instance identifier has to contain at least one path argument", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE); } //any arguments } else { - final String identifierName = pathArguments.next().getNodeType().getLocalName(); - if ( ! payloadName.equals(identifierName)) { + final String identifierName = identifier.getLastPathArgument().getNodeType().getLocalName(); + if (!payloadName.equals(identifierName)) { throw new RestconfDocumentedException("Payload name (" + payloadName + ") is different from identifier name (" + identifierName + ")", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE);