*/
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.
*
*/
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>
* <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> {
+
}
--- /dev/null
+/*
+ * 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();
+}
*/
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> {
+
}
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);
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;
--- /dev/null
+/*
+ * 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();
+ }
+}
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,
this.rangeConstraints = ImmutableList.copyOf(rangeConstraints);
}
+ @Override
@Nonnull
public final List<RangeConstraint> getRangeConstraints() {
return rangeConstraints;
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);
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 {
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) {
return baseType().getFractionDigits();
}
- @Nonnull
- @Override
- public List<RangeConstraint> getRangeConstraints() {
- return baseType().getRangeConstraints();
- }
-
@Override
public int hashCode() {
return TypeDefinitions.hashCode(this);
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);
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,
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);
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) {
--- /dev/null
+/*
+ * 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);
+}
*/
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;
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;
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);
}
};
}
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);
}
};
}
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);
}
};
}
*/
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