From 14f1f133238c61049894ee8047c9c253ae9a7b3a Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 21 Jul 2017 11:07:09 +0200 Subject: [PATCH] BUG-8733: add EmptyDataTreeCandidateNode This class is used by multiple downstreams, hence it is useful to expose it from DataTreeCandidateNodes. Change-Id: I88e247c3a9a2cb7fffab4d73f6f8b7ef211a3ea0 Signed-off-by: Robert Varga --- .../schema/tree/DataTreeCandidateNodes.java | 21 +++++-- .../tree/EmptyDataTreeCandidateNode.java | 62 +++++++++++++++++++ 2 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/EmptyDataTreeCandidateNode.java diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodes.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodes.java index d36a4816a5..4a6391ec7a 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodes.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodes.java @@ -14,6 +14,7 @@ import java.util.Iterator; import javax.annotation.Nonnull; import javax.annotation.Nullable; 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; @Beta @@ -22,14 +23,24 @@ public final class DataTreeCandidateNodes { throw new UnsupportedOperationException(); } + /** + * Return an empty {@link DataTreeCandidateNode} identified by specified {@link PathArgument}. + * @param identifier Node identifier + * @return An empty DataTreeCandidateNode + */ + public static DataTreeCandidateNode empty(final PathArgument identifier) { + return new EmptyDataTreeCandidateNode(identifier); + } + public static DataTreeCandidateNode fromNormalizedNode(final NormalizedNode node) { return new NormalizedNodeDataTreeCandidateNode(node); } /** * Applies the {@code node} to the {@code cursor}, note that if the top node of (@code node} is RootNode - * you need to use {@link #applyRootedNodeToCursor(DataTreeModificationCursor, YangInstanceIdentifier, DataTreeCandidateNode) applyRootedNodeToCursor} - * method that works with rooted node candidates + * you need to use {@link #applyRootedNodeToCursor(DataTreeModificationCursor, YangInstanceIdentifier, + * DataTreeCandidateNode) applyRootedNodeToCursor} method that works with rooted node candidates. + * * @param cursor cursor from the modification we want to apply the {@code node} to * @param node candidate tree to apply */ @@ -58,12 +69,14 @@ public final class DataTreeCandidateNodes { /** * Applies the {@code node} that is rooted(doesn't have an identifier) in tree A to tree B's {@code cursor} - * at location specified by {@code rootPath} + * at location specified by {@code rootPath}. + * * @param cursor cursor from the modification we want to apply the {@code node} to * @param rootPath path in the {@code cursor}'s tree we want to apply to candidate to * @param node candidate tree to apply */ - public static void applyRootedNodeToCursor(final DataTreeModificationCursor cursor, final YangInstanceIdentifier rootPath, final DataTreeCandidateNode node) { + public static void applyRootedNodeToCursor(final DataTreeModificationCursor cursor, + final YangInstanceIdentifier rootPath, final DataTreeCandidateNode node) { switch (node.getModificationType()) { case DELETE: cursor.delete(rootPath.getLastPathArgument()); diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/EmptyDataTreeCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/EmptyDataTreeCandidateNode.java new file mode 100644 index 0000000000..bd5a95fa23 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/EmptyDataTreeCandidateNode.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.api.schema.tree; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import java.util.Collection; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; + +final class EmptyDataTreeCandidateNode implements DataTreeCandidateNode { + + private final PathArgument identifier; + + EmptyDataTreeCandidateNode(final PathArgument identifier) { + this.identifier = Preconditions.checkNotNull(identifier, "Identifier should not be null"); + } + + @Nonnull + @Override + public PathArgument getIdentifier() { + return identifier; + } + + @Nonnull + @Override + public Collection getChildNodes() { + return ImmutableList.of(); + } + + @Nullable + @Override + public DataTreeCandidateNode getModifiedChild(final PathArgument identifier) { + return null; + } + + @Nonnull + @Override + public ModificationType getModificationType() { + return ModificationType.UNMODIFIED; + } + + @Nonnull + @Override + public Optional> getDataAfter() { + return Optional.absent(); + } + + @Nonnull + @Override + public Optional> getDataBefore() { + return Optional.absent(); + } +} \ No newline at end of file -- 2.36.6