Use Objects.hashCode()
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / StringType.java
1 /*
2  * Copyright (c) 2013 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 package org.opendaylight.yangtools.yang.model.util;
9
10 import com.google.common.base.Optional;
11 import java.util.Collections;
12 import java.util.List;
13 import java.util.Objects;
14 import org.opendaylight.yangtools.concepts.Immutable;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
17 import org.opendaylight.yangtools.yang.model.api.Status;
18 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
20 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
21 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
22
23 /**
24  * The <code>default</code> implementation of String Type Definition interface.
25  *
26  * @see StringTypeDefinition
27  */
28 public final class StringType implements StringTypeDefinition, Immutable {
29     private static final QName NAME = BaseTypes.STRING_QNAME;
30     private static final SchemaPath PATH = SchemaPath.create(true, NAME);
31     private static final String DEFAULT_VALUE = "";
32     private static final String DESCRIPTION = "";
33     private static final String REFERENCE = "";
34     private final List<LengthConstraint> lengthStatements;
35     private final List<PatternConstraint> patterns;
36     private static final String UNITS = "";
37
38     private static final StringType INSTANCE = new StringType();
39
40     /**
41      * Default Constructor.
42      */
43     private StringType() {
44         lengthStatements = Collections.singletonList(BaseConstraints.newLengthConstraint(0, Integer.MAX_VALUE, Optional.of(""), Optional.of("")));
45         patterns = Collections.emptyList();
46     }
47
48     public static StringType getInstance() {
49         return INSTANCE;
50     }
51
52     /*
53      * (non-Javadoc)
54      *
55      * @see
56      * org.opendaylight.yangtools.yang.model.api.TypeDefinition#getBaseType()
57      */
58     @Override
59     public StringTypeDefinition getBaseType() {
60         return null;
61     }
62
63     /*
64      * (non-Javadoc)
65      *
66      * @see org.opendaylight.yangtools.yang.model.api.TypeDefinition#getUnits()
67      */
68     @Override
69     public String getUnits() {
70         return UNITS;
71     }
72
73     /*
74      * (non-Javadoc)
75      *
76      * @see
77      * org.opendaylight.yangtools.yang.model.api.TypeDefinition#getDefaultValue
78      * ()
79      */
80     @Override
81     public Object getDefaultValue() {
82         return DEFAULT_VALUE;
83     }
84
85     /*
86      * (non-Javadoc)
87      *
88      * @see org.opendaylight.yangtools.yang.model.api.SchemaNode#getQName()
89      */
90     @Override
91     public QName getQName() {
92         return NAME;
93     }
94
95     /*
96      * (non-Javadoc)
97      *
98      * @see org.opendaylight.yangtools.yang.model.api.SchemaNode#getPath()
99      */
100     @Override
101     public SchemaPath getPath() {
102         return PATH;
103     }
104
105     /*
106      * (non-Javadoc)
107      *
108      * @see
109      * org.opendaylight.yangtools.yang.model.api.SchemaNode#getDescription()
110      */
111     @Override
112     public String getDescription() {
113         return DESCRIPTION;
114     }
115
116     /*
117      * (non-Javadoc)
118      *
119      * @see org.opendaylight.yangtools.yang.model.api.SchemaNode#getReference()
120      */
121     @Override
122     public String getReference() {
123         return REFERENCE;
124     }
125
126     /*
127      * (non-Javadoc)
128      *
129      * @see org.opendaylight.yangtools.yang.model.api.SchemaNode#getStatus()
130      */
131     @Override
132     public Status getStatus() {
133         return Status.CURRENT;
134     }
135
136     /*
137      * (non-Javadoc)
138      *
139      * @see
140      * com.csico.yang.model.base.type.api.StringTypeDefinition#getLengthStatements
141      * ()
142      */
143     @Override
144     public List<LengthConstraint> getLengthConstraints() {
145         return lengthStatements;
146     }
147
148     /*
149      * (non-Javadoc)
150      *
151      * @see
152      * com.csico.yang.model.base.type.api.StringTypeDefinition#getPatterns()
153      */
154     @Override
155     public List<PatternConstraint> getPatternConstraints() {
156         return patterns;
157     }
158
159     @Override
160     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
161         return Collections.emptyList();
162     }
163
164     @Override
165     public int hashCode() {
166         final int prime = 31;
167         int result = 1;
168         result = prime * result + Objects.hashCode(lengthStatements);
169         result = prime * result + NAME.hashCode();
170         result = prime * result + PATH.hashCode();
171         result = prime * result + Objects.hashCode(patterns);
172         return result;
173     }
174
175     @Override
176     public boolean equals(final Object obj) {
177         if (this == obj) {
178             return true;
179         }
180         if (obj == null) {
181             return false;
182         }
183         if (getClass() != obj.getClass()) {
184             return false;
185         }
186         StringType other = (StringType) obj;
187         if (lengthStatements == null) {
188             if (other.lengthStatements != null) {
189                 return false;
190             }
191         } else if (!lengthStatements.equals(other.lengthStatements)) {
192             return false;
193         }
194         if (patterns == null) {
195             if (other.patterns != null) {
196                 return false;
197             }
198         } else if (!patterns.equals(other.patterns)) {
199             return false;
200         }
201         return true;
202     }
203
204     @Override
205     public String toString() {
206         StringBuilder builder = new StringBuilder();
207         builder.append("StringType [name=");
208         builder.append(NAME);
209         builder.append(", path=");
210         builder.append(PATH);
211         builder.append(", defaultValue=");
212         builder.append(DEFAULT_VALUE);
213         builder.append(", description=");
214         builder.append(DESCRIPTION);
215         builder.append(", reference=");
216         builder.append(REFERENCE);
217         builder.append(", lengthStatements=");
218         builder.append(lengthStatements);
219         builder.append(", patterns=");
220         builder.append(patterns);
221         builder.append(", units=");
222         builder.append(UNITS);
223         builder.append("]");
224         return builder.toString();
225     }
226 }