Introduce TypeDefinitionAware 78/28478/2
authorRobert Varga <robert.varga@pantheon.sk>
Thu, 15 Oct 2015 02:18:37 +0000 (04:18 +0200)
committerRobert Varga <robert.varga@pantheon.sk>
Thu, 15 Oct 2015 02:52:36 +0000 (04:52 +0200)
TypeEffectiveStatement and TypedefEffectiveStatement should expose the
underlying TypeDefinition, so it can be acquired for use with the type
system.

Change-Id: I58aaa33df077fc092db35f87be671a0b89e50fd3
Signed-off-by: Robert Varga <robert.varga@pantheon.sk>
17 files changed:
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeDefinitionAware.java [new file with mode: 0644]
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeEffectiveStatement.java [new file with mode: 0644]
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypedefEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/TypeNamespace.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ExtendedTypeEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/TypeDefEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitsSpecificationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/Decimal64SpecificationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumSpecificationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IdentityRefSpecificationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/InstanceIdentifierSpecificationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LeafrefSpecificationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/TypeDefinitionEffectiveBuilder.java [deleted file]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/UnionSpecificationEffectiveStatementImpl.java

diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeDefinitionAware.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeDefinitionAware.java
new file mode 100644 (file)
index 0000000..e450055
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 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.api.stmt;
+
+import com.google.common.annotations.Beta;
+import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+
+/**
+ * Interface indicating an entity which acts as a holder of a {@link TypeDefinition}.
+ */
+@Beta
+public interface TypeDefinitionAware {
+    /**
+     * Return this statement's effective type definition.
+     *
+     * @return Effective {@link TypeDefinition} as defined by this statement.
+     */
+    @Nonnull TypeDefinition<?> getTypeDefinition();
+}
diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeEffectiveStatement.java
new file mode 100644 (file)
index 0000000..0502988
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) 2015 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.api.stmt;
+
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+public interface TypeEffectiveStatement<T extends TypeStatement> extends EffectiveStatement<String, T>, TypeDefinitionAware {
+
+}
diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypedefEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypedefEffectiveStatement.java
new file mode 100644 (file)
index 0000000..de8511d
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2015 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.api.stmt;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+/**
+ * Effective model statement which should be used to derive application behaviour related to typedefs.
+ */
+public interface TypedefEffectiveStatement extends EffectiveStatement<QName, TypedefStatement>, TypeDefinitionAware {
+
+}
index 4e061d692db2838d983c09493b066485a92d8dd3..f4606e168c8ca7b2f74f24c370443a33584025d0 100644 (file)
@@ -8,9 +8,9 @@
 package org.opendaylight.yangtools.yang.parser.spi;
 
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace.TreeScoped;
 
 /**
  * Derived types namespace
@@ -21,7 +21,9 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
  * This means that any descendant node may use that typedef, and it MUST NOT
  * define a typedef with the same name.
  *
+ * This namespace includes all type definitions implied by the language in which
+ * the current statement resides (e.g. RFC6020 for YANG).
  */
