From b20f192e4b9587a40d0bba72824c2283e961f7af Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 10 Oct 2015 23:18:07 +0200 Subject: [PATCH] Introduce model.util.type package This package introduces new utility classes for implementing a TypeDefinition hierarchy. The two entrypoints are RestrictedTypes and DerivedTypes. Change-Id: Icf0a91f09151c975a77461ee4488af1f5b300d27 Signed-off-by: Robert Varga --- .../model/util/type/AbstractBaseType.java | 88 +++++++ .../model/util/type/AbstractDerivedType.java | 95 ++++++++ .../util/type/AbstractIntegerBaseType.java | 17 ++ .../type/AbstractLengthRestrictedType.java | 30 +++ .../type/AbstractRangeRestrictedType.java | 30 +++ .../util/type/AbstractRangedBaseType.java | 44 ++++ .../util/type/AbstractRestrictedType.java | 76 ++++++ .../type/AbstractRestrictedTypeBuilder.java | 35 +++ .../util/type/AbstractUnsignedBaseType.java | 18 ++ .../yang/model/util/type/BaseBinaryType.java | 27 +++ .../yang/model/util/type/BaseBitsType.java | 29 +++ .../yang/model/util/type/BaseBooleanType.java | 19 ++ .../yang/model/util/type/BaseDecimalType.java | 68 ++++++ .../yang/model/util/type/BaseEmptyType.java | 19 ++ .../model/util/type/BaseEnumerationType.java | 29 +++ .../model/util/type/BaseIdentityrefType.java | 29 +++ .../util/type/BaseInstanceIdentifierType.java | 32 +++ .../yang/model/util/type/BaseInt16Type.java | 18 ++ .../yang/model/util/type/BaseInt32Type.java | 18 ++ .../yang/model/util/type/BaseInt64Type.java | 18 ++ .../yang/model/util/type/BaseInt8Type.java | 18 ++ .../yang/model/util/type/BaseLeafrefType.java | 29 +++ .../yang/model/util/type/BaseStringType.java | 33 +++ .../yang/model/util/type/BaseTypes.java | 126 ++++++++++ .../yang/model/util/type/BaseUint16Type.java | 18 ++ .../yang/model/util/type/BaseUint32Type.java | 18 ++ .../yang/model/util/type/BaseUint64Type.java | 19 ++ .../yang/model/util/type/BaseUint8Type.java | 18 ++ .../yang/model/util/type/BaseUnionType.java | 30 +++ .../yang/model/util/type/BitsTypeBuilder.java | 37 +++ .../model/util/type/DecimalTypeBuilder.java | 33 +++ .../model/util/type/DerivedBinaryType.java | 29 +++ .../yang/model/util/type/DerivedBitsType.java | 28 +++ .../model/util/type/DerivedBooleanType.java | 22 ++ .../model/util/type/DerivedDecimalType.java | 34 +++ .../model/util/type/DerivedEmptyType.java | 22 ++ .../util/type/DerivedEnumerationType.java | 28 +++ .../util/type/DerivedIdentityrefType.java | 28 +++ .../type/DerivedInstanceIdentifierType.java | 37 +++ .../model/util/type/DerivedIntegerType.java | 28 +++ .../model/util/type/DerivedLeafrefType.java | 28 +++ .../model/util/type/DerivedStringType.java | 34 +++ .../model/util/type/DerivedTypeBuilder.java | 66 ++++++ .../yang/model/util/type/DerivedTypes.java | 216 ++++++++++++++++++ .../model/util/type/DerivedUnionType.java | 29 +++ .../model/util/type/DerivedUnsignedType.java | 31 +++ .../util/type/EnumerationTypeBuilder.java | 37 +++ .../util/type/IdentityrefTypeBuilder.java | 32 +++ .../type/InstanceIdentifierTypeBuilder.java | 39 ++++ .../model/util/type/LeafrefTypeBuilder.java | 32 +++ .../type/LengthRestrictedTypeBuilder.java | 40 ++++ .../util/type/RangeRestrictedTypeBuilder.java | 40 ++++ .../model/util/type/RestrictedBinaryType.java | 22 ++ .../model/util/type/RestrictedBitsType.java | 26 +++ .../util/type/RestrictedBooleanType.java | 20 ++ .../util/type/RestrictedDecimalType.java | 27 +++ .../model/util/type/RestrictedEmptyType.java | 20 ++ .../util/type/RestrictedEnumerationType.java | 26 +++ .../util/type/RestrictedIdentityrefType.java | 26 +++ .../RestrictedInstanceIdentifierType.java | 36 +++ .../util/type/RestrictedIntegerType.java | 21 ++ .../util/type/RestrictedLeafrefType.java | 26 +++ .../model/util/type/RestrictedStringType.java | 33 +++ .../yang/model/util/type/RestrictedTypes.java | 172 ++++++++++++++ .../model/util/type/RestrictedUnionType.java | 27 +++ .../util/type/RestrictedUnsignedType.java | 32 +++ .../model/util/type/StringTypeBuilder.java | 44 ++++ .../yang/model/util/type/TypeBuilder.java | 43 ++++ .../model/util/type/UnionTypeBuilder.java | 32 +++ 69 files changed, 2631 insertions(+) create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractBaseType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractDerivedType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangedBaseType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBinaryType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBitsType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBooleanType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEmptyType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEnumerationType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseIdentityrefType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInstanceIdentifierType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt16Type.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt32Type.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt64Type.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt8Type.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseLeafrefType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseTypes.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint16Type.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint32Type.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint64Type.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint8Type.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUnionType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BitsTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DecimalTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBitsType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBooleanType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEmptyType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEnumerationType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIdentityrefType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedInstanceIdentifierType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIntegerType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedLeafrefType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedStringType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedTypes.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnionType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/EnumerationTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/IdentityrefTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/InstanceIdentifierTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LeafrefTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LengthRestrictedTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBinaryType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBitsType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBooleanType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedDecimalType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEmptyType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEnumerationType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIdentityrefType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedInstanceIdentifierType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIntegerType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedLeafrefType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedStringType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedTypes.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnionType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnsignedType.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/StringTypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/TypeBuilder.java create mode 100644 yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/UnionTypeBuilder.java diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractBaseType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractBaseType.java new file mode 100644 index 0000000000..5b5c287099 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractBaseType.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2015 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.base.MoreObjects; +import com.google.common.base.MoreObjects.ToStringHelper; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.concepts.Immutable; +import org.opendaylight.yangtools.yang.common.QName; +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; + +abstract class AbstractBaseType> implements Immutable, TypeDefinition { + private final List unknownSchemaNodes; + private final SchemaPath path; + + AbstractBaseType(final QName qname) { + this(SchemaPath.create(true, qname), ImmutableList.of()); + } + + AbstractBaseType(final SchemaPath path, final List unknownSchemaNodes) { + this.path = Preconditions.checkNotNull(path); + this.unknownSchemaNodes = Preconditions.checkNotNull(unknownSchemaNodes); + } + + @Override + public final T getBaseType() { + return null; + } + + @Override + public final String getUnits() { + return null; + } + + @Override + public final Object getDefaultValue() { + return null; + } + + @Override + public final QName getQName() { + return path.getLastComponent(); + } + + @Override + public final SchemaPath getPath() { + return path; + } + + @Override + public final String getDescription() { + return null; + } + + @Override + public final String getReference() { + return null; + } + + @Override + public final Status getStatus() { + return Status.CURRENT; + } + + @Override + public final List getUnknownSchemaNodes() { + return unknownSchemaNodes; + } + + @Override + public final String toString() { + return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString(); + } + + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return toStringHelper.add("path", path); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractDerivedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractDerivedType.java new file mode 100644 index 0000000000..601afb5bf3 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractDerivedType.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2015 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.base.MoreObjects; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import java.util.Collection; +import java.util.List; +import org.opendaylight.yangtools.concepts.Immutable; +import org.opendaylight.yangtools.yang.common.QName; +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; + +abstract class AbstractDerivedType> implements Immutable, TypeDefinition { + private final SchemaPath path; + private final T baseType; + private final Object defaultValue; + private final String description; + private final String reference; + private final Status status; + private final String units; + private final List unknownSchemNodes; + + AbstractDerivedType(final T baseType, final SchemaPath path, final Object defaultValue, final String description, + final String reference, final Status status, final String units, final Collection unknownSchemNodes) { + this.baseType = Preconditions.checkNotNull(baseType); + this.path = Preconditions.checkNotNull(path); + this.status = Preconditions.checkNotNull(status); + this.defaultValue = defaultValue; + this.description = description; + this.reference = reference; + this.units = units; + this.unknownSchemNodes = ImmutableList.copyOf(unknownSchemNodes); + } + + @Override + public final T getBaseType() { + return baseType; + } + + @Override + public final Object getDefaultValue() { + return defaultValue != null ? defaultValue : baseType.getDefaultValue(); + } + + @Override + public final QName getQName() { + return path.getLastComponent(); + } + + @Override + public final SchemaPath getPath() { + return path; + } + + @Override + public final List getUnknownSchemaNodes() { + return unknownSchemNodes; + } + + @Override + public final String getDescription() { + return description; + } + + @Override + public final String getReference() { + return reference; + } + + @Override + public final Status getStatus() { + return status; + } + + @Override + public final String getUnits() { + return units != null ? units : baseType.getUnits(); + } + + @Override + public final String toString() { + return MoreObjects.toStringHelper(this).omitNullValues().add("baseType", baseType).add("default", defaultValue) + .add("description", description).add("path", path).add("reference", reference).add("status", status) + .add("units", units).toString(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java new file mode 100644 index 0000000000..37c3821660 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractIntegerBaseType.java @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition; + +abstract class AbstractIntegerBaseType extends AbstractRangedBaseType implements IntegerTypeDefinition { + AbstractIntegerBaseType(final QName qname, final Number minValue, final Number maxValue) { + super(qname, minValue, maxValue); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedType.java new file mode 100644 index 0000000000..bdc730f5e2 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractLengthRestrictedType.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015 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.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; + +abstract class AbstractLengthRestrictedType> extends AbstractRestrictedType { + private final List lengthConstraints; + + AbstractLengthRestrictedType(final T baseType, final SchemaPath path, + final Collection unknownSchemaNodes, final Collection lengthConstraints) { + super(baseType, path, unknownSchemaNodes); + this.lengthConstraints = ImmutableList.copyOf(lengthConstraints); + } + + public final List getLengthConstraints() { + return lengthConstraints; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedType.java new file mode 100644 index 0000000000..cf1f4d0cc4 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangeRestrictedType.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015 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.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.RangeConstraint; + +abstract class AbstractRangeRestrictedType> extends AbstractRestrictedType { + private final List rangeConstraints; + + AbstractRangeRestrictedType(final T baseType, final SchemaPath path, + final Collection unknownSchemaNodes, final Collection rangeConstraints) { + super(baseType, path, unknownSchemaNodes); + this.rangeConstraints = ImmutableList.copyOf(rangeConstraints); + } + + public final List getRangeConstraints() { + return rangeConstraints; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangedBaseType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangedBaseType.java new file mode 100644 index 0000000000..37c708afb4 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRangedBaseType.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015 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.base.MoreObjects.ToStringHelper; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import java.util.List; +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.util.BaseConstraints; + +abstract class AbstractRangedBaseType> extends AbstractBaseType { + private final List rangeConstraints; + + AbstractRangedBaseType(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 unknownSchemaNodes, + final List rangeConstraints) { + super(path, unknownSchemaNodes); + this.rangeConstraints = ImmutableList.copyOf(rangeConstraints); + } + + public final List getRangeConstraints() { + return rangeConstraints; + } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return super.addToStringAttributes(toStringHelper).add("range", rangeConstraints); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedType.java new file mode 100644 index 0000000000..03ae423136 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedType.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import com.google.common.collect.ImmutableList; +import java.util.Collection; +import java.util.List; +import org.opendaylight.yangtools.concepts.Immutable; +import org.opendaylight.yangtools.yang.common.QName; +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; + +abstract class AbstractRestrictedType> implements Immutable, TypeDefinition { + private final List unknownSchemaNodes; + private final T baseType; + private final SchemaPath path; + + AbstractRestrictedType(final T baseType, final SchemaPath path, final Collection unknownSchemaNodes) { + this.baseType = Preconditions.checkNotNull(baseType); + this.path = Preconditions.checkNotNull(path); + this.unknownSchemaNodes = ImmutableList.copyOf(unknownSchemaNodes); + } + + @Override + public final T getBaseType() { + return baseType; + } + + @Override + public final String getUnits() { + return baseType.getUnits(); + } + + @Override + public final Object getDefaultValue() { + return baseType.getDefaultValue(); + } + + @Override + public final QName getQName() { + return path.getLastComponent(); + } + + @Override + public final SchemaPath getPath() { + return path; + } + + @Override + public final List getUnknownSchemaNodes() { + return unknownSchemaNodes; + } + + @Override + public final String getDescription() { + return baseType.getDescription(); + } + + @Override + public final String getReference() { + return baseType.getReference(); + } + + @Override + public final Status getStatus() { + return baseType.getStatus(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedTypeBuilder.java new file mode 100644 index 0000000000..24822f5521 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractRestrictedTypeBuilder.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; + +abstract class AbstractRestrictedTypeBuilder> extends TypeBuilder { + private boolean touched = false; + + AbstractRestrictedTypeBuilder(final T baseType, final SchemaPath path) { + super(Preconditions.checkNotNull(baseType), path); + } + + final void touch() { + touched = true; + } + + abstract T buildType(); + + @Override + public final T build() { + if (!touched) { + return getBaseType(); + } + + return buildType(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java new file mode 100644 index 0000000000..27287fdf6b --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/AbstractUnsignedBaseType.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition; + +abstract class AbstractUnsignedBaseType extends AbstractRangedBaseType + implements UnsignedIntegerTypeDefinition { + AbstractUnsignedBaseType(final QName qname, final Number minValue, final Number maxValue) { + super(qname, minValue, maxValue); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBinaryType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBinaryType.java new file mode 100644 index 0000000000..f3f554fab7 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBinaryType.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2015 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.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 implements BinaryTypeDefinition { + static final BaseBinaryType INSTANCE = new BaseBinaryType(); + + private BaseBinaryType() { + super(BaseTypes.BINARY_QNAME); + } + + @Override + public List getLengthConstraints() { + return ImmutableList.of(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBitsType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBitsType.java new file mode 100644 index 0000000000..055b37dfe1 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBitsType.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015 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.Collection; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; + +final class BaseBitsType extends AbstractBaseType implements BitsTypeDefinition { + private final List bits; + + BaseBitsType(final SchemaPath path, final List unknownSchemaNodes, final Collection bits) { + super(path, unknownSchemaNodes); + this.bits = ImmutableList.copyOf(bits); + } + + @Override + public List getBits() { + return bits; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBooleanType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBooleanType.java new file mode 100644 index 0000000000..a3d029e4ff --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseBooleanType.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition; +import org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseBooleanType extends AbstractBaseType implements BooleanTypeDefinition { + static final BaseBooleanType INSTANCE = new BaseBooleanType(); + + private BaseBooleanType() { + super(BaseTypes.BINARY_QNAME); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java new file mode 100644 index 0000000000..a34ec24381 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseDecimalType.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2015 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.base.MoreObjects.ToStringHelper; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; +import java.math.BigDecimal; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +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; +import org.opendaylight.yangtools.yang.model.util.BaseConstraints; + +final class BaseDecimalType extends AbstractRangedBaseType implements DecimalTypeDefinition { + private static final List> IMPLICIT_RANGE_STATEMENTS; + static { + final Builder> b = ImmutableList.builder(); + b.add(createRangeConstraint("-922337203685477580.8", "922337203685477580.7")); + b.add(createRangeConstraint("-92233720368547758.08", "92233720368547758.07")); + b.add(createRangeConstraint("-9223372036854775.808", "9223372036854775.807")); + b.add(createRangeConstraint("-922337203685477.5808", "922337203685477.5807")); + b.add(createRangeConstraint("-92233720368547.75808", "92233720368547.75807")); + b.add(createRangeConstraint("-9223372036854.775808", "9223372036854.775807")); + b.add(createRangeConstraint("-922337203685.4775808", "922337203685.4775807")); + b.add(createRangeConstraint("-92233720368.54775808", "92233720368.54775807")); + b.add(createRangeConstraint("-9223372036.854775808", "9223372036.854775807")); + b.add(createRangeConstraint("-922337203.6854775808", "922337203.6854775807")); + b.add(createRangeConstraint("-92233720.36854775808", "92233720.36854775807")); + b.add(createRangeConstraint("-9223372.036854775808", "9223372.036854775807")); + b.add(createRangeConstraint("-922337.2036854775808", "922337.2036854775807")); + b.add(createRangeConstraint("-92233.72036854775808", "92233.72036854775807")); + b.add(createRangeConstraint("-9223.372036854775808", "9223.372036854775807")); + b.add(createRangeConstraint("-922.3372036854775808", "922.3372036854775807")); + b.add(createRangeConstraint("-92.23372036854775808", "92.23372036854775807")); + b.add(createRangeConstraint("-9.223372036854775808", "9.223372036854775807")); + IMPLICIT_RANGE_STATEMENTS = b.build(); + } + + private static List createRangeConstraint(final String min, final String max) { + return ImmutableList.of(BaseConstraints.newRangeConstraint(new BigDecimal(min), new BigDecimal(max), + Optional.absent(), Optional.of("https://tools.ietf.org/html/rfc6020#section-9.3.4"))); + } + + private final Integer fractionDigits; + + BaseDecimalType(final SchemaPath path, final List unknownSchemaNodes, final Integer fractionDigits) { + super(path, unknownSchemaNodes, IMPLICIT_RANGE_STATEMENTS.get(fractionDigits - 1)); + this.fractionDigits = fractionDigits; + } + + @Override + public Integer getFractionDigits() { + return fractionDigits; + } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return super.addToStringAttributes(toStringHelper).add("fractionDigits", fractionDigits); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEmptyType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEmptyType.java new file mode 100644 index 0000000000..b3e198271e --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEmptyType.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; +import org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseEmptyType extends AbstractBaseType implements EmptyTypeDefinition { + static final BaseEmptyType INSTANCE = new BaseEmptyType(); + + private BaseEmptyType() { + super(BaseTypes.EMPTY_QNAME); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEnumerationType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEnumerationType.java new file mode 100644 index 0000000000..acba86a4bc --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseEnumerationType.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015 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.Collection; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; + +final class BaseEnumerationType extends AbstractBaseType implements EnumTypeDefinition { + private final List values; + + BaseEnumerationType(final SchemaPath path, final List unknownSchemaNodes, final Collection values) { + super(path, unknownSchemaNodes); + this.values = ImmutableList.copyOf(values); + } + + @Override + public List getValues() { + return values; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseIdentityrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseIdentityrefType.java new file mode 100644 index 0000000000..373c460da8 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseIdentityrefType.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; + +final class BaseIdentityrefType extends AbstractBaseType implements IdentityrefTypeDefinition { + private final IdentitySchemaNode identity; + + BaseIdentityrefType(final SchemaPath path, final List unknownSchemaNodes, final IdentitySchemaNode identity) { + super(path, unknownSchemaNodes); + this.identity = Preconditions.checkNotNull(identity); + } + + @Override + public IdentitySchemaNode getIdentity() { + return identity; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInstanceIdentifierType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInstanceIdentifierType.java new file mode 100644 index 0000000000..466d00868a --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInstanceIdentifierType.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; +import org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseInstanceIdentifierType extends AbstractBaseType + implements InstanceIdentifierTypeDefinition { + static final BaseInstanceIdentifierType INSTANCE = new BaseInstanceIdentifierType(); + + private BaseInstanceIdentifierType() { + super(BaseTypes.INSTANCE_IDENTIFIER_QNAME); + } + + @Deprecated + @Override + public RevisionAwareXPath getPathStatement() { + throw new UnsupportedOperationException("API design error"); + } + + @Override + public boolean requireInstance() { + return false; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt16Type.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt16Type.java new file mode 100644 index 0000000000..dfc749af15 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt16Type.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseInt16Type extends AbstractIntegerBaseType { + static final BaseInt16Type INSTANCE = new BaseInt16Type(); + + private BaseInt16Type() { + super(BaseTypes.INT16_QNAME, Short.MIN_VALUE, Short.MAX_VALUE); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt32Type.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt32Type.java new file mode 100644 index 0000000000..defb85d7f8 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt32Type.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseInt32Type extends AbstractIntegerBaseType { + static final BaseInt32Type INSTANCE = new BaseInt32Type(); + + private BaseInt32Type() { + super(BaseTypes.INT32_QNAME, Integer.MIN_VALUE, Integer.MAX_VALUE); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt64Type.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt64Type.java new file mode 100644 index 0000000000..1b92d90fe9 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt64Type.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseInt64Type extends AbstractIntegerBaseType { + static final BaseInt64Type INSTANCE = new BaseInt64Type(); + + private BaseInt64Type() { + super(BaseTypes.INT64_QNAME, Long.MIN_VALUE, Long.MAX_VALUE); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt8Type.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt8Type.java new file mode 100644 index 0000000000..748fb4e085 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseInt8Type.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseInt8Type extends AbstractIntegerBaseType { + static final BaseInt8Type INSTANCE = new BaseInt8Type(); + + private BaseInt8Type() { + super(BaseTypes.INT8_QNAME, Byte.MIN_VALUE, Byte.MAX_VALUE); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseLeafrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseLeafrefType.java new file mode 100644 index 0000000000..db504be827 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseLeafrefType.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; + +final class BaseLeafrefType extends AbstractBaseType implements LeafrefTypeDefinition { + private final RevisionAwareXPath pathStatement; + + BaseLeafrefType(final SchemaPath path, final RevisionAwareXPath pathStatement, final List unknownSchemaNodes) { + super(path, unknownSchemaNodes); + this.pathStatement = Preconditions.checkNotNull(pathStatement); + } + + @Override + public RevisionAwareXPath getPathStatement() { + return pathStatement; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java new file mode 100644 index 0000000000..2db0125176 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseStringType.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2015 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.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 implements StringTypeDefinition { + static final BaseStringType INSTANCE = new BaseStringType(); + + private BaseStringType() { + super(BaseTypes.STRING_QNAME); + } + + @Override + public List getLengthConstraints() { + return ImmutableList.of(); + } + + @Override + public List getPatternConstraints() { + return ImmutableList.of(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseTypes.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseTypes.java new file mode 100644 index 0000000000..1da6f3ab9c --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseTypes.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2015 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.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition; + +/** + * Utility access methods for creating and accessing YANG base type definitions. YANG types come in two basic variants, + * depending on whether they fully define their base instance or model input is required to fully-form the type. + * + * The following types have their base type fully specified and are exposed as appropriate TypeDefinition sub-interfaces: + *
    + *
  • boolean
  • + *
  • empty
  • + *
  • binary
  • + *
  • int{8,16,32,64}
  • + *
  • string
  • + *
  • uint{8,16,32,64}
  • + *
+ * + * The following types require additional specification in the model and are exposed by means of a specialized + * {@link TypeBuilder}s for each type: + *
    + *
  • decimal64
  • + *
  • instance-identifier
  • + *
  • enumeration
  • + *
  • identityref
  • + *
  • leafref
  • + *
  • union
  • + *
+ */ +@Beta +public final class BaseTypes { + private BaseTypes() { + throw new UnsupportedOperationException(); + } + + public static BinaryTypeDefinition binaryType() { + return BaseBinaryType.INSTANCE; + } + + public static BitsTypeBuilder bitsTypeBuilder(final SchemaPath path) { + return new BitsTypeBuilder(path); + } + + public static BooleanTypeDefinition booleanType() { + return BaseBooleanType.INSTANCE; + } + + public static DecimalTypeBuilder decimalTypeBuilder(final SchemaPath path) { + return new DecimalTypeBuilder(path); + } + + public static EmptyTypeDefinition emptyType() { + return BaseEmptyType.INSTANCE; + } + + public static EnumerationTypeBuilder enumerationTypeBuilder(final SchemaPath path) { + return new EnumerationTypeBuilder(path); + } + + public static IdentityrefTypeBuilder identityrefTypeBuilder(final SchemaPath path) { + return new IdentityrefTypeBuilder(path); + } + + public static InstanceIdentifierTypeDefinition instanceIdentifierType() { + return BaseInstanceIdentifierType.INSTANCE; + } + + public static IntegerTypeDefinition int8Type() { + return BaseInt8Type.INSTANCE; + } + + public static IntegerTypeDefinition int16Type() { + return BaseInt16Type.INSTANCE; + } + + public static IntegerTypeDefinition int32Type() { + return BaseInt32Type.INSTANCE; + } + + public static IntegerTypeDefinition int64Type() { + return BaseInt64Type.INSTANCE; + } + + public static LeafrefTypeBuilder leafrefTypeBuilder(final SchemaPath path) { + return new LeafrefTypeBuilder(path); + } + + public static StringTypeDefinition stringType() { + return BaseStringType.INSTANCE; + } + + public static UnionTypeBuilder unionTypeBuilder(final SchemaPath path) { + return new UnionTypeBuilder(path); + } + + public static UnsignedIntegerTypeDefinition uint8Type() { + return BaseUint8Type.INSTANCE; + } + + public static UnsignedIntegerTypeDefinition uint16Type() { + return BaseUint16Type.INSTANCE; + } + + public static UnsignedIntegerTypeDefinition uint32Type() { + return BaseUint32Type.INSTANCE; + } + + public static UnsignedIntegerTypeDefinition uint64Type() { + return BaseUint64Type.INSTANCE; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint16Type.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint16Type.java new file mode 100644 index 0000000000..79e23507c7 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint16Type.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseUint16Type extends AbstractUnsignedBaseType { + static final BaseUint16Type INSTANCE = new BaseUint16Type(); + + private BaseUint16Type() { + super(BaseTypes.UINT16_QNAME, 0, 65535); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint32Type.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint32Type.java new file mode 100644 index 0000000000..898ebd539f --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint32Type.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseUint32Type extends AbstractUnsignedBaseType { + static final BaseUint32Type INSTANCE = new BaseUint32Type(); + + private BaseUint32Type() { + super(BaseTypes.UINT32_QNAME, 0L, 4294967295L); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint64Type.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint64Type.java new file mode 100644 index 0000000000..12db4b15a6 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint64Type.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2015 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.math.BigInteger; +import org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseUint64Type extends AbstractUnsignedBaseType { + static final BaseUint64Type INSTANCE = new BaseUint64Type(); + + private BaseUint64Type() { + super(BaseTypes.UINT64_QNAME, BigInteger.ZERO, new BigInteger("18446744073709551615")); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint8Type.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint8Type.java new file mode 100644 index 0000000000..02532baa43 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUint8Type.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.util.BaseTypes; + +final class BaseUint8Type extends AbstractUnsignedBaseType { + static final BaseUint8Type INSTANCE = new BaseUint8Type(); + + private BaseUint8Type() { + super(BaseTypes.UINT8_QNAME, (short)0, (short)255); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUnionType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUnionType.java new file mode 100644 index 0000000000..23f4476ba4 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BaseUnionType.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015 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.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.UnionTypeDefinition; + +final class BaseUnionType extends AbstractBaseType implements UnionTypeDefinition { + private final List> types; + + BaseUnionType(final SchemaPath path, final List unknownSchemaNodes, final Collection> types) { + super(path, unknownSchemaNodes); + this.types = ImmutableList.copyOf(types); + } + + @Override + public List> getTypes() { + return types; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BitsTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BitsTypeBuilder.java new file mode 100644 index 0000000000..afa744a9c0 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/BitsTypeBuilder.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015 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.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import java.util.Map; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; + +public final class BitsTypeBuilder extends TypeBuilder { + private final Builder builder = ImmutableMap.builder(); + + BitsTypeBuilder(final SchemaPath path) { + super(null, path); + } + + public void addBit(@Nonnull final Bit item) { + builder.put(item.getName(), item); + } + + @Override + public BitsTypeDefinition build() { + final Map map = builder.build(); + + // FIXME: run null position checks and re-generate Bit items as appropriate + + return new BaseBitsType(getPath(), getUnknownSchemaNodes(), map.values()); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DecimalTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DecimalTypeBuilder.java new file mode 100644 index 0000000000..8d8125e96d --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DecimalTypeBuilder.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; + +public final class DecimalTypeBuilder extends TypeBuilder { + private Integer fractionDigits; + + DecimalTypeBuilder(final SchemaPath path) { + super(null, path); + } + + public DecimalTypeBuilder setFractionDigits(final int fractionDigits) { + Preconditions.checkState(this.fractionDigits == null, "Fraction digits already defined to %s", + this.fractionDigits); + this.fractionDigits = fractionDigits; + return this; + } + + @Override + public BaseDecimalType build() { + Preconditions.checkState(fractionDigits != null, "Fraction digits not defined"); + return new BaseDecimalType(getPath(), getUnknownSchemaNodes(), fractionDigits); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java new file mode 100644 index 0000000000..6eb196c7f6 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBinaryType.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015 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 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 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 unknownSchemNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes); + } + + @Override + public List getLengthConstraints() { + return getBaseType().getLengthConstraints(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBitsType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBitsType.java new file mode 100644 index 0000000000..fab4135f9b --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBitsType.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015 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 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.BitsTypeDefinition; + +final class DerivedBitsType extends AbstractDerivedType implements BitsTypeDefinition { + DerivedBitsType(final BitsTypeDefinition baseType, final SchemaPath path, final Object defaultValue, + final String description, final String reference, final Status status, final String units, + final Collection unknownSchemNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes); + } + + @Override + public List getBits() { + return getBaseType().getBits(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBooleanType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBooleanType.java new file mode 100644 index 0000000000..6f100fd7ae --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedBooleanType.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2015 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 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.BooleanTypeDefinition; + +final class DerivedBooleanType extends AbstractDerivedType implements BooleanTypeDefinition { + DerivedBooleanType(final BooleanTypeDefinition baseType, final SchemaPath path, final Object defaultValue, + final String description, final String reference, final Status status, final String units, + final Collection unknownSchemNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java new file mode 100644 index 0000000000..01ae973e38 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedDecimalType.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2015 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 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 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 unknownSchemNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes); + } + + @Override + public Integer getFractionDigits() { + return getBaseType().getFractionDigits(); + } + + @Override + public List getRangeConstraints() { + return getBaseType().getRangeConstraints(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEmptyType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEmptyType.java new file mode 100644 index 0000000000..ed88513446 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEmptyType.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2015 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 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.EmptyTypeDefinition; + +final class DerivedEmptyType extends AbstractDerivedType implements EmptyTypeDefinition { + DerivedEmptyType(final EmptyTypeDefinition baseType, final SchemaPath path, final Object defaultValue, + final String description, final String reference, final Status status, final String units, + final Collection unknownSchemNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEnumerationType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEnumerationType.java new file mode 100644 index 0000000000..a8924d4957 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedEnumerationType.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015 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 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.EnumTypeDefinition; + +final class DerivedEnumerationType extends AbstractDerivedType implements EnumTypeDefinition { + DerivedEnumerationType(final EnumTypeDefinition baseType, final SchemaPath path, final Object defaultValue, + final String description, final String reference, final Status status, final String units, + final Collection unknownSchemNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemNodes); + } + + @Override + public List getValues() { + return getBaseType().getValues(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIdentityrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIdentityrefType.java new file mode 100644 index 0000000000..6e3267121e --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIdentityrefType.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015 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 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.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; + +final class DerivedIdentityrefType extends AbstractDerivedType implements IdentityrefTypeDefinition { + DerivedIdentityrefType(final IdentityrefTypeDefinition baseType, final SchemaPath path, final Object defaultValue, + final String description, final String reference, final Status status, final String units, + final Collection unknownSchemaNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes); + } + + @Override + public IdentitySchemaNode getIdentity() { + return getBaseType().getIdentity(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedInstanceIdentifierType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedInstanceIdentifierType.java new file mode 100644 index 0000000000..8b13813e6e --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedInstanceIdentifierType.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015 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 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.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; + +final class DerivedInstanceIdentifierType extends AbstractDerivedType implements InstanceIdentifierTypeDefinition { + private final boolean requireInstance; + + DerivedInstanceIdentifierType(final InstanceIdentifierTypeDefinition baseType, final SchemaPath path, final Object defaultValue, + final String description, final String reference, final Status status, final String units, + final Collection unknownSchemaNodes, final boolean requireInstance) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes); + this.requireInstance = requireInstance; + } + + @Deprecated + @Override + public RevisionAwareXPath getPathStatement() { + throw new UnsupportedOperationException("API design mistake"); + } + + @Override + public boolean requireInstance() { + return requireInstance; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIntegerType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIntegerType.java new file mode 100644 index 0000000000..9efc5fbcfe --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedIntegerType.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015 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 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 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 unknownSchemaNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes); + } + + @Override + public List getRangeConstraints() { + return getBaseType().getRangeConstraints(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedLeafrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedLeafrefType.java new file mode 100644 index 0000000000..fce65e7408 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedLeafrefType.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015 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 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.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; + +final class DerivedLeafrefType extends AbstractDerivedType implements LeafrefTypeDefinition { + DerivedLeafrefType(final LeafrefTypeDefinition baseType, final SchemaPath path, final Object defaultValue, + final String description, final String reference, final Status status, final String units, + final Collection unknownSchemaNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes); + } + + @Override + public RevisionAwareXPath getPathStatement() { + return getBaseType().getPathStatement(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedStringType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedStringType.java new file mode 100644 index 0000000000..b527929e8d --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedStringType.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2015 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 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 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 unknownSchemaNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes); + } + + @Override + public List getPatternConstraints() { + return getBaseType().getPatternConstraints(); + } + + @Override + public List getLengthConstraints() { + return getBaseType().getLengthConstraints(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedTypeBuilder.java new file mode 100644 index 0000000000..d90d1d88c8 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedTypeBuilder.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +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.TypeDefinition; + +public abstract class DerivedTypeBuilder> extends TypeBuilder { + private Object defaultValue; + private String description; + private String reference; + private Status status = Status.CURRENT; + private String units; + + DerivedTypeBuilder(final T baseType, final SchemaPath path) { + super(Preconditions.checkNotNull(baseType), path); + } + + public void setDefaultValue(@Nonnull final Object defaultValue) { + this.defaultValue = Preconditions.checkNotNull(defaultValue); + } + + public final void setDescription(@Nonnull final String description) { + this.description = Preconditions.checkNotNull(description); + } + + public final void setReference(@Nonnull final String reference) { + this.reference = Preconditions.checkNotNull(reference); + } + + public final void setStatus(@Nonnull final Status status) { + this.status = Preconditions.checkNotNull(status); + } + + public final void setUnits(final String units) { + this.units = Preconditions.checkNotNull(units); + } + + final Object getDefaultValue() { + return defaultValue; + } + + final String getDescription() { + return description; + } + + final String getReference() { + return reference; + } + + final Status getStatus() { + return status; + } + + final String getUnits() { + return units; + } +} \ No newline at end of file diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedTypes.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedTypes.java new file mode 100644 index 0000000000..27ae372ea3 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedTypes.java @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2015 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.annotations.Beta; +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.BinaryTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; +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.StringTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition; + +/** + * YANG defines 'derived type' as a type created through a 'typedef' statement. These types are exposed in the + * hierarchical namespace and can be looked up. + * + * A derived type can redefine the default value, description, status and reference of a particular type definition. + * It can only refine the units attribute, as that attribute is tied to the semantics of the value. The default value, + * and units attributes are inherited from the super (base or restricted) type, others are left undefined if not + * explicitly set. Status defaults to current. + */ +/* + * FIXME: Create ConcreteTypes + * Leaf and leaf-list statements provide for a similar mechanism by which a particular type is changed, most + * notably with the ability to redefine the default type. The resulting types could conceivably be called + * 'concrete types', as they cannot be referenced by another leaf or type definition. This aspect needs to be + * split out into a 'ConcreteTypes' class. + * + * Builders should use the fly-weight pattern to minimize footprint for cases when leaves do not override any + * aspect of the base type. + */ +@Beta +public final class DerivedTypes { + private DerivedTypes() { + throw new UnsupportedOperationException(); + } + + @SuppressWarnings("unchecked") + public static > DerivedTypeBuilder derivedTypeBuilder(@Nonnull final T baseType, + @Nonnull final SchemaPath path) { + if (baseType instanceof BinaryTypeDefinition) { + return (DerivedTypeBuilder) derivedBinaryBuilder((BinaryTypeDefinition) baseType, path); + } else if (baseType instanceof BitsTypeDefinition) { + return (DerivedTypeBuilder) derivedBitsBuilder((BitsTypeDefinition) baseType, path); + } else if (baseType instanceof BooleanTypeDefinition) { + return (DerivedTypeBuilder) derivedBooleanBuilder((BooleanTypeDefinition) baseType, path); + } else if (baseType instanceof DecimalTypeDefinition) { + return (DerivedTypeBuilder) derivedDecimalBuilder((DecimalTypeDefinition) baseType, path); + } else if (baseType instanceof EmptyTypeDefinition) { + return (DerivedTypeBuilder) derivedEmptyBuilder((EmptyTypeDefinition) baseType, path); + } else if (baseType instanceof EnumTypeDefinition) { + return (DerivedTypeBuilder) derivedEnumerationBuilder((EnumTypeDefinition) baseType, path); + } else if (baseType instanceof IdentityrefTypeDefinition) { + return (DerivedTypeBuilder) derivedIdentityrefBuilder((IdentityrefTypeDefinition) baseType, path); + } else if (baseType instanceof InstanceIdentifierTypeDefinition) { + return (DerivedTypeBuilder) derivedInstanceIdentifierBuilder((InstanceIdentifierTypeDefinition) baseType, path); + } else if (baseType instanceof IntegerTypeDefinition) { + return (DerivedTypeBuilder) derivedIntegerBuilder((IntegerTypeDefinition) baseType, path); + } else if (baseType instanceof LeafrefTypeDefinition) { + return (DerivedTypeBuilder) derivedLeafrefBuilder((LeafrefTypeDefinition) baseType, path); + } else if (baseType instanceof StringTypeDefinition) { + return (DerivedTypeBuilder) derivedStringBuilder((StringTypeDefinition) baseType, path); + } else if (baseType instanceof UnionTypeDefinition) { + return (DerivedTypeBuilder) derivedUnionBuilder((UnionTypeDefinition) baseType, path); + } else if (baseType instanceof UnsignedIntegerTypeDefinition) { + return (DerivedTypeBuilder) derivedUnsignedBuilder((UnsignedIntegerTypeDefinition) baseType, path); + } else { + throw new IllegalArgumentException("Unhandled type definition class " + baseType.getClass()); + } + } + + public static DerivedTypeBuilder derivedBinaryBuilder(@Nonnull final BinaryTypeDefinition baseType, @Nonnull final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public BinaryTypeDefinition build() { + return new DerivedBinaryType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedBitsBuilder(final BitsTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public BitsTypeDefinition build() { + return new DerivedBitsType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedBooleanBuilder(@Nonnull final BooleanTypeDefinition baseType, @Nonnull final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public BooleanTypeDefinition build() { + return new DerivedBooleanType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedDecimalBuilder(final DecimalTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public DecimalTypeDefinition build() { + return new DerivedDecimalType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedEmptyBuilder(final EmptyTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public EmptyTypeDefinition build() { + return new DerivedEmptyType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedEnumerationBuilder(final EnumTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public EnumTypeDefinition build() { + return new DerivedEnumerationType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedIdentityrefBuilder(final IdentityrefTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public IdentityrefTypeDefinition build() { + return new DerivedIdentityrefType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedInstanceIdentifierBuilder(final InstanceIdentifierTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public InstanceIdentifierTypeDefinition build() { + return new DerivedInstanceIdentifierType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes(), baseType.requireInstance()); + } + }; + } + + public static DerivedTypeBuilder derivedIntegerBuilder(final IntegerTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public IntegerTypeDefinition build() { + return new DerivedIntegerType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedLeafrefBuilder(final LeafrefTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public LeafrefTypeDefinition build() { + return new DerivedLeafrefType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedStringBuilder(final StringTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public StringTypeDefinition build() { + return new DerivedStringType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedUnionBuilder(final UnionTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public DerivedUnionType build() { + return new DerivedUnionType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } + + public static DerivedTypeBuilder derivedUnsignedBuilder(final UnsignedIntegerTypeDefinition baseType, final SchemaPath path) { + return new DerivedTypeBuilder(baseType, path) { + @Override + public UnsignedIntegerTypeDefinition build() { + return new DerivedUnsignedType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), + getStatus(), getUnits(), getUnknownSchemaNodes()); + } + }; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnionType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnionType.java new file mode 100644 index 0000000000..5546769ded --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnionType.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015 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 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.type.UnionTypeDefinition; + +final class DerivedUnionType extends AbstractDerivedType implements UnionTypeDefinition { + DerivedUnionType(final UnionTypeDefinition baseType, final SchemaPath path, final Object defaultValue, + final String description, final String reference, final Status status, final String units, + final Collection unknownSchemaNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes); + } + + @Override + public List> getTypes() { + return getBaseType().getTypes(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java new file mode 100644 index 0000000000..9240c03587 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/DerivedUnsignedType.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2015 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 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 + implements UnsignedIntegerTypeDefinition { + + DerivedUnsignedType(final UnsignedIntegerTypeDefinition baseType, final SchemaPath path, + final Object defaultValue, final String description, final String reference, final Status status, + final String units, final Collection unknownSchemaNodes) { + super(baseType, path, defaultValue, description, reference, status, units, unknownSchemaNodes); + } + + @Override + public List getRangeConstraints() { + return getBaseType().getRangeConstraints(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/EnumerationTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/EnumerationTypeBuilder.java new file mode 100644 index 0000000000..46f1aa001b --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/EnumerationTypeBuilder.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015 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.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import java.util.Map; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; + +public final class EnumerationTypeBuilder extends TypeBuilder { + private final Builder builder = ImmutableMap.builder(); + + EnumerationTypeBuilder(final SchemaPath path) { + super(null, path); + } + + public void addEnum(@Nonnull final EnumPair item) { + builder.put(item.getName(), item); + } + + @Override + public EnumTypeDefinition build() { + final Map map = builder.build(); + + // FIXME: run null value checks and re-generate EnumPairs as appropriate + + return new BaseEnumerationType(getPath(), getUnknownSchemaNodes(), map.values()); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/IdentityrefTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/IdentityrefTypeBuilder.java new file mode 100644 index 0000000000..78c5693b5a --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/IdentityrefTypeBuilder.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; + +public final class IdentityrefTypeBuilder extends TypeBuilder { + private IdentitySchemaNode identity; + + IdentityrefTypeBuilder(final SchemaPath path) { + super(null, path); + } + + public void setIdentity(@Nonnull final IdentitySchemaNode identity) { + Preconditions.checkState(identity == null, "Identity already set to %s", identity); + this.identity = Preconditions.checkNotNull(identity); + } + + @Override + public BaseIdentityrefType build() { + return new BaseIdentityrefType(getPath(), getUnknownSchemaNodes(), identity); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/InstanceIdentifierTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/InstanceIdentifierTypeBuilder.java new file mode 100644 index 0000000000..20a3c7ebc8 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/InstanceIdentifierTypeBuilder.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; + +public final class InstanceIdentifierTypeBuilder extends AbstractRestrictedTypeBuilder { + private boolean requireInstance; + + InstanceIdentifierTypeBuilder(final InstanceIdentifierTypeDefinition baseType, final SchemaPath path) { + super(Preconditions.checkNotNull(baseType), path); + this.requireInstance = baseType.requireInstance(); + } + + public void setRequireInstance(final boolean requireInstance) { + if (this.requireInstance) { + Preconditions.checkArgument(!requireInstance, "Cannot switch require-instance off in type %s", getPath()); + } + + this.requireInstance = requireInstance; + touch(); + } + + @Override + InstanceIdentifierTypeDefinition buildType() { + if (requireInstance == getBaseType().requireInstance()) { + return getBaseType(); + } + + return new RestrictedInstanceIdentifierType(getBaseType(), getPath(), getUnknownSchemaNodes(), requireInstance); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LeafrefTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LeafrefTypeBuilder.java new file mode 100644 index 0000000000..be63da025e --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LeafrefTypeBuilder.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; + +public final class LeafrefTypeBuilder extends TypeBuilder { + private RevisionAwareXPath pathStatement; + + LeafrefTypeBuilder(final SchemaPath path) { + super(null, path); + } + + public void setPathStatement(@Nonnull final RevisionAwareXPath pathStatement) { + Preconditions.checkState(pathStatement == null, "Path statement already set to %s", pathStatement); + this.pathStatement = Preconditions.checkNotNull(pathStatement); + } + + @Override + public BaseLeafrefType build() { + return new BaseLeafrefType(getPath(), pathStatement, getUnknownSchemaNodes()); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LengthRestrictedTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LengthRestrictedTypeBuilder.java new file mode 100644 index 0000000000..57cccbfd59 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/LengthRestrictedTypeBuilder.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +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.type.LengthConstraint; + +public abstract class LengthRestrictedTypeBuilder> extends AbstractRestrictedTypeBuilder { + private Collection lengthAlternatives; + + LengthRestrictedTypeBuilder(final T baseType, final SchemaPath path) { + super(Preconditions.checkNotNull(baseType), path); + } + + public final void setLengthAlternatives(@Nonnull final Collection lengthAlternatives) { + Preconditions.checkState(this.lengthAlternatives == null, "Range alternatives already defined as %s", + lengthAlternatives); + this.lengthAlternatives = Preconditions.checkNotNull(lengthAlternatives); + touch(); + } + + final List calculateLenghtConstraints(final List baseLengthConstraints) { + if (lengthAlternatives == null || lengthAlternatives.isEmpty()) { + return baseLengthConstraints; + } + + // FIXME: calculate lengths + throw new UnsupportedOperationException(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilder.java new file mode 100644 index 0000000000..e9bdd2ce77 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilder.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +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.type.RangeConstraint; + +public abstract class RangeRestrictedTypeBuilder> extends AbstractRestrictedTypeBuilder { + private Collection rangeAlternatives; + + RangeRestrictedTypeBuilder(final T baseType, final SchemaPath path) { + super(Preconditions.checkNotNull(baseType), path); + } + + public void setRangeAlternatives(@Nonnull final Collection rangeAlternatives) { + Preconditions.checkState(this.rangeAlternatives == null, "Range alternatives already defined as %s", + this.rangeAlternatives); + this.rangeAlternatives = Preconditions.checkNotNull(rangeAlternatives); + touch(); + } + + final List calculateRangeConstraints(final List baseRangeConstraints) { + if (rangeAlternatives == null || rangeAlternatives.isEmpty()) { + return baseRangeConstraints; + } + + // FIXME: calculate ranges + throw new UnsupportedOperationException(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBinaryType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBinaryType.java new file mode 100644 index 0000000000..4cbed792d9 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBinaryType.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.SchemaPath; +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 RestrictedBinaryType extends AbstractLengthRestrictedType implements BinaryTypeDefinition { + RestrictedBinaryType(final BinaryTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes, + final Collection lengthConstraints) { + super(baseType, path, unknownSchemaNodes, lengthConstraints); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBitsType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBitsType.java new file mode 100644 index 0000000000..ea29712920 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBitsType.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; + +final class RestrictedBitsType extends AbstractRestrictedType implements BitsTypeDefinition { + RestrictedBitsType(final BitsTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes) { + super(baseType, path, unknownSchemaNodes); + } + + @Override + public List getBits() { + return getBaseType().getBits(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBooleanType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBooleanType.java new file mode 100644 index 0000000000..782b17ed42 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedBooleanType.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition; + +final class RestrictedBooleanType extends AbstractRestrictedType implements BooleanTypeDefinition { + RestrictedBooleanType(final BooleanTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes) { + super(baseType, path, unknownSchemaNodes); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedDecimalType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedDecimalType.java new file mode 100644 index 0000000000..86c6d8731e --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedDecimalType.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.SchemaPath; +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 RestrictedDecimalType extends AbstractRangeRestrictedType + implements DecimalTypeDefinition { + RestrictedDecimalType(final DecimalTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes, final Collection rangeConstraints) { + super(baseType, path, unknownSchemaNodes, rangeConstraints); + } + + @Override + public Integer getFractionDigits() { + return getBaseType().getFractionDigits(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEmptyType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEmptyType.java new file mode 100644 index 0000000000..08446d8dab --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEmptyType.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; + +final class RestrictedEmptyType extends AbstractRestrictedType implements EmptyTypeDefinition { + RestrictedEmptyType(final EmptyTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes) { + super(baseType, path, unknownSchemaNodes); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEnumerationType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEnumerationType.java new file mode 100644 index 0000000000..bc6f34d599 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedEnumerationType.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; + +final class RestrictedEnumerationType extends AbstractRestrictedType implements EnumTypeDefinition { + RestrictedEnumerationType(final EnumTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes) { + super(baseType, path, unknownSchemaNodes); + } + + @Override + public List getValues() { + return getBaseType().getValues(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIdentityrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIdentityrefType.java new file mode 100644 index 0000000000..edc09ffced --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIdentityrefType.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; + +final class RestrictedIdentityrefType extends AbstractRestrictedType implements IdentityrefTypeDefinition { + RestrictedIdentityrefType(final IdentityrefTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes) { + super(baseType, path, unknownSchemaNodes); + } + + @Override + public IdentitySchemaNode getIdentity() { + return getBaseType().getIdentity(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedInstanceIdentifierType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedInstanceIdentifierType.java new file mode 100644 index 0000000000..51ae0c3d52 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedInstanceIdentifierType.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; + +final class RestrictedInstanceIdentifierType extends AbstractRestrictedType + implements InstanceIdentifierTypeDefinition { + private final boolean requireInstance; + + RestrictedInstanceIdentifierType(final InstanceIdentifierTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes, final boolean requireInstance) { + super(baseType, path, unknownSchemaNodes); + this.requireInstance = requireInstance; + } + + @Deprecated + @Override + public RevisionAwareXPath getPathStatement() { + throw new UnsupportedOperationException("API design mistake"); + } + + @Override + public boolean requireInstance() { + return requireInstance; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIntegerType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIntegerType.java new file mode 100644 index 0000000000..a27f0093f1 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedIntegerType.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.SchemaPath; +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 RestrictedIntegerType extends AbstractRangeRestrictedType implements IntegerTypeDefinition { + RestrictedIntegerType(final IntegerTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes, final Collection rangeConstraints) { + super(baseType, path, unknownSchemaNodes, rangeConstraints); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedLeafrefType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedLeafrefType.java new file mode 100644 index 0000000000..692a7e16d8 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedLeafrefType.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2015 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 org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; + +final class RestrictedLeafrefType extends AbstractRestrictedType implements LeafrefTypeDefinition { + RestrictedLeafrefType(final LeafrefTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes) { + super(baseType, path, unknownSchemaNodes); + } + + @Override + public RevisionAwareXPath getPathStatement() { + return getBaseType().getPathStatement(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedStringType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedStringType.java new file mode 100644 index 0000000000..cbd7e1ce47 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedStringType.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2015 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.Collection; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +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 RestrictedStringType extends AbstractLengthRestrictedType implements StringTypeDefinition { + private final List patternConstraints; + + RestrictedStringType(final StringTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes, final Collection lengthConstraints, + final List patternConstraints) { + super(baseType, path, unknownSchemaNodes, lengthConstraints); + this.patternConstraints = ImmutableList.copyOf(patternConstraints); + } + + @Override + public List getPatternConstraints() { + return patternConstraints; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedTypes.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedTypes.java new file mode 100644 index 0000000000..1c238fe677 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedTypes.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2015 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.annotations.Beta; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; +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.StringTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition; + +/** + * Restricted types are a refinement of the restrictions applied to a particular type. YANG defines restrictions only + * on a subset of the base types, but conceptually any such definition can hold unknown nodes. + * + * 1) Restrictable + * binary (length) + * int{8,16,32,64} (range) + * string (length, patterns) + * uint{8,16,32,64} (range) + * decimal64 (range) + * instance-identifier (require-instance) + * + * 2) Non-restrictable + * boolean + * bits + * empty (ignores default on derivation) + * enumeration + * identityref + * leafref + * union + * + * This class holds methods which allow creation of restricted types using {@link TypeBuilder} and its subclasses. Each + * restricted type is logically anchored at a {@link SchemaPath}, but can be substituted by its base type if it does + * not contribute any additional restrictions. TypeBuilder instances take this into account, and result in the base type + * being returned from the builder when the base type and restricted type are semantically equal. + * + * Restricted types inherit the default value, description, reference, status and units from the base type, if that type + * defines them. + */ +@Beta +public final class RestrictedTypes { + private RestrictedTypes() { + throw new UnsupportedOperationException(); + } + + public static LengthRestrictedTypeBuilder newBinaryBuilder(@Nonnull final BinaryTypeDefinition baseType, @Nonnull final SchemaPath path) { + return new LengthRestrictedTypeBuilder(baseType, path) { + @Override + BinaryTypeDefinition buildType() { + return new RestrictedBinaryType(getBaseType(), getPath(), getUnknownSchemaNodes(), + calculateLenghtConstraints(getBaseType().getLengthConstraints())); + } + }; + } + + public static TypeBuilder newBitsBuilder(final BitsTypeDefinition baseType, final SchemaPath path) { + return new AbstractRestrictedTypeBuilder(baseType, path) { + @Override + BitsTypeDefinition buildType() { + return new RestrictedBitsType(getBaseType(), getPath(), getUnknownSchemaNodes()); + } + }; + } + + public static TypeBuilder newBooleanBuilder(@Nonnull final BooleanTypeDefinition baseType, @Nonnull final SchemaPath path) { + return new AbstractRestrictedTypeBuilder(baseType, path) { + @Override + BooleanTypeDefinition buildType() { + return new RestrictedBooleanType(getBaseType(), getPath(), getUnknownSchemaNodes()); + } + }; + } + + public static RangeRestrictedTypeBuilder newDecima64Builder(final DecimalTypeDefinition baseType, final SchemaPath path) { + return new RangeRestrictedTypeBuilder(baseType, path) { + @Override + DecimalTypeDefinition buildType() { + return new RestrictedDecimalType(getBaseType(), getPath(), getUnknownSchemaNodes(), + calculateRangeConstraints(getBaseType().getRangeConstraints())); + } + }; + } + + public static TypeBuilder newEmptyBuilder(final EmptyTypeDefinition baseType, final SchemaPath path) { + return new AbstractRestrictedTypeBuilder(baseType, path) { + @Override + EmptyTypeDefinition buildType() { + return new RestrictedEmptyType(getBaseType(), getPath(), getUnknownSchemaNodes()); + } + }; + } + + public static TypeBuilder newEnumerationBuilder(final EnumTypeDefinition baseType, final SchemaPath path) { + return new AbstractRestrictedTypeBuilder(baseType, path) { + @Override + EnumTypeDefinition buildType() { + return new RestrictedEnumerationType(getBaseType(), getPath(), getUnknownSchemaNodes()); + } + }; + } + + public static TypeBuilder newIdentityrefBuilder(final IdentityrefTypeDefinition baseType, final SchemaPath path) { + return new AbstractRestrictedTypeBuilder(baseType, path) { + @Override + IdentityrefTypeDefinition buildType() { + return new RestrictedIdentityrefType(getBaseType(), getPath(), getUnknownSchemaNodes()); + } + }; + } + + public static InstanceIdentifierTypeBuilder newInstanceIdentifierBuilder(final InstanceIdentifierTypeDefinition baseType, final SchemaPath path) { + return new InstanceIdentifierTypeBuilder(baseType, path); + } + + public static TypeBuilder newLeafrefBuilder(final LeafrefTypeDefinition baseType, final SchemaPath path) { + return new AbstractRestrictedTypeBuilder(baseType, path) { + @Override + LeafrefTypeDefinition buildType() { + return new RestrictedLeafrefType(getBaseType(), getPath(), getUnknownSchemaNodes()); + } + }; + } + + public static RangeRestrictedTypeBuilder newIntegerBuilder(final IntegerTypeDefinition baseType, final SchemaPath path) { + return new RangeRestrictedTypeBuilder(baseType, path) { + @Override + IntegerTypeDefinition buildType() { + return new RestrictedIntegerType(getBaseType(), getPath(), getUnknownSchemaNodes(), + calculateRangeConstraints(getBaseType().getRangeConstraints())); + } + }; + } + + public static StringTypeBuilder newStringBuilder(final StringTypeDefinition baseType, final SchemaPath path) { + return new StringTypeBuilder(baseType, path); + } + + public static TypeBuilder newUnionBuilder(final UnionTypeDefinition baseType, final SchemaPath path) { + return new AbstractRestrictedTypeBuilder(baseType, path) { + @Override + UnionTypeDefinition buildType() { + return new RestrictedUnionType(getBaseType(), getPath(), getUnknownSchemaNodes()); + } + }; + } + + public static RangeRestrictedTypeBuilder newUnsignedBuilder(final UnsignedIntegerTypeDefinition baseType, final SchemaPath path) { + return new RangeRestrictedTypeBuilder(baseType, path) { + @Override + UnsignedIntegerTypeDefinition buildType() { + return new RestrictedUnsignedType(getBaseType(), getPath(), getUnknownSchemaNodes(), + calculateRangeConstraints(getBaseType().getRangeConstraints())); + } + }; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnionType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnionType.java new file mode 100644 index 0000000000..ca7ec9118f --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnionType.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2015 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 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.UnionTypeDefinition; + +final class RestrictedUnionType extends AbstractRestrictedType implements UnionTypeDefinition { + RestrictedUnionType(final UnionTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes) { + super(baseType, path, unknownSchemaNodes); + } + + @Override + public List> getTypes() { + return getBaseType().getTypes(); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnsignedType.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnsignedType.java new file mode 100644 index 0000000000..a1c214c586 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RestrictedUnsignedType.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 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.Collection; +import java.util.List; +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 + implements UnsignedIntegerTypeDefinition { + private final List rangeConstraints; + + RestrictedUnsignedType(final UnsignedIntegerTypeDefinition baseType, final SchemaPath path, + final Collection unknownSchemaNodes, final Collection rangeConstraints) { + super(baseType, path, unknownSchemaNodes); + this.rangeConstraints = ImmutableList.copyOf(rangeConstraints); + } + + @Override + public List getRangeConstraints() { + return rangeConstraints; + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/StringTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/StringTypeBuilder.java new file mode 100644 index 0000000000..81a080fe8e --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/StringTypeBuilder.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import java.util.ArrayList; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; +import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; + +public final class StringTypeBuilder extends LengthRestrictedTypeBuilder { + private final List patternConstraints = new ArrayList<>(0); + + StringTypeBuilder(final StringTypeDefinition baseType, final SchemaPath path) { + super(baseType, path); + } + + public void addPatternConstraint(final PatternConstraint constraint) { + patternConstraints.add(Preconditions.checkNotNull(constraint)); + touch(); + } + + @Override + public RestrictedStringType buildType() { + final List basePatterns = getBaseType().getPatternConstraints(); + final List patterns; + if (!patternConstraints.isEmpty()) { + patterns = new ArrayList<>(patternConstraints.size() + basePatterns.size()); + patterns.addAll(patternConstraints); + patterns.addAll(basePatterns); + } else { + patterns = getBaseType().getPatternConstraints(); + } + + return new RestrictedStringType(getBaseType(), getPath(), getUnknownSchemaNodes(), + calculateLenghtConstraints(getBaseType().getLengthConstraints()), patterns); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/TypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/TypeBuilder.java new file mode 100644 index 0000000000..5920a36c07 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/TypeBuilder.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2015 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.base.Preconditions; +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.concepts.Builder; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public abstract class TypeBuilder> implements Builder { + private final ImmutableList.Builder unknownSchemaNodes = ImmutableList.builder(); + private final SchemaPath path; + private final T baseType; + + TypeBuilder(final T baseType, final SchemaPath path) { + this.path = Preconditions.checkNotNull(path); + this.baseType = baseType; + } + + final T getBaseType() { + return baseType; + } + + final SchemaPath getPath() { + return path; + } + + final List getUnknownSchemaNodes() { + return unknownSchemaNodes.build(); + } + + public final void addUnknownSchemaNode(final UnknownSchemaNode node) { + unknownSchemaNodes.add(node); + } +} diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/UnionTypeBuilder.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/UnionTypeBuilder.java new file mode 100644 index 0000000000..e14eb6f415 --- /dev/null +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/UnionTypeBuilder.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 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 com.google.common.collect.ImmutableList.Builder; +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.UnionTypeDefinition; + +public final class UnionTypeBuilder extends TypeBuilder { + private final Builder> builder = ImmutableList.builder(); + + UnionTypeBuilder(final SchemaPath path) { + super(null, path); + } + + public void addType(@Nonnull final TypeDefinition type) { + builder.add(type); + } + + @Override + public BaseUnionType build() { + return new BaseUnionType(getPath(), getUnknownSchemaNodes(), builder.build()); + } +} -- 2.36.6