12b9b35bdb2e5adecb78a2955ce7e06e452ec294
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / type / UnsignedIntegerEffectiveImplBase.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. 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
9 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type;
10
11 import com.google.common.base.Optional;
12 import java.util.Collections;
13 import java.util.List;
14 import java.util.Objects;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.common.YangConstants;
17 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
18 import org.opendaylight.yangtools.yang.model.api.Status;
19 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
22 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
23 import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition;
24 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
25 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
26 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
27
28 abstract class UnsignedIntegerEffectiveImplBase extends
29         EffectiveStatementBase<String, TypeStatement> implements UnsignedIntegerTypeDefinition {
30
31     private static final String REFERENCE_INT = "https://tools.ietf.org/html/rfc6020#section-9.2";
32
33     protected static final Number MIN_RANGE = 0;
34     private final QName qName;
35     private final SchemaPath path;
36     private final String units = "";
37     private final String description;
38     private final List<RangeConstraint> rangeStatements;
39
40     protected UnsignedIntegerEffectiveImplBase(final StmtContext<String, TypeStatement, EffectiveStatement<String, TypeStatement>> ctx,
41             final String localName, final Number maxRange, final String description) {
42
43         super(ctx);
44
45         this.qName = QName.create(YangConstants.RFC6020_YANG_MODULE, localName);
46         path = Utils.getSchemaPath(ctx);
47
48         final String rangeDescription = "Integer values between " + MIN_RANGE + " and " + maxRange + ", inclusively.";
49         final RangeConstraint defaultRange = new RangeConstraintEffectiveImpl(MIN_RANGE, maxRange,
50                 Optional.of(rangeDescription), Optional.of(RangeConstraintEffectiveImpl.DEFAULT_REFERENCE));
51         rangeStatements = Collections.singletonList(defaultRange);
52
53         this.description = description;
54     }
55
56     @Override
57     public List<RangeConstraint> getRangeConstraints() {
58         return rangeStatements;
59     }
60
61     @Override
62     public UnsignedIntegerTypeDefinition getBaseType() {
63         return null;
64     }
65
66     @Override
67     public String getUnits() {
68         return units;
69     }
70
71     @Override
72     public Object getDefaultValue() {
73         return null;
74     }
75
76     @Override
77     public QName getQName() {
78         return qName;
79     }
80
81     @Override
82     public SchemaPath getPath() {
83         return path;
84     }
85
86     @Override
87     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
88         return Collections.emptyList();
89     }
90
91     @Override
92     public String getDescription() {
93         return description;
94     }
95
96     @Override
97     public String getReference() {
98         return REFERENCE_INT;
99     }
100
101     @Override
102     public Status getStatus() {
103         return Status.CURRENT;
104     }
105
106     @Override
107     public int hashCode() {
108         final int prime = 31;
109         int result = 1;
110         result = prime * result + Objects.hashCode(description);
111         result = prime * result + Objects.hashCode(qName);
112         result = prime * result + Objects.hashCode(path);
113         result = prime * result + Objects.hashCode(rangeStatements);
114         result = prime * result + Objects.hashCode(units);
115         return result;
116     }
117
118     @Override
119     public boolean equals(final Object obj) {
120         if (this == obj) {
121             return true;
122         }
123         if (obj == null) {
124             return false;
125         }
126         if (getClass() != obj.getClass()) {
127             return false;
128         }
129         UnsignedIntegerEffectiveImplBase other = (UnsignedIntegerEffectiveImplBase) obj;
130         if (!Objects.equals(description, other.description)) {
131             return false;
132         }
133         if (!Objects.equals(qName, other.qName)) {
134             return false;
135         }
136         if (!Objects.equals(path, other.path)) {
137             return false;
138         }
139         if (!Objects.equals(rangeStatements, other.rangeStatements)) {
140             return false;
141         }
142         if (!Objects.equals(units, other.units)) {
143             return false;
144         }
145         return true;
146     }
147
148     @Override
149     public String toString() {
150         StringBuilder builder = new StringBuilder();
151         builder.append(getClass().getSimpleName());
152         builder.append(" [name=");
153         builder.append(qName);
154         builder.append(", path=");
155         builder.append(path);
156         builder.append(", description=");
157         builder.append(description);
158         builder.append(", reference=");
159         builder.append(REFERENCE_INT);
160         builder.append(", units=");
161         builder.append(units);
162         builder.append(", rangeStatements=");
163         builder.append(rangeStatements);
164         builder.append("]");
165         return builder.toString();
166     }
167 }