/* * 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.ri.type; import com.google.common.annotations.Beta; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; 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.Int16TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Int32TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Int64TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Int8TypeDefinition; 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.Uint16TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Uint64TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; /** * 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. */ @Beta public final class DerivedTypes { private DerivedTypes() { // Hidden on purpose } public static @NonNull DerivedTypeBuilder derivedTypeBuilder(final @NonNull TypeDefinition baseType, final @NonNull QName qname) { if (baseType instanceof BinaryTypeDefinition) { return derivedBinaryBuilder((BinaryTypeDefinition) baseType, qname); } else if (baseType instanceof BitsTypeDefinition) { return derivedBitsBuilder((BitsTypeDefinition) baseType, qname); } else if (baseType instanceof BooleanTypeDefinition) { return derivedBooleanBuilder((BooleanTypeDefinition) baseType, qname); } else if (baseType instanceof DecimalTypeDefinition) { return derivedDecimalBuilder((DecimalTypeDefinition) baseType, qname); } else if (baseType instanceof EmptyTypeDefinition) { return derivedEmptyBuilder((EmptyTypeDefinition) baseType, qname); } else if (baseType instanceof EnumTypeDefinition) { return derivedEnumerationBuilder((EnumTypeDefinition) baseType, qname); } else if (baseType instanceof IdentityrefTypeDefinition) { return derivedIdentityrefBuilder((IdentityrefTypeDefinition) baseType, qname); } else if (baseType instanceof InstanceIdentifierTypeDefinition) { return derivedInstanceIdentifierBuilder((InstanceIdentifierTypeDefinition) baseType, qname); } else if (baseType instanceof Int8TypeDefinition) { return derivedInt8Builder((Int8TypeDefinition) baseType, qname); } else if (baseType instanceof Int16TypeDefinition) { return derivedInt16Builder((Int16TypeDefinition) baseType, qname); } else if (baseType instanceof Int32TypeDefinition) { return derivedInt32Builder((Int32TypeDefinition) baseType, qname); } else if (baseType instanceof Int64TypeDefinition) { return derivedInt64Builder((Int64TypeDefinition) baseType, qname); } else if (baseType instanceof LeafrefTypeDefinition) { return derivedLeafrefBuilder((LeafrefTypeDefinition) baseType, qname); } else if (baseType instanceof StringTypeDefinition) { return derivedStringBuilder((StringTypeDefinition) baseType, qname); } else if (baseType instanceof UnionTypeDefinition) { return derivedUnionBuilder((UnionTypeDefinition) baseType, qname); } else if (baseType instanceof Uint8TypeDefinition) { return derivedUint8Builder((Uint8TypeDefinition) baseType, qname); } else if (baseType instanceof Uint16TypeDefinition) { return derivedUint16Builder((Uint16TypeDefinition) baseType, qname); } else if (baseType instanceof Uint32TypeDefinition) { return derivedUint32Builder((Uint32TypeDefinition) baseType, qname); } else if (baseType instanceof Uint64TypeDefinition) { return derivedUint64Builder((Uint64TypeDefinition) baseType, qname); } else { throw new IllegalArgumentException("Unhandled type definition class " + baseType.getClass()); } } public static @NonNull DerivedTypeBuilder derivedBinaryBuilder( final @NonNull BinaryTypeDefinition baseType, final @NonNull QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public BinaryTypeDefinition build() { return new DerivedBinaryType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedBitsBuilder(final BitsTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public BitsTypeDefinition build() { return new DerivedBitsType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedBooleanBuilder( final @NonNull BooleanTypeDefinition baseType, final @NonNull QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public BooleanTypeDefinition build() { return new DerivedBooleanType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static @NonNull DerivedTypeBuilder derivedDecimalBuilder( final DecimalTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public DecimalTypeDefinition build() { return new DerivedDecimalType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedEmptyBuilder( final EmptyTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public EmptyTypeDefinition build() { return new DerivedEmptyType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static @NonNull DerivedTypeBuilder derivedEnumerationBuilder( final EnumTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public EnumTypeDefinition build() { return new DerivedEnumerationType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedIdentityrefBuilder( final IdentityrefTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public IdentityrefTypeDefinition build() { return new DerivedIdentityrefType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedInstanceIdentifierBuilder( final InstanceIdentifierTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public InstanceIdentifierTypeDefinition build() { return new DerivedInstanceIdentifierType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes(), baseType.requireInstance()); } }; } private static @NonNull DerivedTypeBuilder derivedInt8Builder(final Int8TypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public Int8TypeDefinition build() { return new DerivedInt8Type(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedInt16Builder( final Int16TypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public Int16TypeDefinition build() { return new DerivedInt16Type(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedInt32Builder( final Int32TypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public Int32TypeDefinition build() { return new DerivedInt32Type(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static @NonNull DerivedTypeBuilder derivedInt64Builder( final Int64TypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public Int64TypeDefinition build() { return new DerivedInt64Type(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedLeafrefBuilder( final LeafrefTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public LeafrefTypeDefinition build() { return new DerivedLeafrefType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static @NonNull DerivedTypeBuilder derivedStringBuilder( final StringTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public StringTypeDefinition build() { return new DerivedStringType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedUnionBuilder( final UnionTypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public DerivedUnionType build() { return new DerivedUnionType(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static @NonNull DerivedTypeBuilder derivedUint8Builder( final Uint8TypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public Uint8TypeDefinition build() { return new DerivedUint8Type(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static @NonNull DerivedTypeBuilder derivedUint16Builder( final Uint16TypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public Uint16TypeDefinition build() { return new DerivedUint16Type(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedUint32Builder( final Uint32TypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public Uint32TypeDefinition build() { return new DerivedUint32Type(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } public static @NonNull DerivedTypeBuilder derivedUint64Builder( final Uint64TypeDefinition baseType, final QName qname) { return new DerivedTypeBuilder<>(baseType, qname) { @Override public Uint64TypeDefinition build() { return new DerivedUint64Type(getBaseType(), getQName(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } }