2 * Copyright (c) 2015 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.model.ri.type;
10 import static com.google.common.base.Verify.verifyNotNull;
12 import com.google.common.collect.ImmutableList;
13 import com.google.common.collect.ImmutableRangeSet;
14 import com.google.common.collect.Range;
15 import java.util.Collection;
16 import java.util.Optional;
17 import org.opendaylight.yangtools.yang.common.Decimal64;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
20 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
22 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
24 final class BaseDecimalType extends AbstractRangeRestrictedBaseType<DecimalTypeDefinition, Decimal64>
25 implements DecimalTypeDefinition {
26 private static final ConstraintMetaDefinition BUILTIN_CONSTRAINT = new ConstraintMetaDefinition() {
29 public Optional<String> getReference() {
30 return Optional.of("https://tools.ietf.org/html/rfc6020#section-9.3.4");
34 public Optional<String> getDescription() {
35 return Optional.empty();
39 public Optional<String> getErrorMessage() {
40 return Optional.empty();
44 public Optional<String> getErrorAppTag() {
45 return Optional.empty();
49 private static final ImmutableList<RangeConstraint<Decimal64>> IMPLICIT_RANGE_STATEMENTS;
52 final var builder = ImmutableList.<RangeConstraint<Decimal64>>builderWithExpectedSize(18);
53 for (int scale = 1; scale <= 18; ++scale) {
54 builder.add(new ResolvedRangeConstraint<>(BUILTIN_CONSTRAINT, ImmutableRangeSet.of(Range.closed(
55 Decimal64.minValueIn(scale), Decimal64.maxValueIn(scale)))));
57 IMPLICIT_RANGE_STATEMENTS = builder.build();
60 static RangeConstraint<Decimal64> constraintsForDigits(final int fractionDigits) {
61 return verifyNotNull(IMPLICIT_RANGE_STATEMENTS.get(fractionDigits - 1));
64 private final int fractionDigits;
66 BaseDecimalType(final QName qname, final Collection<? extends UnknownSchemaNode> unknownSchemaNodes,
67 final int fractionDigits, final RangeConstraint<Decimal64> rangeConstraint) {
68 super(qname, unknownSchemaNodes, rangeConstraint);
69 this.fractionDigits = fractionDigits;
73 public int getFractionDigits() {
74 return fractionDigits;
78 public int hashCode() {
79 return DecimalTypeDefinition.hashCode(this);
83 public boolean equals(final Object obj) {
84 return DecimalTypeDefinition.equals(this, obj);
88 public String toString() {
89 return DecimalTypeDefinition.toString(this);