/* * 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; /** * Support for creating {@link TypeDefinition} instances defined by leaf and leaf-list statements. */ @Beta public final class ConcreteTypes { private ConcreteTypes() { throw new UnsupportedOperationException(); } public static ConcreteTypeBuilder<?> concreteTypeBuilder(@Nonnull final TypeDefinition<?> baseType, @Nonnull final SchemaPath path) { if (baseType instanceof BinaryTypeDefinition) { return concreteBinaryBuilder((BinaryTypeDefinition) baseType, path); } else if (baseType instanceof BitsTypeDefinition) { return concreteBitsBuilder((BitsTypeDefinition) baseType, path); } else if (baseType instanceof BooleanTypeDefinition) { return concreteBooleanBuilder((BooleanTypeDefinition) baseType, path); } else if (baseType instanceof DecimalTypeDefinition) { return concreteDecimalBuilder((DecimalTypeDefinition) baseType, path); } else if (baseType instanceof EmptyTypeDefinition) { return concreteEmptyBuilder((EmptyTypeDefinition) baseType, path); } else if (baseType instanceof EnumTypeDefinition) { return concreteEnumerationBuilder((EnumTypeDefinition) baseType, path); } else if (baseType instanceof IdentityrefTypeDefinition) { return concreteIdentityrefBuilder((IdentityrefTypeDefinition) baseType, path); } else if (baseType instanceof InstanceIdentifierTypeDefinition) { return concreteInstanceIdentifierBuilder((InstanceIdentifierTypeDefinition) baseType, path); } else if (baseType instanceof IntegerTypeDefinition) { return concreteIntegerBuilder((IntegerTypeDefinition) baseType, path); } else if (baseType instanceof LeafrefTypeDefinition) { return concreteLeafrefBuilder((LeafrefTypeDefinition) baseType, path); } else if (baseType instanceof StringTypeDefinition) { return concreteStringBuilder((StringTypeDefinition) baseType, path); } else if (baseType instanceof UnionTypeDefinition) { return concreteUnionBuilder((UnionTypeDefinition) baseType, path); } else if (baseType instanceof UnsignedIntegerTypeDefinition) { return concreteUnsignedBuilder((UnsignedIntegerTypeDefinition) baseType, path); } else { throw new IllegalArgumentException("Unhandled type definition class " + baseType.getClass()); } } private static ConcreteTypeBuilder<BinaryTypeDefinition> concreteBinaryBuilder(@Nonnull final BinaryTypeDefinition baseType, @Nonnull final SchemaPath path) { return new ConcreteTypeBuilder<BinaryTypeDefinition>(baseType, path) { @Nonnull @Override public BinaryTypeDefinition buildType() { return new DerivedBinaryType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<BitsTypeDefinition> concreteBitsBuilder(final BitsTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<BitsTypeDefinition>(baseType, path) { @Nonnull @Override public BitsTypeDefinition buildType() { return new DerivedBitsType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<BooleanTypeDefinition> concreteBooleanBuilder(@Nonnull final BooleanTypeDefinition baseType, @Nonnull final SchemaPath path) { return new ConcreteTypeBuilder<BooleanTypeDefinition>(baseType, path) { @Nonnull @Override public BooleanTypeDefinition buildType() { return new DerivedBooleanType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<DecimalTypeDefinition> concreteDecimalBuilder(final DecimalTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<DecimalTypeDefinition>(baseType, path) { @Nonnull @Override public DecimalTypeDefinition buildType() { return new DerivedDecimalType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<EmptyTypeDefinition> concreteEmptyBuilder(final EmptyTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<EmptyTypeDefinition>(baseType, path) { @Nonnull @Override public EmptyTypeDefinition buildType() { return new DerivedEmptyType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<EnumTypeDefinition> concreteEnumerationBuilder(final EnumTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<EnumTypeDefinition>(baseType, path) { @Nonnull @Override public EnumTypeDefinition buildType() { return new DerivedEnumerationType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<IdentityrefTypeDefinition> concreteIdentityrefBuilder(final IdentityrefTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<IdentityrefTypeDefinition>(baseType, path) { @Nonnull @Override public IdentityrefTypeDefinition buildType() { return new DerivedIdentityrefType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<InstanceIdentifierTypeDefinition> concreteInstanceIdentifierBuilder(final InstanceIdentifierTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<InstanceIdentifierTypeDefinition>(baseType, path) { @Nonnull @Override public InstanceIdentifierTypeDefinition buildType() { return new DerivedInstanceIdentifierType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes(), baseType.requireInstance()); } }; } private static ConcreteTypeBuilder<IntegerTypeDefinition> concreteIntegerBuilder(final IntegerTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<IntegerTypeDefinition>(baseType, path) { @Nonnull @Override public IntegerTypeDefinition buildType() { return new DerivedIntegerType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<LeafrefTypeDefinition> concreteLeafrefBuilder(final LeafrefTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<LeafrefTypeDefinition>(baseType, path) { @Nonnull @Override public LeafrefTypeDefinition buildType() { return new DerivedLeafrefType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<StringTypeDefinition> concreteStringBuilder(final StringTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<StringTypeDefinition>(baseType, path) { @Nonnull @Override public StringTypeDefinition buildType() { return new DerivedStringType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<UnionTypeDefinition> concreteUnionBuilder(final UnionTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<UnionTypeDefinition>(baseType, path) { @Nonnull @Override public DerivedUnionType buildType() { return new DerivedUnionType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } private static ConcreteTypeBuilder<UnsignedIntegerTypeDefinition> concreteUnsignedBuilder(final UnsignedIntegerTypeDefinition baseType, final SchemaPath path) { return new ConcreteTypeBuilder<UnsignedIntegerTypeDefinition>(baseType, path) { @Nonnull @Override public UnsignedIntegerTypeDefinition buildType() { return new DerivedUnsignedType(getBaseType(), getPath(), getDefaultValue(), getDescription(), getReference(), getStatus(), getUnits(), getUnknownSchemaNodes()); } }; } }