BUG-8043: introduce RangeRestrictedTypeDefinition 79/62279/9
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 24 Aug 2017 14:41:54 +0000 (16:41 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 4 Sep 2017 09:16:13 +0000 (11:16 +0200)
{Decimal,Integer,UnsignedInteger}TypeDefinition share the same method
and semantics, capture them in RangeRestrictedTypeDefinition.

Change-Id: I5fa6dbf5efdcc3797abc628a98e034602b8285ad
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
17 files changed:
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/IntegerTypeDefinition.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/RangeRestrictedTypeDefinition.java [new file with mode: 0644]
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/UnsignedIntegerTypeDefinition.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedBaseType.java [moved from yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangedBaseType.java with 74% similarity]
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedDerivedType.java [new file with mode: 0644]
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIntegerType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilder.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilderWithBase.java [new file with mode: 0644]
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/RestrictedUnsignedType.java

index d0566d48cf240a5fbe3ebdbd0223c73711653f6f..a00a53257f23d2a5ec52f3ed40e9288fab6df228 100644 (file)
@@ -7,24 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.model.api.type;
 
-import java.util.List;
 import javax.annotation.Nonnull;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 
 /**
- * Contains methods for getting data from the YANG <code>type</code>
- * substatement for <code>decimal64</code> built-in type.
+ * Contains methods for getting data from the YANG <code>type</code> substatement for <code>decimal64</code> built-in
+ * type.
  */
-public interface DecimalTypeDefinition extends TypeDefinition<DecimalTypeDefinition> {
-    /**
-     * Returns range constraints for instance of this type.
-     *
-     * @return list of range constraints which are specified as the argument of
-     *         the <code>range</code> which is substatement of the
-     *         <code>type</code> statement
-     */
-    @Nonnull List<RangeConstraint> getRangeConstraints();
-
+public interface DecimalTypeDefinition extends RangeRestrictedTypeDefinition<DecimalTypeDefinition> {
     /**
      * Returns integer between 1 and 18 inclusively.
      *
index cac9b6c7f9d32dfe352577bbe349451fc7c7f54d..2dad0c099706c9452edd6873069fa1af2f4e6ffb 100644 (file)
@@ -7,13 +7,9 @@
  */
 package org.opendaylight.yangtools.yang.model.api.type;
 
-import java.util.List;
-import javax.annotation.Nonnull;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-
 /**
- * IntegerTypeDefinition is interface which represents SIGNED Integer values defined in Yang language.<br>
- * The integer built-in types in Yang are int8, int16, int32, int64. They represent signed integers of different
+ * IntegerTypeDefinition is interface which represents SIGNED Integer values defined in YANG language.<br>
+ * The integer built-in types in YANG are int8, int16, int32, int64. They represent signed integers of different
  * sizes:<br>
  * <ul>
  * <li>int8 represents integer values between -128 and 127, inclusively.</li>
@@ -25,12 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
  * <p>
  * The Integer Built-In Types are defined in <a href="https://tools.ietf.org/html/rfc6020#section-9.2"> [RFC-6020]</a>
  */
-public interface IntegerTypeDefinition extends TypeDefinition<IntegerTypeDefinition> {
-    /**
-     * Returns Range Constraints defined for given Integer Type. These are the effective constraints, e.g. they include
-     * any range constraints imposed by base types.
-     *
-     * @return Range Constraints defined for given Integer Type.
-     */
-    @Nonnull List<RangeConstraint> getRangeConstraints();
+public interface IntegerTypeDefinition extends RangeRestrictedTypeDefinition<IntegerTypeDefinition> {
+
 }
diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/RangeRestrictedTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/RangeRestrictedTypeDefinition.java
new file mode 100644 (file)
index 0000000..fe433c8
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * 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 javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+
+/**
+ * Interface for {@link TypeDefinition}s which can have their values restricted to a set of allowed values.
+ *
+ * @param <T> Concrete {@link TypeDefinition} subinterface
+ */
+public interface RangeRestrictedTypeDefinition<T extends TypeDefinition<T>> extends TypeDefinition<T> {
+    /**
+     * Returns range constraints for instance of this type. These are the effective constraints, e.g. they include
+     * any range constraints imposed by base types.
+     *
+     * @return list of range constraints which are specified as the argument of the <code>range</code> which is
+     *         a substatement of the <code>type</code> statement
+     */
+    @Nonnull List<RangeConstraint> getRangeConstraints();
+}
index 7b81e45e518d3bbfd7bdef4527bc90314748f4de..091101d0d3fc8da3748ffa7cabb1ec2e243981c9 100644 (file)
@@ -7,22 +7,9 @@
  */
 package org.opendaylight.yangtools.yang.model.api.type;
 
-import java.util.List;
-import javax.annotation.Nonnull;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-
 /**
  * Contains the method for getting detail data about unsigned integer.
- * Specifically it is the method for getting the range value.
  */
-public interface UnsignedIntegerTypeDefinition extends TypeDefinition<UnsignedIntegerTypeDefinition> {
-    /**
-     * Returns range data of the instance of the type
-     * <code>UnsignedIntegerTypeDefinition</code>. These are the effective constraints, e.g. they include
-     * any range constraints imposed by base types.
-     *
-     * @return list of <code>RangeConstraint</code> which represents the YANG
-     *         <code>range</code> substatement arguments.
-     */
-    @Nonnull List<RangeConstraint> getRangeConstraints();
+public interface UnsignedIntegerTypeDefinition extends RangeRestrictedTypeDefinition<UnsignedIntegerTypeDefinition> {
+
 }
index 4d0db4a29f7f1abaab6f7227180508f64ff3a3a9..78435e7be44e1562de087b20d8c27a57ceffa4b3 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.model.util.type;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition;
 
-abstract class AbstractIntegerBaseType extends AbstractRangedBaseType<IntegerTypeDefinition>
+abstract class AbstractIntegerBaseType extends AbstractRangeRestrictedBaseType<IntegerTypeDefinition>
         implements IntegerTypeDefinition {
     AbstractIntegerBaseType(final QName qname, final Number minValue, final Number maxValue) {
         super(qname, minValue, maxValue);
@@ -13,26 +13,28 @@ import java.util.List;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.QName;
 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.RangeConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.RangeRestrictedTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.BaseConstraints;
 
-abstract class AbstractRangedBaseType<T extends TypeDefinition<T>> extends AbstractBaseType<T> {
+abstract class AbstractRangeRestrictedBaseType<T extends RangeRestrictedTypeDefinition<T>> extends AbstractBaseType<T>
+        implements RangeRestrictedTypeDefinition<T> {
     private final List<RangeConstraint> rangeConstraints;
 
-    AbstractRangedBaseType(final QName qname, final Number minValue, final Number maxValue) {
+    AbstractRangeRestrictedBaseType(final QName qname, final Number minValue, final Number maxValue) {
         super(qname);
         this.rangeConstraints = ImmutableList.of(BaseConstraints.newRangeConstraint(
                 minValue, maxValue, Optional.absent(), Optional.absent()));
     }
 
-    AbstractRangedBaseType(final SchemaPath path, final List<UnknownSchemaNode> unknownSchemaNodes,
+    AbstractRangeRestrictedBaseType(final SchemaPath path, final List<UnknownSchemaNode> unknownSchemaNodes,
         final List<RangeConstraint> rangeConstraints) {
         super(path, unknownSchemaNodes);
         this.rangeConstraints = ImmutableList.copyOf(rangeConstraints);
     }
 
+    @Override
     @Nonnull
     public final List<RangeConstraint> getRangeConstraints() {
         return rangeConstraints;
diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedDerivedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedDerivedType.java
new file mode 100644 (file)
index 0000000..bbbdb61
--- /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.RangeConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.RangeRestrictedTypeDefinition;
+
+abstract class AbstractRangeRestrictedDerivedType<T extends RangeRestrictedTypeDefinition<T>>
+        extends AbstractDerivedType<T> implements RangeRestrictedTypeDefinition<T> {
+
+    AbstractRangeRestrictedDerivedType(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<RangeConstraint> getRangeConstraints() {
+        return baseType().getRangeConstraints();
+    }
+}
index ad85696004fa60c5f4bac488508b9d7bf4727aee..7538041b4fcb27c5b267437298e7036d72db4ae5 100644 (file)
@@ -12,11 +12,12 @@ 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.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.RangeRestrictedTypeDefinition;
 
-abstract class AbstractRangeRestrictedType<T extends TypeDefinition<T>> extends AbstractRestrictedType<T> {
+abstract class AbstractRangeRestrictedType<T extends RangeRestrictedTypeDefinition<T>>
+        extends AbstractRestrictedType<T> implements RangeRestrictedTypeDefinition<T> {
     private final List<RangeConstraint> rangeConstraints;
 
     AbstractRangeRestrictedType(final T baseType, final SchemaPath path,
@@ -25,6 +26,7 @@ abstract class AbstractRangeRestrictedType<T extends TypeDefinition<T>> extends
         this.rangeConstraints = ImmutableList.copyOf(rangeConstraints);
     }
 
+    @Override
     @Nonnull
     public final List<RangeConstraint> getRangeConstraints() {
         return rangeConstraints;
index acecd8af18bf846a5e7bc5590c3e4bddae9110a2..f8401279979557cce056db4ca887299c98d611dd 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.model.util.type;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition;
 
-abstract class AbstractUnsignedBaseType extends AbstractRangedBaseType<UnsignedIntegerTypeDefinition>
+abstract class AbstractUnsignedBaseType extends AbstractRangeRestrictedBaseType<UnsignedIntegerTypeDefinition>
         implements UnsignedIntegerTypeDefinition {
     AbstractUnsignedBaseType(final QName qname, final Number minValue, final Number maxValue) {
         super(qname, minValue, maxValue);
index 22d185f30c59d021385563b7468d6104baa5b7f9..0c8ff1174c9efbab8fff5f8d88d1164674aa134d 100644 (file)
@@ -19,7 +19,8 @@ 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.BaseConstraints;
 
-final class BaseDecimalType extends AbstractRangedBaseType<DecimalTypeDefinition> implements DecimalTypeDefinition {
+final class BaseDecimalType extends AbstractRangeRestrictedBaseType<DecimalTypeDefinition>
+        implements DecimalTypeDefinition {
     private static final List<List<RangeConstraint>> IMPLICIT_RANGE_STATEMENTS;
 
     static {
index 15acf3c8fe4483f30a3ef6094ec8c3d2a7c041e6..65a840da6213db1ffc4b4ab88920c9b81f24217a 100644 (file)
@@ -8,15 +8,14 @@
 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.DecimalTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 
-final class DerivedDecimalType extends AbstractDerivedType<DecimalTypeDefinition> implements DecimalTypeDefinition {
+final class DerivedDecimalType extends AbstractRangeRestrictedDerivedType<DecimalTypeDefinition>
+        implements DecimalTypeDefinition {
     DerivedDecimalType(final DecimalTypeDefinition baseType, final SchemaPath path, final Object defaultValue,
         final String description, final String reference, final Status status, final String units,
         final Collection<UnknownSchemaNode> unknownSchemNodes) {
@@ -29,12 +28,6 @@ final class DerivedDecimalType extends AbstractDerivedType<DecimalTypeDefinition
         return baseType().getFractionDigits();
     }
 
-    @Nonnull
-    @Override
-    public List<RangeConstraint> getRangeConstraints() {
-        return baseType().getRangeConstraints();
-    }
-
     @Override
     public int hashCode() {
         return TypeDefinitions.hashCode(this);
index ebe9b959a47d356a7d117b260ca705b834949e50..02c64c854e22b42268701714bbce2e5c5d804f2d 100644 (file)
@@ -8,27 +8,19 @@
 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.IntegerTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 
-final class DerivedIntegerType extends AbstractDerivedType<IntegerTypeDefinition> implements IntegerTypeDefinition {
+final class DerivedIntegerType extends AbstractRangeRestrictedDerivedType<IntegerTypeDefinition>
+        implements IntegerTypeDefinition {
     DerivedIntegerType(final IntegerTypeDefinition 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 List<RangeConstraint> getRangeConstraints() {
-        return baseType().getRangeConstraints();
-    }
-
     @Override
     public int hashCode() {
         return TypeDefinitions.hashCode(this);
index 4c11643bc7f55fba1843572cda612927940e52e9..67e6ee2ac07e906e903d9a5f7b17796de41259fd 100644 (file)
@@ -8,15 +8,12 @@
 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.RangeConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition;
 
-final class DerivedUnsignedType extends AbstractDerivedType<UnsignedIntegerTypeDefinition>
+final class DerivedUnsignedType extends AbstractRangeRestrictedDerivedType<UnsignedIntegerTypeDefinition>
         implements UnsignedIntegerTypeDefinition {
 
     DerivedUnsignedType(final UnsignedIntegerTypeDefinition baseType, final SchemaPath path,
@@ -25,12 +22,6 @@ final class DerivedUnsignedType extends AbstractDerivedType<UnsignedIntegerTypeD
         super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes);
     }
 
-    @Nonnull
-    @Override
-    public List<RangeConstraint> getRangeConstraints() {
-        return baseType().getRangeConstraints();
-    }
-
     @Override
     public int hashCode() {
         return TypeDefinitions.hashCode(this);
index 92c2117ffc3530c72b7fcfa759b926245e0b01ee..8a53e755217cf976e2af3cabea3acb1ce71502ef 100644 (file)
@@ -17,12 +17,13 @@ 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.RangeConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.RangeRestrictedTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.BaseConstraints;
 import org.opendaylight.yangtools.yang.model.util.UnresolvedNumber;
 
-public abstract class RangeRestrictedTypeBuilder<T extends TypeDefinition<T>> extends AbstractRestrictedTypeBuilder<T> {
+public abstract class RangeRestrictedTypeBuilder<T extends RangeRestrictedTypeDefinition<T>>
+        extends AbstractRestrictedTypeBuilder<T> {
     private List<RangeConstraint> rangeAlternatives;
 
     RangeRestrictedTypeBuilder(final T baseType, final SchemaPath path) {
diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilderWithBase.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilderWithBase.java
new file mode 100644 (file)
index 0000000..bf03f1b
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * 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 static java.util.Objects.requireNonNull;
+
+import java.util.List;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.RangeRestrictedTypeDefinition;
+
+abstract class RangeRestrictedTypeBuilderWithBase<T extends RangeRestrictedTypeDefinition<T>>
+        extends RangeRestrictedTypeBuilder<T> {
+
+    RangeRestrictedTypeBuilderWithBase(final T baseType, final SchemaPath path) {
+        super(requireNonNull(baseType), path);
+    }
+
+    @Override
+    final T buildType() {
+        return buildType(calculateRangeConstraints(getBaseType().getRangeConstraints()));
+    }
+
+    abstract T buildType(List<RangeConstraint> rangeConstraints);
+}
index c5e6a2fa7e73dd94d16b40f302eff56ba0400766..8de6f1bcf30b9d32d716149fb2a3c127dd953b0d 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.model.util.type;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
 import com.google.common.annotations.Beta;
 import java.util.List;
 import javax.annotation.Nonnull;
@@ -24,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefi
 import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
+import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition;
@@ -102,11 +101,10 @@ public final class RestrictedTypes {
 
     public static RangeRestrictedTypeBuilder<DecimalTypeDefinition> newDecima64Builder(
             final DecimalTypeDefinition baseType, final SchemaPath path) {
-        return new RangeRestrictedTypeBuilder<DecimalTypeDefinition>(checkNotNull(baseType), path) {
+        return new RangeRestrictedTypeBuilderWithBase<DecimalTypeDefinition>(baseType, path) {
             @Override
-            DecimalTypeDefinition buildType() {
-                return new RestrictedDecimalType(getBaseType(), getPath(), getUnknownSchemaNodes(),
-                    calculateRangeConstraints(getBaseType().getRangeConstraints()));
+            DecimalTypeDefinition buildType(final List<RangeConstraint> rangeConstraints) {
+                return new RestrictedDecimalType(getBaseType(), getPath(), getUnknownSchemaNodes(), rangeConstraints);
             }
         };
     }
@@ -157,11 +155,10 @@ public final class RestrictedTypes {
 
     public static RangeRestrictedTypeBuilder<IntegerTypeDefinition> newIntegerBuilder(
             final IntegerTypeDefinition baseType, final SchemaPath path) {
-        return new RangeRestrictedTypeBuilder<IntegerTypeDefinition>(checkNotNull(baseType), path) {
+        return new RangeRestrictedTypeBuilderWithBase<IntegerTypeDefinition>(baseType, path) {
             @Override
-            IntegerTypeDefinition buildType() {
-                return new RestrictedIntegerType(getBaseType(), getPath(), getUnknownSchemaNodes(),
-                    calculateRangeConstraints(getBaseType().getRangeConstraints()));
+            IntegerTypeDefinition buildType(final List<RangeConstraint> rangeConstraints) {
+                return new RestrictedIntegerType(getBaseType(), getPath(), getUnknownSchemaNodes(), rangeConstraints);
             }
         };
     }
@@ -182,11 +179,10 @@ public final class RestrictedTypes {
 
     public static RangeRestrictedTypeBuilder<UnsignedIntegerTypeDefinition> newUnsignedBuilder(
             final UnsignedIntegerTypeDefinition baseType, final SchemaPath path) {
-        return new RangeRestrictedTypeBuilder<UnsignedIntegerTypeDefinition>(checkNotNull(baseType), path) {
+        return new RangeRestrictedTypeBuilderWithBase<UnsignedIntegerTypeDefinition>(baseType, path) {
             @Override
-            UnsignedIntegerTypeDefinition buildType() {
-                return new RestrictedUnsignedType(getBaseType(), getPath(), getUnknownSchemaNodes(),
-                    calculateRangeConstraints(getBaseType().getRangeConstraints()));
+            UnsignedIntegerTypeDefinition buildType(final List<RangeConstraint> rangeConstraints) {
+                return new RestrictedUnsignedType(getBaseType(), getPath(), getUnknownSchemaNodes(), rangeConstraints);
             }
         };
     }
index f2151132c68c4598f1608b4773c5988233e03e74..940ba8ac793e3ecb8aeb042c8f87b064255ac68e 100644 (file)
@@ -7,29 +7,18 @@
  */
 package org.opendaylight.yangtools.yang.model.util.type;
 
-import com.google.common.collect.ImmutableList;
 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.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition;
 
-final class RestrictedUnsignedType extends AbstractRestrictedType<UnsignedIntegerTypeDefinition>
+final class RestrictedUnsignedType extends AbstractRangeRestrictedType<UnsignedIntegerTypeDefinition>
         implements UnsignedIntegerTypeDefinition {
-    private final List<RangeConstraint> rangeConstraints;
 
     RestrictedUnsignedType(final UnsignedIntegerTypeDefinition baseType, final SchemaPath path,
         final Collection<UnknownSchemaNode> unknownSchemaNodes, final Collection<RangeConstraint> rangeConstraints) {
-        super(baseType, path, unknownSchemaNodes);
-        this.rangeConstraints = ImmutableList.copyOf(rangeConstraints);
-    }
-
-    @Nonnull
-    @Override
-    public List<RangeConstraint> getRangeConstraints() {
-        return rangeConstraints;
+        super(baseType, path, unknownSchemaNodes, rangeConstraints);
     }
 
     @Override