Introduce model.util.type package
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / type / BaseDecimalType.java
1 /*
2  * Copyright (c) 2015 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.model.util.type;
9
10 import com.google.common.base.MoreObjects.ToStringHelper;
11 import com.google.common.base.Optional;
12 import com.google.common.collect.ImmutableList;
13 import com.google.common.collect.ImmutableList.Builder;
14 import java.math.BigDecimal;
15 import java.util.List;
16 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
17 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
19 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
20 import org.opendaylight.yangtools.yang.model.util.BaseConstraints;
21
22 final class BaseDecimalType extends AbstractRangedBaseType<DecimalTypeDefinition> implements DecimalTypeDefinition {
23     private static final List<List<RangeConstraint>> IMPLICIT_RANGE_STATEMENTS;
24     static {
25         final Builder<List<RangeConstraint>> b = ImmutableList.builder();
26         b.add(createRangeConstraint("-922337203685477580.8", "922337203685477580.7"));
27         b.add(createRangeConstraint("-92233720368547758.08", "92233720368547758.07"));
28         b.add(createRangeConstraint("-9223372036854775.808", "9223372036854775.807"));
29         b.add(createRangeConstraint("-922337203685477.5808", "922337203685477.5807"));
30         b.add(createRangeConstraint("-92233720368547.75808", "92233720368547.75807"));
31         b.add(createRangeConstraint("-9223372036854.775808", "9223372036854.775807"));
32         b.add(createRangeConstraint("-922337203685.4775808", "922337203685.4775807"));
33         b.add(createRangeConstraint("-92233720368.54775808", "92233720368.54775807"));
34         b.add(createRangeConstraint("-9223372036.854775808", "9223372036.854775807"));
35         b.add(createRangeConstraint("-922337203.6854775808", "922337203.6854775807"));
36         b.add(createRangeConstraint("-92233720.36854775808", "92233720.36854775807"));
37         b.add(createRangeConstraint("-9223372.036854775808", "9223372.036854775807"));
38         b.add(createRangeConstraint("-922337.2036854775808", "922337.2036854775807"));
39         b.add(createRangeConstraint("-92233.72036854775808", "92233.72036854775807"));
40         b.add(createRangeConstraint("-9223.372036854775808", "9223.372036854775807"));
41         b.add(createRangeConstraint("-922.3372036854775808", "922.3372036854775807"));
42         b.add(createRangeConstraint("-92.23372036854775808", "92.23372036854775807"));
43         b.add(createRangeConstraint("-9.223372036854775808", "9.223372036854775807"));
44         IMPLICIT_RANGE_STATEMENTS = b.build();
45     }
46
47     private static List<RangeConstraint> createRangeConstraint(final String min, final String max) {
48         return ImmutableList.of(BaseConstraints.newRangeConstraint(new BigDecimal(min), new BigDecimal(max),
49             Optional.<String>absent(), Optional.of("https://tools.ietf.org/html/rfc6020#section-9.3.4")));
50     }
51
52     private final Integer fractionDigits;
53
54     BaseDecimalType(final SchemaPath path, final List<UnknownSchemaNode> unknownSchemaNodes, final Integer fractionDigits) {
55         super(path, unknownSchemaNodes, IMPLICIT_RANGE_STATEMENTS.get(fractionDigits - 1));
56         this.fractionDigits = fractionDigits;
57     }
58
59     @Override
60     public Integer getFractionDigits() {
61         return fractionDigits;
62     }
63
64     @Override
65     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
66         return super.addToStringAttributes(toStringHelper).add("fractionDigits", fractionDigits);
67     }
68 }