Committed by
Gerrit Code Review
YANG: Restriction resolution implementation
Change-Id: I69503e8229def07b289a0c8c762bfe0ae5530232
Showing
33 changed files
with
1194 additions
and
444 deletions
| 1 | +/* | ||
| 2 | + * Copyright 2016-present Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +package org.onosproject.yangutils.datamodel; | ||
| 18 | + | ||
| 19 | +/** | ||
| 20 | + * Abstraction of location information, this is used during resolution is | ||
| 21 | + * carried out and line/character position in line is required to point | ||
| 22 | + * out the error location in YANG file. | ||
| 23 | + */ | ||
| 24 | +public interface LocationInfo { | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * Returns the line number YANG construct in file. | ||
| 28 | + * | ||
| 29 | + * @return the line number YANG construct in file | ||
| 30 | + */ | ||
| 31 | + int getLineNumber(); | ||
| 32 | + | ||
| 33 | + /** | ||
| 34 | + * Returns the character position in line. | ||
| 35 | + * | ||
| 36 | + * @return the character position in line | ||
| 37 | + */ | ||
| 38 | + int getCharPosition(); | ||
| 39 | + | ||
| 40 | + /** | ||
| 41 | + * Sets line number of YANG construct. | ||
| 42 | + * | ||
| 43 | + * @param lineNumber the line number of YANG construct in file | ||
| 44 | + */ | ||
| 45 | + void setLineNumber(int lineNumber); | ||
| 46 | + | ||
| 47 | + /** | ||
| 48 | + * Sets character position of YANG construct. | ||
| 49 | + * | ||
| 50 | + * @param charPositionInLine character position of YANG construct in file | ||
| 51 | + */ | ||
| 52 | + void setCharPosition(int charPositionInLine); | ||
| 53 | +} |
| ... | @@ -228,7 +228,7 @@ public enum YangDataTypes { | ... | @@ -228,7 +228,7 @@ public enum YangDataTypes { |
| 228 | public static YangDataTypes getType(String name) { | 228 | public static YangDataTypes getType(String name) { |
| 229 | name = name.replace("\"", ""); | 229 | name = name.replace("\"", ""); |
| 230 | for (YangDataTypes yangDataType : values()) { | 230 | for (YangDataTypes yangDataType : values()) { |
| 231 | - if (yangDataType.name().equalsIgnoreCase(name)) { | 231 | + if (yangDataType.name().toLowerCase().equals(name)) { |
| 232 | return yangDataType; | 232 | return yangDataType; |
| 233 | } | 233 | } |
| 234 | } | 234 | } | ... | ... |
| ... | @@ -16,12 +16,30 @@ | ... | @@ -16,12 +16,30 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
| 18 | 18 | ||
| 19 | +import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
| 20 | +import com.google.common.base.Strings; | ||
| 21 | + | ||
| 22 | +import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
| 23 | +import static org.onosproject.yangutils.datamodel.ResolvableStatus.RESOLVED; | ||
| 24 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.BITS; | ||
| 25 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.BOOLEAN; | ||
| 26 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | ||
| 27 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.EMPTY; | ||
| 28 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.ENUMERATION; | ||
| 29 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.IDENTITYREF; | ||
| 30 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.LEAFREF; | ||
| 31 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | ||
| 32 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.UNION; | ||
| 33 | +import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType; | ||
| 34 | +import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction; | ||
| 35 | +import static org.onosproject.yangutils.utils.RestrictionResolver.processRangeRestriction; | ||
| 36 | + | ||
| 19 | /** | 37 | /** |
| 20 | * Represents the derived information. | 38 | * Represents the derived information. |
| 21 | * | 39 | * |
| 22 | * @param <T> extended information. | 40 | * @param <T> extended information. |
| 23 | */ | 41 | */ |
| 24 | -public class YangDerivedInfo<T> { | 42 | +public class YangDerivedInfo<T> implements LocationInfo { |
| 25 | 43 | ||
| 26 | /** | 44 | /** |
| 27 | * YANG typedef reference. | 45 | * YANG typedef reference. |
| ... | @@ -36,11 +54,38 @@ public class YangDerivedInfo<T> { | ... | @@ -36,11 +54,38 @@ public class YangDerivedInfo<T> { |
| 36 | private T resolvedExtendedInfo; | 54 | private T resolvedExtendedInfo; |
| 37 | 55 | ||
| 38 | /** | 56 | /** |
| 39 | - * Additional information about data type, example restriction info, named | 57 | + * Line number of pattern restriction in YANG file. |
| 40 | - * values, etc. The extra information is based on the data type. Based on | 58 | + */ |
| 41 | - * the data type, the extended info can vary. | 59 | + private int lineNumber; |
| 60 | + | ||
| 61 | + /** | ||
| 62 | + * Position of pattern restriction in line. | ||
| 63 | + */ | ||
| 64 | + private int charPositionInLine; | ||
| 65 | + | ||
| 66 | + /** | ||
| 67 | + * Effective built-in type, requried in case type of typedef is again a | ||
| 68 | + * derived type. This information is to be added during linking. | ||
| 42 | */ | 69 | */ |
| 43 | - private T extendedInfo; | 70 | + private YangDataTypes effectiveBuiltInType; |
| 71 | + | ||
| 72 | + /** | ||
| 73 | + * Length restriction string to temporary store the length restriction when the type | ||
| 74 | + * is derived. | ||
| 75 | + */ | ||
| 76 | + private String lengthRestrictionString; | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * Range restriction string to temporary store the range restriction when the type | ||
| 80 | + * is derived. | ||
| 81 | + */ | ||
| 82 | + private String rangeRestrictionString; | ||
| 83 | + | ||
| 84 | + /** | ||
| 85 | + * Pattern restriction string to temporary store the pattern restriction when the type | ||
| 86 | + * is derived. | ||
| 87 | + */ | ||
| 88 | + private YangPatternRestriction patternRestriction; | ||
| 44 | 89 | ||
| 45 | /** | 90 | /** |
| 46 | * Returns the referred typedef reference. | 91 | * Returns the referred typedef reference. |
| ... | @@ -78,21 +123,503 @@ public class YangDerivedInfo<T> { | ... | @@ -78,21 +123,503 @@ public class YangDerivedInfo<T> { |
| 78 | this.resolvedExtendedInfo = resolvedExtendedInfo; | 123 | this.resolvedExtendedInfo = resolvedExtendedInfo; |
| 79 | } | 124 | } |
| 80 | 125 | ||
| 126 | + @Override | ||
| 127 | + public int getLineNumber() { | ||
| 128 | + return lineNumber; | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + @Override | ||
| 132 | + public int getCharPosition() { | ||
| 133 | + return charPositionInLine; | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + @Override | ||
| 137 | + public void setLineNumber(int lineNumber) { | ||
| 138 | + this.lineNumber = lineNumber; | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + @Override | ||
| 142 | + public void setCharPosition(int charPositionInLine) { | ||
| 143 | + this.charPositionInLine = charPositionInLine; | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + /** | ||
| 147 | + * Returns the length restriction string. | ||
| 148 | + * | ||
| 149 | + * @return the length restriction string | ||
| 150 | + */ | ||
| 151 | + public String getLengthRestrictionString() { | ||
| 152 | + return lengthRestrictionString; | ||
| 153 | + } | ||
| 154 | + | ||
| 155 | + /** | ||
| 156 | + * Sets the length restriction string. | ||
| 157 | + * | ||
| 158 | + * @param lengthRestrictionString the length restriction string | ||
| 159 | + */ | ||
| 160 | + public void setLengthRestrictionString(String lengthRestrictionString) { | ||
| 161 | + this.lengthRestrictionString = lengthRestrictionString; | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + /** | ||
| 165 | + * Returns the range restriction string. | ||
| 166 | + * | ||
| 167 | + * @return the range restriction string | ||
| 168 | + */ | ||
| 169 | + public String getRangeRestrictionString() { | ||
| 170 | + return rangeRestrictionString; | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + /** | ||
| 174 | + * Sets the range restriction string. | ||
| 175 | + * | ||
| 176 | + * @param rangeRestrictionString the range restriction string | ||
| 177 | + */ | ||
| 178 | + public void setRangeRestrictionString(String rangeRestrictionString) { | ||
| 179 | + this.rangeRestrictionString = rangeRestrictionString; | ||
| 180 | + } | ||
| 181 | + | ||
| 182 | + /** | ||
| 183 | + * Returns the pattern restriction. | ||
| 184 | + * | ||
| 185 | + * @return the pattern restriction | ||
| 186 | + */ | ||
| 187 | + public YangPatternRestriction getPatternRestriction() { | ||
| 188 | + return patternRestriction; | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + /** | ||
| 192 | + * Sets the pattern restriction. | ||
| 193 | + * | ||
| 194 | + * @param patternRestriction the pattern restriction | ||
| 195 | + */ | ||
| 196 | + public void setPatternRestriction(YangPatternRestriction patternRestriction) { | ||
| 197 | + this.patternRestriction = patternRestriction; | ||
| 198 | + } | ||
| 199 | + | ||
| 200 | + /** | ||
| 201 | + * Returns effective built-in type. | ||
| 202 | + * | ||
| 203 | + * @return effective built-in type | ||
| 204 | + */ | ||
| 205 | + public YangDataTypes getEffectiveBuiltInType() { | ||
| 206 | + return effectiveBuiltInType; | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + /** | ||
| 210 | + * Sets effective built-in type. | ||
| 211 | + * | ||
| 212 | + * @param effectiveBuiltInType effective built-in type | ||
| 213 | + */ | ||
| 214 | + public void setEffectiveBuiltInType(YangDataTypes effectiveBuiltInType) { | ||
| 215 | + this.effectiveBuiltInType = effectiveBuiltInType; | ||
| 216 | + } | ||
| 217 | + | ||
| 81 | /** | 218 | /** |
| 82 | - * Returns extended information. | 219 | + * Resolves the type derived info, by obtaining the effective built-in type |
| 220 | + * and resolving the restrictions. | ||
| 83 | * | 221 | * |
| 84 | - * @return extended information | 222 | + * @return resolution status |
| 223 | + * @throws DataModelException a violation in data mode rule | ||
| 85 | */ | 224 | */ |
| 86 | - public T getExtendedInfo() { | 225 | + public ResolvableStatus resolve() throws DataModelException { |
| 87 | - return extendedInfo; | 226 | + |
| 227 | + YangType<?> baseType = getReferredTypeDef().getTypeDefBaseType(); | ||
| 228 | + | ||
| 229 | + /* | ||
| 230 | + * Checks the data type of the referred typedef, if it's derived, | ||
| 231 | + * obtain effective built-in type and restrictions from it's derived | ||
| 232 | + * info, otherwise take from the base type of type itself. | ||
| 233 | + */ | ||
| 234 | + if (baseType.getDataType() == DERIVED) { | ||
| 235 | + /* | ||
| 236 | + * Check whether the referred typedef is resolved. | ||
| 237 | + */ | ||
| 238 | + if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED && baseType.getResolvableStatus() != RESOLVED) { | ||
| 239 | + throw new DataModelException("Linker Error: Referred typedef is not resolved."); | ||
| 240 | + } | ||
| 241 | + | ||
| 242 | + /* | ||
| 243 | + * Check if the referred typedef is intra file resolved, if yes sets | ||
| 244 | + * current status also to intra file resolved . | ||
| 245 | + */ | ||
| 246 | + if (getReferredTypeDef().getTypeDefBaseType().getResolvableStatus() == INTRA_FILE_RESOLVED) { | ||
| 247 | + return INTRA_FILE_RESOLVED; | ||
| 248 | + } | ||
| 249 | + setEffectiveBuiltInType(((YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo()) | ||
| 250 | + .getEffectiveBuiltInType()); | ||
| 251 | + YangDerivedInfo refDerivedInfo = ((YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo()); | ||
| 252 | + /* | ||
| 253 | + * Check whether the effective built-in type can have range | ||
| 254 | + * restrictions, if yes call resolution of range. | ||
| 255 | + */ | ||
| 256 | + if (isOfRangeRestrictedType(getEffectiveBuiltInType())) { | ||
| 257 | + if (refDerivedInfo.getResolvedExtendedInfo() == null) { | ||
| 258 | + resolveRangeRestriction(null); | ||
| 259 | + /* | ||
| 260 | + * Return the resolution status as resolved, if it's not | ||
| 261 | + * resolve range/string restriction will throw exception | ||
| 262 | + * in previous function. | ||
| 263 | + */ | ||
| 264 | + return RESOLVED; | ||
| 265 | + } else { | ||
| 266 | + if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangRangeRestriction)) { | ||
| 267 | + throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " + | ||
| 268 | + "type."); | ||
| 269 | + } | ||
| 270 | + resolveRangeRestriction((YangRangeRestriction) refDerivedInfo.getResolvedExtendedInfo()); | ||
| 271 | + /* | ||
| 272 | + * Return the resolution status as resolved, if it's not | ||
| 273 | + * resolve range/string restriction will throw exception | ||
| 274 | + * in previous function. | ||
| 275 | + */ | ||
| 276 | + return RESOLVED; | ||
| 277 | + } | ||
| 278 | + /* | ||
| 279 | + * If the effective built-in type is of type string calls | ||
| 280 | + * for string resolution. | ||
| 281 | + */ | ||
| 282 | + } else if (getEffectiveBuiltInType() == STRING) { | ||
| 283 | + if (refDerivedInfo.getResolvedExtendedInfo() == null) { | ||
| 284 | + resolveStringRestriction(null); | ||
| 285 | + /* | ||
| 286 | + * Return the resolution status as resolved, if it's not | ||
| 287 | + * resolve range/string restriction will throw exception | ||
| 288 | + * in previous function. | ||
| 289 | + */ | ||
| 290 | + return RESOLVED; | ||
| 291 | + } else { | ||
| 292 | + if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangStringRestriction)) { | ||
| 293 | + throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " + | ||
| 294 | + "type."); | ||
| 295 | + } | ||
| 296 | + resolveStringRestriction((YangStringRestriction) refDerivedInfo.getResolvedExtendedInfo()); | ||
| 297 | + /* | ||
| 298 | + * Return the resolution status as resolved, if it's not | ||
| 299 | + * resolve range/string restriction will throw exception | ||
| 300 | + * in previous function. | ||
| 301 | + */ | ||
| 302 | + return RESOLVED; | ||
| 303 | + } | ||
| 304 | + } | ||
| 305 | + } else { | ||
| 306 | + setEffectiveBuiltInType((baseType.getDataType())); | ||
| 307 | + /* | ||
| 308 | + * Check whether the effective built-in type can have range | ||
| 309 | + * restrictions, if yes call resolution of range. | ||
| 310 | + */ | ||
| 311 | + if (isOfRangeRestrictedType(getEffectiveBuiltInType())) { | ||
| 312 | + if (baseType.getDataTypeExtendedInfo() == null) { | ||
| 313 | + resolveRangeRestriction(null); | ||
| 314 | + /* | ||
| 315 | + * Return the resolution status as resolved, if it's not | ||
| 316 | + * resolve range/string restriction will throw exception | ||
| 317 | + * in previous function. | ||
| 318 | + */ | ||
| 319 | + return RESOLVED; | ||
| 320 | + } else { | ||
| 321 | + if (!(baseType.getDataTypeExtendedInfo() instanceof YangRangeRestriction)) { | ||
| 322 | + throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " + | ||
| 323 | + "type."); | ||
| 324 | + } | ||
| 325 | + resolveRangeRestriction((YangRangeRestriction) baseType.getDataTypeExtendedInfo()); | ||
| 326 | + /* | ||
| 327 | + * Return the resolution status as resolved, if it's not | ||
| 328 | + * resolve range/string restriction will throw exception | ||
| 329 | + * in previous function. | ||
| 330 | + */ | ||
| 331 | + return RESOLVED; | ||
| 332 | + } | ||
| 333 | + /* | ||
| 334 | + * If the effective built-in type is of type string calls | ||
| 335 | + * for string resolution. | ||
| 336 | + */ | ||
| 337 | + } else if (getEffectiveBuiltInType() == STRING) { | ||
| 338 | + if (baseType.getDataTypeExtendedInfo() == null) { | ||
| 339 | + resolveStringRestriction(null); | ||
| 340 | + /* | ||
| 341 | + * Return the resolution status as resolved, if it's not | ||
| 342 | + * resolve range/string restriction will throw exception | ||
| 343 | + * in previous function. | ||
| 344 | + */ | ||
| 345 | + return RESOLVED; | ||
| 346 | + } else { | ||
| 347 | + if (!(baseType.getDataTypeExtendedInfo() instanceof YangStringRestriction)) { | ||
| 348 | + throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " + | ||
| 349 | + "type."); | ||
| 350 | + } | ||
| 351 | + resolveStringRestriction((YangStringRestriction) baseType.getDataTypeExtendedInfo()); | ||
| 352 | + /* | ||
| 353 | + * Return the resolution status as resolved, if it's not | ||
| 354 | + * resolve range/string restriction will throw exception | ||
| 355 | + * in previous function. | ||
| 356 | + */ | ||
| 357 | + return RESOLVED; | ||
| 358 | + } | ||
| 359 | + } | ||
| 360 | + } | ||
| 361 | + | ||
| 362 | + /* | ||
| 363 | + * Check if the data type is the one which can't be restricted, in | ||
| 364 | + * this case check whether no self restrictions should be present. | ||
| 365 | + */ | ||
| 366 | + if (isOfValidNonRestrictedType(getEffectiveBuiltInType())) { | ||
| 367 | + if (Strings.isNullOrEmpty(getLengthRestrictionString()) | ||
| 368 | + && Strings.isNullOrEmpty(getRangeRestrictionString()) | ||
| 369 | + && getPatternRestriction() == null) { | ||
| 370 | + return RESOLVED; | ||
| 371 | + } else { | ||
| 372 | + throw new DataModelException("YANG file error: Restrictions can't be applied to a given type"); | ||
| 373 | + } | ||
| 374 | + } | ||
| 375 | + | ||
| 376 | + // Throw exception for unsupported types | ||
| 377 | + throw new DataModelException("Linker error: Unable to process the derived type."); | ||
| 378 | + } | ||
| 379 | + | ||
| 380 | + /** | ||
| 381 | + * Resolves the string restrictions. | ||
| 382 | + * | ||
| 383 | + * @param refStringRestriction referred string restriction of typedef | ||
| 384 | + * @throws DataModelException a violation in data model rule | ||
| 385 | + */ | ||
| 386 | + private void resolveStringRestriction(YangStringRestriction refStringRestriction) throws DataModelException { | ||
| 387 | + YangStringRestriction curStringRestriction = null; | ||
| 388 | + YangRangeRestriction refRangeRestriction = null; | ||
| 389 | + YangPatternRestriction refPatternRestriction = null; | ||
| 390 | + | ||
| 391 | + /* | ||
| 392 | + * Check that range restriction should be null when built-in type is | ||
| 393 | + * string. | ||
| 394 | + */ | ||
| 395 | + if (!(Strings.isNullOrEmpty(getRangeRestrictionString()))) { | ||
| 396 | + DataModelException dataModelException = new DataModelException("YANG file error: Range restriction " + | ||
| 397 | + "should't be present for string data type."); | ||
| 398 | + dataModelException.setLine(lineNumber); | ||
| 399 | + dataModelException.setCharPosition(charPositionInLine); | ||
| 400 | + throw dataModelException; | ||
| 401 | + } | ||
| 402 | + | ||
| 403 | + /* | ||
| 404 | + * If referred restriction and self restriction both are null, no | ||
| 405 | + * resolution is required. | ||
| 406 | + */ | ||
| 407 | + if (refStringRestriction == null && Strings.isNullOrEmpty(getLengthRestrictionString()) | ||
| 408 | + && getPatternRestriction() == null) { | ||
| 409 | + return; | ||
| 410 | + } | ||
| 411 | + | ||
| 412 | + /* | ||
| 413 | + * If referred string restriction is not null, take value of length | ||
| 414 | + * and pattern restriction and assign. | ||
| 415 | + */ | ||
| 416 | + if (refStringRestriction != null) { | ||
| 417 | + refRangeRestriction = refStringRestriction.getLengthRestriction(); | ||
| 418 | + refPatternRestriction = refStringRestriction.getPatternRestriction(); | ||
| 419 | + } | ||
| 420 | + | ||
| 421 | + YangRangeRestriction lengthRestriction = resolveLengthRestriction(refRangeRestriction); | ||
| 422 | + YangPatternRestriction patternRestriction = resolvePatternRestriction(refPatternRestriction); | ||
| 423 | + | ||
| 424 | + /* | ||
| 425 | + * Check if either of length or pattern restriction is present, if yes | ||
| 426 | + * create string restriction and assign value. | ||
| 427 | + */ | ||
| 428 | + if (lengthRestriction != null || patternRestriction != null) { | ||
| 429 | + curStringRestriction = new YangStringRestriction(); | ||
| 430 | + curStringRestriction.setLengthRestriction(lengthRestriction); | ||
| 431 | + curStringRestriction.setPatternRestriction(patternRestriction); | ||
| 432 | + } | ||
| 433 | + setResolvedExtendedInfo((T) curStringRestriction); | ||
| 434 | + } | ||
| 435 | + | ||
| 436 | + /** | ||
| 437 | + * Resolves pattern restriction. | ||
| 438 | + * | ||
| 439 | + * @param refPatternRestriction referred pattern restriction of typedef | ||
| 440 | + * @return resolved pattern restriction | ||
| 441 | + */ | ||
| 442 | + private YangPatternRestriction resolvePatternRestriction(YangPatternRestriction refPatternRestriction) { | ||
| 443 | + /* | ||
| 444 | + * If referred restriction and self restriction both are null, no | ||
| 445 | + * resolution is required. | ||
| 446 | + */ | ||
| 447 | + if (refPatternRestriction == null && getPatternRestriction() == null) { | ||
| 448 | + return null; | ||
| 449 | + } | ||
| 450 | + | ||
| 451 | + /* | ||
| 452 | + * If self restriction is null, and referred restriction is present | ||
| 453 | + * shallow copy the referred to self. | ||
| 454 | + */ | ||
| 455 | + if (getPatternRestriction() == null) { | ||
| 456 | + return refPatternRestriction; | ||
| 457 | + } | ||
| 458 | + | ||
| 459 | + /* | ||
| 460 | + * If referred restriction is null, and self restriction is present | ||
| 461 | + * carry out self resolution. | ||
| 462 | + */ | ||
| 463 | + if (refPatternRestriction == null) { | ||
| 464 | + return getPatternRestriction(); | ||
| 465 | + } | ||
| 466 | + | ||
| 467 | + /* | ||
| 468 | + * Get patterns of referred type and add it to current pattern | ||
| 469 | + * restrictions. | ||
| 470 | + */ | ||
| 471 | + for (String pattern : refPatternRestriction.getPatternList()) { | ||
| 472 | + getPatternRestriction().addPattern(pattern); | ||
| 473 | + } | ||
| 474 | + return getPatternRestriction(); | ||
| 475 | + } | ||
| 476 | + | ||
| 477 | + /** | ||
| 478 | + * Resolves the length restrictions. | ||
| 479 | + * | ||
| 480 | + * @param refLengthRestriction referred length restriction of typedef | ||
| 481 | + * @return resolved length restriction | ||
| 482 | + * @throws DataModelException a violation in data model rule | ||
| 483 | + */ | ||
| 484 | + private YangRangeRestriction resolveLengthRestriction(YangRangeRestriction refLengthRestriction) throws | ||
| 485 | + DataModelException { | ||
| 486 | + | ||
| 487 | + /* | ||
| 488 | + * If referred restriction and self restriction both are null, no | ||
| 489 | + * resolution is required. | ||
| 490 | + */ | ||
| 491 | + if (refLengthRestriction == null && Strings.isNullOrEmpty(getLengthRestrictionString())) { | ||
| 492 | + return null; | ||
| 493 | + } | ||
| 494 | + | ||
| 495 | + /* | ||
| 496 | + * If self restriction is null, and referred restriction is present | ||
| 497 | + * shallow copy the referred to self. | ||
| 498 | + */ | ||
| 499 | + if (Strings.isNullOrEmpty(getLengthRestrictionString())) { | ||
| 500 | + return refLengthRestriction; | ||
| 501 | + } | ||
| 502 | + | ||
| 503 | + /* | ||
| 504 | + * If referred restriction is null, and self restriction is present | ||
| 505 | + * carry out self resolution. | ||
| 506 | + */ | ||
| 507 | + if (refLengthRestriction == null) { | ||
| 508 | + YangRangeRestriction curLengthRestriction = processLengthRestriction(null, lineNumber, | ||
| 509 | + charPositionInLine, false, getLengthRestrictionString()); | ||
| 510 | + return curLengthRestriction; | ||
| 511 | + } | ||
| 512 | + | ||
| 513 | + /* | ||
| 514 | + * Carry out self resolution based with obtained effective built-in | ||
| 515 | + * type and MIN/MAX values as per the referred typedef's values. | ||
| 516 | + */ | ||
| 517 | + YangRangeRestriction curLengthRestriction = processLengthRestriction(refLengthRestriction, lineNumber, | ||
| 518 | + charPositionInLine, true, getLengthRestrictionString()); | ||
| 519 | + | ||
| 520 | + // Resolve the range with referred typedef's restriction. | ||
| 521 | + resolveLengthAndRangeRestriction(refLengthRestriction, curLengthRestriction); | ||
| 522 | + return curLengthRestriction; | ||
| 523 | + } | ||
| 524 | + | ||
| 525 | + /** | ||
| 526 | + * Resolves the length/range self and referred restriction, to check whether | ||
| 527 | + * the all the range interval in self restriction is stricter than the | ||
| 528 | + * referred typedef's restriction. | ||
| 529 | + * | ||
| 530 | + * @param refRestriction referred restriction | ||
| 531 | + * @param curRestriction self restriction | ||
| 532 | + */ | ||
| 533 | + private void resolveLengthAndRangeRestriction(YangRangeRestriction refRestriction, | ||
| 534 | + YangRangeRestriction curRestriction) throws DataModelException { | ||
| 535 | + for (Object curInterval : curRestriction.getAscendingRangeIntervals()) { | ||
| 536 | + if (!(curInterval instanceof YangRangeInterval)) { | ||
| 537 | + throw new DataModelException("Linker error: Current range intervals not processed correctly."); | ||
| 538 | + } | ||
| 539 | + try { | ||
| 540 | + refRestriction.isValidInterval((YangRangeInterval) curInterval); | ||
| 541 | + } catch (DataModelException e) { | ||
| 542 | + DataModelException dataModelException = new DataModelException(e); | ||
| 543 | + dataModelException.setLine(lineNumber); | ||
| 544 | + dataModelException.setCharPosition(charPositionInLine); | ||
| 545 | + throw dataModelException; | ||
| 546 | + } | ||
| 547 | + } | ||
| 548 | + } | ||
| 549 | + | ||
| 550 | + /** | ||
| 551 | + * Resolves the range restrictions. | ||
| 552 | + * | ||
| 553 | + * @param refRangeRestriction referred range restriction of typedef | ||
| 554 | + * @throws DataModelException a violation in data model rule | ||
| 555 | + */ | ||
| 556 | + private void resolveRangeRestriction(YangRangeRestriction refRangeRestriction) throws DataModelException { | ||
| 557 | + | ||
| 558 | + /* | ||
| 559 | + * Check that string restriction should be null when built-in type is | ||
| 560 | + * of range type. | ||
| 561 | + */ | ||
| 562 | + if (!(Strings.isNullOrEmpty(getLengthRestrictionString())) || getPatternRestriction() != null) { | ||
| 563 | + DataModelException dataModelException = new DataModelException("YANG file error: Length/Pattern " + | ||
| 564 | + "restriction should't be present for int/uint/decimal data type."); | ||
| 565 | + dataModelException.setLine(lineNumber); | ||
| 566 | + dataModelException.setCharPosition(charPositionInLine); | ||
| 567 | + throw dataModelException; | ||
| 568 | + } | ||
| 569 | + | ||
| 570 | + /* | ||
| 571 | + * If referred restriction and self restriction both are null, no | ||
| 572 | + * resolution is required. | ||
| 573 | + */ | ||
| 574 | + if (refRangeRestriction == null && Strings.isNullOrEmpty(getRangeRestrictionString())) { | ||
| 575 | + return; | ||
| 576 | + } | ||
| 577 | + | ||
| 578 | + /* | ||
| 579 | + * If self restriction is null, and referred restriction is present | ||
| 580 | + * shallow copy the referred to self. | ||
| 581 | + */ | ||
| 582 | + if (Strings.isNullOrEmpty(getRangeRestrictionString())) { | ||
| 583 | + setResolvedExtendedInfo((T) refRangeRestriction); | ||
| 584 | + return; | ||
| 585 | + } | ||
| 586 | + | ||
| 587 | + /* | ||
| 588 | + * If referred restriction is null, and self restriction is present | ||
| 589 | + * carry out self resolution. | ||
| 590 | + */ | ||
| 591 | + if (refRangeRestriction == null) { | ||
| 592 | + YangRangeRestriction curRangeRestriction = processRangeRestriction(null, lineNumber, | ||
| 593 | + charPositionInLine, false, getRangeRestrictionString(), getEffectiveBuiltInType()); | ||
| 594 | + setResolvedExtendedInfo((T) curRangeRestriction); | ||
| 595 | + return; | ||
| 596 | + } | ||
| 597 | + | ||
| 598 | + /* | ||
| 599 | + * Carry out self resolution based with obtained effective built-in | ||
| 600 | + * type and MIN/MAX values as per the referred typedef's values. | ||
| 601 | + */ | ||
| 602 | + YangRangeRestriction curRangeRestriction = processRangeRestriction(refRangeRestriction, lineNumber, | ||
| 603 | + charPositionInLine, true, getRangeRestrictionString(), getEffectiveBuiltInType()); | ||
| 604 | + | ||
| 605 | + // Resolve the range with referred typedef's restriction. | ||
| 606 | + resolveLengthAndRangeRestriction(refRangeRestriction, curRangeRestriction); | ||
| 607 | + setResolvedExtendedInfo((T) curRangeRestriction); | ||
| 88 | } | 608 | } |
| 89 | 609 | ||
| 90 | /** | 610 | /** |
| 91 | - * Sets extended information. | 611 | + * Returns whether the data type is of non restricted type. |
| 92 | * | 612 | * |
| 93 | - * @param extendedInfo extended information | 613 | + * @param dataType data type to be checked |
| 614 | + * @return true, if data type can't be restricted, false otherwise | ||
| 94 | */ | 615 | */ |
| 95 | - public void setExtendedInfo(T extendedInfo) { | 616 | + private boolean isOfValidNonRestrictedType(YangDataTypes dataType) { |
| 96 | - this.extendedInfo = extendedInfo; | 617 | + return (dataType == BOOLEAN |
| 618 | + || dataType == ENUMERATION | ||
| 619 | + || dataType == BITS | ||
| 620 | + || dataType == EMPTY | ||
| 621 | + || dataType == UNION | ||
| 622 | + || dataType == IDENTITYREF | ||
| 623 | + || dataType == LEAFREF); | ||
| 97 | } | 624 | } |
| 98 | } | 625 | } | ... | ... |
| ... | @@ -46,6 +46,7 @@ import java.util.List; | ... | @@ -46,6 +46,7 @@ import java.util.List; |
| 46 | * | reference | 7.19.4 | 0..1 | | 46 | * | reference | 7.19.4 | 0..1 | |
| 47 | * +---------------+---------+-------------+ | 47 | * +---------------+---------+-------------+ |
| 48 | */ | 48 | */ |
| 49 | + | ||
| 49 | /** | 50 | /** |
| 50 | * Represents pattern restriction information. The regular expression restriction on string | 51 | * Represents pattern restriction information. The regular expression restriction on string |
| 51 | * data type. | 52 | * data type. |
| ... | @@ -58,11 +59,6 @@ public class YangPatternRestriction { | ... | @@ -58,11 +59,6 @@ public class YangPatternRestriction { |
| 58 | private List<String> patternList; | 59 | private List<String> patternList; |
| 59 | 60 | ||
| 60 | /** | 61 | /** |
| 61 | - * Effective pattern restriction that needs inherited from base type. | ||
| 62 | - */ | ||
| 63 | - private List<String> basePattern; | ||
| 64 | - | ||
| 65 | - /** | ||
| 66 | * Creates a YANG pattern restriction object. | 62 | * Creates a YANG pattern restriction object. |
| 67 | */ | 63 | */ |
| 68 | public YangPatternRestriction() { | 64 | public YangPatternRestriction() { |
| ... | @@ -95,22 +91,4 @@ public class YangPatternRestriction { | ... | @@ -95,22 +91,4 @@ public class YangPatternRestriction { |
| 95 | public void addPattern(String newPattern) { | 91 | public void addPattern(String newPattern) { |
| 96 | getPatternList().add(newPattern); | 92 | getPatternList().add(newPattern); |
| 97 | } | 93 | } |
| 98 | - | ||
| 99 | - /** | ||
| 100 | - * Returns the pattern restriction defined in base type. | ||
| 101 | - * | ||
| 102 | - * @return pattern restriction defined in base type. | ||
| 103 | - */ | ||
| 104 | - public List<String> getBasePattern() { | ||
| 105 | - return basePattern; | ||
| 106 | - } | ||
| 107 | - | ||
| 108 | - /** | ||
| 109 | - * Sets the pattern restriction defined in base type. | ||
| 110 | - * | ||
| 111 | - * @param basePattern pattern restriction defined in base type. | ||
| 112 | - */ | ||
| 113 | - public void setBasePattern(List<String> basePattern) { | ||
| 114 | - this.basePattern = basePattern; | ||
| 115 | - } | ||
| 116 | } | 94 | } | ... | ... |
| ... | @@ -18,7 +18,6 @@ package org.onosproject.yangutils.datamodel; | ... | @@ -18,7 +18,6 @@ package org.onosproject.yangutils.datamodel; |
| 18 | 18 | ||
| 19 | import java.util.LinkedList; | 19 | import java.util.LinkedList; |
| 20 | import java.util.List; | 20 | import java.util.List; |
| 21 | - | ||
| 22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
| 23 | import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo; | 22 | import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo; |
| 24 | 23 | ||
| ... | @@ -111,8 +110,8 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> | ... | @@ -111,8 +110,8 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> |
| 111 | /** | 110 | /** |
| 112 | * Returns the minimum valid value as per the restriction. | 111 | * Returns the minimum valid value as per the restriction. |
| 113 | * | 112 | * |
| 114 | - * @throws DataModelException data model exception for minimum restriction | ||
| 115 | * @return minimum restricted value | 113 | * @return minimum restricted value |
| 114 | + * @throws DataModelException data model exception for minimum restriction | ||
| 116 | */ | 115 | */ |
| 117 | public T getMinRestrictedvalue() throws DataModelException { | 116 | public T getMinRestrictedvalue() throws DataModelException { |
| 118 | if (getAscendingRangeIntervals() == null) { | 117 | if (getAscendingRangeIntervals() == null) { |
| ... | @@ -127,8 +126,8 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> | ... | @@ -127,8 +126,8 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> |
| 127 | /** | 126 | /** |
| 128 | * Returns the maximum valid value as per the restriction. | 127 | * Returns the maximum valid value as per the restriction. |
| 129 | * | 128 | * |
| 130 | - * @throws DataModelException data model exception for maximum restriction | ||
| 131 | * @return minimum maximum value | 129 | * @return minimum maximum value |
| 130 | + * @throws DataModelException data model exception for maximum restriction | ||
| 132 | */ | 131 | */ |
| 133 | public T getMaxRestrictedvalue() throws DataModelException { | 132 | public T getMaxRestrictedvalue() throws DataModelException { |
| 134 | if (getAscendingRangeIntervals() == null) { | 133 | if (getAscendingRangeIntervals() == null) { |
| ... | @@ -175,7 +174,7 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> | ... | @@ -175,7 +174,7 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> |
| 175 | } | 174 | } |
| 176 | 175 | ||
| 177 | /** | 176 | /** |
| 178 | - * Check if the given value is correct as per the restriction. | 177 | + * Validates if the given value is correct as per the restriction. |
| 179 | * | 178 | * |
| 180 | * @param valueInString value | 179 | * @param valueInString value |
| 181 | * @return true, if the value is confirming to restriction, false otherwise | 180 | * @return true, if the value is confirming to restriction, false otherwise |
| ... | @@ -206,6 +205,32 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> | ... | @@ -206,6 +205,32 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> |
| 206 | } | 205 | } |
| 207 | 206 | ||
| 208 | /** | 207 | /** |
| 208 | + * Validates if the given interval is correct as per the restriction. | ||
| 209 | + * | ||
| 210 | + * @param rangeInterval range interval | ||
| 211 | + * @return true, if the interval is confirming to restriction, false otherwise | ||
| 212 | + * @throws DataModelException data model error | ||
| 213 | + */ | ||
| 214 | + public boolean isValidInterval(YangRangeInterval rangeInterval) throws DataModelException { | ||
| 215 | + | ||
| 216 | + if (getAscendingRangeIntervals() == null | ||
| 217 | + || getAscendingRangeIntervals().isEmpty()) { | ||
| 218 | + // Throw exception, At least one default range needs to be set in constructor or in linker. | ||
| 219 | + throw new DataModelException("Range interval missing in range restriction."); | ||
| 220 | + } | ||
| 221 | + | ||
| 222 | + for (YangRangeInterval<T> interval : getAscendingRangeIntervals()) { | ||
| 223 | + int rangeStartCompareRes = interval.getStartValue().compareTo((T) rangeInterval.getStartValue()); | ||
| 224 | + int rangeEndCompareRes = interval.getEndValue().compareTo((T) rangeInterval.getEndValue()); | ||
| 225 | + | ||
| 226 | + if (rangeStartCompareRes <= 0 && rangeEndCompareRes >= 0) { | ||
| 227 | + return true; | ||
| 228 | + } | ||
| 229 | + } | ||
| 230 | + throw new DataModelException("Range interval doesn't fall within the referred restriction ranges"); | ||
| 231 | + } | ||
| 232 | + | ||
| 233 | + /** | ||
| 209 | * Returns the textual reference of the length restriction. | 234 | * Returns the textual reference of the length restriction. |
| 210 | * | 235 | * |
| 211 | * @return textual reference of the length restriction | 236 | * @return textual reference of the length restriction | ... | ... |
| ... | @@ -17,7 +17,6 @@ | ... | @@ -17,7 +17,6 @@ |
| 17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
| 18 | 18 | ||
| 19 | import java.util.Stack; | 19 | import java.util.Stack; |
| 20 | - | ||
| 21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 20 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
| 22 | 21 | ||
| 23 | import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED; | 22 | import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED; |
| ... | @@ -30,7 +29,7 @@ import static org.onosproject.yangutils.datamodel.ResolvableStatus.UNRESOLVED; | ... | @@ -30,7 +29,7 @@ import static org.onosproject.yangutils.datamodel.ResolvableStatus.UNRESOLVED; |
| 30 | * | 29 | * |
| 31 | * @param <T> type of resolution entity uses / type | 30 | * @param <T> type of resolution entity uses / type |
| 32 | */ | 31 | */ |
| 33 | -public class YangResolutionInfo<T> { | 32 | +public class YangResolutionInfo<T> implements LocationInfo { |
| 34 | 33 | ||
| 35 | /** | 34 | /** |
| 36 | * Information about the entity that needs to be resolved. | 35 | * Information about the entity that needs to be resolved. |
| ... | @@ -64,9 +63,9 @@ public class YangResolutionInfo<T> { | ... | @@ -64,9 +63,9 @@ public class YangResolutionInfo<T> { |
| 64 | /** | 63 | /** |
| 65 | * Creates a resolution information object with all the inputs. | 64 | * Creates a resolution information object with all the inputs. |
| 66 | * | 65 | * |
| 67 | - * @param dataNode current parsable data node | 66 | + * @param dataNode current parsable data node |
| 68 | - * @param holderNode parent YANG node | 67 | + * @param holderNode parent YANG node |
| 69 | - * @param lineNumber error line number | 68 | + * @param lineNumber error line number |
| 70 | * @param charPositionInLine error character position in line | 69 | * @param charPositionInLine error character position in line |
| 71 | */ | 70 | */ |
| 72 | public YangResolutionInfo(T dataNode, YangNode holderNode, int lineNumber, int charPositionInLine) { | 71 | public YangResolutionInfo(T dataNode, YangNode holderNode, int lineNumber, int charPositionInLine) { |
| ... | @@ -193,7 +192,6 @@ public class YangResolutionInfo<T> { | ... | @@ -193,7 +192,6 @@ public class YangResolutionInfo<T> { |
| 193 | private void resolveTopOfStack() | 192 | private void resolveTopOfStack() |
| 194 | throws DataModelException { | 193 | throws DataModelException { |
| 195 | ((Resolvable) getCurrentEntityToResolveFromStack()).resolve(); | 194 | ((Resolvable) getCurrentEntityToResolveFromStack()).resolve(); |
| 196 | - | ||
| 197 | if (((Resolvable) getCurrentEntityToResolveFromStack()).getResolvableStatus() | 195 | if (((Resolvable) getCurrentEntityToResolveFromStack()).getResolvableStatus() |
| 198 | != INTRA_FILE_RESOLVED) { | 196 | != INTRA_FILE_RESOLVED) { |
| 199 | // Sets the resolution status in inside the type/uses. | 197 | // Sets the resolution status in inside the type/uses. |
| ... | @@ -453,42 +451,6 @@ public class YangResolutionInfo<T> { | ... | @@ -453,42 +451,6 @@ public class YangResolutionInfo<T> { |
| 453 | } | 451 | } |
| 454 | 452 | ||
| 455 | /** | 453 | /** |
| 456 | - * Returns error position. | ||
| 457 | - * | ||
| 458 | - * @return error position | ||
| 459 | - */ | ||
| 460 | - public int getCharPosition() { | ||
| 461 | - return charPosition; | ||
| 462 | - } | ||
| 463 | - | ||
| 464 | - /** | ||
| 465 | - * Sets error position. | ||
| 466 | - * | ||
| 467 | - * @param charPosition position of error | ||
| 468 | - */ | ||
| 469 | - public void setCharPosition(int charPosition) { | ||
| 470 | - this.charPosition = charPosition; | ||
| 471 | - } | ||
| 472 | - | ||
| 473 | - /** | ||
| 474 | - * Returns error character position in line. | ||
| 475 | - * | ||
| 476 | - * @return error character position in line | ||
| 477 | - */ | ||
| 478 | - public int getLineNumber() { | ||
| 479 | - return lineNumber; | ||
| 480 | - } | ||
| 481 | - | ||
| 482 | - /** | ||
| 483 | - * Sets error character position in line. | ||
| 484 | - * | ||
| 485 | - * @param lineNumber error character position in line | ||
| 486 | - */ | ||
| 487 | - public void setLineNumber(int lineNumber) { | ||
| 488 | - this.lineNumber = lineNumber; | ||
| 489 | - } | ||
| 490 | - | ||
| 491 | - /** | ||
| 492 | * Returns stack of YANG type with partially resolved YANG construct | 454 | * Returns stack of YANG type with partially resolved YANG construct |
| 493 | * hierarchy. | 455 | * hierarchy. |
| 494 | * | 456 | * |
| ... | @@ -539,9 +501,29 @@ public class YangResolutionInfo<T> { | ... | @@ -539,9 +501,29 @@ public class YangResolutionInfo<T> { |
| 539 | * Sets information about the entity that needs to be resolved. | 501 | * Sets information about the entity that needs to be resolved. |
| 540 | * | 502 | * |
| 541 | * @param entityToResolveInfo information about the entity that needs to be | 503 | * @param entityToResolveInfo information about the entity that needs to be |
| 542 | - * resolved | 504 | + * resolved |
| 543 | */ | 505 | */ |
| 544 | public void setEntityToResolveInfo(YangEntityToResolveInfo<T> entityToResolveInfo) { | 506 | public void setEntityToResolveInfo(YangEntityToResolveInfo<T> entityToResolveInfo) { |
| 545 | this.entityToResolveInfo = entityToResolveInfo; | 507 | this.entityToResolveInfo = entityToResolveInfo; |
| 546 | } | 508 | } |
| 509 | + | ||
| 510 | + @Override | ||
| 511 | + public int getLineNumber() { | ||
| 512 | + return lineNumber; | ||
| 513 | + } | ||
| 514 | + | ||
| 515 | + @Override | ||
| 516 | + public int getCharPosition() { | ||
| 517 | + return charPosition; | ||
| 518 | + } | ||
| 519 | + | ||
| 520 | + @Override | ||
| 521 | + public void setLineNumber(int lineNumber) { | ||
| 522 | + this.lineNumber = lineNumber; | ||
| 523 | + } | ||
| 524 | + | ||
| 525 | + @Override | ||
| 526 | + public void setCharPosition(int charPositionInLine) { | ||
| 527 | + this.charPosition = charPositionInLine; | ||
| 528 | + } | ||
| 547 | } | 529 | } | ... | ... |
| ... | @@ -24,6 +24,7 @@ import org.onosproject.yangutils.utils.builtindatatype.YangUint64; | ... | @@ -24,6 +24,7 @@ import org.onosproject.yangutils.utils.builtindatatype.YangUint64; |
| 24 | * A string can be restricted with the "length" and "pattern" statements. | 24 | * A string can be restricted with the "length" and "pattern" statements. |
| 25 | * | 25 | * |
| 26 | */ | 26 | */ |
| 27 | + | ||
| 27 | /** | 28 | /** |
| 28 | * Represents the restriction for string data type. | 29 | * Represents the restriction for string data type. |
| 29 | */ | 30 | */ |
| ... | @@ -113,7 +114,7 @@ public class YangStringRestriction { | ... | @@ -113,7 +114,7 @@ public class YangStringRestriction { |
| 113 | * | 114 | * |
| 114 | * @param patternRestriction pattern restriction for the type | 115 | * @param patternRestriction pattern restriction for the type |
| 115 | */ | 116 | */ |
| 116 | - private void setPatternRestriction(YangPatternRestriction patternRestriction) { | 117 | + public void setPatternRestriction(YangPatternRestriction patternRestriction) { |
| 117 | this.patternRestriction = patternRestriction; | 118 | this.patternRestriction = patternRestriction; |
| 118 | } | 119 | } |
| 119 | 120 | ... | ... |
| ... | @@ -20,7 +20,6 @@ import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ... | @@ -20,7 +20,6 @@ import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
| 20 | import org.onosproject.yangutils.parser.Parsable; | 20 | import org.onosproject.yangutils.parser.Parsable; |
| 21 | import org.onosproject.yangutils.utils.YangConstructType; | 21 | import org.onosproject.yangutils.utils.YangConstructType; |
| 22 | 22 | ||
| 23 | -import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
| 24 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 23 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
| 25 | 24 | ||
| 26 | /* | 25 | /* |
| ... | @@ -78,18 +77,6 @@ public class YangType<T> | ... | @@ -78,18 +77,6 @@ public class YangType<T> |
| 78 | private T dataTypeExtendedInfo; | 77 | private T dataTypeExtendedInfo; |
| 79 | 78 | ||
| 80 | /** | 79 | /** |
| 81 | - * Effective built-in type, requried in case type of typedef is again a | ||
| 82 | - * derived type. This information is to be added during linking. | ||
| 83 | - */ | ||
| 84 | - private YangDataTypes effectiveBuiltInType; | ||
| 85 | - | ||
| 86 | - /** | ||
| 87 | - * Effective pattern restriction, requried in case type of typedef is again | ||
| 88 | - * a derived type. This information is to be added during linking. | ||
| 89 | - */ | ||
| 90 | - private YangPatternRestriction effectivePatternRestriction; | ||
| 91 | - | ||
| 92 | - /** | ||
| 93 | * Status of resolution. If completely resolved enum value is "RESOLVED", | 80 | * Status of resolution. If completely resolved enum value is "RESOLVED", |
| 94 | * if not enum value is "UNRESOLVED", in case reference of grouping/typedef | 81 | * if not enum value is "UNRESOLVED", in case reference of grouping/typedef |
| 95 | * is added to uses/type but it's not resolved value of enum should be | 82 | * is added to uses/type but it's not resolved value of enum should be |
| ... | @@ -215,42 +202,6 @@ public class YangType<T> | ... | @@ -215,42 +202,6 @@ public class YangType<T> |
| 215 | } | 202 | } |
| 216 | 203 | ||
| 217 | /** | 204 | /** |
| 218 | - * Return effective built-in type. | ||
| 219 | - * | ||
| 220 | - * @return effective built-in type | ||
| 221 | - */ | ||
| 222 | - public YangDataTypes getEffectiveBuiltInType() { | ||
| 223 | - return effectiveBuiltInType; | ||
| 224 | - } | ||
| 225 | - | ||
| 226 | - /** | ||
| 227 | - * Sets effective built-in type. | ||
| 228 | - * | ||
| 229 | - * @param effectiveBuiltInType effective built-in type | ||
| 230 | - */ | ||
| 231 | - public void setEffectiveBuiltInType(YangDataTypes effectiveBuiltInType) { | ||
| 232 | - this.effectiveBuiltInType = effectiveBuiltInType; | ||
| 233 | - } | ||
| 234 | - | ||
| 235 | - /** | ||
| 236 | - * Returns effective pattern restriction. | ||
| 237 | - * | ||
| 238 | - * @return effective pattern restriction | ||
| 239 | - */ | ||
| 240 | - public YangPatternRestriction getEffectivePatternRestriction() { | ||
| 241 | - return effectivePatternRestriction; | ||
| 242 | - } | ||
| 243 | - | ||
| 244 | - /** | ||
| 245 | - * Sets effective pattern restriction. | ||
| 246 | - * | ||
| 247 | - * @param effectivePatternRestriction effective pattern restriction | ||
| 248 | - */ | ||
| 249 | - public void setEffectivePatternRestriction(YangPatternRestriction effectivePatternRestriction) { | ||
| 250 | - this.effectivePatternRestriction = effectivePatternRestriction; | ||
| 251 | - } | ||
| 252 | - | ||
| 253 | - /** | ||
| 254 | * Returns the type of the parsed data. | 205 | * Returns the type of the parsed data. |
| 255 | * | 206 | * |
| 256 | * @return returns TYPE_DATA | 207 | * @return returns TYPE_DATA |
| ... | @@ -269,7 +220,6 @@ public class YangType<T> | ... | @@ -269,7 +220,6 @@ public class YangType<T> |
| 269 | public void validateDataOnEntry() | 220 | public void validateDataOnEntry() |
| 270 | throws DataModelException { | 221 | throws DataModelException { |
| 271 | // TODO auto-generated method stub, to be implemented by parser | 222 | // TODO auto-generated method stub, to be implemented by parser |
| 272 | - | ||
| 273 | } | 223 | } |
| 274 | 224 | ||
| 275 | /** | 225 | /** |
| ... | @@ -281,7 +231,6 @@ public class YangType<T> | ... | @@ -281,7 +231,6 @@ public class YangType<T> |
| 281 | public void validateDataOnExit() | 231 | public void validateDataOnExit() |
| 282 | throws DataModelException { | 232 | throws DataModelException { |
| 283 | // TODO auto-generated method stub, to be implemented by parser | 233 | // TODO auto-generated method stub, to be implemented by parser |
| 284 | - | ||
| 285 | } | 234 | } |
| 286 | 235 | ||
| 287 | @Override | 236 | @Override |
| ... | @@ -297,17 +246,19 @@ public class YangType<T> | ... | @@ -297,17 +246,19 @@ public class YangType<T> |
| 297 | @Override | 246 | @Override |
| 298 | public void resolve() throws DataModelException { | 247 | public void resolve() throws DataModelException { |
| 299 | /* | 248 | /* |
| 300 | - Inherit the Restriction from the referred typedef definition. | 249 | + * Check whether the data type is derived. |
| 301 | */ | 250 | */ |
| 302 | if (getDataType() != DERIVED) { | 251 | if (getDataType() != DERIVED) { |
| 303 | - throw new DataModelException("Resolve should only be called for derived data types"); | 252 | + throw new DataModelException("Linker Error: Resolve should only be called for derived data types."); |
| 304 | } | 253 | } |
| 305 | 254 | ||
| 306 | - YangDerivedInfo<?> derrivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo(); | 255 | + // Check if the derived info is present. |
| 307 | - YangType<?> baseType = derrivedInfo.getReferredTypeDef().getTypeDefBaseType(); | 256 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo(); |
| 308 | - if (DERIVED == baseType.getDataType() && baseType.getResolvableStatus() == INTRA_FILE_RESOLVED) { | 257 | + if (derivedInfo == null) { |
| 309 | - setResolvableStatus(INTRA_FILE_RESOLVED); | 258 | + throw new DataModelException("Linker Error: Derived information is missing."); |
| 310 | } | 259 | } |
| 311 | - //TODO: | 260 | + |
| 261 | + // Initiate the resolution | ||
| 262 | + setResolvableStatus(derivedInfo.resolve()); | ||
| 312 | } | 263 | } |
| 313 | } | 264 | } | ... | ... |
| ... | @@ -83,11 +83,6 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable, Y | ... | @@ -83,11 +83,6 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable, Y |
| 83 | private String name; | 83 | private String name; |
| 84 | 84 | ||
| 85 | /** | 85 | /** |
| 86 | - * Maintain the data type information. | ||
| 87 | - */ | ||
| 88 | - private YangType<?> dataType; | ||
| 89 | - | ||
| 90 | - /** | ||
| 91 | * Units of the data type. | 86 | * Units of the data type. |
| 92 | */ | 87 | */ |
| 93 | private String units; | 88 | private String units; | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -16,34 +16,26 @@ | ... | @@ -16,34 +16,26 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
| 18 | 18 | ||
| 19 | -import java.util.regex.Pattern; | 19 | +import org.onosproject.yangutils.datamodel.YangDataTypes; |
| 20 | - | 20 | +import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
| 21 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; | 21 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; |
| 22 | -import org.onosproject.yangutils.datamodel.YangRangeInterval; | ||
| 23 | import org.onosproject.yangutils.datamodel.YangStringRestriction; | 22 | import org.onosproject.yangutils.datamodel.YangStringRestriction; |
| 24 | import org.onosproject.yangutils.datamodel.YangType; | 23 | import org.onosproject.yangutils.datamodel.YangType; |
| 25 | -import org.onosproject.yangutils.datamodel.YangDataTypes; | ||
| 26 | -import org.onosproject.yangutils.datamodel.YangDerivedInfo; | ||
| 27 | -import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
| 28 | import org.onosproject.yangutils.parser.Parsable; | 24 | import org.onosproject.yangutils.parser.Parsable; |
| 29 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 25 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
| 30 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 26 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
| 31 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 27 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
| 32 | import org.onosproject.yangutils.utils.YangConstructType; | 28 | import org.onosproject.yangutils.utils.YangConstructType; |
| 33 | -import org.onosproject.yangutils.utils.builtindatatype.DataTypeException; | ||
| 34 | -import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo; | ||
| 35 | 29 | ||
| 36 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat; | 30 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
| 37 | -import static org.onosproject.yangutils.utils.YangConstructType.LENGTH_DATA; | ||
| 38 | -import static org.onosproject.yangutils.utils.YangConstructType.TYPE_DATA; | ||
| 39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
| 40 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; | ||
| 41 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; |
| 42 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
| 43 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
| 44 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA; | ||
| 45 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | 35 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; |
| 46 | -import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString; | 36 | +import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction; |
| 37 | +import static org.onosproject.yangutils.utils.YangConstructType.LENGTH_DATA; | ||
| 38 | +import static org.onosproject.yangutils.utils.YangConstructType.TYPE_DATA; | ||
| 47 | 39 | ||
| 48 | /* | 40 | /* |
| 49 | * Reference: RFC6020 and YANG ANTLR Grammar | 41 | * Reference: RFC6020 and YANG ANTLR Grammar |
| ... | @@ -71,11 +63,6 @@ import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectF | ... | @@ -71,11 +63,6 @@ import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectF |
| 71 | */ | 63 | */ |
| 72 | public final class LengthRestrictionListener { | 64 | public final class LengthRestrictionListener { |
| 73 | 65 | ||
| 74 | - private static final String PIPE = "|"; | ||
| 75 | - private static final String LENGTH_INTERVAL = ".."; | ||
| 76 | - private static final int MAX_RANGE_BOUNDARY = 2; | ||
| 77 | - private static final int MIN_RANGE_BOUNDARY = 1; | ||
| 78 | - | ||
| 79 | /** | 66 | /** |
| 80 | * Creates a new length restriction listener. | 67 | * Creates a new length restriction listener. |
| 81 | */ | 68 | */ |
| ... | @@ -88,10 +75,10 @@ public final class LengthRestrictionListener { | ... | @@ -88,10 +75,10 @@ public final class LengthRestrictionListener { |
| 88 | * tree. | 75 | * tree. |
| 89 | * | 76 | * |
| 90 | * @param listener listener's object | 77 | * @param listener listener's object |
| 91 | - * @param ctx context object of the grammar rule | 78 | + * @param ctx context object of the grammar rule |
| 92 | */ | 79 | */ |
| 93 | public static void processLengthRestrictionEntry(TreeWalkListener listener, | 80 | public static void processLengthRestrictionEntry(TreeWalkListener listener, |
| 94 | - GeneratedYangParser.LengthStatementContext ctx) { | 81 | + GeneratedYangParser.LengthStatementContext ctx) { |
| 95 | 82 | ||
| 96 | // Check for stack to be non empty. | 83 | // Check for stack to be non empty. |
| 97 | checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), ENTRY); | 84 | checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), ENTRY); |
| ... | @@ -110,18 +97,22 @@ public final class LengthRestrictionListener { | ... | @@ -110,18 +97,22 @@ public final class LengthRestrictionListener { |
| 110 | * Sets the length restriction to type. | 97 | * Sets the length restriction to type. |
| 111 | * | 98 | * |
| 112 | * @param type Yang type for which length restriction to be set | 99 | * @param type Yang type for which length restriction to be set |
| 113 | - * @param ctx context object of the grammar rule | 100 | + * @param ctx context object of the grammar rule |
| 114 | */ | 101 | */ |
| 115 | private static void setLengthRestriction(YangType type, | 102 | private static void setLengthRestriction(YangType type, |
| 116 | - GeneratedYangParser.LengthStatementContext ctx) { | 103 | + GeneratedYangParser.LengthStatementContext ctx) { |
| 117 | - | 104 | + |
| 118 | - YangStringRestriction stringRestriction; | 105 | + if (type.getDataType() == DERIVED) { |
| 119 | - YangBuiltInDataTypeInfo<?> startValue; | 106 | + ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo()) |
| 120 | - YangBuiltInDataTypeInfo<?> endValue; | 107 | + .setLengthRestrictionString(ctx.length().getText()); |
| 121 | - YangRangeRestriction lengthRestriction = new YangRangeRestriction<>(); | 108 | + ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo()) |
| 122 | - | 109 | + .setLineNumber(ctx.getStart().getLine()); |
| 123 | - if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) { | 110 | + ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo()) |
| 111 | + .setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
| 112 | + return; | ||
| 113 | + } | ||
| 124 | 114 | ||
| 115 | + if (type.getDataType() != YangDataTypes.STRING) { | ||
| 125 | ParserException parserException = new ParserException("YANG file error : " + | 116 | ParserException parserException = new ParserException("YANG file error : " + |
| 126 | YangConstructType.getYangConstructType(LENGTH_DATA) + " name " + ctx.length().getText() + | 117 | YangConstructType.getYangConstructType(LENGTH_DATA) + " name " + ctx.length().getText() + |
| 127 | " can be used to restrict the built-in type string or types derived from string."); | 118 | " can be used to restrict the built-in type string or types derived from string."); |
| ... | @@ -130,71 +121,14 @@ public final class LengthRestrictionListener { | ... | @@ -130,71 +121,14 @@ public final class LengthRestrictionListener { |
| 130 | throw parserException; | 121 | throw parserException; |
| 131 | } | 122 | } |
| 132 | 123 | ||
| 133 | - if (type.getDataType() == YangDataTypes.STRING) { | 124 | + YangRangeRestriction lengthRestriction = processLengthRestriction(null, ctx.getStart().getLine(), |
| 134 | - stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo(); | 125 | + ctx.getStart().getCharPositionInLine(), false, ctx.length().getText()); |
| 135 | - } else { | 126 | + |
| 136 | - stringRestriction = (YangStringRestriction) ((YangDerivedInfo<?>) type | 127 | + YangStringRestriction stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo(); |
| 137 | - .getDataTypeExtendedInfo()).getExtendedInfo(); | ||
| 138 | - } | ||
| 139 | 128 | ||
| 140 | if (stringRestriction == null) { | 129 | if (stringRestriction == null) { |
| 141 | stringRestriction = new YangStringRestriction(); | 130 | stringRestriction = new YangStringRestriction(); |
| 142 | - if (type.getDataType() == YangDataTypes.STRING) { | 131 | + type.setDataTypeExtendedInfo(stringRestriction); |
| 143 | - type.setDataTypeExtendedInfo(stringRestriction); | ||
| 144 | - } else { | ||
| 145 | - ((YangDerivedInfo<YangStringRestriction>) type.getDataTypeExtendedInfo()) | ||
| 146 | - .setExtendedInfo(stringRestriction); | ||
| 147 | - } | ||
| 148 | - } | ||
| 149 | - | ||
| 150 | - String rangeArgument = removeQuotesAndHandleConcat(ctx.length().getText()); | ||
| 151 | - String[] rangeArguments = rangeArgument.trim().split(Pattern.quote(PIPE)); | ||
| 152 | - | ||
| 153 | - for (String rangePart : rangeArguments) { | ||
| 154 | - String startInterval; | ||
| 155 | - String endInterval; | ||
| 156 | - YangRangeInterval rangeInterval = new YangRangeInterval<>(); | ||
| 157 | - String[] rangeBoundary = rangePart.trim().split(Pattern.quote(LENGTH_INTERVAL)); | ||
| 158 | - | ||
| 159 | - if (rangeBoundary.length > MAX_RANGE_BOUNDARY) { | ||
| 160 | - ParserException parserException = new ParserException("YANG file error : " + | ||
| 161 | - YangConstructType.getYangConstructType(LENGTH_DATA) + " " + rangeArgument + | ||
| 162 | - " is not valid."); | ||
| 163 | - parserException.setLine(ctx.getStart().getLine()); | ||
| 164 | - parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
| 165 | - throw parserException; | ||
| 166 | - } | ||
| 167 | - | ||
| 168 | - if (rangeBoundary.length == MIN_RANGE_BOUNDARY) { | ||
| 169 | - startInterval = rangeBoundary[0]; | ||
| 170 | - endInterval = rangeBoundary[0]; | ||
| 171 | - } else { | ||
| 172 | - startInterval = rangeBoundary[0]; | ||
| 173 | - endInterval = rangeBoundary[1]; | ||
| 174 | - } | ||
| 175 | - | ||
| 176 | - try { | ||
| 177 | - startValue = getDataObjectFromString(startInterval, YangDataTypes.UINT64); | ||
| 178 | - endValue = getDataObjectFromString(endInterval, YangDataTypes.UINT64); | ||
| 179 | - } catch (DataTypeException e) { | ||
| 180 | - ParserException parserException = new ParserException(e.getMessage()); | ||
| 181 | - parserException.setLine(ctx.getStart().getLine()); | ||
| 182 | - parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
| 183 | - throw parserException; | ||
| 184 | - } | ||
| 185 | - | ||
| 186 | - rangeInterval.setStartValue(startValue); | ||
| 187 | - rangeInterval.setEndValue(endValue); | ||
| 188 | - | ||
| 189 | - try { | ||
| 190 | - lengthRestriction.addRangeRestrictionInterval(rangeInterval); | ||
| 191 | - } catch (DataModelException e) { | ||
| 192 | - ParserException parserException = new ParserException(constructExtendedListenerErrorMessage( | ||
| 193 | - UNHANDLED_PARSED_DATA, LENGTH_DATA, rangeArgument, ENTRY, e.getMessage())); | ||
| 194 | - parserException.setLine(ctx.getStart().getLine()); | ||
| 195 | - parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
| 196 | - throw parserException; | ||
| 197 | - } | ||
| 198 | } | 132 | } |
| 199 | 133 | ||
| 200 | stringRestriction.setLengthRestriction(lengthRestriction); | 134 | stringRestriction.setLengthRestriction(lengthRestriction); | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -16,23 +16,24 @@ | ... | @@ -16,23 +16,24 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
| 18 | 18 | ||
| 19 | +import org.onosproject.yangutils.datamodel.YangDataTypes; | ||
| 19 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; | 20 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
| 20 | -import org.onosproject.yangutils.datamodel.YangType; | 21 | +import org.onosproject.yangutils.datamodel.YangPatternRestriction; |
| 21 | import org.onosproject.yangutils.datamodel.YangStringRestriction; | 22 | import org.onosproject.yangutils.datamodel.YangStringRestriction; |
| 22 | -import org.onosproject.yangutils.datamodel.YangDataTypes; | 23 | +import org.onosproject.yangutils.datamodel.YangType; |
| 23 | import org.onosproject.yangutils.parser.Parsable; | 24 | import org.onosproject.yangutils.parser.Parsable; |
| 24 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 25 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
| 25 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 26 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
| 26 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 27 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
| 27 | import org.onosproject.yangutils.utils.YangConstructType; | 28 | import org.onosproject.yangutils.utils.YangConstructType; |
| 28 | 29 | ||
| 29 | -import static org.onosproject.yangutils.utils.YangConstructType.PATTERN_DATA; | ||
| 30 | -import static org.onosproject.yangutils.utils.YangConstructType.TYPE_DATA; | ||
| 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
| 32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; |
| 33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
| 34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
| 35 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | 34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; |
| 35 | +import static org.onosproject.yangutils.utils.YangConstructType.PATTERN_DATA; | ||
| 36 | +import static org.onosproject.yangutils.utils.YangConstructType.TYPE_DATA; | ||
| 36 | 37 | ||
| 37 | /* | 38 | /* |
| 38 | * Reference: RFC6020 and YANG ANTLR Grammar | 39 | * Reference: RFC6020 and YANG ANTLR Grammar |
| ... | @@ -72,10 +73,10 @@ public final class PatternRestrictionListener { | ... | @@ -72,10 +73,10 @@ public final class PatternRestrictionListener { |
| 72 | * tree. | 73 | * tree. |
| 73 | * | 74 | * |
| 74 | * @param listener listener's object | 75 | * @param listener listener's object |
| 75 | - * @param ctx context object of the grammar rule | 76 | + * @param ctx context object of the grammar rule |
| 76 | */ | 77 | */ |
| 77 | public static void processPatternRestrictionEntry(TreeWalkListener listener, | 78 | public static void processPatternRestrictionEntry(TreeWalkListener listener, |
| 78 | - GeneratedYangParser.PatternStatementContext ctx) { | 79 | + GeneratedYangParser.PatternStatementContext ctx) { |
| 79 | 80 | ||
| 80 | // Check for stack to be non empty. | 81 | // Check for stack to be non empty. |
| 81 | checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), ENTRY); | 82 | checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), ENTRY); |
| ... | @@ -94,13 +95,11 @@ public final class PatternRestrictionListener { | ... | @@ -94,13 +95,11 @@ public final class PatternRestrictionListener { |
| 94 | * Sets the pattern restriction to type. | 95 | * Sets the pattern restriction to type. |
| 95 | * | 96 | * |
| 96 | * @param type Yang type for which pattern restriction to be set | 97 | * @param type Yang type for which pattern restriction to be set |
| 97 | - * @param ctx context object of the grammar rule | 98 | + * @param ctx context object of the grammar rule |
| 98 | */ | 99 | */ |
| 99 | private static void setPatternRestriction(YangType type, | 100 | private static void setPatternRestriction(YangType type, |
| 100 | GeneratedYangParser.PatternStatementContext ctx) { | 101 | GeneratedYangParser.PatternStatementContext ctx) { |
| 101 | 102 | ||
| 102 | - YangStringRestriction stringRestriction; | ||
| 103 | - | ||
| 104 | if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) { | 103 | if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) { |
| 105 | 104 | ||
| 106 | ParserException parserException = new ParserException("YANG file error : " + | 105 | ParserException parserException = new ParserException("YANG file error : " + |
| ... | @@ -111,24 +110,28 @@ public final class PatternRestrictionListener { | ... | @@ -111,24 +110,28 @@ public final class PatternRestrictionListener { |
| 111 | throw parserException; | 110 | throw parserException; |
| 112 | } | 111 | } |
| 113 | 112 | ||
| 114 | - if (type.getDataType() == YangDataTypes.STRING) { | 113 | + String patternArgument = ctx.string().getText().replace("\"", EMPTY_STRING); |
| 115 | - stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo(); | ||
| 116 | - } else { | ||
| 117 | - stringRestriction = (YangStringRestriction) ((YangDerivedInfo<?>) type | ||
| 118 | - .getDataTypeExtendedInfo()).getExtendedInfo(); | ||
| 119 | - } | ||
| 120 | 114 | ||
| 121 | - if (stringRestriction == null) { | 115 | + if (type.getDataType() == YangDataTypes.STRING) { |
| 122 | - stringRestriction = new YangStringRestriction(); | 116 | + YangStringRestriction stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo(); |
| 123 | - if (type.getDataType() == YangDataTypes.STRING) { | 117 | + if (stringRestriction == null) { |
| 118 | + stringRestriction = new YangStringRestriction(); | ||
| 124 | type.setDataTypeExtendedInfo(stringRestriction); | 119 | type.setDataTypeExtendedInfo(stringRestriction); |
| 120 | + stringRestriction.addPattern(patternArgument); | ||
| 125 | } else { | 121 | } else { |
| 126 | - ((YangDerivedInfo<YangStringRestriction>) type.getDataTypeExtendedInfo()) | 122 | + stringRestriction.addPattern(patternArgument); |
| 127 | - .setExtendedInfo(stringRestriction); | 123 | + } |
| 124 | + } else { | ||
| 125 | + YangPatternRestriction patternRestriction = (YangPatternRestriction) ((YangDerivedInfo<?>) type | ||
| 126 | + .getDataTypeExtendedInfo()).getPatternRestriction(); | ||
| 127 | + if (patternRestriction == null) { | ||
| 128 | + patternRestriction = new YangPatternRestriction(); | ||
| 129 | + ((YangDerivedInfo<?>) type.getDataTypeExtendedInfo()).setPatternRestriction(patternRestriction); | ||
| 130 | + patternRestriction.addPattern(patternArgument); | ||
| 131 | + } else { | ||
| 132 | + ((YangDerivedInfo<?>) type.getDataTypeExtendedInfo()).setPatternRestriction(patternRestriction); | ||
| 133 | + patternRestriction.addPattern(patternArgument); | ||
| 128 | } | 134 | } |
| 129 | } | 135 | } |
| 130 | - | ||
| 131 | - String patternArgument = ctx.string().getText().replace("\"", EMPTY_STRING); | ||
| 132 | - stringRestriction.addPattern(patternArgument); | ||
| 133 | } | 136 | } |
| 134 | } | 137 | } | ... | ... |
| ... | @@ -16,33 +16,24 @@ | ... | @@ -16,33 +16,24 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
| 18 | 18 | ||
| 19 | -import java.util.regex.Pattern; | 19 | +import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
| 20 | - | ||
| 21 | -import org.onosproject.yangutils.datamodel.YangRangeInterval; | ||
| 22 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; | 20 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; |
| 23 | import org.onosproject.yangutils.datamodel.YangType; | 21 | import org.onosproject.yangutils.datamodel.YangType; |
| 24 | -import org.onosproject.yangutils.datamodel.YangDerivedInfo; | ||
| 25 | -import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
| 26 | -import org.onosproject.yangutils.datamodel.YangDataTypes; | ||
| 27 | import org.onosproject.yangutils.parser.Parsable; | 22 | import org.onosproject.yangutils.parser.Parsable; |
| 28 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
| 29 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 24 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
| 30 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
| 31 | -import org.onosproject.yangutils.utils.YangConstructType; | ||
| 32 | -import org.onosproject.yangutils.utils.builtindatatype.DataTypeException; | ||
| 33 | -import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo; | ||
| 34 | 26 | ||
| 27 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | ||
| 35 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 28 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
| 36 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; | ||
| 37 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 29 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; |
| 38 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
| 39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
| 40 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA; | ||
| 41 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat; | ||
| 42 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | 32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; |
| 43 | -import static org.onosproject.yangutils.utils.YangConstructType.TYPE_DATA; | 33 | +import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType; |
| 34 | +import static org.onosproject.yangutils.utils.RestrictionResolver.processRangeRestriction; | ||
| 44 | import static org.onosproject.yangutils.utils.YangConstructType.RANGE_DATA; | 35 | import static org.onosproject.yangutils.utils.YangConstructType.RANGE_DATA; |
| 45 | -import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString; | 36 | +import static org.onosproject.yangutils.utils.YangConstructType.TYPE_DATA; |
| 46 | 37 | ||
| 47 | /* | 38 | /* |
| 48 | * Reference: RFC6020 and YANG ANTLR Grammar | 39 | * Reference: RFC6020 and YANG ANTLR Grammar |
| ... | @@ -68,11 +59,6 @@ import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectF | ... | @@ -68,11 +59,6 @@ import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectF |
| 68 | */ | 59 | */ |
| 69 | public final class RangeRestrictionListener { | 60 | public final class RangeRestrictionListener { |
| 70 | 61 | ||
| 71 | - private static final String PIPE = "|"; | ||
| 72 | - private static final String RANGE_INTERVAL = ".."; | ||
| 73 | - private static final int MAX_RANGE_BOUNDARY = 2; | ||
| 74 | - private static final int MIN_RANGE_BOUNDARY = 1; | ||
| 75 | - | ||
| 76 | /** | 62 | /** |
| 77 | * Creates a new range restriction listener. | 63 | * Creates a new range restriction listener. |
| 78 | */ | 64 | */ |
| ... | @@ -85,10 +71,10 @@ public final class RangeRestrictionListener { | ... | @@ -85,10 +71,10 @@ public final class RangeRestrictionListener { |
| 85 | * tree. | 71 | * tree. |
| 86 | * | 72 | * |
| 87 | * @param listener listener's object | 73 | * @param listener listener's object |
| 88 | - * @param ctx context object of the grammar rule | 74 | + * @param ctx context object of the grammar rule |
| 89 | */ | 75 | */ |
| 90 | public static void processRangeRestrictionEntry(TreeWalkListener listener, | 76 | public static void processRangeRestrictionEntry(TreeWalkListener listener, |
| 91 | - GeneratedYangParser.RangeStatementContext ctx) { | 77 | + GeneratedYangParser.RangeStatementContext ctx) { |
| 92 | 78 | ||
| 93 | // Check for stack to be non empty. | 79 | // Check for stack to be non empty. |
| 94 | checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), ENTRY); | 80 | checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), ENTRY); |
| ... | @@ -107,73 +93,34 @@ public final class RangeRestrictionListener { | ... | @@ -107,73 +93,34 @@ public final class RangeRestrictionListener { |
| 107 | * Sets the range restriction to type. | 93 | * Sets the range restriction to type. |
| 108 | * | 94 | * |
| 109 | * @param type YANG type for which range restriction to be added | 95 | * @param type YANG type for which range restriction to be added |
| 110 | - * @param ctx context object of the grammar rule | 96 | + * @param ctx context object of the grammar rule |
| 111 | */ | 97 | */ |
| 112 | private static void setRangeRestriction(YangType type, | 98 | private static void setRangeRestriction(YangType type, |
| 113 | - GeneratedYangParser.RangeStatementContext ctx) { | 99 | + GeneratedYangParser.RangeStatementContext ctx) { |
| 114 | - | 100 | + |
| 115 | - YangBuiltInDataTypeInfo<?> startValue; | 101 | + if (type.getDataType() == DERIVED) { |
| 116 | - YangBuiltInDataTypeInfo<?> endValue; | 102 | + ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo()) |
| 117 | - YangRangeRestriction rangeRestriction = new YangRangeRestriction(); | 103 | + .setRangeRestrictionString(ctx.range().getText()); |
| 118 | - | 104 | + ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo()) |
| 119 | - String rangeArgument = removeQuotesAndHandleConcat(ctx.range().getText()); | 105 | + .setLineNumber(ctx.getStart().getLine()); |
| 120 | - String[] rangeArguments = rangeArgument.trim().split(Pattern.quote(PIPE)); | 106 | + ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo()) |
| 121 | - | 107 | + .setCharPosition(ctx.getStart().getCharPositionInLine()); |
| 122 | - for (String rangePart : rangeArguments) { | 108 | + return; |
| 123 | - String startInterval; | 109 | + } |
| 124 | - String endInterval; | ||
| 125 | - YangRangeInterval rangeInterval = new YangRangeInterval(); | ||
| 126 | - String[] rangeBoundary = rangePart.trim().split(Pattern.quote(RANGE_INTERVAL)); | ||
| 127 | - | ||
| 128 | - if (rangeBoundary.length > MAX_RANGE_BOUNDARY) { | ||
| 129 | - ParserException parserException = new ParserException("YANG file error : " + | ||
| 130 | - YangConstructType.getYangConstructType(RANGE_DATA) + " " + rangeArgument + | ||
| 131 | - " is not valid."); | ||
| 132 | - parserException.setLine(ctx.getStart().getLine()); | ||
| 133 | - parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
| 134 | - throw parserException; | ||
| 135 | - } | ||
| 136 | - | ||
| 137 | - if (rangeBoundary.length == MIN_RANGE_BOUNDARY) { | ||
| 138 | - startInterval = rangeBoundary[0]; | ||
| 139 | - endInterval = rangeBoundary[0]; | ||
| 140 | - } else { | ||
| 141 | - startInterval = rangeBoundary[0]; | ||
| 142 | - endInterval = rangeBoundary[1]; | ||
| 143 | - } | ||
| 144 | - | ||
| 145 | - try { | ||
| 146 | - startValue = getDataObjectFromString(startInterval, type.getDataType()); | ||
| 147 | - endValue = getDataObjectFromString(endInterval, type.getDataType()); | ||
| 148 | - } catch (DataTypeException e) { | ||
| 149 | - ParserException parserException = new ParserException(e.getMessage()); | ||
| 150 | - parserException.setLine(ctx.getStart().getLine()); | ||
| 151 | - parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
| 152 | - throw parserException; | ||
| 153 | - } | ||
| 154 | - | ||
| 155 | - rangeInterval.setStartValue(startValue); | ||
| 156 | - rangeInterval.setEndValue(endValue); | ||
| 157 | 110 | ||
| 158 | - try { | 111 | + if (!(isOfRangeRestrictedType(type.getDataType()))) { |
| 159 | - rangeRestriction.addRangeRestrictionInterval(rangeInterval); | 112 | + ParserException parserException = new ParserException("YANG file error: Range restriction can't be " + |
| 160 | - } catch (DataModelException e) { | 113 | + "applied to a given type"); |
| 161 | - ParserException parserException = new ParserException(constructExtendedListenerErrorMessage( | 114 | + parserException.setLine(ctx.getStart().getLine()); |
| 162 | - UNHANDLED_PARSED_DATA, RANGE_DATA, rangeArgument, ENTRY, e.getMessage())); | 115 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); |
| 163 | - parserException.setLine(ctx.getStart().getLine()); | 116 | + throw parserException; |
| 164 | - parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
| 165 | - throw parserException; | ||
| 166 | - } | ||
| 167 | } | 117 | } |
| 168 | 118 | ||
| 119 | + YangRangeRestriction rangeRestriction = processRangeRestriction(null, ctx.getStart().getLine(), | ||
| 120 | + ctx.getStart().getCharPositionInLine(), false, ctx.range().getText(), type.getDataType()); | ||
| 121 | + | ||
| 169 | if (rangeRestriction != null) { | 122 | if (rangeRestriction != null) { |
| 170 | - if (type.getDataType() == YangDataTypes.DERIVED) { | 123 | + type.setDataTypeExtendedInfo(rangeRestriction); |
| 171 | - ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo()) | ||
| 172 | - .setExtendedInfo(rangeRestriction); | ||
| 173 | - } else { | ||
| 174 | - type.setDataTypeExtendedInfo(rangeRestriction); | ||
| 175 | - } | ||
| 176 | } | 124 | } |
| 177 | - | ||
| 178 | } | 125 | } |
| 179 | } | 126 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016-present Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +package org.onosproject.yangutils.utils; | ||
| 18 | + | ||
| 19 | +import java.util.regex.Pattern; | ||
| 20 | +import org.onosproject.yangutils.datamodel.YangDataTypes; | ||
| 21 | +import org.onosproject.yangutils.datamodel.YangRangeInterval; | ||
| 22 | +import org.onosproject.yangutils.datamodel.YangRangeRestriction; | ||
| 23 | +import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
| 24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
| 25 | +import org.onosproject.yangutils.utils.builtindatatype.DataTypeException; | ||
| 26 | +import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo; | ||
| 27 | + | ||
| 28 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.DECIMAL64; | ||
| 29 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.INT16; | ||
| 30 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; | ||
| 31 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.INT64; | ||
| 32 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.INT8; | ||
| 33 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT16; | ||
| 34 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT32; | ||
| 35 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT64; | ||
| 36 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT8; | ||
| 37 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | ||
| 38 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; | ||
| 39 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA; | ||
| 40 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat; | ||
| 41 | +import static org.onosproject.yangutils.utils.YangConstructType.LENGTH_DATA; | ||
| 42 | +import static org.onosproject.yangutils.utils.YangConstructType.RANGE_DATA; | ||
| 43 | +import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString; | ||
| 44 | + | ||
| 45 | +/** | ||
| 46 | + * Represents restriction resolver which provide common utility used by parser | ||
| 47 | + * and during linking for restriction resolution. | ||
| 48 | + */ | ||
| 49 | +public final class RestrictionResolver { | ||
| 50 | + | ||
| 51 | + private static final String PIPE = "|"; | ||
| 52 | + private static final String INTERVAL = ".."; | ||
| 53 | + private static final int MAX_RANGE_BOUNDARY = 2; | ||
| 54 | + private static final int MIN_RANGE_BOUNDARY = 1; | ||
| 55 | + private static final String MIN_KEYWORD = "min"; | ||
| 56 | + private static final String MAX_KEYWORD = "max"; | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * Creates a restriction resolver. | ||
| 60 | + */ | ||
| 61 | + private RestrictionResolver() { | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + /** | ||
| 65 | + * Processes the range restriction for parser and linker. | ||
| 66 | + * | ||
| 67 | + * @param refRangeRestriction range restriction of referred typedef | ||
| 68 | + * @param lineNumber error line number | ||
| 69 | + * @param charPositionInLine error character position in line | ||
| 70 | + * @param hasReferredRestriction whether has referred restriction | ||
| 71 | + * @param curRangeString caller type's range string | ||
| 72 | + * @param effectiveType effective type, when called from linker | ||
| 73 | + * @return YANG range restriction | ||
| 74 | + */ | ||
| 75 | + public static YangRangeRestriction processRangeRestriction(YangRangeRestriction refRangeRestriction, | ||
| 76 | + int lineNumber, int charPositionInLine, | ||
| 77 | + boolean hasReferredRestriction, | ||
| 78 | + String curRangeString, YangDataTypes effectiveType) { | ||
| 79 | + YangBuiltInDataTypeInfo<?> startValue; | ||
| 80 | + YangBuiltInDataTypeInfo<?> endValue; | ||
| 81 | + YangRangeRestriction rangeRestriction = new YangRangeRestriction(); | ||
| 82 | + | ||
| 83 | + String rangeArgument = removeQuotesAndHandleConcat(curRangeString); | ||
| 84 | + String[] rangeArguments = rangeArgument.trim().split(Pattern.quote(PIPE)); | ||
| 85 | + | ||
| 86 | + for (String rangePart : rangeArguments) { | ||
| 87 | + String startInterval; | ||
| 88 | + String endInterval; | ||
| 89 | + YangRangeInterval rangeInterval = new YangRangeInterval(); | ||
| 90 | + String[] rangeBoundary = rangePart.trim().split(Pattern.quote(INTERVAL)); | ||
| 91 | + | ||
| 92 | + if (rangeBoundary.length > MAX_RANGE_BOUNDARY) { | ||
| 93 | + ParserException parserException = new ParserException("YANG file error : " + | ||
| 94 | + YangConstructType.getYangConstructType(RANGE_DATA) + " " + rangeArgument + | ||
| 95 | + " is not valid."); | ||
| 96 | + parserException.setLine(lineNumber); | ||
| 97 | + parserException.setCharPosition(charPositionInLine); | ||
| 98 | + throw parserException; | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + if (rangeBoundary.length == MIN_RANGE_BOUNDARY) { | ||
| 102 | + startInterval = rangeBoundary[0]; | ||
| 103 | + endInterval = rangeBoundary[0]; | ||
| 104 | + } else { | ||
| 105 | + startInterval = rangeBoundary[0]; | ||
| 106 | + endInterval = rangeBoundary[1]; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + try { | ||
| 110 | + if (hasReferredRestriction && startInterval.equals(MIN_KEYWORD) | ||
| 111 | + && refRangeRestriction.getMinRestrictedvalue() != null) { | ||
| 112 | + startValue = refRangeRestriction.getMinRestrictedvalue(); | ||
| 113 | + } else if (hasReferredRestriction && startInterval.equals(MAX_KEYWORD) | ||
| 114 | + && refRangeRestriction.getMaxRestrictedvalue() != null) { | ||
| 115 | + startValue = refRangeRestriction.getMaxRestrictedvalue(); | ||
| 116 | + } else { | ||
| 117 | + startValue = getDataObjectFromString(startInterval, effectiveType); | ||
| 118 | + } | ||
| 119 | + if (hasReferredRestriction && endInterval.equals(MIN_KEYWORD) | ||
| 120 | + && refRangeRestriction.getMinRestrictedvalue() != null) { | ||
| 121 | + endValue = refRangeRestriction.getMinRestrictedvalue(); | ||
| 122 | + } else if (hasReferredRestriction && endInterval.equals(MAX_KEYWORD) | ||
| 123 | + && refRangeRestriction.getMaxRestrictedvalue() != null) { | ||
| 124 | + endValue = refRangeRestriction.getMaxRestrictedvalue(); | ||
| 125 | + } else { | ||
| 126 | + endValue = getDataObjectFromString(endInterval, effectiveType); | ||
| 127 | + } | ||
| 128 | + } catch (DataTypeException | DataModelException e) { | ||
| 129 | + ParserException parserException = new ParserException(e.getMessage()); | ||
| 130 | + parserException.setLine(lineNumber); | ||
| 131 | + parserException.setCharPosition(charPositionInLine); | ||
| 132 | + throw parserException; | ||
| 133 | + } | ||
| 134 | + | ||
| 135 | + rangeInterval.setStartValue(startValue); | ||
| 136 | + rangeInterval.setEndValue(endValue); | ||
| 137 | + | ||
| 138 | + try { | ||
| 139 | + rangeRestriction.addRangeRestrictionInterval(rangeInterval); | ||
| 140 | + } catch (DataModelException e) { | ||
| 141 | + ParserException parserException = new ParserException(constructExtendedListenerErrorMessage( | ||
| 142 | + UNHANDLED_PARSED_DATA, RANGE_DATA, rangeArgument, ENTRY, e.getMessage())); | ||
| 143 | + parserException.setLine(lineNumber); | ||
| 144 | + parserException.setCharPosition(charPositionInLine); | ||
| 145 | + throw parserException; | ||
| 146 | + } | ||
| 147 | + } | ||
| 148 | + return rangeRestriction; | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + /** | ||
| 152 | + * Processes the length restriction for parser and linker. | ||
| 153 | + * | ||
| 154 | + * @param refLengthRestriction length restriction of referred typedef | ||
| 155 | + * @param lineNumber error line number | ||
| 156 | + * @param charPositionInLine error character position in line | ||
| 157 | + * @param hasReferredRestriction whether has referred restriction | ||
| 158 | + * @param curLengthString caller type's length string | ||
| 159 | + * @return YANG range restriction | ||
| 160 | + */ | ||
| 161 | + public static YangRangeRestriction processLengthRestriction(YangRangeRestriction refLengthRestriction, | ||
| 162 | + int lineNumber, int charPositionInLine, | ||
| 163 | + boolean hasReferredRestriction, | ||
| 164 | + String curLengthString) { | ||
| 165 | + | ||
| 166 | + YangBuiltInDataTypeInfo<?> startValue; | ||
| 167 | + YangBuiltInDataTypeInfo<?> endValue; | ||
| 168 | + YangRangeRestriction lengthRestriction = new YangRangeRestriction<>(); | ||
| 169 | + | ||
| 170 | + String rangeArgument = removeQuotesAndHandleConcat(curLengthString); | ||
| 171 | + String[] rangeArguments = rangeArgument.trim().split(Pattern.quote(PIPE)); | ||
| 172 | + | ||
| 173 | + for (String rangePart : rangeArguments) { | ||
| 174 | + String startInterval; | ||
| 175 | + String endInterval; | ||
| 176 | + YangRangeInterval rangeInterval = new YangRangeInterval<>(); | ||
| 177 | + String[] rangeBoundary = rangePart.trim().split(Pattern.quote(INTERVAL)); | ||
| 178 | + | ||
| 179 | + if (rangeBoundary.length > MAX_RANGE_BOUNDARY) { | ||
| 180 | + ParserException parserException = new ParserException("YANG file error : " + | ||
| 181 | + YangConstructType.getYangConstructType(LENGTH_DATA) + " " + rangeArgument + | ||
| 182 | + " is not valid."); | ||
| 183 | + parserException.setLine(lineNumber); | ||
| 184 | + parserException.setCharPosition(charPositionInLine); | ||
| 185 | + throw parserException; | ||
| 186 | + } | ||
| 187 | + | ||
| 188 | + if (rangeBoundary.length == MIN_RANGE_BOUNDARY) { | ||
| 189 | + startInterval = rangeBoundary[0]; | ||
| 190 | + endInterval = rangeBoundary[0]; | ||
| 191 | + } else { | ||
| 192 | + startInterval = rangeBoundary[0]; | ||
| 193 | + endInterval = rangeBoundary[1]; | ||
| 194 | + } | ||
| 195 | + | ||
| 196 | + try { | ||
| 197 | + if (hasReferredRestriction && startInterval.equals(MIN_KEYWORD) | ||
| 198 | + && refLengthRestriction.getMinRestrictedvalue() != null) { | ||
| 199 | + startValue = refLengthRestriction.getMinRestrictedvalue(); | ||
| 200 | + } else if (hasReferredRestriction && startInterval.equals(MAX_KEYWORD) | ||
| 201 | + && refLengthRestriction.getMaxRestrictedvalue() != null) { | ||
| 202 | + startValue = refLengthRestriction.getMaxRestrictedvalue(); | ||
| 203 | + } else { | ||
| 204 | + startValue = getDataObjectFromString(startInterval, YangDataTypes.UINT64); | ||
| 205 | + } | ||
| 206 | + if (hasReferredRestriction && endInterval.equals(MIN_KEYWORD) | ||
| 207 | + && refLengthRestriction.getMinRestrictedvalue() != null) { | ||
| 208 | + endValue = refLengthRestriction.getMinRestrictedvalue(); | ||
| 209 | + } else if (hasReferredRestriction && endInterval.equals(MAX_KEYWORD) | ||
| 210 | + && refLengthRestriction.getMaxRestrictedvalue() != null) { | ||
| 211 | + endValue = refLengthRestriction.getMaxRestrictedvalue(); | ||
| 212 | + } else { | ||
| 213 | + endValue = getDataObjectFromString(endInterval, YangDataTypes.UINT64); | ||
| 214 | + } | ||
| 215 | + } catch (DataTypeException | DataModelException e) { | ||
| 216 | + ParserException parserException = new ParserException(e.getMessage()); | ||
| 217 | + parserException.setLine(lineNumber); | ||
| 218 | + parserException.setCharPosition(charPositionInLine); | ||
| 219 | + throw parserException; | ||
| 220 | + } | ||
| 221 | + | ||
| 222 | + rangeInterval.setStartValue(startValue); | ||
| 223 | + rangeInterval.setEndValue(endValue); | ||
| 224 | + | ||
| 225 | + try { | ||
| 226 | + lengthRestriction.addRangeRestrictionInterval(rangeInterval); | ||
| 227 | + } catch (DataModelException e) { | ||
| 228 | + ParserException parserException = new ParserException(constructExtendedListenerErrorMessage( | ||
| 229 | + UNHANDLED_PARSED_DATA, LENGTH_DATA, rangeArgument, ENTRY, e.getMessage())); | ||
| 230 | + parserException.setLine(lineNumber); | ||
| 231 | + parserException.setCharPosition(charPositionInLine); | ||
| 232 | + throw parserException; | ||
| 233 | + } | ||
| 234 | + } | ||
| 235 | + return lengthRestriction; | ||
| 236 | + } | ||
| 237 | + | ||
| 238 | + /** | ||
| 239 | + * Returns whether the data type is of range restricted type. | ||
| 240 | + * | ||
| 241 | + * @param dataType data type to be checked | ||
| 242 | + * @return true, if data type can have range restrictions, false otherwise | ||
| 243 | + */ | ||
| 244 | + public static boolean isOfRangeRestrictedType(YangDataTypes dataType) { | ||
| 245 | + return (dataType == INT8 | ||
| 246 | + || dataType == INT16 | ||
| 247 | + || dataType == INT32 | ||
| 248 | + || dataType == INT64 | ||
| 249 | + || dataType == UINT8 | ||
| 250 | + || dataType == UINT16 | ||
| 251 | + || dataType == UINT32 | ||
| 252 | + || dataType == UINT64 | ||
| 253 | + || dataType == DECIMAL64); | ||
| 254 | + } | ||
| 255 | +} |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | + | ||
| 16 | package org.onosproject.yangutils.utils.builtindatatype; | 17 | package org.onosproject.yangutils.utils.builtindatatype; |
| 17 | 18 | ||
| 18 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 19 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
| ... | @@ -66,7 +67,8 @@ public class YangInt16 implements YangBuiltInDataTypeInfo<YangInt16> { | ... | @@ -66,7 +67,8 @@ public class YangInt16 implements YangBuiltInDataTypeInfo<YangInt16> { |
| 66 | try { | 67 | try { |
| 67 | value = Short.parseShort(valueInString); | 68 | value = Short.parseShort(valueInString); |
| 68 | } catch (Exception e) { | 69 | } catch (Exception e) { |
| 69 | - throw new DataTypeException("YANG file error : " + valueInString + " is not valid."); | 70 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + |
| 71 | + "int16."); | ||
| 70 | } | 72 | } |
| 71 | } | 73 | } |
| 72 | } | 74 | } | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | + | ||
| 16 | package org.onosproject.yangutils.utils.builtindatatype; | 17 | package org.onosproject.yangutils.utils.builtindatatype; |
| 17 | 18 | ||
| 18 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 19 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
| ... | @@ -65,7 +66,8 @@ public class YangInt32 implements YangBuiltInDataTypeInfo<YangInt32> { | ... | @@ -65,7 +66,8 @@ public class YangInt32 implements YangBuiltInDataTypeInfo<YangInt32> { |
| 65 | try { | 66 | try { |
| 66 | value = Integer.parseInt(valueInString); | 67 | value = Integer.parseInt(valueInString); |
| 67 | } catch (Exception e) { | 68 | } catch (Exception e) { |
| 68 | - throw new DataTypeException("YANG file error : " + valueInString + " is not valid."); | 69 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + |
| 70 | + "int32."); | ||
| 69 | } | 71 | } |
| 70 | } | 72 | } |
| 71 | } | 73 | } | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | + | ||
| 16 | package org.onosproject.yangutils.utils.builtindatatype; | 17 | package org.onosproject.yangutils.utils.builtindatatype; |
| 17 | 18 | ||
| 18 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 19 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
| ... | @@ -65,7 +66,8 @@ public class YangInt64 implements YangBuiltInDataTypeInfo<YangInt64> { | ... | @@ -65,7 +66,8 @@ public class YangInt64 implements YangBuiltInDataTypeInfo<YangInt64> { |
| 65 | try { | 66 | try { |
| 66 | value = Long.parseLong(valueInString); | 67 | value = Long.parseLong(valueInString); |
| 67 | } catch (Exception e) { | 68 | } catch (Exception e) { |
| 68 | - throw new DataTypeException("YANG file error : " + valueInString + " is not valid."); | 69 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + |
| 70 | + "int64."); | ||
| 69 | } | 71 | } |
| 70 | } | 72 | } |
| 71 | } | 73 | } | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | + | ||
| 16 | package org.onosproject.yangutils.utils.builtindatatype; | 17 | package org.onosproject.yangutils.utils.builtindatatype; |
| 17 | 18 | ||
| 18 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 19 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
| ... | @@ -65,7 +66,8 @@ public class YangInt8 implements YangBuiltInDataTypeInfo<YangInt8> { | ... | @@ -65,7 +66,8 @@ public class YangInt8 implements YangBuiltInDataTypeInfo<YangInt8> { |
| 65 | try { | 66 | try { |
| 66 | value = Byte.parseByte(valueInString); | 67 | value = Byte.parseByte(valueInString); |
| 67 | } catch (Exception e) { | 68 | } catch (Exception e) { |
| 68 | - throw new DataTypeException("YANG file error : " + valueInString + " is not valid."); | 69 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + |
| 70 | + "int8."); | ||
| 69 | } | 71 | } |
| 70 | } | 72 | } |
| 71 | } | 73 | } | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | + | ||
| 16 | package org.onosproject.yangutils.utils.builtindatatype; | 17 | package org.onosproject.yangutils.utils.builtindatatype; |
| 17 | 18 | ||
| 18 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 19 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
| ... | @@ -65,7 +66,8 @@ public class YangUint16 implements YangBuiltInDataTypeInfo<YangUint16> { | ... | @@ -65,7 +66,8 @@ public class YangUint16 implements YangBuiltInDataTypeInfo<YangUint16> { |
| 65 | try { | 66 | try { |
| 66 | value = Integer.parseInt(valueInString); | 67 | value = Integer.parseInt(valueInString); |
| 67 | } catch (Exception e) { | 68 | } catch (Exception e) { |
| 68 | - throw new DataTypeException("YANG file error : " + valueInString + " is not valid."); | 69 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + |
| 70 | + "uint16."); | ||
| 69 | } | 71 | } |
| 70 | } | 72 | } |
| 71 | 73 | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | + | ||
| 16 | package org.onosproject.yangutils.utils.builtindatatype; | 17 | package org.onosproject.yangutils.utils.builtindatatype; |
| 17 | 18 | ||
| 18 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 19 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
| ... | @@ -58,7 +59,8 @@ public class YangUint32 implements YangBuiltInDataTypeInfo<YangUint32> { | ... | @@ -58,7 +59,8 @@ public class YangUint32 implements YangBuiltInDataTypeInfo<YangUint32> { |
| 58 | try { | 59 | try { |
| 59 | value = Long.parseLong(valueInString); | 60 | value = Long.parseLong(valueInString); |
| 60 | } catch (Exception e) { | 61 | } catch (Exception e) { |
| 61 | - throw new DataTypeException("YANG file error : " + valueInString + " is not valid."); | 62 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + |
| 63 | + "uint32."); | ||
| 62 | } | 64 | } |
| 63 | } | 65 | } |
| 64 | 66 | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | + | ||
| 16 | package org.onosproject.yangutils.utils.builtindatatype; | 17 | package org.onosproject.yangutils.utils.builtindatatype; |
| 17 | 18 | ||
| 18 | import java.math.BigInteger; | 19 | import java.math.BigInteger; |
| ... | @@ -71,7 +72,8 @@ public class YangUint64 implements YangBuiltInDataTypeInfo<YangUint64> { | ... | @@ -71,7 +72,8 @@ public class YangUint64 implements YangBuiltInDataTypeInfo<YangUint64> { |
| 71 | } else if (NON_NEGATIVE_INTEGER_PATTERN.matcher(valueInString).matches()) { | 72 | } else if (NON_NEGATIVE_INTEGER_PATTERN.matcher(valueInString).matches()) { |
| 72 | value = new BigInteger(valueInString); | 73 | value = new BigInteger(valueInString); |
| 73 | } else { | 74 | } else { |
| 74 | - throw new DataTypeException("YANG file error : " + valueInString + " is not valid."); | 75 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + |
| 76 | + "uint64."); | ||
| 75 | } | 77 | } |
| 76 | 78 | ||
| 77 | if (value.compareTo(MIN_VALUE) < 0) { | 79 | if (value.compareTo(MIN_VALUE) < 0) { | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2016 Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,6 +13,7 @@ | ... | @@ -13,6 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | + | ||
| 16 | package org.onosproject.yangutils.utils.builtindatatype; | 17 | package org.onosproject.yangutils.utils.builtindatatype; |
| 17 | 18 | ||
| 18 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 19 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
| ... | @@ -65,7 +66,8 @@ public class YangUint8 implements YangBuiltInDataTypeInfo<YangUint8> { | ... | @@ -65,7 +66,8 @@ public class YangUint8 implements YangBuiltInDataTypeInfo<YangUint8> { |
| 65 | try { | 66 | try { |
| 66 | value = Short.parseShort(valueInString); | 67 | value = Short.parseShort(valueInString); |
| 67 | } catch (Exception e) { | 68 | } catch (Exception e) { |
| 68 | - throw new DataTypeException("YANG file error : " + valueInString + " is not valid."); | 69 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + |
| 70 | + "uint8."); | ||
| 69 | } | 71 | } |
| 70 | } | 72 | } |
| 71 | 73 | ... | ... |
| ... | @@ -18,23 +18,26 @@ package org.onosproject.yangutils.linker; | ... | @@ -18,23 +18,26 @@ package org.onosproject.yangutils.linker; |
| 18 | 18 | ||
| 19 | import java.io.IOException; | 19 | import java.io.IOException; |
| 20 | import java.util.ListIterator; | 20 | import java.util.ListIterator; |
| 21 | - | ||
| 22 | import org.junit.Test; | 21 | import org.junit.Test; |
| 23 | -import org.onosproject.yangutils.datamodel.ResolvableStatus; | ||
| 24 | import org.onosproject.yangutils.datamodel.YangContainer; | 22 | import org.onosproject.yangutils.datamodel.YangContainer; |
| 25 | -import org.onosproject.yangutils.datamodel.YangDataTypes; | ||
| 26 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; | 23 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
| 27 | import org.onosproject.yangutils.datamodel.YangLeaf; | 24 | import org.onosproject.yangutils.datamodel.YangLeaf; |
| 28 | import org.onosproject.yangutils.datamodel.YangList; | 25 | import org.onosproject.yangutils.datamodel.YangList; |
| 29 | import org.onosproject.yangutils.datamodel.YangModule; | 26 | import org.onosproject.yangutils.datamodel.YangModule; |
| 30 | import org.onosproject.yangutils.datamodel.YangNode; | 27 | import org.onosproject.yangutils.datamodel.YangNode; |
| 31 | -import org.onosproject.yangutils.datamodel.YangNodeType; | ||
| 32 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 28 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
| 33 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 29 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
| 34 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 30 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
| 35 | 31 | ||
| 32 | +import static org.hamcrest.CoreMatchers.nullValue; | ||
| 36 | import static org.hamcrest.MatcherAssert.assertThat; | 33 | import static org.hamcrest.MatcherAssert.assertThat; |
| 37 | import static org.hamcrest.core.Is.is; | 34 | import static org.hamcrest.core.Is.is; |
| 35 | +import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
| 36 | +import static org.onosproject.yangutils.datamodel.ResolvableStatus.RESOLVED; | ||
| 37 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | ||
| 38 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; | ||
| 39 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | ||
| 40 | +import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; | ||
| 38 | 41 | ||
| 39 | /** | 42 | /** |
| 40 | * Test cases for testing "type" intra file linking. | 43 | * Test cases for testing "type" intra file linking. |
| ... | @@ -56,7 +59,7 @@ public class IntraFileTypeLinkingTest { | ... | @@ -56,7 +59,7 @@ public class IntraFileTypeLinkingTest { |
| 56 | assertThat(node instanceof YangModule, is(true)); | 59 | assertThat(node instanceof YangModule, is(true)); |
| 57 | 60 | ||
| 58 | // Check whether the node type is set properly to module. | 61 | // Check whether the node type is set properly to module. |
| 59 | - assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | 62 | + assertThat(node.getNodeType(), is(MODULE_NODE)); |
| 60 | 63 | ||
| 61 | // Check whether the module name is set correctly. | 64 | // Check whether the module name is set correctly. |
| 62 | YangModule yangNode = (YangModule) node; | 65 | YangModule yangNode = (YangModule) node; |
| ... | @@ -67,13 +70,23 @@ public class IntraFileTypeLinkingTest { | ... | @@ -67,13 +70,23 @@ public class IntraFileTypeLinkingTest { |
| 67 | 70 | ||
| 68 | assertThat(leafInfo.getName(), is("invalid-interval")); | 71 | assertThat(leafInfo.getName(), is("invalid-interval")); |
| 69 | assertThat(leafInfo.getDataType().getDataTypeName(), is("hello")); | 72 | assertThat(leafInfo.getDataType().getDataTypeName(), is("hello")); |
| 70 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); | 73 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); |
| 71 | 74 | ||
| 72 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 75 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 73 | is((YangTypeDef) node.getChild())); | 76 | is((YangTypeDef) node.getChild())); |
| 74 | 77 | ||
| 75 | - assertThat(leafInfo.getDataType().getResolvableStatus(), | 78 | + assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED)); |
| 76 | - is(ResolvableStatus.RESOLVED)); | 79 | + |
| 80 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 81 | + | ||
| 82 | + // Check for the effective built-in type. | ||
| 83 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING)); | ||
| 84 | + | ||
| 85 | + // Check for the restriction. | ||
| 86 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
| 87 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
| 88 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
| 89 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
| 77 | } | 90 | } |
| 78 | 91 | ||
| 79 | /** | 92 | /** |
| ... | @@ -91,7 +104,7 @@ public class IntraFileTypeLinkingTest { | ... | @@ -91,7 +104,7 @@ public class IntraFileTypeLinkingTest { |
| 91 | assertThat((node instanceof YangModule), is(true)); | 104 | assertThat((node instanceof YangModule), is(true)); |
| 92 | 105 | ||
| 93 | // Check whether the node type is set properly to module. | 106 | // Check whether the node type is set properly to module. |
| 94 | - assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | 107 | + assertThat(node.getNodeType(), is(MODULE_NODE)); |
| 95 | 108 | ||
| 96 | // Check whether the module name is set correctly. | 109 | // Check whether the module name is set correctly. |
| 97 | YangModule yangNode = (YangModule) node; | 110 | YangModule yangNode = (YangModule) node; |
| ... | @@ -106,13 +119,23 @@ public class IntraFileTypeLinkingTest { | ... | @@ -106,13 +119,23 @@ public class IntraFileTypeLinkingTest { |
| 106 | 119 | ||
| 107 | assertThat(leafInfo.getName(), is("invalid-interval")); | 120 | assertThat(leafInfo.getName(), is("invalid-interval")); |
| 108 | assertThat(leafInfo.getDataType().getDataTypeName(), is("hello")); | 121 | assertThat(leafInfo.getDataType().getDataTypeName(), is("hello")); |
| 109 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); | 122 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); |
| 110 | 123 | ||
| 111 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 124 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 112 | is((YangTypeDef) node.getChild())); | 125 | is((YangTypeDef) node.getChild())); |
| 113 | 126 | ||
| 114 | - assertThat(leafInfo.getDataType().getResolvableStatus(), | 127 | + assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED)); |
| 115 | - is(ResolvableStatus.RESOLVED)); | 128 | + |
| 129 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 130 | + | ||
| 131 | + // Check for the effective built-in type. | ||
| 132 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING)); | ||
| 133 | + | ||
| 134 | + // Check for the restriction. | ||
| 135 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
| 136 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
| 137 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
| 138 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
| 116 | } | 139 | } |
| 117 | 140 | ||
| 118 | /** | 141 | /** |
| ... | @@ -131,7 +154,7 @@ public class IntraFileTypeLinkingTest { | ... | @@ -131,7 +154,7 @@ public class IntraFileTypeLinkingTest { |
| 131 | assertThat((node instanceof YangModule), is(true)); | 154 | assertThat((node instanceof YangModule), is(true)); |
| 132 | 155 | ||
| 133 | // Check whether the node type is set properly to module. | 156 | // Check whether the node type is set properly to module. |
| 134 | - assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | 157 | + assertThat(node.getNodeType(), is(MODULE_NODE)); |
| 135 | 158 | ||
| 136 | // Check whether the module name is set correctly. | 159 | // Check whether the module name is set correctly. |
| 137 | YangModule yangNode = (YangModule) node; | 160 | YangModule yangNode = (YangModule) node; |
| ... | @@ -146,13 +169,23 @@ public class IntraFileTypeLinkingTest { | ... | @@ -146,13 +169,23 @@ public class IntraFileTypeLinkingTest { |
| 146 | 169 | ||
| 147 | assertThat(leafInfo.getName(), is("invalid-interval")); | 170 | assertThat(leafInfo.getName(), is("invalid-interval")); |
| 148 | assertThat(leafInfo.getDataType().getDataTypeName(), is("hello")); | 171 | assertThat(leafInfo.getDataType().getDataTypeName(), is("hello")); |
| 149 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); | 172 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); |
| 150 | 173 | ||
| 151 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 174 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 152 | is((YangTypeDef) node.getChild().getNextSibling())); | 175 | is((YangTypeDef) node.getChild().getNextSibling())); |
| 153 | 176 | ||
| 154 | - assertThat(leafInfo.getDataType().getResolvableStatus(), | 177 | + assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED)); |
| 155 | - is(ResolvableStatus.RESOLVED)); | 178 | + |
| 179 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 180 | + | ||
| 181 | + // Check for the effective built-in type. | ||
| 182 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING)); | ||
| 183 | + | ||
| 184 | + // Check for the restriction. | ||
| 185 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
| 186 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
| 187 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
| 188 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
| 156 | } | 189 | } |
| 157 | 190 | ||
| 158 | /** | 191 | /** |
| ... | @@ -171,7 +204,7 @@ public class IntraFileTypeLinkingTest { | ... | @@ -171,7 +204,7 @@ public class IntraFileTypeLinkingTest { |
| 171 | assertThat((node instanceof YangModule), is(true)); | 204 | assertThat((node instanceof YangModule), is(true)); |
| 172 | 205 | ||
| 173 | // Check whether the node type is set properly to module. | 206 | // Check whether the node type is set properly to module. |
| 174 | - assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | 207 | + assertThat(node.getNodeType(), is(MODULE_NODE)); |
| 175 | 208 | ||
| 176 | // Check whether the module name is set correctly. | 209 | // Check whether the module name is set correctly. |
| 177 | YangModule yangNode = (YangModule) node; | 210 | YangModule yangNode = (YangModule) node; |
| ... | @@ -186,13 +219,23 @@ public class IntraFileTypeLinkingTest { | ... | @@ -186,13 +219,23 @@ public class IntraFileTypeLinkingTest { |
| 186 | 219 | ||
| 187 | assertThat(leafInfo.getName(), is("invalid-interval")); | 220 | assertThat(leafInfo.getName(), is("invalid-interval")); |
| 188 | assertThat(leafInfo.getDataType().getDataTypeName(), is("hello")); | 221 | assertThat(leafInfo.getDataType().getDataTypeName(), is("hello")); |
| 189 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); | 222 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); |
| 190 | 223 | ||
| 191 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 224 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 192 | is((YangTypeDef) yangContainer.getChild().getNextSibling())); | 225 | is((YangTypeDef) yangContainer.getChild().getNextSibling())); |
| 193 | 226 | ||
| 194 | - assertThat(leafInfo.getDataType().getResolvableStatus(), | 227 | + assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED)); |
| 195 | - is(ResolvableStatus.RESOLVED)); | 228 | + |
| 229 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 230 | + | ||
| 231 | + // Check for the effective built-in type. | ||
| 232 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING)); | ||
| 233 | + | ||
| 234 | + // Check for the restriction. | ||
| 235 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
| 236 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
| 237 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
| 238 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
| 196 | } | 239 | } |
| 197 | 240 | ||
| 198 | /** | 241 | /** |
| ... | @@ -209,7 +252,7 @@ public class IntraFileTypeLinkingTest { | ... | @@ -209,7 +252,7 @@ public class IntraFileTypeLinkingTest { |
| 209 | assertThat((node instanceof YangModule), is(true)); | 252 | assertThat((node instanceof YangModule), is(true)); |
| 210 | 253 | ||
| 211 | // Check whether the node type is set properly to module. | 254 | // Check whether the node type is set properly to module. |
| 212 | - assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | 255 | + assertThat(node.getNodeType(), is(MODULE_NODE)); |
| 213 | 256 | ||
| 214 | // Check whether the module name is set correctly. | 257 | // Check whether the module name is set correctly. |
| 215 | YangModule yangNode = (YangModule) node; | 258 | YangModule yangNode = (YangModule) node; |
| ... | @@ -224,26 +267,37 @@ public class IntraFileTypeLinkingTest { | ... | @@ -224,26 +267,37 @@ public class IntraFileTypeLinkingTest { |
| 224 | 267 | ||
| 225 | assertThat(leafInfo.getName(), is("invalid-interval")); | 268 | assertThat(leafInfo.getName(), is("invalid-interval")); |
| 226 | assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass")); | 269 | assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass")); |
| 227 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); | 270 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); |
| 228 | 271 | ||
| 229 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 272 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 230 | is((YangTypeDef) yangList.getChild())); | 273 | is((YangTypeDef) yangList.getChild())); |
| 231 | assertThat(leafInfo.getDataType().getResolvableStatus(), | 274 | assertThat(leafInfo.getDataType().getResolvableStatus(), |
| 232 | - is(ResolvableStatus.RESOLVED)); | 275 | + is(RESOLVED)); |
| 233 | 276 | ||
| 234 | YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild(); | 277 | YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild(); |
| 235 | 278 | ||
| 236 | assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 279 | assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 237 | is((YangTypeDef) yangContainer.getChild().getNextSibling())); | 280 | is((YangTypeDef) yangContainer.getChild().getNextSibling())); |
| 238 | assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(), | 281 | assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(), |
| 239 | - is(ResolvableStatus.RESOLVED)); | 282 | + is(RESOLVED)); |
| 240 | 283 | ||
| 241 | YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling(); | 284 | YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling(); |
| 242 | 285 | ||
| 243 | assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 286 | assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 244 | is((YangTypeDef) node.getChild())); | 287 | is((YangTypeDef) node.getChild())); |
| 245 | assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(), | 288 | assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(), |
| 246 | - is(ResolvableStatus.RESOLVED)); | 289 | + is(RESOLVED)); |
| 290 | + | ||
| 291 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 292 | + | ||
| 293 | + // Check for the effective built-in type. | ||
| 294 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32)); | ||
| 295 | + | ||
| 296 | + // Check for the restriction. | ||
| 297 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
| 298 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
| 299 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
| 300 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
| 247 | } | 301 | } |
| 248 | 302 | ||
| 249 | /** | 303 | /** |
| ... | @@ -261,7 +315,7 @@ public class IntraFileTypeLinkingTest { | ... | @@ -261,7 +315,7 @@ public class IntraFileTypeLinkingTest { |
| 261 | assertThat((node instanceof YangModule), is(true)); | 315 | assertThat((node instanceof YangModule), is(true)); |
| 262 | 316 | ||
| 263 | // Check whether the node type is set properly to module. | 317 | // Check whether the node type is set properly to module. |
| 264 | - assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | 318 | + assertThat(node.getNodeType(), is(MODULE_NODE)); |
| 265 | 319 | ||
| 266 | // Check whether the module name is set correctly. | 320 | // Check whether the module name is set correctly. |
| 267 | YangModule yangNode = (YangModule) node; | 321 | YangModule yangNode = (YangModule) node; |
| ... | @@ -276,26 +330,37 @@ public class IntraFileTypeLinkingTest { | ... | @@ -276,26 +330,37 @@ public class IntraFileTypeLinkingTest { |
| 276 | 330 | ||
| 277 | assertThat(leafInfo.getName(), is("invalid-interval")); | 331 | assertThat(leafInfo.getName(), is("invalid-interval")); |
| 278 | assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass")); | 332 | assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass")); |
| 279 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); | 333 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); |
| 280 | 334 | ||
| 281 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 335 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 282 | is((YangTypeDef) yangList.getChild())); | 336 | is((YangTypeDef) yangList.getChild())); |
| 283 | assertThat(leafInfo.getDataType().getResolvableStatus(), | 337 | assertThat(leafInfo.getDataType().getResolvableStatus(), |
| 284 | - is(ResolvableStatus.INTRA_FILE_RESOLVED)); | 338 | + is(INTRA_FILE_RESOLVED)); |
| 285 | 339 | ||
| 286 | YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild(); | 340 | YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild(); |
| 287 | 341 | ||
| 288 | assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 342 | assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 289 | is((YangTypeDef) yangContainer.getChild().getNextSibling())); | 343 | is((YangTypeDef) yangContainer.getChild().getNextSibling())); |
| 290 | assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(), | 344 | assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(), |
| 291 | - is(ResolvableStatus.INTRA_FILE_RESOLVED)); | 345 | + is(INTRA_FILE_RESOLVED)); |
| 292 | 346 | ||
| 293 | YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling(); | 347 | YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling(); |
| 294 | 348 | ||
| 295 | assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 349 | assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 296 | is((YangTypeDef) node.getChild())); | 350 | is((YangTypeDef) node.getChild())); |
| 297 | assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(), | 351 | assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(), |
| 298 | - is(ResolvableStatus.INTRA_FILE_RESOLVED)); | 352 | + is(INTRA_FILE_RESOLVED)); |
| 353 | + | ||
| 354 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 355 | + | ||
| 356 | + // Check for the effective built-in type. | ||
| 357 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(nullValue())); | ||
| 358 | + | ||
| 359 | + // Check for the restriction. | ||
| 360 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
| 361 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
| 362 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
| 363 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
| 299 | } | 364 | } |
| 300 | 365 | ||
| 301 | /** | 366 | /** |
| ... | @@ -312,7 +377,7 @@ public class IntraFileTypeLinkingTest { | ... | @@ -312,7 +377,7 @@ public class IntraFileTypeLinkingTest { |
| 312 | assertThat((node instanceof YangModule), is(true)); | 377 | assertThat((node instanceof YangModule), is(true)); |
| 313 | 378 | ||
| 314 | // Check whether the node type is set properly to module. | 379 | // Check whether the node type is set properly to module. |
| 315 | - assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | 380 | + assertThat(node.getNodeType(), is(MODULE_NODE)); |
| 316 | 381 | ||
| 317 | // Check whether the module name is set correctly. | 382 | // Check whether the module name is set correctly. |
| 318 | YangModule yangNode = (YangModule) node; | 383 | YangModule yangNode = (YangModule) node; |
| ... | @@ -327,26 +392,37 @@ public class IntraFileTypeLinkingTest { | ... | @@ -327,26 +392,37 @@ public class IntraFileTypeLinkingTest { |
| 327 | 392 | ||
| 328 | assertThat(leafInfo.getName(), is("invalid-interval")); | 393 | assertThat(leafInfo.getName(), is("invalid-interval")); |
| 329 | assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass")); | 394 | assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass")); |
| 330 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); | 395 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); |
| 331 | 396 | ||
| 332 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 397 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 333 | is((YangTypeDef) yangList.getChild())); | 398 | is((YangTypeDef) yangList.getChild())); |
| 334 | assertThat(leafInfo.getDataType().getResolvableStatus(), | 399 | assertThat(leafInfo.getDataType().getResolvableStatus(), |
| 335 | - is(ResolvableStatus.RESOLVED)); | 400 | + is(RESOLVED)); |
| 336 | 401 | ||
| 337 | YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild(); | 402 | YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild(); |
| 338 | 403 | ||
| 339 | assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 404 | assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 340 | is((YangTypeDef) yangContainer.getChild().getNextSibling())); | 405 | is((YangTypeDef) yangContainer.getChild().getNextSibling())); |
| 341 | assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(), | 406 | assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(), |
| 342 | - is(ResolvableStatus.RESOLVED)); | 407 | + is(RESOLVED)); |
| 343 | 408 | ||
| 344 | YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling(); | 409 | YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling(); |
| 345 | 410 | ||
| 346 | assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 411 | assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 347 | is((YangTypeDef) node.getChild())); | 412 | is((YangTypeDef) node.getChild())); |
| 348 | assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(), | 413 | assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(), |
| 349 | - is(ResolvableStatus.RESOLVED)); | 414 | + is(RESOLVED)); |
| 415 | + | ||
| 416 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 417 | + | ||
| 418 | + // Check for the effective built-in type. | ||
| 419 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32)); | ||
| 420 | + | ||
| 421 | + // Check for the restriction. | ||
| 422 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
| 423 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
| 424 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
| 425 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
| 350 | } | 426 | } |
| 351 | 427 | ||
| 352 | /** | 428 | /** |
| ... | @@ -364,7 +440,7 @@ public class IntraFileTypeLinkingTest { | ... | @@ -364,7 +440,7 @@ public class IntraFileTypeLinkingTest { |
| 364 | assertThat((node instanceof YangModule), is(true)); | 440 | assertThat((node instanceof YangModule), is(true)); |
| 365 | 441 | ||
| 366 | // Check whether the node type is set properly to module. | 442 | // Check whether the node type is set properly to module. |
| 367 | - assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | 443 | + assertThat(node.getNodeType(), is(MODULE_NODE)); |
| 368 | 444 | ||
| 369 | // Check whether the module name is set correctly. | 445 | // Check whether the module name is set correctly. |
| 370 | YangModule yangNode = (YangModule) node; | 446 | YangModule yangNode = (YangModule) node; |
| ... | @@ -379,12 +455,12 @@ public class IntraFileTypeLinkingTest { | ... | @@ -379,12 +455,12 @@ public class IntraFileTypeLinkingTest { |
| 379 | 455 | ||
| 380 | assertThat(leafInfo.getName(), is("invalid-interval")); | 456 | assertThat(leafInfo.getName(), is("invalid-interval")); |
| 381 | assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass")); | 457 | assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass")); |
| 382 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); | 458 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); |
| 383 | 459 | ||
| 384 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 460 | assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 385 | is((YangTypeDef) yangList.getChild())); | 461 | is((YangTypeDef) yangList.getChild())); |
| 386 | assertThat(leafInfo.getDataType().getResolvableStatus(), | 462 | assertThat(leafInfo.getDataType().getResolvableStatus(), |
| 387 | - is(ResolvableStatus.INTRA_FILE_RESOLVED)); | 463 | + is(INTRA_FILE_RESOLVED)); |
| 388 | 464 | ||
| 389 | YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild(); | 465 | YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild(); |
| 390 | 466 | ||
| ... | @@ -393,7 +469,18 @@ public class IntraFileTypeLinkingTest { | ... | @@ -393,7 +469,18 @@ public class IntraFileTypeLinkingTest { |
| 393 | assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), | 469 | assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(), |
| 394 | is((YangTypeDef) node.getChild())); | 470 | is((YangTypeDef) node.getChild())); |
| 395 | assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(), | 471 | assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(), |
| 396 | - is(ResolvableStatus.RESOLVED)); | 472 | + is(RESOLVED)); |
| 473 | + | ||
| 474 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 475 | + | ||
| 476 | + // Check for the effective built-in type. | ||
| 477 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(nullValue())); | ||
| 478 | + | ||
| 479 | + // Check for the restriction. | ||
| 480 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
| 481 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
| 482 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
| 483 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
| 397 | } | 484 | } |
| 398 | 485 | ||
| 399 | /** | 486 | /** | ... | ... |
| ... | @@ -18,7 +18,6 @@ package org.onosproject.yangutils.linker; | ... | @@ -18,7 +18,6 @@ package org.onosproject.yangutils.linker; |
| 18 | 18 | ||
| 19 | import java.io.IOException; | 19 | import java.io.IOException; |
| 20 | import java.util.ListIterator; | 20 | import java.util.ListIterator; |
| 21 | - | ||
| 22 | import org.junit.Rule; | 21 | import org.junit.Rule; |
| 23 | import org.junit.Test; | 22 | import org.junit.Test; |
| 24 | import org.junit.rules.ExpectedException; | 23 | import org.junit.rules.ExpectedException; |
| ... | @@ -81,7 +80,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -81,7 +80,7 @@ public class IntraFileUsesLinkingTest { |
| 81 | 80 | ||
| 82 | // Check whether the information in the leaf is correct under grouping. | 81 | // Check whether the information in the leaf is correct under grouping. |
| 83 | assertThat(leafInfo.getName(), is("hello")); | 82 | assertThat(leafInfo.getName(), is("hello")); |
| 84 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("String")); | 83 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 85 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 84 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 86 | 85 | ||
| 87 | // Check whether uses is module's child. | 86 | // Check whether uses is module's child. |
| ... | @@ -97,7 +96,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -97,7 +96,7 @@ public class IntraFileUsesLinkingTest { |
| 97 | 96 | ||
| 98 | // Check whether the information in the leaf is correct under module. | 97 | // Check whether the information in the leaf is correct under module. |
| 99 | assertThat(leafInfo.getName(), is("hello")); | 98 | assertThat(leafInfo.getName(), is("hello")); |
| 100 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("String")); | 99 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 101 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 100 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 102 | 101 | ||
| 103 | } | 102 | } |
| ... | @@ -135,7 +134,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -135,7 +134,7 @@ public class IntraFileUsesLinkingTest { |
| 135 | 134 | ||
| 136 | // Check whether the information in the leaf is correct under grouping. | 135 | // Check whether the information in the leaf is correct under grouping. |
| 137 | assertThat(leafInfo.getName(), is("treat")); | 136 | assertThat(leafInfo.getName(), is("treat")); |
| 138 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("String")); | 137 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 139 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 138 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 140 | 139 | ||
| 141 | // Check whether container is the child of grouping. | 140 | // Check whether container is the child of grouping. |
| ... | @@ -150,7 +149,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -150,7 +149,7 @@ public class IntraFileUsesLinkingTest { |
| 150 | 149 | ||
| 151 | // Check whether the information in the leaf is correct under container which is under grouping. | 150 | // Check whether the information in the leaf is correct under container which is under grouping. |
| 152 | assertThat(leafInfo.getName(), is("leaf2")); | 151 | assertThat(leafInfo.getName(), is("leaf2")); |
| 153 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("String")); | 152 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 154 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 153 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 155 | 154 | ||
| 156 | // Check whether uses is module's child. | 155 | // Check whether uses is module's child. |
| ... | @@ -166,7 +165,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -166,7 +165,7 @@ public class IntraFileUsesLinkingTest { |
| 166 | 165 | ||
| 167 | // Check whether the information in the leaf is correct under module. | 166 | // Check whether the information in the leaf is correct under module. |
| 168 | assertThat(leafInfo.getName(), is("treat")); | 167 | assertThat(leafInfo.getName(), is("treat")); |
| 169 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("String")); | 168 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 170 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 169 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 171 | 170 | ||
| 172 | // Check whether container is the child of module. | 171 | // Check whether container is the child of module. |
| ... | @@ -181,7 +180,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -181,7 +180,7 @@ public class IntraFileUsesLinkingTest { |
| 181 | 180 | ||
| 182 | // Check whether the information in the leaf is correct under container which is under module. | 181 | // Check whether the information in the leaf is correct under container which is under module. |
| 183 | assertThat(leafInfo.getName(), is("leaf2")); | 182 | assertThat(leafInfo.getName(), is("leaf2")); |
| 184 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("String")); | 183 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 185 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 184 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 186 | } | 185 | } |
| 187 | 186 | ||
| ... | @@ -688,7 +687,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -688,7 +687,7 @@ public class IntraFileUsesLinkingTest { |
| 688 | 687 | ||
| 689 | // Check whether the information in the leaf is correct under grouping. | 688 | // Check whether the information in the leaf is correct under grouping. |
| 690 | assertThat(leafInfo.getName(), is("hello")); | 689 | assertThat(leafInfo.getName(), is("hello")); |
| 691 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("String")); | 690 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 692 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 691 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 693 | 692 | ||
| 694 | } | 693 | } |
| ... | @@ -762,7 +761,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -762,7 +761,7 @@ public class IntraFileUsesLinkingTest { |
| 762 | 761 | ||
| 763 | // Check whether the information in the leaf is correct under grouping. | 762 | // Check whether the information in the leaf is correct under grouping. |
| 764 | assertThat(leafInfo.getName(), is("hello")); | 763 | assertThat(leafInfo.getName(), is("hello")); |
| 765 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("String")); | 764 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 766 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 765 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 767 | } | 766 | } |
| 768 | 767 | ... | ... |
| ... | @@ -19,20 +19,18 @@ package org.onosproject.yangutils.parser.impl.listeners; | ... | @@ -19,20 +19,18 @@ package org.onosproject.yangutils.parser.impl.listeners; |
| 19 | import java.io.IOException; | 19 | import java.io.IOException; |
| 20 | import java.math.BigInteger; | 20 | import java.math.BigInteger; |
| 21 | import java.util.ListIterator; | 21 | import java.util.ListIterator; |
| 22 | - | ||
| 23 | import org.junit.Rule; | 22 | import org.junit.Rule; |
| 24 | import org.junit.Test; | 23 | import org.junit.Test; |
| 25 | - | ||
| 26 | import org.junit.rules.ExpectedException; | 24 | import org.junit.rules.ExpectedException; |
| 27 | -import org.onosproject.yangutils.datamodel.YangNode; | 25 | +import org.onosproject.yangutils.datamodel.YangDataTypes; |
| 28 | -import org.onosproject.yangutils.datamodel.YangModule; | ||
| 29 | -import org.onosproject.yangutils.datamodel.YangNodeType; | ||
| 30 | import org.onosproject.yangutils.datamodel.YangLeaf; | 26 | import org.onosproject.yangutils.datamodel.YangLeaf; |
| 31 | import org.onosproject.yangutils.datamodel.YangLeafList; | 27 | import org.onosproject.yangutils.datamodel.YangLeafList; |
| 32 | -import org.onosproject.yangutils.datamodel.YangDataTypes; | 28 | +import org.onosproject.yangutils.datamodel.YangModule; |
| 33 | -import org.onosproject.yangutils.datamodel.YangStringRestriction; | 29 | +import org.onosproject.yangutils.datamodel.YangNode; |
| 30 | +import org.onosproject.yangutils.datamodel.YangNodeType; | ||
| 34 | import org.onosproject.yangutils.datamodel.YangRangeInterval; | 31 | import org.onosproject.yangutils.datamodel.YangRangeInterval; |
| 35 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; | 32 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; |
| 33 | +import org.onosproject.yangutils.datamodel.YangStringRestriction; | ||
| 36 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 34 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
| 37 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 35 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
| 38 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 36 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
| ... | @@ -71,11 +69,11 @@ public class LengthRestrictionListenerTest { | ... | @@ -71,11 +69,11 @@ public class LengthRestrictionListenerTest { |
| 71 | assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); | 69 | assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
| 72 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 70 | assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
| 73 | YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo | 71 | YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo |
| 74 | - .getDataType().getDataTypeExtendedInfo(); | 72 | + .getDataType().getDataTypeExtendedInfo(); |
| 75 | YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction(); | 73 | YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction(); |
| 76 | 74 | ||
| 77 | ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals() | 75 | ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals() |
| 78 | - .listIterator(); | 76 | + .listIterator(); |
| 79 | 77 | ||
| 80 | YangRangeInterval rangeInterval = lengthListIterator.next(); | 78 | YangRangeInterval rangeInterval = lengthListIterator.next(); |
| 81 | 79 | ||
| ... | @@ -220,7 +218,7 @@ public class LengthRestrictionListenerTest { | ... | @@ -220,7 +218,7 @@ public class LengthRestrictionListenerTest { |
| 220 | @Test | 218 | @Test |
| 221 | public void processLengthWithInvalidIntegerPattern() throws IOException, ParserException { | 219 | public void processLengthWithInvalidIntegerPattern() throws IOException, ParserException { |
| 222 | thrown.expect(ParserException.class); | 220 | thrown.expect(ParserException.class); |
| 223 | - thrown.expectMessage("YANG file error : a is not valid."); | 221 | + thrown.expectMessage("YANG file error : Input value \"a\" is not a valid uint64."); |
| 224 | YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidIntegerPattern.yang"); | 222 | YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidIntegerPattern.yang"); |
| 225 | } | 223 | } |
| 226 | 224 | ... | ... |
| ... | @@ -18,18 +18,17 @@ package org.onosproject.yangutils.parser.impl.listeners; | ... | @@ -18,18 +18,17 @@ package org.onosproject.yangutils.parser.impl.listeners; |
| 18 | 18 | ||
| 19 | import java.io.IOException; | 19 | import java.io.IOException; |
| 20 | import java.util.ListIterator; | 20 | import java.util.ListIterator; |
| 21 | - | ||
| 22 | import org.junit.Rule; | 21 | import org.junit.Rule; |
| 23 | import org.junit.Test; | 22 | import org.junit.Test; |
| 24 | import org.junit.rules.ExpectedException; | 23 | import org.junit.rules.ExpectedException; |
| 25 | -import org.onosproject.yangutils.datamodel.YangNode; | 24 | +import org.onosproject.yangutils.datamodel.YangDataTypes; |
| 26 | import org.onosproject.yangutils.datamodel.YangLeaf; | 25 | import org.onosproject.yangutils.datamodel.YangLeaf; |
| 27 | import org.onosproject.yangutils.datamodel.YangLeafList; | 26 | import org.onosproject.yangutils.datamodel.YangLeafList; |
| 28 | -import org.onosproject.yangutils.datamodel.YangRangeRestriction; | ||
| 29 | -import org.onosproject.yangutils.datamodel.YangRangeInterval; | ||
| 30 | import org.onosproject.yangutils.datamodel.YangModule; | 27 | import org.onosproject.yangutils.datamodel.YangModule; |
| 28 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
| 31 | import org.onosproject.yangutils.datamodel.YangNodeType; | 29 | import org.onosproject.yangutils.datamodel.YangNodeType; |
| 32 | -import org.onosproject.yangutils.datamodel.YangDataTypes; | 30 | +import org.onosproject.yangutils.datamodel.YangRangeInterval; |
| 31 | +import org.onosproject.yangutils.datamodel.YangRangeRestriction; | ||
| 33 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 32 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
| 34 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 33 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
| 35 | import org.onosproject.yangutils.utils.builtindatatype.YangInt32; | 34 | import org.onosproject.yangutils.utils.builtindatatype.YangInt32; |
| ... | @@ -70,7 +69,7 @@ public class RangeRestrictionListenerTest { | ... | @@ -70,7 +69,7 @@ public class RangeRestrictionListenerTest { |
| 70 | .getDataType().getDataTypeExtendedInfo(); | 69 | .getDataType().getDataTypeExtendedInfo(); |
| 71 | 70 | ||
| 72 | ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals() | 71 | ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals() |
| 73 | - .listIterator(); | 72 | + .listIterator(); |
| 74 | YangRangeInterval rangeInterval = rangeListIterator.next(); | 73 | YangRangeInterval rangeInterval = rangeListIterator.next(); |
| 75 | assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1)); | 74 | assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1)); |
| 76 | assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4)); | 75 | assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4)); |
| ... | @@ -172,7 +171,7 @@ public class RangeRestrictionListenerTest { | ... | @@ -172,7 +171,7 @@ public class RangeRestrictionListenerTest { |
| 172 | @Test | 171 | @Test |
| 173 | public void processRangeWithInvalidIntegerPattern() throws IOException, ParserException { | 172 | public void processRangeWithInvalidIntegerPattern() throws IOException, ParserException { |
| 174 | thrown.expect(ParserException.class); | 173 | thrown.expect(ParserException.class); |
| 175 | - thrown.expectMessage("YANG file error : a is not valid."); | 174 | + thrown.expectMessage("YANG file error : Input value \"a\" is not a valid int32."); |
| 176 | YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang"); | 175 | YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang"); |
| 177 | } | 176 | } |
| 178 | } | 177 | } | ... | ... |
| ... | @@ -3,7 +3,7 @@ module Test { | ... | @@ -3,7 +3,7 @@ module Test { |
| 3 | namespace http://huawei.com; | 3 | namespace http://huawei.com; |
| 4 | prefix Ant; | 4 | prefix Ant; |
| 5 | typedef hello { | 5 | typedef hello { |
| 6 | - type String; | 6 | + type string; |
| 7 | } | 7 | } |
| 8 | container ospf { | 8 | container ospf { |
| 9 | list valid { | 9 | list valid { | ... | ... |
| ... | @@ -7,14 +7,14 @@ module Test { | ... | @@ -7,14 +7,14 @@ module Test { |
| 7 | } | 7 | } |
| 8 | grouping Percentage { | 8 | grouping Percentage { |
| 9 | leaf hello{ | 9 | leaf hello{ |
| 10 | - type String; | 10 | + type string; |
| 11 | } | 11 | } |
| 12 | } | 12 | } |
| 13 | container ospf { | 13 | container ospf { |
| 14 | list valid { | 14 | list valid { |
| 15 | key "invalid"; | 15 | key "invalid"; |
| 16 | - leaf invalid{ | 16 | + leaf invalid{ |
| 17 | - type String; | 17 | + type string; |
| 18 | } | 18 | } |
| 19 | uses Ant:FirstClass; | 19 | uses Ant:FirstClass; |
| 20 | grouping FirstClass { | 20 | grouping FirstClass { | ... | ... |
| ... | @@ -3,15 +3,15 @@ module Test { | ... | @@ -3,15 +3,15 @@ module Test { |
| 3 | namespace http://huawei.com; | 3 | namespace http://huawei.com; |
| 4 | prefix Ant; | 4 | prefix Ant; |
| 5 | grouping Percentage { | 5 | grouping Percentage { |
| 6 | - leaf hello{ | 6 | + leaf hello{ |
| 7 | - type String; | 7 | + type string; |
| 8 | } | 8 | } |
| 9 | } | 9 | } |
| 10 | container ospf { | 10 | container ospf { |
| 11 | list valid { | 11 | list valid { |
| 12 | key "invalid"; | 12 | key "invalid"; |
| 13 | - leaf invalid{ | 13 | + leaf invalid{ |
| 14 | - type String; | 14 | + type string; |
| 15 | } | 15 | } |
| 16 | uses Ant:FirstClass; | 16 | uses Ant:FirstClass; |
| 17 | grouping FirstClass { | 17 | grouping FirstClass { | ... | ... |
| ... | @@ -4,12 +4,12 @@ module Test { | ... | @@ -4,12 +4,12 @@ module Test { |
| 4 | prefix Ant; | 4 | prefix Ant; |
| 5 | uses treat; | 5 | uses treat; |
| 6 | grouping treat { | 6 | grouping treat { |
| 7 | - leaf treat{ | 7 | + leaf treat{ |
| 8 | - type String; | 8 | + type string; |
| 9 | } | 9 | } |
| 10 | container test{ | 10 | container test{ |
| 11 | leaf leaf2{ | 11 | leaf leaf2{ |
| 12 | - type String; | 12 | + type string; |
| 13 | } | 13 | } |
| 14 | } | 14 | } |
| 15 | } | 15 | } | ... | ... |
-
Please register or login to post a comment