-public interface TypeNamespace extends StatementNamespace.TreeScoped<QName, TypedefStatement, EffectiveStatement<QName,TypedefStatement>> {
+public interface TypeNamespace extends TreeScoped<QName, TypedefStatement, TypedefEffectiveStatement> {
 
 }
index 1177f073cd597bf72fd26288d83a4c1bc7ba0f81..f2fb51e6443c65475e9ad5188ec769f7edcf3551 100644 (file)
@@ -25,6 +25,7 @@ import java.util.Map;
 import java.util.Set;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeDefinitionAware;
 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 import org.opendaylight.yangtools.yang.model.util.BinaryType;
@@ -41,7 +42,6 @@ import org.opendaylight.yangtools.yang.model.util.Uint64;
 import org.opendaylight.yangtools.yang.model.util.Uint8;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.LengthConstraintEffectiveImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.RangeConstraintEffectiveImpl;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.TypeDefinitionEffectiveBuilder;
 import org.opendaylight.yangtools.yang.parser.util.UnknownBoundaryNumber;
 
 /**
@@ -261,9 +261,9 @@ public final class TypeUtils {
     }
 
     public static TypeDefinition<?> getTypeFromEffectiveStatement(final EffectiveStatement<?, ?> effectiveStatement) {
-        if (effectiveStatement instanceof TypeDefinitionEffectiveBuilder) {
-            TypeDefinitionEffectiveBuilder typeDefEffectiveBuilder = (TypeDefinitionEffectiveBuilder) effectiveStatement;
-            return typeDefEffectiveBuilder.buildType();
+        if (effectiveStatement instanceof TypeDefinitionAware) {
+            TypeDefinitionAware typeDefEffectiveBuilder = (TypeDefinitionAware) effectiveStatement;
+            return typeDefEffectiveBuilder.getTypeDefinition();
         } else {
             final String typeName = ((TypeDefinition<?>) effectiveStatement).getQName().getLocalName();
             return PRIMITIVE_TYPES_MAP.get(typeName);
index 4da0540a4cd6791039cc9c197b8109c9ce0c3725..04415543bb3072fa0c314464352ec9e59e519e0b 100644 (file)
@@ -23,7 +23,6 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UsesNode;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.util.ExtendedType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 abstract class AbstractEffectiveDocumentedDataNodeContainer<A, D extends DeclaredStatement<A>>
@@ -69,9 +68,9 @@ abstract class AbstractEffectiveDocumentedDataNodeContainer<A, D extends Declare
             }
             if (effectiveStatement instanceof TypeDefEffectiveStatementImpl) {
                 TypeDefEffectiveStatementImpl typeDef = (TypeDefEffectiveStatementImpl) effectiveStatement;
-                ExtendedType extendedType = typeDef.buildType();
-                if (!mutableTypeDefinitions.contains(extendedType)) {
-                    mutableTypeDefinitions.add(extendedType);
+                TypeDefinition<?> type = typeDef.getTypeDefinition();
+                if (!mutableTypeDefinitions.contains(type)) {
+                    mutableTypeDefinitions.add(type);
                 } else {
                     throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
                 }
index ff01174c5506801ad42e942b8812fcde05f2c65a..671d1a368f7a791a579d457757acea20a5a56d96 100644 (file)
@@ -42,7 +42,6 @@ import org.opendaylight.yangtools.yang.model.api.UsesNode;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
-import org.opendaylight.yangtools.yang.model.util.ExtendedType;
 import org.opendaylight.yangtools.yang.model.util.ModuleImportImpl;
 import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -194,9 +193,9 @@ abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> exte
             }
             if (effectiveStatement instanceof TypeDefEffectiveStatementImpl) {
                 TypeDefEffectiveStatementImpl typeDef = (TypeDefEffectiveStatementImpl) effectiveStatement;
-                ExtendedType extendedType = typeDef.buildType();
-                if (!mutableTypeDefinitions.contains(extendedType)) {
-                    mutableTypeDefinitions.add(extendedType);
+                TypeDefinition<?> type = typeDef.getTypeDefinition();
+                if (!mutableTypeDefinitions.contains(type)) {
+                    mutableTypeDefinitions.add(type);
                 } else {
                     throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
                 }
index ff554fc1404de26f43a555c3c2811c4f184aae26..fe0ccae5aaca3304df7f4eb129ce99d14468e673 100644 (file)
@@ -18,7 +18,9 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition;
@@ -36,12 +38,11 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.LengthEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.PatternEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.RangeEffectiveStatementImpl;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.TypeDefinitionEffectiveBuilder;
 import org.opendaylight.yangtools.yang.parser.util.TypeConstraints;
 
 public final class ExtendedTypeEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<String, TypeStatement>
 implements
-        TypeDefinition<TypeDefinition<?>>, TypeDefinitionEffectiveBuilder {
+        TypeDefinition<TypeDefinition<?>>, TypeEffectiveStatement<TypeStatement> {
 
     private static final Splitter COLON_SPLITTER = Splitter.on(':').trimResults();
 
@@ -65,7 +66,7 @@ implements
         this.isExtended = isExtended;
         qName = initQName(ctx, isExtended);
 
-        final StmtContext<?, TypedefStatement, EffectiveStatement<QName, TypedefStatement>> typeStmt =
+        final StmtContext<?, TypedefStatement, TypedefEffectiveStatement> typeStmt =
                 ctx.getFromNamespace(TypeNamespace.class, qName);
         if (typeStmt == null) {
             path = Utils.getSchemaPath(ctx);
@@ -122,7 +123,7 @@ implements
         if (TypeUtils.isYangPrimitiveTypeString(baseTypeQName.getLocalName())) {
             baseType = TypeUtils.getYangPrimitiveTypeFromString(baseTypeQName.getLocalName());
         } else {
-            StmtContext<?, TypedefStatement, EffectiveStatement<QName, TypedefStatement>> baseTypeCtx = ctx
+            StmtContext<?, TypedefStatement, TypedefEffectiveStatement> baseTypeCtx = ctx
                     .getParentContext().getFromNamespace(TypeNamespace.class, baseTypeQName);
 
             if (baseTypeCtx == null) {
@@ -262,21 +263,20 @@ implements
     }
 
     @Override
-    public ExtendedType buildType() {
-
+    public TypeDefinition<?> getTypeDefinition() {
         if (extendedType != null) {
             return extendedType;
         }
 
         if (!isExtended && baseType instanceof TypeDefEffectiveStatementImpl) {
             TypeDefEffectiveStatementImpl originalTypeDef = (TypeDefEffectiveStatementImpl) baseType;
-            return originalTypeDef.buildType();
+            return originalTypeDef.getTypeDefinition();
         }
 
         Builder extendedTypeBuilder;
         if (baseType instanceof TypeDefEffectiveStatementImpl) {
             TypeDefEffectiveStatementImpl typeDefBaseType = (TypeDefEffectiveStatementImpl) baseType;
-            extendedTypeBuilder = ExtendedType.builder(qName, typeDefBaseType.buildType(),
+            extendedTypeBuilder = ExtendedType.builder(qName, typeDefBaseType.getTypeDefinition(),
                     Optional.fromNullable(getDescription()), Optional.fromNullable(getReference()), path);
         } else {
             extendedTypeBuilder = ExtendedType.builder(qName, baseType, Optional.fromNullable(getDescription()),
index 8cab8598eb370e9777e90105bce1e4705a904b48..b0db7d407f1e380240d4671da00f4090806adf53 100644 (file)
@@ -16,7 +16,9 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeDefinitionAware;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
@@ -32,10 +34,9 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.Decima
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.LengthEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.PatternEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.RangeEffectiveStatementImpl;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.TypeDefinitionEffectiveBuilder;
 
 public final class TypeDefEffectiveStatementImpl extends AbstractEffectiveSchemaNode<TypedefStatement> implements
-        TypeDefinition<TypeDefinition<?>>, TypeDefinitionEffectiveBuilder {
+        TypeDefinition<TypeDefinition<?>>, TypedefEffectiveStatement {
     private final TypeDefinition<?> baseType;
     private final String defaultValue;
     private final String units;
@@ -91,7 +92,7 @@ public final class TypeDefEffectiveStatementImpl extends AbstractEffectiveSchema
                 }
             }
         } else {
-            StmtContext<?, TypedefStatement, EffectiveStatement<QName, TypedefStatement>> baseTypeCtx = ctx
+            StmtContext<?, TypedefStatement, TypedefEffectiveStatement> baseTypeCtx = ctx
                     .getParentContext().getFromNamespace(TypeNamespace.class, baseTypeQName);
             baseTypeInit = (TypeDefEffectiveStatementImpl) baseTypeCtx.buildEffective();
         }
@@ -99,25 +100,25 @@ public final class TypeDefEffectiveStatementImpl extends AbstractEffectiveSchema
         return baseTypeInit;
     }
 
-    protected Integer initFractionDigits(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
+    private static Integer initFractionDigits(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
         final FractionDigitsEffectiveStatementImpl fractionDigitsEffStmt = typeEffectiveStmt
                 .firstEffective(FractionDigitsEffectiveStatementImpl.class);
         return fractionDigitsEffStmt != null ? fractionDigitsEffStmt.argument() : null;
     }
 
-    protected List<RangeConstraint> initRanges(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
+    private static List<RangeConstraint> initRanges(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
         final RangeEffectiveStatementImpl rangeConstraints = typeEffectiveStmt
                 .firstEffective(RangeEffectiveStatementImpl.class);
         return rangeConstraints != null ? rangeConstraints.argument() : Collections.<RangeConstraint> emptyList();
     }
 
-    protected List<LengthConstraint> initLengths(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
+    private static List<LengthConstraint> initLengths(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
         final LengthEffectiveStatementImpl lengthConstraints = typeEffectiveStmt
                 .firstEffective(LengthEffectiveStatementImpl.class);
         return lengthConstraints != null ? lengthConstraints.argument() : Collections.<LengthConstraint> emptyList();
     }
 
-    protected List<PatternConstraint> initPatterns(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
+    private static List<PatternConstraint> initPatterns(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
         final List<PatternConstraint> patternConstraints = new ArrayList<>();
 
         for (final EffectiveStatement<?, ?> effectiveStatement : typeEffectiveStmt.effectiveSubstatements()) {
@@ -169,16 +170,15 @@ public final class TypeDefEffectiveStatementImpl extends AbstractEffectiveSchema
     }
 
     @Override
-    public ExtendedType buildType() {
-
+    public TypeDefinition<?> getTypeDefinition() {
         if (extendedType != null) {
             return extendedType;
         }
 
         Builder extendedTypeBuilder;
-        if (baseType instanceof TypeDefinitionEffectiveBuilder) {
-            TypeDefinitionEffectiveBuilder typeDefBaseType = (TypeDefinitionEffectiveBuilder) baseType;
-            extendedTypeBuilder = ExtendedType.builder(getQName(), typeDefBaseType.buildType(),
+        if (baseType instanceof TypeDefinitionAware) {
+            TypeDefinitionAware typeDefBaseType = (TypeDefinitionAware) baseType;
+            extendedTypeBuilder = ExtendedType.builder(getQName(), typeDefBaseType.getTypeDefinition(),
                     Optional.fromNullable(getDescription()), Optional.fromNullable(getReference()), getPath());
         } else {
             extendedTypeBuilder = ExtendedType.builder(getQName(), baseType, Optional.fromNullable(getDescription()),
index f94cd87483bc9d0fd157013d05d5d5c59c5cad50..f3b9cfd196304e5a23a901d69d8d62011258fe6a 100644 (file)
@@ -18,7 +18,8 @@ import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.BitsSpecification;
 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.BaseTypes;
 import org.opendaylight.yangtools.yang.model.util.BitsType;
@@ -27,7 +28,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
 
 public class BitsSpecificationEffectiveStatementImpl extends
-        EffectiveStatementBase<String, TypeStatement.BitsSpecification> implements BitsTypeDefinition, TypeDefinitionEffectiveBuilder {
+        EffectiveStatementBase<String, BitsSpecification> implements BitsTypeDefinition, TypeEffectiveStatement<BitsSpecification> {
 
     private static final QName QNAME = BaseTypes.BITS_QNAME;
     private static final String DESCRIPTION = "The bits built-in type represents a bit set. "
@@ -38,8 +39,9 @@ public class BitsSpecificationEffectiveStatementImpl extends
     private static final String UNITS = "";
     private final SchemaPath path;
     private final List<Bit> bits;
+    private BitsType bitsTypeInstance = null;
 
-    public BitsSpecificationEffectiveStatementImpl(final StmtContext<String, TypeStatement.BitsSpecification, EffectiveStatement<String, TypeStatement.BitsSpecification>> ctx) {
+    public BitsSpecificationEffectiveStatementImpl(final StmtContext<String, BitsSpecification, EffectiveStatement<String, BitsSpecification>> ctx) {
         super(ctx);
 
         List<Bit> bitsInit = new ArrayList<>();
@@ -150,10 +152,8 @@ public class BitsSpecificationEffectiveStatementImpl extends
         return builder.toString();
     }
 
-    private BitsType bitsTypeInstance = null;
     @Override
-    public TypeDefinition<?> buildType() {
-
+    public TypeDefinition<?> getTypeDefinition() {
         if(bitsTypeInstance != null) {
             return bitsTypeInstance;
         }
index 307551ebd3ded12901fb016f7f0db0b9ce8ffad9..d18c0b3ddef1df7f5109a24266e26b82603693b8 100644 (file)
@@ -20,7 +20,8 @@ import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.Decimal64Specification;
 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 import org.opendaylight.yangtools.yang.model.util.Decimal64;
@@ -33,8 +34,8 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSt
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.FractionDigitsEffectiveStatementImpl;
 
 public class Decimal64SpecificationEffectiveStatementImpl extends
-        EffectiveStatementBase<String, TypeStatement.Decimal64Specification>
-        implements DecimalTypeDefinition, TypeDefinitionEffectiveBuilder {
+        EffectiveStatementBase<String, Decimal64Specification>
+        implements DecimalTypeDefinition, TypeEffectiveStatement<Decimal64Specification> {
 
     private static final String UNITS = "";
     private static final BigDecimal DEFAULT_VALUE = null;
@@ -69,7 +70,7 @@ public class Decimal64SpecificationEffectiveStatementImpl extends
     private Decimal64 decimal64Instance = null;
 
     public Decimal64SpecificationEffectiveStatementImpl(
-            final StmtContext<String, TypeStatement.Decimal64Specification, EffectiveStatement<String, TypeStatement.Decimal64Specification>> ctx) {
+            final StmtContext<String, Decimal64Specification, EffectiveStatement<String, Decimal64Specification>> ctx) {
         super(ctx);
 
         for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
@@ -210,7 +211,7 @@ public class Decimal64SpecificationEffectiveStatementImpl extends
     }
 
     @Override
-    public TypeDefinition<?> buildType() {
+    public TypeDefinition<?> getTypeDefinition() {
 
         if (decimal64Instance == null) {
             decimal64Instance = Decimal64.create(path, fractionDigits);
index a9dfd93e16cf9b5788c60297ada49a1157507aff..326d5a44b693a8442faf5e9d2bcc900ddb977799 100644 (file)
@@ -20,7 +20,8 @@ import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.EnumSpecification;
 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.EnumerationType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -28,7 +29,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
 
 public class EnumSpecificationEffectiveStatementImpl extends
-        EffectiveStatementBase<String, TypeStatement.EnumSpecification> implements EnumTypeDefinition, TypeDefinitionEffectiveBuilder {
+        EffectiveStatementBase<String, EnumSpecification> implements EnumTypeDefinition, TypeEffectiveStatement<EnumSpecification> {
 
     private static final QName QNAME = QName.create(YangConstants.RFC6020_YANG_MODULE, "enumeration");
 
@@ -41,7 +42,7 @@ public class EnumSpecificationEffectiveStatementImpl extends
     private final List<EnumPair> enums;
     private EnumerationType enumerationTypeInstance = null;
 
-    public EnumSpecificationEffectiveStatementImpl(final StmtContext<String, TypeStatement.EnumSpecification, EffectiveStatement<String, TypeStatement.EnumSpecification>> ctx) {
+    public EnumSpecificationEffectiveStatementImpl(final StmtContext<String, EnumSpecification, EffectiveStatement<String, EnumSpecification>> ctx) {
         super(ctx);
 
         List<EnumPair> enumsInit = new ArrayList<>();
@@ -167,7 +168,7 @@ public class EnumSpecificationEffectiveStatementImpl extends
     }
 
     @Override
-    public TypeDefinition<?> buildType() {
+    public TypeDefinition<?> getTypeDefinition() {
 
         if (enumerationTypeInstance !=null) {
             return enumerationTypeInstance;
index 240c13cb19ee78d4b7a91793ccd9b65fb347d777..69ad633f07cf1504c7b35feed1017f668c974bac 100644 (file)
@@ -7,14 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type;
 
-import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
-
-import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.BaseEffectiveStatementImpl;
-import org.opendaylight.yangtools.yang.model.util.IdentityrefType;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
 import java.util.Collections;
 import java.util.List;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -22,16 +14,24 @@ import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.IdentityRefSpecification;
 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
+import org.opendaylight.yangtools.yang.model.util.IdentityrefType;
+import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.BaseEffectiveStatementImpl;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
 
 public class IdentityRefSpecificationEffectiveStatementImpl extends
-        EffectiveStatementBase<String, TypeStatement.IdentityRefSpecification> implements IdentityrefTypeDefinition,
-        TypeDefinitionEffectiveBuilder {
+        EffectiveStatementBase<String, IdentityRefSpecification> implements IdentityrefTypeDefinition,
+        TypeEffectiveStatement<IdentityRefSpecification> {
 
     private static final QName QNAME = QName.create(YangConstants.RFC6020_YANG_MODULE, TypeUtils.IDENTITY_REF);
 
@@ -46,7 +46,7 @@ public class IdentityRefSpecificationEffectiveStatementImpl extends
     private IdentityrefType identityRefTypeInstance = null;
 
     public IdentityRefSpecificationEffectiveStatementImpl(
-            StmtContext<String, TypeStatement.IdentityRefSpecification, EffectiveStatement<String, TypeStatement.IdentityRefSpecification>> ctx) {
+            final StmtContext<String, IdentityRefSpecification, EffectiveStatement<String, IdentityRefSpecification>> ctx) {
         super(ctx);
 
         path = Utils.getSchemaPath(ctx.getParentContext()).createChild(QNAME);
@@ -117,7 +117,7 @@ public class IdentityRefSpecificationEffectiveStatementImpl extends
     }
 
     @Override
-    public TypeDefinition<?> buildType() {
+    public TypeDefinition<?> getTypeDefinition() {
 
         if (identityRefTypeInstance != null) {
             return identityRefTypeInstance;
index faa53652cf6b4c0abe8a7e4c6817cfc347e4318e..61d9437e04fc54950fc2efb27b2d6816ffbe8a87 100644 (file)
@@ -7,11 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type;
 
-import org.opendaylight.yangtools.yang.model.util.InstanceIdentifierType;
-
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
 import java.util.Collections;
 import java.util.List;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -19,14 +14,20 @@ import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.InstanceIdentifierSpecification;
 import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
+import org.opendaylight.yangtools.yang.model.util.InstanceIdentifierType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RequireInstanceEffectiveStatementImpl;
 
 public class InstanceIdentifierSpecificationEffectiveStatementImpl extends
-        EffectiveStatementBase<String, TypeStatement.InstanceIdentifierSpecification> implements TypeDefinitionEffectiveBuilder, InstanceIdentifierTypeDefinition {
+        EffectiveStatementBase<String, InstanceIdentifierSpecification> implements InstanceIdentifierTypeDefinition,
+        TypeEffectiveStatement<InstanceIdentifierSpecification> {
 
     private static final QName QNAME = QName.create(YangConstants.RFC6020_YANG_MODULE, "instance-identifier");
     private static final SchemaPath PATH = SchemaPath.create(true, QNAME);
@@ -38,7 +39,7 @@ public class InstanceIdentifierSpecificationEffectiveStatementImpl extends
     private final Boolean requireInstance;
 
     public InstanceIdentifierSpecificationEffectiveStatementImpl(
-            StmtContext<String, TypeStatement.InstanceIdentifierSpecification, EffectiveStatement<String, TypeStatement.InstanceIdentifierSpecification>> ctx) {
+            final StmtContext<String, InstanceIdentifierSpecification, EffectiveStatement<String, InstanceIdentifierSpecification>> ctx) {
         super(ctx);
 
         RequireInstanceEffectiveStatementImpl requireInstanceStmtCtx = firstEffective(RequireInstanceEffectiveStatementImpl.class);
@@ -124,7 +125,7 @@ public class InstanceIdentifierSpecificationEffectiveStatementImpl extends
     }
 
     @Override
-    public TypeDefinition<?> buildType() {
+    public TypeDefinition<?> getTypeDefinition() {
         return InstanceIdentifierType.create(requireInstance);
     }
 }
index 7d443282ddddca866c37bb08f39c488c5eac33ea..02f891c3cd26963734552b819425242996d1c144 100644 (file)
@@ -15,9 +15,11 @@ import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.LeafrefSpecification;
 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.Leafref;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -25,8 +27,8 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PathEffectiveStatementImpl;
 
-public class LeafrefSpecificationEffectiveStatementImpl extends
-        EffectiveStatementBase<String, TypeStatement.LeafrefSpecification> implements LeafrefTypeDefinition, TypeDefinitionEffectiveBuilder {
+public class LeafrefSpecificationEffectiveStatementImpl extends EffectiveStatementBase<String, LeafrefSpecification>
+        implements LeafrefTypeDefinition, TypeEffectiveStatement<LeafrefSpecification> {
 
     public static final String LOCAL_NAME = "leafref";
     private static final QName QNAME = QName.create(YangConstants.RFC6020_YANG_MODULE, LOCAL_NAME);
@@ -38,7 +40,7 @@ public class LeafrefSpecificationEffectiveStatementImpl extends
     private RevisionAwareXPath xpath;
     private Leafref leafrefInstance = null;
 
-    public LeafrefSpecificationEffectiveStatementImpl(final StmtContext<String, TypeStatement.LeafrefSpecification, EffectiveStatement<String, TypeStatement.LeafrefSpecification>> ctx) {
+    public LeafrefSpecificationEffectiveStatementImpl(final StmtContext<String, LeafrefSpecification, EffectiveStatement<String, LeafrefSpecification>> ctx) {
         super(ctx);
 
         path = Utils.getSchemaPath(ctx.getParentContext()).createChild(QNAME);
@@ -135,8 +137,7 @@ public class LeafrefSpecificationEffectiveStatementImpl extends
     }
 
     @Override
-    public Leafref buildType() {
-
+    public TypeDefinition<?> getTypeDefinition() {
         if (leafrefInstance != null) {
             return leafrefInstance;
         }
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/TypeDefinitionEffectiveBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/TypeDefinitionEffectiveBuilder.java
deleted file mode 100644 (file)
index 943d672..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2015 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.parser.stmt.rfc6020.effective.type;
-
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-
-/**
- *  Effective statements of TypeDef, ExtendedType, Decimal64, Enumeration, Leafref, Union, IndetityRef, Bits
- *  should implement this interface and method buildType() should create particular object from
- *  yang.model.util (e.g. Decimal64)
- */
-public interface TypeDefinitionEffectiveBuilder {
-
-    TypeDefinition<?> buildType();
-
-}
index 51e4f5d3da1b2ba807411327a2a4f4bccb5134fa..41e01892cb797e80c166805197d568fd3cc8b0e2 100644 (file)
@@ -18,7 +18,8 @@ import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.UnionSpecification;
 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.UnionType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -26,8 +27,8 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
 
 public class UnionSpecificationEffectiveStatementImpl extends
-        EffectiveStatementBase<String, TypeStatement.UnionSpecification> implements UnionTypeDefinition,
-        TypeDefinitionEffectiveBuilder {
+        EffectiveStatementBase<String, UnionSpecification> implements UnionTypeDefinition,
+        TypeEffectiveStatement<UnionSpecification> {
 
     private static final QName QNAME = QName.create(YangConstants.RFC6020_YANG_MODULE, "union");
     private static final SchemaPath PATH = SchemaPath.create(true, QNAME);
@@ -38,7 +39,7 @@ public class UnionSpecificationEffectiveStatementImpl extends
     private UnionType unionTypeInstance = null;
 
     public UnionSpecificationEffectiveStatementImpl(
-            StmtContext<String, TypeStatement.UnionSpecification, EffectiveStatement<String, TypeStatement.UnionSpecification>> ctx) {
+            final StmtContext<String, UnionSpecification, EffectiveStatement<String, UnionSpecification>> ctx) {
         super(ctx);
 
         List<TypeDefinition<?>> typesInit = new ArrayList<>();
@@ -140,7 +141,8 @@ public class UnionSpecificationEffectiveStatementImpl extends
         return builder.toString();
     }
 
-    public TypeDefinition<?> buildType() {
+    @Override
+    public TypeDefinition<?> getTypeDefinition() {
 
         if (unionTypeInstance != null) {
             return unionTypeInstance;