From bd56d9164cd2c1dd943a347a728433c57dff22d3 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 30 Jan 2018 23:48:40 +0100 Subject: [PATCH] Deprecate CopyableNode at al. isAddedByUses(), isAugmenting() and similar constructs relate to how a particular node became effective. This really has not place in the effective model of the world. This patch concentrates duplicate methods into an interface hierarchy and marks them as @deprecated, along with justification. This allows us to track down users and the semantics they really are after. Since we are touching SchemaContext, mark its future direction, which should see it shed a lot of nonsensical methods. Change-Id: Ibdaf52e45076006e979204ac75e7bae6aeffd29a Signed-off-by: Robert Varga --- ...ngModeledAnyxmlEffectiveStatementImpl.java | 2 ++ .../yang/data/util/ContainerSchemaNodes.java | 2 ++ .../yang/data/util/RpcAsContainer.java | 2 ++ .../yang/model/api/AddedByUsesAware.java | 26 +++++++++++++++++++ .../yang/model/api/CopyableNode.java | 19 +++++--------- .../yang/model/api/GroupingDefinition.java | 16 +++++------- .../yang/model/api/SchemaContext.java | 2 ++ .../yang/model/api/UnknownSchemaNode.java | 16 +++++------- .../yangtools/yang/model/api/UsesNode.java | 20 +------------- .../model/util/AbstractSchemaContext.java | 2 ++ .../stmt/AbstractEffectiveDataSchemaNode.java | 2 ++ ...tractEffectiveSimpleDataNodeContainer.java | 2 ++ .../stmt/UnknownEffectiveStatementBase.java | 2 ++ .../action/ActionEffectiveStatementImpl.java | 2 ++ .../stmt/choice/ImplicitCaseSchemaNode.java | 2 ++ .../NotificationEffectiveStatementImpl.java | 2 ++ .../stmt/uses/UsesEffectiveStatementImpl.java | 2 ++ 17 files changed, 71 insertions(+), 50 deletions(-) create mode 100644 yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/AddedByUsesAware.java diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/YangModeledAnyxmlEffectiveStatementImpl.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/YangModeledAnyxmlEffectiveStatementImpl.java index 48e7ea5207..f201f7c484 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/YangModeledAnyxmlEffectiveStatementImpl.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/YangModeledAnyxmlEffectiveStatementImpl.java @@ -84,11 +84,13 @@ final class YangModeledAnyxmlEffectiveStatementImpl return delegateSchemaNode().getReference(); } + @Deprecated @Override public boolean isAugmenting() { return delegateSchemaNode().isAugmenting(); } + @Deprecated @Override public boolean isAddedByUses() { return delegateSchemaNode().isAddedByUses(); diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerSchemaNodes.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerSchemaNodes.java index c345a85177..2d748c4739 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerSchemaNodes.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerSchemaNodes.java @@ -181,6 +181,7 @@ public final class ContainerSchemaNodes { } } + @Deprecated @Override public boolean isAddedByUses() { return false; @@ -239,6 +240,7 @@ public final class ContainerSchemaNodes { } @Override + @Deprecated public boolean isAddedByUses() { //FIXME: reference to https://bugs.opendaylight.org/show_bug.cgi?id=6897 return false; diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/RpcAsContainer.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/RpcAsContainer.java index 498b41d56e..b524271f14 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/RpcAsContainer.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/RpcAsContainer.java @@ -133,11 +133,13 @@ public final class RpcAsContainer implements ContainerSchemaNode { return ret; } + @Deprecated @Override public boolean isAugmenting() { return false; } + @Deprecated @Override public boolean isAddedByUses() { return false; diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/AddedByUsesAware.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/AddedByUsesAware.java new file mode 100644 index 0000000000..94a91bdce7 --- /dev/null +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/AddedByUsesAware.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2018 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.model.api; + +/** + * Trait interface for {@link SchemaNode}s, which have the {@link #isAddedByUses()} method. + * + * @deprecated This interface relates to declared model rather than to effective mode and as such should not + * exist. It is provided to provide common method definition and eash migration of users. + */ +@Deprecated +public interface AddedByUsesAware { + /** + * Returns true if this node was added by uses statement, + * otherwise returns false. + * + * @return true if this node was added by uses statement, + * otherwise returns false + */ + boolean isAddedByUses(); +} diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/CopyableNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/CopyableNode.java index 4dba5a251d..b7f38a8426 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/CopyableNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/CopyableNode.java @@ -7,13 +7,17 @@ */ package org.opendaylight.yangtools.yang.model.api; -import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; /** * Represents a node that can be added by uses or by augmentation. + * + * @deprecated Aside from the deprecated {@link AddedByUsesAware} contract, this interface adds only a trait related + * to now how we arrived at this effective node. Users who need to know this information should really be + * looking at the {@link DeclaredStatement} world, which holds the original node definition. */ -@Beta -public interface CopyableNode { +@Deprecated +public interface CopyableNode extends AddedByUsesAware { /** * Returns true if this node was added by augmentation, * otherwise returns false. @@ -22,13 +26,4 @@ public interface CopyableNode { * otherwise returns false */ boolean isAugmenting(); - - /** - * Returns true if this node was added by uses statement, - * otherwise returns false. - * - * @return true if this node was added by uses statement, - * otherwise returns false - */ - boolean isAddedByUses(); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/GroupingDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/GroupingDefinition.java index 16318910e9..9258675cf2 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/GroupingDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/GroupingDefinition.java @@ -13,15 +13,13 @@ package org.opendaylight.yangtools.yang.model.api; *

* It is used to define a reusable block of nodes, which may be used locally in * the module, in modules that include it, and by other modules that import from it. + * + *

+ * Note: this interface extends {@link AddedByUsesAware}, but this contradicts the javadoc of {@link #isAddedByUses()}, + * as groupings can never be encountered in 'data schema node' context. It is their children, which are data + * schema node, but those really are instantiated and typically differ in {@link #getQName()}'s namespace. */ public interface GroupingDefinition extends DataNodeContainer, SchemaNode, NotificationNodeContainer, - ActionNodeContainer { - /** - * Returns true if the data node was added by uses statement, - * otherwise returns false. - * - * @return true if the data node was added by uses statement, - * otherwise returns false - */ - boolean isAddedByUses(); + ActionNodeContainer, AddedByUsesAware { + } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java index 50311a1c5e..9a5c88593c 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaContext.java @@ -28,6 +28,8 @@ import org.opendaylight.yangtools.yang.common.Revision; * environment is safe. */ @Immutable +// FIXME: 3.0.0: ContainerSchemaNode is far too broad. A combination of DataNodeContainer, NotificationNodeContainer +// and possibly DataSchemaNode would reflect SchemaContext traits better. public interface SchemaContext extends ContainerSchemaNode { /** * QName of NETCONF top-level data node. diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UnknownSchemaNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UnknownSchemaNode.java index cd9fb7ad27..274c465973 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UnknownSchemaNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UnknownSchemaNode.java @@ -12,7 +12,7 @@ import org.opendaylight.yangtools.yang.common.QName; /** * Contains the methods for getting the details about the unknown node. */ -public interface UnknownSchemaNode extends SchemaNode { +public interface UnknownSchemaNode extends SchemaNode, AddedByUsesAware { /** * Returns QName instance with the name of the unknown node. * @@ -27,22 +27,18 @@ public interface UnknownSchemaNode extends SchemaNode { */ String getNodeParameter(); - /** - * Describes whether the node was added through uses YANG - * keyword. - * - * @return boolean value which is true if the node is added by - * uses YANG keyword - */ - boolean isAddedByUses(); - /** * Describes whether the node was added through augment YANG * statement. * * @return boolean value which is true if the node is added by * augment YANG statement + * + * @deprecated This method exposes mechanism of how this node was instantiated. This runs contrary to the idea + * that a SchemaNode is part of the effective model of the world. Examining a node's DeclaredStatement + * world should be sufficient to ascertain its origin. */ + @Deprecated boolean isAddedByAugmentation(); /** diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UsesNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UsesNode.java index b96d2b2bc0..5d18a93449 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UsesNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UsesNode.java @@ -15,7 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; /** * Contains the methods for getting data and checking properties of the YANG uses substatement. */ -public interface UsesNode extends WhenConditionAware, WithStatus { +public interface UsesNode extends WhenConditionAware, WithStatus, CopyableNode { /** * Returns the schema path to used grouping. @@ -31,24 +31,6 @@ public interface UsesNode extends WhenConditionAware, WithStatus { */ @Nonnull Set getAugmentations(); - /** - * Returns true if the data node was added by augmentation, - * otherwise returns false. - * - * @return true if the data node was added by augmentation, - * otherwise returns false - */ - boolean isAugmenting(); - - /** - * Returns true if the data node was added by uses statement, - * otherwise returns false. - * - * @return true if the data node was added by uses statement, - * otherwise returns false - */ - boolean isAddedByUses(); - /** * Some of the properties of each node in the grouping can be refined with * the "refine" statement. diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/AbstractSchemaContext.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/AbstractSchemaContext.java index fa67791373..43b22a45c0 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/AbstractSchemaContext.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/AbstractSchemaContext.java @@ -152,11 +152,13 @@ public abstract class AbstractSchemaContext implements SchemaContext { return getNameToModules().get(name); } + @Deprecated @Override public boolean isAugmenting() { return false; } + @Deprecated @Override public boolean isAddedByUses() { return false; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDataSchemaNode.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDataSchemaNode.java index 254ee289a5..0398c485b9 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDataSchemaNode.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDataSchemaNode.java @@ -43,11 +43,13 @@ public abstract class AbstractEffectiveDataSchemaNode