From 25af5cac9dc66fe36021a1f4e224b64a3f7ac177 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 25 Aug 2016 13:14:27 +0200 Subject: [PATCH] BUG-6533: add immutable implementations of yang.model.api This patch introduces Immutables.org annotations to generate immutable/builder implementation of yang.model.api interfaces. These are contained in a separate artifact and not available as a feature, since they currently do not have a user. Change-Id: I98a9969138a702b67139f323e77fa955162c3d74 Signed-off-by: Robert Varga --- common/artifacts/pom.xml | 5 ++ yang/pom.xml | 5 +- .../yang/model/api/ChoiceCaseNode.java | 3 +- .../yang/model/api/ContainerSchemaNode.java | 1 - .../yang/model/api/DocumentedNode.java | 2 - .../yang/model/api/ListSchemaNode.java | 4 +- .../yang/model/api/RpcDefinition.java | 2 +- .../yang/model/api/SchemaContext.java | 20 ++++- .../yangtools/yang/model/api/UsesNode.java | 1 - .../yang/model/api/package-info.java | 53 ++++++------ .../model/api/type/BinaryTypeDefinition.java | 3 +- .../model/api/type/BooleanTypeDefinition.java | 2 - .../model/api/type/DecimalTypeDefinition.java | 1 - .../model/api/type/EnumTypeDefinition.java | 1 - .../api/type/IdentityrefTypeDefinition.java | 4 - .../model/api/type/PatternConstraint.java | 1 - .../model/api/type/StringTypeDefinition.java | 1 - .../model/api/type/UnionTypeDefinition.java | 2 - yang/yang-model-immutable/pom.xml | 82 +++++++++++++++++++ .../immutable/AbstractChoiceCaseNode.java | 16 ++++ .../AbstractContainerSchemaNode.java | 16 ++++ .../immutable/AbstractDataNodeContainer.java | 29 +++++++ .../immutable/AbstractListSchemaNode.java | 16 ++++ .../yang/model/immutable/AbstractModule.java | 16 ++++ .../AbstractNotificationDefinition.java | 16 ++++ .../immutable/AbstractSchemaContext.java | 29 +++++++ .../immutable/CommonContainerSchemaNode.java | 19 +++++ .../yang/model/immutable/package-info.java | 52 ++++++++++++ 28 files changed, 345 insertions(+), 57 deletions(-) create mode 100644 yang/yang-model-immutable/pom.xml create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractChoiceCaseNode.java create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractContainerSchemaNode.java create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractDataNodeContainer.java create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractListSchemaNode.java create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractModule.java create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractNotificationDefinition.java create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractSchemaContext.java create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/CommonContainerSchemaNode.java create mode 100644 yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/package-info.java diff --git a/common/artifacts/pom.xml b/common/artifacts/pom.xml index fdfa06544e..289c44e494 100644 --- a/common/artifacts/pom.xml +++ b/common/artifacts/pom.xml @@ -94,6 +94,11 @@ yang-model-export ${project.version} + + org.opendaylight.yangtools + yang-model-immutable + ${project.version} + org.opendaylight.yangtools yang-model-util diff --git a/yang/pom.xml b/yang/pom.xml index e52383c526..f729e2424f 100644 --- a/yang/pom.xml +++ b/yang/pom.xml @@ -30,14 +30,15 @@ yang-data-transform yang-data-codec-gson yang-data-codec-xml - yang-model-api yang-maven-plugin yang-maven-plugin-it yang-maven-plugin-spi + yang-model-api + yang-model-export + yang-model-immutable yang-model-util yang-parser-api yang-parser-impl - yang-model-export yang-data-jaxen yang-system-test yang-test-util diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ChoiceCaseNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ChoiceCaseNode.java index e38df949bf..5b12968929 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ChoiceCaseNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ChoiceCaseNode.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.model.api; /** * The ChoiceCaseNode interface is used to define branches of the ChoiceNode. */ -public interface ChoiceCaseNode extends DataSchemaNode, DataNodeContainer, - AugmentationTarget { +public interface ChoiceCaseNode extends DataSchemaNode, DataNodeContainer, AugmentationTarget { } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ContainerSchemaNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ContainerSchemaNode.java index e7ebc0e186..cd4996e8f9 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ContainerSchemaNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ContainerSchemaNode.java @@ -7,7 +7,6 @@ */ package org.opendaylight.yangtools.yang.model.api; - /** * The ContainerSchemaNode is used to define an interior data node in the schema * tree. There are two styles of containers, those that exist only for diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DocumentedNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DocumentedNode.java index a3b031a08c..353a817c37 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DocumentedNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DocumentedNode.java @@ -13,9 +13,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; /** - * * Node which can have documentation assigned. - * */ public interface DocumentedNode { diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ListSchemaNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ListSchemaNode.java index b2e1a321b8..217b4a2f16 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ListSchemaNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ListSchemaNode.java @@ -21,8 +21,8 @@ import org.opendaylight.yangtools.yang.common.QName; * if defined. *

*/ -public interface ListSchemaNode extends DataNodeContainer, AugmentationTarget, DataSchemaNode, NotificationNodeContainer, - ActionNodeContainer { +public interface ListSchemaNode extends DataNodeContainer, AugmentationTarget, DataSchemaNode, + NotificationNodeContainer, ActionNodeContainer { /** * @return List of QNames of leaf identifiers of this list diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/RpcDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/RpcDefinition.java index 375be86373..42b49cc237 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/RpcDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/RpcDefinition.java @@ -9,11 +9,11 @@ package org.opendaylight.yangtools.yang.model.api; /** * Interface describing YANG 'rpc' statement. + * *

* The rpc statement defines an rpc node in the schema tree. Under the rpc node, * a schema node with the name 'input', and a schema node with the name 'output' * are also defined. - *

*/ public interface RpcDefinition extends OperationDefinition { 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 707fa11504..770a584125 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 @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.model.api; import com.google.common.base.Optional; +import com.google.common.collect.Sets; import java.net.URI; import java.util.Date; import java.util.Set; @@ -88,7 +89,9 @@ public interface SchemaContext extends ContainerSchemaNode { * @return module instance which has namespace equal to the * namespace or null in other cases */ - Set findModuleByNamespace(final URI namespace); + default Set findModuleByNamespace(final URI namespace) { + return Sets.filter(getModules(), m -> namespace.equals(m.getNamespace())); + } /** * Returns module instance based on given namespace and revision. If @@ -96,10 +99,19 @@ public interface SchemaContext extends ContainerSchemaNode { * * @param namespace * @param revision - * @return + * @return Matching module or null if a match is not found */ - Module findModuleByNamespaceAndRevision(final URI namespace, final Date revision); - + default Module findModuleByNamespaceAndRevision(final URI namespace, final Date revision) { + if (namespace == null) { + return null; + } + for (Module module : findModuleByNamespace(namespace)) { + if (revision == null || revision.equals(module.getRevision())) { + return module; + } + } + return null; + } /** * Get yang source code represented as string for matching 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 d0106cff66..86acdf68e4 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,6 @@ import javax.annotation.Nonnull; /** * Contains the methods for getting data and checking properties of the YANG * uses substatement. - * */ public interface UsesNode extends DocumentedNode.WithStatus { diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/package-info.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/package-info.java index 424c64b081..9c8fc62456 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/package-info.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/package-info.java @@ -36,7 +36,6 @@ *
argument *
{@link org.opendaylight.yangtools.yang.model.api.ExtensionDefinition#getArgument()} * - * *
augment *
{@link org.opendaylight.yangtools.yang.model.api.AugmentationSchema} * @@ -44,7 +43,7 @@ *
{@link org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition#getIdentity()} * *
belongs-to - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement#getBelongsTo()} * *
bit *
{@link org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit} @@ -66,7 +65,7 @@ *
{@link org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode} * *
default - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.LeafSchemaNode#getDefault()} * *
description *
{@link org.opendaylight.yangtools.yang.model.api.SchemaNode#getDescription()} @@ -89,7 +88,7 @@ *
{@link org.opendaylight.yangtools.yang.model.api.Deviation} * *
deviate - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.DeviateKind} * *
feature *
{@link org.opendaylight.yangtools.yang.model.api.FeatureDefinition} @@ -101,16 +100,16 @@ *
{@link org.opendaylight.yangtools.yang.model.api.GroupingDefinition} * *
identity - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode} * *
if-feature - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement} * *
import *
{@link org.opendaylight.yangtools.yang.model.api.ModuleImport} * *
include - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement} * *
input *
{@link org.opendaylight.yangtools.yang.model.api.RpcDefinition#getInput()} @@ -189,7 +188,7 @@ *
{@link org.opendaylight.yangtools.yang.model.api.SchemaNode#getReference()} * *
refine - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement} * *
require-instance *
{@link org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition#requireInstance()} @@ -207,7 +206,7 @@ *
{@link org.opendaylight.yangtools.yang.model.api.SchemaNode#getStatus()} * *
submodule - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement} * *
type *
{@link org.opendaylight.yangtools.yang.model.api.TypeDefinition} @@ -218,7 +217,7 @@ *
{@link org.opendaylight.yangtools.yang.model.api.TypeDefinition} * *
unique - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.UniqueConstraint} * *
units *
{@link org.opendaylight.yangtools.yang.model.api.TypeDefinition#getUnits()} @@ -234,54 +233,52 @@ *
{@link org.opendaylight.yangtools.yang.model.api.ConstraintDefinition#getWhenCondition()} * *
yang-version + *
{@link org.opendaylight.yangtools.yang.model.api.Module#getYangVersion()} * *
yin-element - *
- * - * - * + *
{@link org.opendaylight.yangtools.yang.model.api.ExtensionDefinition#isYinElement()} * *
add - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.DeviateKind#ADD} * *
current - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.Status#CURRENT} * *
delete - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.DeviateKind#DELETE} * *
deprecated - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.Status#DEPRECATED} * *
false - *
+ *
{@link java.lang.Boolean#FALSE} * *
max - *
+ *
Not exposed * *
min - *
+ *
Not exposed * *
not-supported - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.DeviateKind#NOT_SUPPORTED} * *
obsolete - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.Status#OBSOLETE} * *
replace - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.DeviateKind#REPLACE} * *
system - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.ListSchemaNode#isUserOrdered()} * *
true - *
+ *
{@link java.lang.Boolean#TRUE} * *
unbounded - *
+ *
Not exposed * *
user - *
+ *
{@link org.opendaylight.yangtools.yang.model.api.ListSchemaNode#isUserOrdered()} * * * diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BinaryTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BinaryTypeDefinition.java index b097fd3d87..94eca2b9e4 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BinaryTypeDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BinaryTypeDefinition.java @@ -12,7 +12,7 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition; /** * The binary built-in type represents any binary data, i.e., a sequence of - * octets.
+ * octets. *
* Binary values are encoded with the base64 encoding scheme (see [RFC4648], Section @@ -21,7 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition; * href="https://tools.ietf.org/html/rfc4648">[RFC4648]. * *
- *
* This interface was modeled according to definition in [RFC-6020] The binary * Built-In Type diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BooleanTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BooleanTypeDefinition.java index dd20aacc5f..503dbd69b8 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BooleanTypeDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BooleanTypeDefinition.java @@ -10,10 +10,8 @@ package org.opendaylight.yangtools.yang.model.api.type; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; /** - * * Marker interface which marks that type definition represents the built-in * YANG boolean type. - * */ public interface BooleanTypeDefinition extends TypeDefinition { diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java index 66bc99fc80..75f6f43444 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java @@ -14,7 +14,6 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition; /** * Contains methods for getting data from the YANG type * substatement for decimal64 built-in type. - * */ public interface DecimalTypeDefinition extends TypeDefinition { diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/EnumTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/EnumTypeDefinition.java index d27e2ba3d1..402d7135d9 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/EnumTypeDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/EnumTypeDefinition.java @@ -27,7 +27,6 @@ public interface EnumTypeDefinition extends TypeDefinition { @Nonnull List getValues(); /** - * * Contains the methods for accessing the data about the concrete * enumeration item which represents enum YANG type. */ diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/IdentityrefTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/IdentityrefTypeDefinition.java index 1ab5370d5f..30d48b7627 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/IdentityrefTypeDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/IdentityrefTypeDefinition.java @@ -11,13 +11,10 @@ import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; /** - * * Contains method for getting data from identityref built-in YANG * type. - * */ public interface IdentityrefTypeDefinition extends TypeDefinition { - /** * Returns identity to which the instance of this type refers. * @@ -25,5 +22,4 @@ public interface IdentityrefTypeDefinition extends TypeDefinitionpattern * which is substatement of type statement. - * */ public interface PatternConstraint extends ConstraintMetaDefinition { diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/StringTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/StringTypeDefinition.java index 958e796e51..c5784be505 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/StringTypeDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/StringTypeDefinition.java @@ -11,7 +11,6 @@ import java.util.List; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; /** - * * Contains method for getting data from the string YANG built-in * type. */ diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/UnionTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/UnionTypeDefinition.java index 6b2897f588..c08cc7602d 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/UnionTypeDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/UnionTypeDefinition.java @@ -8,12 +8,10 @@ package org.opendaylight.yangtools.yang.model.api.type; import java.util.List; - import org.opendaylight.yangtools.yang.model.api.TypeDefinition; /** * Contains the method which access union item in the union type. - * */ public interface UnionTypeDefinition extends TypeDefinition { diff --git a/yang/yang-model-immutable/pom.xml b/yang/yang-model-immutable/pom.xml new file mode 100644 index 0000000000..1b275f8ebc --- /dev/null +++ b/yang/yang-model-immutable/pom.xml @@ -0,0 +1,82 @@ + + + + + + + org.opendaylight.odlparent + bundle-parent + 1.8.0-SNAPSHOT + + + + 4.0.0 + org.opendaylight.yangtools + yang-model-immutable + 1.1.0-SNAPSHOT + bundle + ${project.artifactId} + ${project.artifactId} + + + + + org.opendaylight.yangtools + yangtools-artifacts + 1.1.0-SNAPSHOT + import + pom + + + + + + + ${project.groupId} + yang-model-api + + + + org.immutables + value + 2.3.9 + provided + + + + junit + junit + test + + + org.mockito + mockito-core + + + ch.qos.logback + logback-classic + test + + + + + ${odl.site.url}/${project.groupId}/${stream}/${project.artifactId}/ + + + opendaylight-site + ${nexus.site.url}/${project.artifactId}/ + + + diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractChoiceCaseNode.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractChoiceCaseNode.java new file mode 100644 index 0000000000..3731f4ac63 --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractChoiceCaseNode.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.immutable; + +import org.immutables.value.Value; +import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; + +@Value.Immutable +abstract class AbstractChoiceCaseNode extends AbstractDataNodeContainer implements ChoiceCaseNode { + +} diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractContainerSchemaNode.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractContainerSchemaNode.java new file mode 100644 index 0000000000..b49246331c --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractContainerSchemaNode.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.immutable; + +import org.immutables.value.Value; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; + +@Value.Immutable +abstract class AbstractContainerSchemaNode extends CommonContainerSchemaNode implements ContainerSchemaNode { + +} diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractDataNodeContainer.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractDataNodeContainer.java new file mode 100644 index 0000000000..030df61659 --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractDataNodeContainer.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.immutable; + +import java.util.Collection; +import java.util.Map; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; + +abstract class AbstractDataNodeContainer implements DataNodeContainer { + + abstract Map children(); + + @Override + public final Collection getChildNodes() { + return children().values(); + } + + @Override + public final DataSchemaNode getDataChildByName(final QName name) { + return children().get(name); + } +} diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractListSchemaNode.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractListSchemaNode.java new file mode 100644 index 0000000000..ce2c246767 --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractListSchemaNode.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.immutable; + +import org.immutables.value.Value; +import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; + +@Value.Immutable +abstract class AbstractListSchemaNode extends AbstractDataNodeContainer implements ListSchemaNode { + +} diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractModule.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractModule.java new file mode 100644 index 0000000000..f01ac25ec9 --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractModule.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.immutable; + +import org.immutables.value.Value; +import org.opendaylight.yangtools.yang.model.api.Module; + +@Value.Immutable +abstract class AbstractModule extends AbstractDataNodeContainer implements Module { + +} diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractNotificationDefinition.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractNotificationDefinition.java new file mode 100644 index 0000000000..3a2d54e143 --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractNotificationDefinition.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.immutable; + +import org.immutables.value.Value; +import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; + +@Value.Immutable +abstract class AbstractNotificationDefinition extends AbstractDataNodeContainer implements NotificationDefinition { + +} diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractSchemaContext.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractSchemaContext.java new file mode 100644 index 0000000000..fabfd76640 --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/AbstractSchemaContext.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.immutable; + +import com.google.common.base.Optional; +import java.util.Date; +import org.immutables.value.Value; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +@Value.Immutable +abstract class AbstractSchemaContext extends CommonContainerSchemaNode implements SchemaContext { + + @Override + public final Optional getModuleSource(final ModuleIdentifier moduleIdentifier) { + throw new UnsupportedOperationException("Not implemented"); + } + + @Override + public Module findModuleByName(final String name, final Date revision) { + throw new UnsupportedOperationException("Not implemented"); + } +} diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/CommonContainerSchemaNode.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/CommonContainerSchemaNode.java new file mode 100644 index 0000000000..83f39f0f7b --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/CommonContainerSchemaNode.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.immutable; + +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; + +/** + * Common abstract class capturing {@link AbstractDataNodeContainer} and {@link ContainerSchemaNode}. + * + * @author Robert Varga + */ +abstract class CommonContainerSchemaNode extends AbstractDataNodeContainer implements ContainerSchemaNode { + +} diff --git a/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/package-info.java b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/package-info.java new file mode 100644 index 0000000000..df049d5522 --- /dev/null +++ b/yang/yang-model-immutable/src/main/java/org/opendaylight/yangtools/yang/model/immutable/package-info.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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 + */ +/** + * Generated immutable implementations for org.opendaylight.yangtools.yang.model.api interfaces. + * + * @author Robert Varga + */ +@Include(value = { + org.opendaylight.yangtools.yang.model.api.ActionDefinition.class, + org.opendaylight.yangtools.yang.model.api.AnyDataSchemaNode.class, + org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode.class, + org.opendaylight.yangtools.yang.model.api.ExtensionDefinition.class, + org.opendaylight.yangtools.yang.model.api.FeatureDefinition.class, + org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode.class, + org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode.class, + org.opendaylight.yangtools.yang.model.api.LeafSchemaNode.class, + org.opendaylight.yangtools.yang.model.api.ModuleImport.class, + org.opendaylight.yangtools.yang.model.api.RpcDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit.class, + org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair.class, + org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.LengthConstraint.class, + org.opendaylight.yangtools.yang.model.api.type.PatternConstraint.class, + org.opendaylight.yangtools.yang.model.api.type.RangeConstraint.class, + org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition.class, + org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition.class, +}) +@Style( + builderVisibility = BuilderVisibility.PUBLIC, + strictBuilder = true, + visibility = ImplementationVisibility.PRIVATE) +package org.opendaylight.yangtools.yang.model.immutable; + +import org.immutables.value.Value.Include; +import org.immutables.value.Value.Style; +import org.immutables.value.Value.Style.BuilderVisibility; +import org.immutables.value.Value.Style.ImplementationVisibility; -- 2.36.6