BUG-8043: introduce LengthRestrictedTypeDefinition 78/62278/6
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 24 Aug 2017 14:32:05 +0000 (16:32 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 4 Sep 2017 09:16:13 +0000 (11:16 +0200)
{Binary,String}TypeDefinition share the same method and semantics,
capture them in LengthRestrictedTypeDefinition.

Change-Id: Id913e79e2d2c9a2090721c1ed6e5bee8f309051c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
14 files changed:
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/BinaryTypeDefinition.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/LengthRestrictedTypeDefinition.java [new file with mode: 0644]
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/StringTypeDefinition.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedBaseType.java [new file with mode: 0644]
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedDerivedType.java [new file with mode: 0644]
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBinaryType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedStringType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LengthRestrictedTypeBuilder.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedTypes.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/StringTypeBuilder.java
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/type/TypeTest.java

index 9196a286d8ed750ac28242e3cf5e31de5c33ec99..f557b9e61370c39622f90382ed846aa779690e8b 100644 (file)
@@ -7,9 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.model.api.type;
 
-import java.util.List;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-
 /**
  * The binary built-in type represents any binary data, i.e., a sequence of
  * octets.
@@ -25,14 +22,6 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
  * href="https://tools.ietf.org/html/rfc6020#section-9.8">[RFC-6020] The binary
  * Built-In Type</a>
  */
-public interface BinaryTypeDefinition extends TypeDefinition<BinaryTypeDefinition> {
-    /**
-     * Returns List of number of octets that binary value contains. These are the effective constraints, e.g. they
-     * include any range constraints imposed by base types.
-     *
-     * @return List of number of octets that binary value contains.
-     *
-     * @see LengthConstraint
-     */
-    List<LengthConstraint> getLengthConstraints();
+public interface BinaryTypeDefinition extends LengthRestrictedTypeDefinition<BinaryTypeDefinition> {
+
 }
diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/LengthRestrictedTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/LengthRestrictedTypeDefinition.java
new file mode 100644 (file)
index 0000000..4e98e98
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * 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.model.api.type;
+
+import java.util.List;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+
+/**
+ * Interface for {@link TypeDefinition}s which can have their values restricted to a set of allowed lengths.
+ *
+ * @param <T> Concrete {@link TypeDefinition} subinterface
+ */
+public interface LengthRestrictedTypeDefinition<T extends TypeDefinition<T>> extends TypeDefinition<T> {
+    /**
+     * Returns length constraints. These are the effective constraints, e.g. they include any length constraints
+     * implied by base types.
+     *
+     * @return list of length constraint which are specified in the <code>length</code> substatement
+     *         of the <code>type</code> statement.
+     */
+    List<LengthConstraint> getLengthConstraints();
+}
index c5784be50500146fbd9f56c1aad2da20145d5de9..193baa3cbf01a46da7009ae622f105c82f149e64 100644 (file)
@@ -8,24 +8,11 @@
 package org.opendaylight.yangtools.yang.model.api.type;
 
 import java.util.List;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 
 /**
- * Contains method for getting data from the <code>string</code> YANG built-in
- * type.
+ * Contains method for getting data from the <code>string</code> YANG built-in type.
  */
-public interface StringTypeDefinition extends TypeDefinition<StringTypeDefinition> {
-
-    /**
-     * Returns length constraint specified in the string. These are the effective constraints, e.g. they include
-     * any length constraints implied by base types.
-     *
-     * @return list of length constraint which are specified in the
-     *         <code>length</code> substatement of the <code>type</code>
-     *         statement
-     */
-    List<LengthConstraint> getLengthConstraints();
-
+public interface StringTypeDefinition extends LengthRestrictedTypeDefinition<StringTypeDefinition> {
     /**
      * Returns patterns specified in the string.
      *
diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedBaseType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedBaseType.java
new file mode 100644 (file)
index 0000000..75bf332
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * 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.model.util.type;
+
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.LengthRestrictedTypeDefinition;
+
+abstract class AbstractLengthRestrictedBaseType<T extends LengthRestrictedTypeDefinition<T>> extends AbstractBaseType<T>
+        implements LengthRestrictedTypeDefinition<T> {
+
+    AbstractLengthRestrictedBaseType(final QName qname) {
+        super(qname);
+    }
+
+    @Override
+    public final List<LengthConstraint> getLengthConstraints() {
+        return ImmutableList.of();
+    }
+}
diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedDerivedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedDerivedType.java
new file mode 100644 (file)
index 0000000..91b12e9
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * 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.model.util.type;
+
+import java.util.Collection;
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.Status;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.LengthRestrictedTypeDefinition;
+
+abstract class AbstractLengthRestrictedDerivedType<T extends LengthRestrictedTypeDefinition<T>>
+        extends AbstractDerivedType<T> implements LengthRestrictedTypeDefinition<T> {
+
+    AbstractLengthRestrictedDerivedType(final T baseType, final SchemaPath path,
+            final Object defaultValue, final String description, final String reference, final Status status,
+            final String units, final Collection<UnknownSchemaNode> unknownSchemaNodes) {
+        super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes);
+    }
+
+    @Nonnull
+    @Override
+    public final List<LengthConstraint> getLengthConstraints() {
+        return baseType().getLengthConstraints();
+    }
+}
index bdc730f5e2011fd6ea2155eb5ea4581c1399a211..2776ba3d868ca1a5e26da44bd2a7617428cfbdea 100644 (file)
@@ -11,11 +11,12 @@ import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import java.util.List;
 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.type.LengthConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.LengthRestrictedTypeDefinition;
 
-abstract class AbstractLengthRestrictedType<T extends TypeDefinition<T>> extends AbstractRestrictedType<T> {
+abstract class AbstractLengthRestrictedType<T extends LengthRestrictedTypeDefinition<T>>
+        extends AbstractRestrictedType<T> implements LengthRestrictedTypeDefinition<T> {
     private final List<LengthConstraint> lengthConstraints;
 
     AbstractLengthRestrictedType(final T baseType, final SchemaPath path,
@@ -24,6 +25,7 @@ abstract class AbstractLengthRestrictedType<T extends TypeDefinition<T>> extends
         this.lengthConstraints = ImmutableList.copyOf(lengthConstraints);
     }
 
+    @Override
     public final List<LengthConstraint> getLengthConstraints() {
         return lengthConstraints;
     }
index 97db47ce3e5aa840331885a8114deff48c9e8dbf..11afab87aefef7b2603b686934a55f89976f69af 100644 (file)
@@ -7,24 +7,17 @@
  */
 package org.opendaylight.yangtools.yang.model.util.type;
 
-import com.google.common.collect.ImmutableList;
-import java.util.List;
 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 import org.opendaylight.yangtools.yang.model.util.BaseTypes;
 
-final class BaseBinaryType extends AbstractBaseType<BinaryTypeDefinition> implements BinaryTypeDefinition {
+final class BaseBinaryType extends AbstractLengthRestrictedBaseType<BinaryTypeDefinition>
+        implements BinaryTypeDefinition {
     static final BaseBinaryType INSTANCE = new BaseBinaryType();
 
     private BaseBinaryType() {
         super(BaseTypes.BINARY_QNAME);
     }
 
-    @Override
-    public List<LengthConstraint> getLengthConstraints() {
-        return ImmutableList.of();
-    }
-
     @Override
     public int hashCode() {
         return TypeDefinitions.hashCode(this);
index ee297d6eeb96c3723532611eb126431da0ef8f2b..05bf6d291f541021d9300140d0574227c2022a3e 100644 (file)
@@ -9,23 +9,18 @@ package org.opendaylight.yangtools.yang.model.util.type;
 
 import com.google.common.collect.ImmutableList;
 import java.util.List;
-import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.BaseTypes;
 
-final class BaseStringType extends AbstractBaseType<StringTypeDefinition> implements StringTypeDefinition {
+final class BaseStringType extends AbstractLengthRestrictedBaseType<StringTypeDefinition>
+        implements StringTypeDefinition {
     static final BaseStringType INSTANCE = new BaseStringType();
 
     private BaseStringType() {
         super(BaseTypes.STRING_QNAME);
     }
 
-    @Override
-    public List<LengthConstraint> getLengthConstraints() {
-        return ImmutableList.of();
-    }
-
     @Override
     public List<PatternConstraint> getPatternConstraints() {
         return ImmutableList.of();
index 26041882017f819297b65df222c51f2f487d0765..75f6f84234971e14b4227623bbb38fb50ca2ada0 100644 (file)
@@ -8,25 +8,19 @@
 package org.opendaylight.yangtools.yang.model.util.type;
 
 import java.util.Collection;
-import java.util.List;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 
-final class DerivedBinaryType extends AbstractDerivedType<BinaryTypeDefinition> implements BinaryTypeDefinition {
+final class DerivedBinaryType extends AbstractLengthRestrictedDerivedType<BinaryTypeDefinition>
+        implements BinaryTypeDefinition {
     DerivedBinaryType(final BinaryTypeDefinition baseType, final SchemaPath path, final Object defaultValue,
             final String description, final String reference, final Status status, final String units,
             final Collection<UnknownSchemaNode> unknownSchemNodes) {
         super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes);
     }
 
-    @Override
-    public List<LengthConstraint> getLengthConstraints() {
-        return baseType().getLengthConstraints();
-    }
-
     @Override
     public int hashCode() {
         return TypeDefinitions.hashCode(this);
index 13171011f5e6dbee281e2eff5cc84223e188d5d5..8e7a18eda79033e323cc45cea2e34be76e41a0e5 100644 (file)
@@ -12,11 +12,11 @@ import java.util.List;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
 
-final class DerivedStringType extends AbstractDerivedType<StringTypeDefinition> implements StringTypeDefinition {
+final class DerivedStringType extends AbstractLengthRestrictedDerivedType<StringTypeDefinition>
+        implements StringTypeDefinition {
     DerivedStringType(final StringTypeDefinition baseType, final SchemaPath path, final Object defaultValue,
             final String description, final String reference, final Status status, final String units,
             final Collection<UnknownSchemaNode> unknownSchemaNodes) {
@@ -28,11 +28,6 @@ final class DerivedStringType extends AbstractDerivedType<StringTypeDefinition>
         return baseType().getPatternConstraints();
     }
 
-    @Override
-    public List<LengthConstraint> getLengthConstraints() {
-        return baseType().getLengthConstraints();
-    }
-
     @Override
     public int hashCode() {
         return TypeDefinitions.hashCode(this);
index 35d1336a443097788d6c0dde5870033cabaaa3a2..146a3125de753656694f6e3a242457e4f373bea7 100644 (file)
@@ -16,12 +16,12 @@ import java.util.List;
 import java.util.function.Function;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.LengthRestrictedTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.BaseConstraints;
 import org.opendaylight.yangtools.yang.model.util.UnresolvedNumber;
 
-public abstract class LengthRestrictedTypeBuilder<T extends TypeDefinition<T>>
+public abstract class LengthRestrictedTypeBuilder<T extends LengthRestrictedTypeDefinition<T>>
         extends AbstractRestrictedTypeBuilder<T> {
     private List<LengthConstraint> lengthAlternatives;
 
@@ -152,15 +152,13 @@ public abstract class LengthRestrictedTypeBuilder<T extends TypeDefinition<T>>
 
     abstract T buildType(List<LengthConstraint> lengthConstraints);
 
-    abstract List<LengthConstraint> getLengthConstraints(T type);
-
     abstract List<LengthConstraint> typeLengthConstraints();
 
     private List<LengthConstraint> findLenghts() {
         List<LengthConstraint> ret = ImmutableList.of();
         T wlk = getBaseType();
         while (wlk != null && ret.isEmpty()) {
-            ret = getLengthConstraints(wlk);
+            ret = wlk.getLengthConstraints();
             wlk = wlk.getBaseType();
         }
 
index 521036e6122bb94da1b9e38d9554147def670ab3..c5e6a2fa7e73dd94d16b40f302eff56ba0400766 100644 (file)
@@ -83,11 +83,6 @@ public final class RestrictedTypes {
                  */
                 return JavaLengthConstraints.INTEGER_SIZE_CONSTRAINTS;
             }
-
-            @Override
-            List<LengthConstraint> getLengthConstraints(final BinaryTypeDefinition type) {
-                return type.getLengthConstraints();
-            }
         };
     }
 
index 6d34b4bd974e796379253903938a731172734203..6f7391ec9a02223262e678ec31faec865347bf7a 100644 (file)
@@ -28,11 +28,6 @@ public final class StringTypeBuilder extends LengthRestrictedTypeBuilder<StringT
         return this;
     }
 
-    @Override
-    List<LengthConstraint> getLengthConstraints(final StringTypeDefinition type) {
-        return type.getLengthConstraints();
-    }
-
     @Override
     List<LengthConstraint> typeLengthConstraints() {
         /**
index bc742e5f50552951a27f3bbd89e07d296c8cd08e..2a4fa24a72c1ca6bdf76458cfdf7f056c8a203ce 100644 (file)
@@ -71,8 +71,6 @@ public class TypeTest {
         final LengthRestrictedTypeBuilder<BinaryTypeDefinition> lengthRestrictedTypeBuilder = RestrictedTypes
                 .newBinaryBuilder(baseBinaryType1, SCHEMA_PATH);
         final BaseBinaryType baseBinaryType = (BaseBinaryType)lengthRestrictedTypeBuilder.build();
-        assertEquals(lengthRestrictedTypeBuilder.getLengthConstraints(baseBinaryType1),
-                baseBinaryType.getLengthConstraints());
         assertEquals(baseBinaryType, baseBinaryType1);
         concreteBuilderTest(baseBinaryType1, derivedBinaryType1);
     }