Gaurav Agrawal
Committed by Gerrit Code Review

[ONOS-4063 to 68] Intra YANG file Linking Implementation and Intra YANG file Linking Framework

Change-Id: I06e602c351ab54178bf90b8676af71a70e42371f
Showing 58 changed files with 1138 additions and 421 deletions
1 +/*
2 + * Copyright 2016 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 +import java.util.List;
20 +import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
21 +
22 +/**
23 + * Abstraction of YANG dependency resolution information. Abstracted to obtain the
24 + * resolution information.
25 + */
26 +public interface HasResolutionInfo {
27 +
28 + /**
29 + * Returns unresolved resolution list.
30 + *
31 + * @return unresolved resolution list
32 + */
33 + List<YangResolutionInfo> getUnresolvedResolutionList();
34 +
35 + /**
36 + * Add to the resolution list.
37 + *
38 + * @param resolutionInfo resolution information
39 + */
40 + void addToResolutionList(YangResolutionInfo resolutionInfo);
41 +
42 + /**
43 + * Creates resolution list.
44 + *
45 + * @param resolutionList resolution list
46 + */
47 + void setResolutionList(List<YangResolutionInfo> resolutionList);
48 +
49 + /**
50 + * Returns unresolved imported list.
51 + *
52 + * @return unresolved imported list
53 + */
54 + List<YangImport> getImportList();
55 +
56 + /**
57 + * Add to the import list.
58 + *
59 + * @param yangImport import to be added
60 + */
61 + void addToImportList(YangImport yangImport);
62 +
63 + /**
64 + * Create import list.
65 + *
66 + * @param importList import list
67 + */
68 + void setImportList(List<YangImport> importList);
69 +
70 + /**
71 + * Returns unresolved include list.
72 + *
73 + * @return unresolved include list
74 + */
75 + List<YangInclude> getIncludeList();
76 +
77 + /**
78 + * Add to the include list.
79 + *
80 + * @param yangInclude include to be added
81 + */
82 + void addToIncludeList(YangInclude yangInclude);
83 +
84 + /**
85 + * Create include list.
86 + *
87 + * @param includeList include list
88 + */
89 + void setIncludeList(List<YangInclude> includeList);
90 +
91 + /**
92 + * Returns prefix of resolution root node.
93 + *
94 + * @return prefix resolution root node prefix
95 + */
96 + String getPrefix();
97 +
98 + /**
99 + * Set prefix of resolution list root node.
100 + *
101 + * @param prefix resolution root node prefix
102 + */
103 + void setPrefix(String prefix);
104 +
105 + /**
106 + * Resolve self file linking.
107 + *
108 + * @throws DataModelException a violation in data model rule
109 + */
110 + void resolveSelfFileLinking() throws DataModelException;
111 +}
1 +/*
2 + * Copyright 2016 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 + * ENUM to identify the YANG resolution type.
21 + */
22 +public enum ResolutionType {
23 + /**
24 + * Identifies that resolution is for typedef.
25 + */
26 + TYPEDEF_RESOLUTION,
27 +
28 + /**
29 + * Identifies that resolution is for grouping.
30 + */
31 + GROUPING_RESOLUTION;
32 +}
1 +/*
2 + * Copyright 2016 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 YANG resolvable information. Abstracted to obtain the
21 + * information required for linking resolution.
22 + */
23 +public interface Resolvable {
24 +
25 + /**
26 + * Returns the status of resolution. If completely resolved returns enum
27 + * value "RESOLVED", if not returns "UNRESOLVED", in case reference of
28 + * grouping/typedef is added to uses/type but it's not resolved
29 + * "PARTIALLY_RESOLVED" is returned.
30 + *
31 + * @return status of resolution
32 + */
33 + ResolvableStatus getResolvableStatus();
34 +
35 + /**
36 + * Set the status of type/uses resolution. If completely resolved set enum
37 + * value "RESOLVED", if not set it to "UNRESOLVED", in case reference of
38 + * grouping/typedef is added to uses/type but it's not resolved
39 + * "PARTIALLY_RESOLVED" should be set.
40 + *
41 + * @param resolvableStatus status of resolution
42 + */
43 + void setResolvableStatus(ResolvableStatus resolvableStatus);
44 +
45 + /**
46 + * Resolves the linking.
47 + */
48 + void resolve();
49 +}
1 +/*
2 + * Copyright 2016 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 + * Represents the status of resolvable entity.
21 + */
22 +public enum ResolvableStatus {
23 +
24 + /**
25 + * Identifies that resolvable entity is resolved.
26 + */
27 + RESOLVED,
28 +
29 + /**
30 + * Identifies that resolvable entity is unresolved.
31 + */
32 + UNRESOLVED,
33 +
34 + /**
35 + * Identifies that resolvable entity is partially resolved.
36 + */
37 + PARTIALLY_RESOLVED;
38 +}
...@@ -16,112 +16,83 @@ ...@@ -16,112 +16,83 @@
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 org.onosproject.yangutils.parser.Parsable;
21 -import org.onosproject.yangutils.utils.YangConstructType;
22 -
23 -/*-
24 - * Reference RFC 6020.
25 - *
26 - * The typedef Statement
27 - *
28 - * The "typedef" statement defines a new type that may be used locally
29 - * in the module, in modules or submodules which include it, and by
30 - * other modules that import from it. The new type is called the
31 - * "derived type", and the type from which it was derived is called
32 - * the "base type". All derived types can be traced back to a YANG
33 - * built-in type.
34 - *
35 - * The "typedef" statement's argument is an identifier that is the name
36 - * of the type to be defined, and MUST be followed by a block of
37 - * sub-statements that holds detailed typedef information.
38 - *
39 - * The name of the type MUST NOT be one of the YANG built-in types. If
40 - * the typedef is defined at the top level of a YANG module or
41 - * submodule, the name of the type to be defined MUST be unique within
42 - * the module.
43 - */
44 /** 19 /**
45 - * Derived type information. 20 + * Maintains the derived information.
21 + *
22 + * @param <T> extended information.
46 */ 23 */
47 -public class YangDerivedType implements Parsable { 24 +public class YangDerivedInfo<T> {
48 25
49 /** 26 /**
50 - * All derived types can be traced back to a YANG built-in type. 27 + * YANG typedef reference.
51 */ 28 */
52 - private YangDataTypes effectiveYangBuiltInType; 29 + private YangTypeDef referredTypeDef;
53 30
54 /** 31 /**
55 - * Base type from which the current type is derived. 32 + * Resolved additional information about data type after linking, example
33 + * restriction info, named values, etc. The extra information is based
34 + * on the data type. Based on the data type, the extended info can vary.
56 */ 35 */
57 - private YangType<?> baseType; 36 + private T resolvedExtendedInfo;
58 37
59 /** 38 /**
60 - * Default constructor. 39 + * Additional information about data type, example restriction info, named
40 + * values, etc. The extra information is based on the data type. Based on
41 + * the data type, the extended info can vary.
61 */ 42 */
62 - public YangDerivedType() { 43 + private T extendedInfo;
63 - }
64 44
65 /** 45 /**
66 - * Get the effective YANG built-in type of the derived data type. 46 + * Returns the referred typedef reference.
67 * 47 *
68 - * @return effective YANG built-in type of the derived data type 48 + * @return referred typedef reference
69 */ 49 */
70 - public YangDataTypes getEffectiveYangBuiltInType() { 50 + public YangTypeDef getReferredTypeDef() {
71 - return effectiveYangBuiltInType; 51 + return referredTypeDef;
72 } 52 }
73 53
74 /** 54 /**
75 - * Set the effective YANG built-in type of the derived data type. 55 + * Set the referred typedef reference.
76 * 56 *
77 - * @param builtInType effective YANG built-in type of the derived data type 57 + * @param referredTypeDef referred typedef reference
78 */ 58 */
79 - public void setEffectiveYangBuiltInType(YangDataTypes builtInType) { 59 + public void setReferredTypeDef(YangTypeDef referredTypeDef) {
80 - effectiveYangBuiltInType = builtInType; 60 + this.referredTypeDef = referredTypeDef;
81 } 61 }
82 62
83 /** 63 /**
84 - * Get the base type information. 64 + * Returns resolved extended information after successful linking.
85 * 65 *
86 - * @return base type information 66 + * @return resolved extended information
87 */ 67 */
88 - public YangType<?> getBaseType() { 68 + public T getResolvedExtendedInfo() {
89 - return baseType; 69 + return resolvedExtendedInfo;
90 } 70 }
91 71
92 /** 72 /**
93 - * Get the base type information. 73 + * Set resolved extended information after successful linking.
94 * 74 *
95 - * @param baseType base type information 75 + * @param resolvedExtendedInfo resolved extended information
96 */ 76 */
97 - public void setBaseType(YangType<?> baseType) { 77 + public void setResolvedExtendedInfo(T resolvedExtendedInfo) {
98 - this.baseType = baseType; 78 + this.resolvedExtendedInfo = resolvedExtendedInfo;
99 } 79 }
100 80
101 /** 81 /**
102 - * Get the parsable type. 82 + * Returns extended information.
103 - */ 83 + *
104 - @Override 84 + * @return extended information
105 - public YangConstructType getYangConstructType() {
106 - return YangConstructType.DERIVED;
107 - }
108 -
109 - /**
110 - * TODO.
111 */ 85 */
112 - @Override 86 + public T getExtendedInfo() {
113 - public void validateDataOnEntry() throws DataModelException { 87 + return extendedInfo;
114 - // TODO Auto-generated method stub
115 -
116 } 88 }
117 89
118 /** 90 /**
119 - * TODO. 91 + * Set extended information.
92 + *
93 + * @param extendedInfo extended information
120 */ 94 */
121 - @Override 95 + public void setExtendedInfo(T extendedInfo) {
122 - public void validateDataOnExit() throws DataModelException { 96 + this.extendedInfo = extendedInfo;
123 - // TODO Auto-generated method stub
124 -
125 } 97 }
126 -
127 } 98 }
......
...@@ -75,6 +75,11 @@ public class YangImport implements Parsable { ...@@ -75,6 +75,11 @@ public class YangImport implements Parsable {
75 private String prefixId; 75 private String prefixId;
76 76
77 /** 77 /**
78 + * Resolution information root node which is also the data model root node.
79 + */
80 + private HasResolutionInfo resolutionInfoNode;
81 +
82 + /**
78 * Reference:RFC 6020. 83 * Reference:RFC 6020.
79 * 84 *
80 * The import's "revision-date" statement is used to specify the exact 85 * The import's "revision-date" statement is used to specify the exact
...@@ -177,4 +182,22 @@ public class YangImport implements Parsable { ...@@ -177,4 +182,22 @@ public class YangImport implements Parsable {
177 // TODO auto-generated method stub, to be implemented by parser 182 // TODO auto-generated method stub, to be implemented by parser
178 183
179 } 184 }
185 +
186 + /**
187 + * Returns the resolution information node.
188 + *
189 + * @return the resolution information node
190 + */
191 + public HasResolutionInfo getResolutionInfoNode() {
192 + return resolutionInfoNode;
193 + }
194 +
195 + /**
196 + * Set the dresolution information node.
197 + *
198 + * @param resolutionInfoNode the resolution information node
199 + */
200 + public void setResolutionInfoNode(HasResolutionInfo resolutionInfoNode) {
201 + this.resolutionInfoNode = resolutionInfoNode;
202 + }
180 } 203 }
......
...@@ -51,6 +51,11 @@ public class YangInclude implements Parsable { ...@@ -51,6 +51,11 @@ public class YangInclude implements Parsable {
51 private String revision; 51 private String revision;
52 52
53 /** 53 /**
54 + * Resolution information root node which is also the data model root node.
55 + */
56 + private HasResolutionInfo resolutionInfoNode;
57 +
58 + /**
54 * Default constructor. 59 * Default constructor.
55 */ 60 */
56 public YangInclude() { 61 public YangInclude() {
...@@ -124,4 +129,21 @@ public class YangInclude implements Parsable { ...@@ -124,4 +129,21 @@ public class YangInclude implements Parsable {
124 129
125 } 130 }
126 131
132 + /**
133 + * Returns the resolution information node.
134 + *
135 + * @return the resolution information node
136 + */
137 + public HasResolutionInfo getResolutionInfoNode() {
138 + return resolutionInfoNode;
139 + }
140 +
141 + /**
142 + * Set the dresolution information node.
143 + *
144 + * @param resolutionInfoNode the resolution information node
145 + */
146 + public void setResolutionInfoNode(HasResolutionInfo resolutionInfoNode) {
147 + this.resolutionInfoNode = resolutionInfoNode;
148 + }
127 } 149 }
......
...@@ -17,12 +17,12 @@ package org.onosproject.yangutils.datamodel; ...@@ -17,12 +17,12 @@ package org.onosproject.yangutils.datamodel;
17 17
18 import java.util.LinkedList; 18 import java.util.LinkedList;
19 import java.util.List; 19 import java.util.List;
20 -
21 import org.onosproject.yangutils.datamodel.exceptions.DataModelException; 20 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
22 import org.onosproject.yangutils.parser.Parsable; 21 import org.onosproject.yangutils.parser.Parsable;
23 import org.onosproject.yangutils.utils.YangConstructType; 22 import org.onosproject.yangutils.utils.YangConstructType;
24 23
25 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil; 24 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
25 +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList;
26 26
27 /*- 27 /*-
28 * Reference:RFC 6020. 28 * Reference:RFC 6020.
...@@ -68,7 +68,7 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol ...@@ -68,7 +68,7 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol
68 * Data model node to maintain information defined in YANG module. 68 * Data model node to maintain information defined in YANG module.
69 */ 69 */
70 public class YangModule extends YangNode 70 public class YangModule extends YangNode
71 - implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector { 71 + implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector, HasResolutionInfo {
72 72
73 /** 73 /**
74 * Name of the module. 74 * Name of the module.
...@@ -185,16 +185,19 @@ public class YangModule extends YangNode ...@@ -185,16 +185,19 @@ public class YangModule extends YangNode
185 * matching "typedef" or "grouping" statement among the immediate 185 * matching "typedef" or "grouping" statement among the immediate
186 * sub-statements of each ancestor statement. 186 * sub-statements of each ancestor statement.
187 */ 187 */
188 - /** 188 + private List<YangResolutionInfo> unresolvedResolutionList;
189 - * List of nodes which require nested reference resolution.
190 - */
191 - private List<YangNode> nestedReferenceResoulutionList;
192 189
193 /** 190 /**
194 * Create a YANG node of module type. 191 * Create a YANG node of module type.
195 */ 192 */
196 public YangModule() { 193 public YangModule() {
194 +
197 super(YangNodeType.MODULE_NODE); 195 super(YangNodeType.MODULE_NODE);
196 + unresolvedResolutionList = new LinkedList<YangResolutionInfo>();
197 + importList = new LinkedList<YangImport>();
198 + includeList = new LinkedList<YangInclude>();
199 + listOfLeaf = new LinkedList<YangLeaf>();
200 + listOfLeafList = new LinkedList<YangLeafList>();
198 } 201 }
199 202
200 /** 203 /**
...@@ -265,28 +268,17 @@ public class YangModule extends YangNode ...@@ -265,28 +268,17 @@ public class YangModule extends YangNode
265 } 268 }
266 269
267 /** 270 /**
268 - * prevent setting the import list from outside.
269 - *
270 - * @param importList the import list to set
271 - */
272 - private void setImportList(List<YangImport> importList) {
273 - this.importList = importList;
274 - }
275 -
276 - /**
277 * Add the imported module information to the import list. 271 * Add the imported module information to the import list.
278 * 272 *
279 * @param importedModule module being imported 273 * @param importedModule module being imported
280 */ 274 */
281 - public void addImportedInfo(YangImport importedModule) { 275 + public void addToImportList(YangImport importedModule) {
282 -
283 - if (getImportList() == null) {
284 - setImportList(new LinkedList<YangImport>());
285 - }
286 -
287 getImportList().add(importedModule); 276 getImportList().add(importedModule);
277 + }
288 278
289 - return; 279 + @Override
280 + public void setImportList(List<YangImport> importList) {
281 + this.importList = importList;
290 } 282 }
291 283
292 /** 284 /**
...@@ -299,27 +291,17 @@ public class YangModule extends YangNode ...@@ -299,27 +291,17 @@ public class YangModule extends YangNode
299 } 291 }
300 292
301 /** 293 /**
302 - * Set the list of included sub modules.
303 - *
304 - * @param includeList the included list to set
305 - */
306 - private void setIncludeList(List<YangInclude> includeList) {
307 - this.includeList = includeList;
308 - }
309 -
310 - /**
311 * Add the included sub module information to the include list. 294 * Add the included sub module information to the include list.
312 * 295 *
313 * @param includeModule submodule being included 296 * @param includeModule submodule being included
314 */ 297 */
315 - public void addIncludedInfo(YangInclude includeModule) { 298 + public void addToIncludeList(YangInclude includeModule) {
316 -
317 - if (getIncludeList() == null) {
318 - setIncludeList(new LinkedList<YangInclude>());
319 - }
320 -
321 getIncludeList().add(includeModule); 299 getIncludeList().add(includeModule);
322 - return; 300 + }
301 +
302 + @Override
303 + public void setIncludeList(List<YangInclude> includeList) {
304 + this.includeList = includeList;
323 } 305 }
324 306
325 /** 307 /**
...@@ -333,25 +315,12 @@ public class YangModule extends YangNode ...@@ -333,25 +315,12 @@ public class YangModule extends YangNode
333 } 315 }
334 316
335 /** 317 /**
336 - * Set the list of leaf in module.
337 - *
338 - * @param leafsList the list of leaf to set
339 - */
340 - private void setListOfLeaf(List<YangLeaf> leafsList) {
341 - listOfLeaf = leafsList;
342 - }
343 -
344 - /**
345 * Add a leaf in module. 318 * Add a leaf in module.
346 * 319 *
347 * @param leaf the leaf to be added 320 * @param leaf the leaf to be added
348 */ 321 */
349 @Override 322 @Override
350 public void addLeaf(YangLeaf leaf) { 323 public void addLeaf(YangLeaf leaf) {
351 - if (getListOfLeaf() == null) {
352 - setListOfLeaf(new LinkedList<YangLeaf>());
353 - }
354 -
355 getListOfLeaf().add(leaf); 324 getListOfLeaf().add(leaf);
356 } 325 }
357 326
...@@ -366,25 +335,12 @@ public class YangModule extends YangNode ...@@ -366,25 +335,12 @@ public class YangModule extends YangNode
366 } 335 }
367 336
368 /** 337 /**
369 - * Set the list of leaf-list in module.
370 - *
371 - * @param listOfLeafList the list of leaf-list to set
372 - */
373 - private void setListOfLeafList(List<YangLeafList> listOfLeafList) {
374 - this.listOfLeafList = listOfLeafList;
375 - }
376 -
377 - /**
378 * Add a leaf-list in module. 338 * Add a leaf-list in module.
379 * 339 *
380 * @param leafList the leaf-list to be added 340 * @param leafList the leaf-list to be added
381 */ 341 */
382 @Override 342 @Override
383 public void addLeafList(YangLeafList leafList) { 343 public void addLeafList(YangLeafList leafList) {
384 - if (getListOfLeafList() == null) {
385 - setListOfLeafList(new LinkedList<YangLeafList>());
386 - }
387 -
388 getListOfLeafList().add(leafList); 344 getListOfLeafList().add(leafList);
389 } 345 }
390 346
...@@ -442,6 +398,14 @@ public class YangModule extends YangNode ...@@ -442,6 +398,14 @@ public class YangModule extends YangNode
442 this.prefix = prefix; 398 this.prefix = prefix;
443 } 399 }
444 400
401 + @Override
402 + public void resolveSelfFileLinking() throws DataModelException {
403 + // Get the list to be resolved.
404 + List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList();
405 + // Resolve linking for a resolution list.
406 + resolveLinkingForResolutionList(resolutionList, this);
407 + }
408 +
445 /** 409 /**
446 * Get the textual reference. 410 * Get the textual reference.
447 * 411 *
...@@ -499,37 +463,6 @@ public class YangModule extends YangNode ...@@ -499,37 +463,6 @@ public class YangModule extends YangNode
499 } 463 }
500 464
501 /** 465 /**
502 - * Get the list of nested reference's which required resolution.
503 - *
504 - * @return list of nested reference's which required resolution
505 - */
506 - public List<YangNode> getNestedReferenceResoulutionList() {
507 - return nestedReferenceResoulutionList;
508 - }
509 -
510 - /**
511 - * Set list of nested reference's which requires resolution.
512 - *
513 - * @param nestedReferenceResoulutionList list of nested reference's which
514 - * requires resolution
515 - */
516 - private void setNestedReferenceResoulutionList(List<YangNode> nestedReferenceResoulutionList) {
517 - this.nestedReferenceResoulutionList = nestedReferenceResoulutionList;
518 - }
519 -
520 - /**
521 - * Set list of nested reference's which requires resolution.
522 - *
523 - * @param nestedReference nested reference which requires resolution
524 - */
525 - public void addToNestedReferenceResoulutionList(YangNode nestedReference) {
526 - if (getNestedReferenceResoulutionList() == null) {
527 - setNestedReferenceResoulutionList(new LinkedList<YangNode>());
528 - }
529 - getNestedReferenceResoulutionList().add(nestedReference);
530 - }
531 -
532 - /**
533 * Returns the type of the parsed data. 466 * Returns the type of the parsed data.
534 * 467 *
535 * @return returns MODULE_DATA 468 * @return returns MODULE_DATA
...@@ -565,31 +498,6 @@ public class YangModule extends YangNode ...@@ -565,31 +498,6 @@ public class YangModule extends YangNode
565 */ 498 */
566 } 499 }
567 500
568 - /**
569 - * Add a type to resolve the nested references.
570 - *
571 - * @param node grouping or typedef node which needs to be resolved
572 - * @throws DataModelException data model exception
573 - */
574 - public static void addToResolveList(YangNode node) throws DataModelException {
575 - /* get the module node to add maintain the list of nested reference */
576 - YangModule module;
577 - YangNode curNode = node;
578 - while (curNode.getNodeType() != YangNodeType.MODULE_NODE) {
579 - curNode = curNode.getParent();
580 - if (curNode == null) {
581 - break;
582 - }
583 - }
584 - if (curNode == null) {
585 - throw new DataModelException("Datamodel tree is not correct");
586 - }
587 -
588 - module = (YangModule) curNode;
589 - module.addToNestedReferenceResoulutionList(node);
590 - return;
591 - }
592 -
593 @Override 501 @Override
594 public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { 502 public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException {
595 // Asks helper to detect colliding child. 503 // Asks helper to detect colliding child.
...@@ -601,4 +509,18 @@ public class YangModule extends YangNode ...@@ -601,4 +509,18 @@ public class YangModule extends YangNode
601 // Not required as module doesn't have any parent. 509 // Not required as module doesn't have any parent.
602 } 510 }
603 511
512 + @Override
513 + public List<YangResolutionInfo> getUnresolvedResolutionList() {
514 + return unresolvedResolutionList;
515 + }
516 +
517 + @Override
518 + public void addToResolutionList(YangResolutionInfo resolutionInfo) {
519 + unresolvedResolutionList.add(resolutionInfo);
520 + }
521 +
522 + @Override
523 + public void setResolutionList(List<YangResolutionInfo> resolutionList) {
524 + unresolvedResolutionList = resolutionList;
525 + }
604 } 526 }
......
...@@ -45,7 +45,7 @@ public class YangNodeIdentifier { ...@@ -45,7 +45,7 @@ public class YangNodeIdentifier {
45 /** 45 /**
46 * Set name of the node identifier. 46 * Set name of the node identifier.
47 * 47 *
48 - * @param name node identifier name 48 + * @param name name of the node identifier
49 */ 49 */
50 public void setName(String name) { 50 public void setName(String name) {
51 this.name = name; 51 this.name = name;
...@@ -54,7 +54,7 @@ public class YangNodeIdentifier { ...@@ -54,7 +54,7 @@ public class YangNodeIdentifier {
54 /** 54 /**
55 * Returns prefix of the node identifier. 55 * Returns prefix of the node identifier.
56 * 56 *
57 - * @return prefix of the node identifier 57 + * @return name of the node identifier
58 */ 58 */
59 public String getPrefix() { 59 public String getPrefix() {
60 return prefix; 60 return prefix;
......
...@@ -17,12 +17,12 @@ package org.onosproject.yangutils.datamodel; ...@@ -17,12 +17,12 @@ package org.onosproject.yangutils.datamodel;
17 17
18 import java.util.LinkedList; 18 import java.util.LinkedList;
19 import java.util.List; 19 import java.util.List;
20 -
21 import org.onosproject.yangutils.datamodel.exceptions.DataModelException; 20 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
22 import org.onosproject.yangutils.parser.Parsable; 21 import org.onosproject.yangutils.parser.Parsable;
23 import org.onosproject.yangutils.utils.YangConstructType; 22 import org.onosproject.yangutils.utils.YangConstructType;
24 23
25 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil; 24 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
25 +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList;
26 26
27 /* 27 /*
28 * Reference RFC 6020. 28 * Reference RFC 6020.
...@@ -75,7 +75,7 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol ...@@ -75,7 +75,7 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol
75 * Data model node to maintain information defined in YANG sub-module. 75 * Data model node to maintain information defined in YANG sub-module.
76 */ 76 */
77 public class YangSubModule extends YangNode 77 public class YangSubModule extends YangNode
78 - implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector { 78 + implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector, HasResolutionInfo {
79 79
80 /** 80 /**
81 * Name of sub module. 81 * Name of sub module.
...@@ -124,17 +124,17 @@ public class YangSubModule extends YangNode ...@@ -124,17 +124,17 @@ public class YangSubModule extends YangNode
124 private List<YangLeafList> listOfLeafList; 124 private List<YangLeafList> listOfLeafList;
125 125
126 /** 126 /**
127 - * organization owner of the sub-module. 127 + * Organization owner of the sub-module.
128 */ 128 */
129 private String organization; 129 private String organization;
130 130
131 /** 131 /**
132 - * reference of the sub-module. 132 + * Reference of the sub-module.
133 */ 133 */
134 private String reference; 134 private String reference;
135 135
136 /** 136 /**
137 - * revision info of the sub-module. 137 + * Revision info of the sub-module.
138 */ 138 */
139 private YangRevision revision; 139 private YangRevision revision;
140 140
...@@ -144,10 +144,54 @@ public class YangSubModule extends YangNode ...@@ -144,10 +144,54 @@ public class YangSubModule extends YangNode
144 private byte version; 144 private byte version;
145 145
146 /** 146 /**
147 + * Prefix of parent module.
148 + */
149 + private String prefix;
150 + /*-
151 + * Reference RFC 6020.
152 + *
153 + * Nested typedefs and groupings.
154 + * Typedefs and groupings may appear nested under many YANG statements,
155 + * allowing these to be lexically scoped by the hierarchy under which
156 + * they appear. This allows types and groupings to be defined near
157 + * where they are used, rather than placing them at the top level of the
158 + * hierarchy. The close proximity increases readability.
159 + *
160 + * Scoping also allows types to be defined without concern for naming
161 + * conflicts between types in different submodules. Type names can be
162 + * specified without adding leading strings designed to prevent name
163 + * collisions within large modules.
164 + *
165 + * Finally, scoping allows the module author to keep types and groupings
166 + * private to their module or submodule, preventing their reuse. Since
167 + * only top-level types and groupings (i.e., those appearing as
168 + * sub-statements to a module or submodule statement) can be used outside
169 + * the module or submodule, the developer has more control over what
170 + * pieces of their module are presented to the outside world, supporting
171 + * the need to hide internal information and maintaining a boundary
172 + * between what is shared with the outside world and what is kept
173 + * private.
174 + *
175 + * Scoped definitions MUST NOT shadow definitions at a higher scope. A
176 + * type or grouping cannot be defined if a higher level in the schema
177 + * hierarchy has a definition with a matching identifier.
178 + *
179 + * A reference to an unprefixed type or grouping, or one which uses the
180 + * prefix of the current module, is resolved by locating the closest
181 + * matching "typedef" or "grouping" statement among the immediate
182 + * sub-statements of each ancestor statement.
183 + */
184 + private List<YangResolutionInfo> unresolvedResolutionList;
185 + /**
147 * Create a sub module node. 186 * Create a sub module node.
148 */ 187 */
149 public YangSubModule() { 188 public YangSubModule() {
150 super(YangNodeType.SUB_MODULE_NODE); 189 super(YangNodeType.SUB_MODULE_NODE);
190 + unresolvedResolutionList = new LinkedList<YangResolutionInfo>();
191 + importList = new LinkedList<YangImport>();
192 + includeList = new LinkedList<YangInclude>();
193 + listOfLeaf = new LinkedList<YangLeaf>();
194 + listOfLeafList = new LinkedList<YangLeafList>();
151 } 195 }
152 196
153 /** 197 /**
...@@ -236,28 +280,17 @@ public class YangSubModule extends YangNode ...@@ -236,28 +280,17 @@ public class YangSubModule extends YangNode
236 } 280 }
237 281
238 /** 282 /**
239 - * prevent setting the import list from outside.
240 - *
241 - * @param importList the import list to set
242 - */
243 - private void setImportList(List<YangImport> importList) {
244 - this.importList = importList;
245 - }
246 -
247 - /**
248 * Add the imported module information to the import list. 283 * Add the imported module information to the import list.
249 * 284 *
250 * @param importedModule module being imported 285 * @param importedModule module being imported
251 */ 286 */
252 - public void addImportedInfo(YangImport importedModule) { 287 + public void addToImportList(YangImport importedModule) {
253 -
254 - if (getImportList() == null) {
255 - setImportList(new LinkedList<YangImport>());
256 - }
257 -
258 getImportList().add(importedModule); 288 getImportList().add(importedModule);
289 + }
259 290
260 - return; 291 + @Override
292 + public void setImportList(List<YangImport> importList) {
293 + this.importList = importList;
261 } 294 }
262 295
263 /** 296 /**
...@@ -270,27 +303,35 @@ public class YangSubModule extends YangNode ...@@ -270,27 +303,35 @@ public class YangSubModule extends YangNode
270 } 303 }
271 304
272 /** 305 /**
273 - * Set the list of included sub modules. 306 + * Add the included sub module information to the include list.
274 * 307 *
275 - * @param includeList the included list to set 308 + * @param includeModule submodule being included
276 */ 309 */
277 - private void setIncludeList(List<YangInclude> includeList) { 310 + public void addToIncludeList(YangInclude includeModule) {
311 + getIncludeList().add(includeModule);
312 + }
313 +
314 + @Override
315 + public void setIncludeList(List<YangInclude> includeList) {
278 this.includeList = includeList; 316 this.includeList = includeList;
279 } 317 }
280 318
281 - /** 319 + @Override
282 - * Add the included sub module information to the include list. 320 + public String getPrefix() {
283 - * 321 + return prefix;
284 - * @param includeModule submodule being included 322 + }
285 - */
286 - public void addIncludedInfo(YangInclude includeModule) {
287 323
288 - if (getIncludeList() == null) { 324 + @Override
289 - setIncludeList(new LinkedList<YangInclude>()); 325 + public void setPrefix(String prefix) {
290 - } 326 + this.prefix = prefix;
327 + }
291 328
292 - getIncludeList().add(includeModule); 329 + @Override
293 - return; 330 + public void resolveSelfFileLinking() throws DataModelException {
331 + // Get the list to be resolved.
332 + List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList();
333 + // Resolve linking for a resolution list.
334 + resolveLinkingForResolutionList(resolutionList, this);
294 } 335 }
295 336
296 /** 337 /**
...@@ -304,25 +345,12 @@ public class YangSubModule extends YangNode ...@@ -304,25 +345,12 @@ public class YangSubModule extends YangNode
304 } 345 }
305 346
306 /** 347 /**
307 - * Set the list of leaves.
308 - *
309 - * @param leafsList the list of leaf to set
310 - */
311 - private void setListOfLeaf(List<YangLeaf> leafsList) {
312 - listOfLeaf = leafsList;
313 - }
314 -
315 - /**
316 * Add a leaf. 348 * Add a leaf.
317 * 349 *
318 * @param leaf the leaf to be added 350 * @param leaf the leaf to be added
319 */ 351 */
320 @Override 352 @Override
321 public void addLeaf(YangLeaf leaf) { 353 public void addLeaf(YangLeaf leaf) {
322 - if (getListOfLeaf() == null) {
323 - setListOfLeaf(new LinkedList<YangLeaf>());
324 - }
325 -
326 getListOfLeaf().add(leaf); 354 getListOfLeaf().add(leaf);
327 } 355 }
328 356
...@@ -337,25 +365,12 @@ public class YangSubModule extends YangNode ...@@ -337,25 +365,12 @@ public class YangSubModule extends YangNode
337 } 365 }
338 366
339 /** 367 /**
340 - * Set the list of leaf-list.
341 - *
342 - * @param listOfLeafList the list of leaf-list to set
343 - */
344 - private void setListOfLeafList(List<YangLeafList> listOfLeafList) {
345 - this.listOfLeafList = listOfLeafList;
346 - }
347 -
348 - /**
349 * Add a leaf-list. 368 * Add a leaf-list.
350 * 369 *
351 * @param leafList the leaf-list to be added 370 * @param leafList the leaf-list to be added
352 */ 371 */
353 @Override 372 @Override
354 public void addLeafList(YangLeafList leafList) { 373 public void addLeafList(YangLeafList leafList) {
355 - if (getListOfLeafList() == null) {
356 - setListOfLeafList(new LinkedList<YangLeafList>());
357 - }
358 -
359 getListOfLeafList().add(leafList); 374 getListOfLeafList().add(leafList);
360 } 375 }
361 376
...@@ -473,4 +488,19 @@ public class YangSubModule extends YangNode ...@@ -473,4 +488,19 @@ public class YangSubModule extends YangNode
473 public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { 488 public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException {
474 // Not required as module doesn't have any parent. 489 // Not required as module doesn't have any parent.
475 } 490 }
491 +
492 + @Override
493 + public List<YangResolutionInfo> getUnresolvedResolutionList() {
494 + return unresolvedResolutionList;
495 + }
496 +
497 + @Override
498 + public void addToResolutionList(YangResolutionInfo resolutionInfo) {
499 + this.unresolvedResolutionList.add(resolutionInfo);
500 + }
501 +
502 + @Override
503 + public void setResolutionList(List<YangResolutionInfo> resolutionList) {
504 + this.unresolvedResolutionList = resolutionList;
505 + }
476 } 506 }
......
...@@ -49,12 +49,12 @@ import org.onosproject.yangutils.utils.YangConstructType; ...@@ -49,12 +49,12 @@ import org.onosproject.yangutils.utils.YangConstructType;
49 * 49 *
50 * @param <T> YANG data type info 50 * @param <T> YANG data type info
51 */ 51 */
52 -public class YangType<T> implements Parsable { 52 +public class YangType<T> implements Parsable, Resolvable {
53 53
54 /** 54 /**
55 - * YANG data type name. 55 + * YANG node identifier.
56 */ 56 */
57 - private String dataTypeName; 57 + private YangNodeIdentifier nodeIdentifier;
58 58
59 /** 59 /**
60 * Java package in which the Java type is defined. 60 * Java package in which the Java type is defined.
...@@ -74,9 +74,50 @@ public class YangType<T> implements Parsable { ...@@ -74,9 +74,50 @@ public class YangType<T> implements Parsable {
74 private T dataTypeExtendedInfo; 74 private T dataTypeExtendedInfo;
75 75
76 /** 76 /**
77 + * Effective built-in type, requried in case type of typedef is again a
78 + * derived type. This information is to be added during linking.
79 + */
80 + private YangDataTypes effectiveBuiltInType;
81 +
82 + /**
83 + * Effective pattern restriction, requried in case type of typedef is again
84 + * a derived type. This information is to be added during linking.
85 + */
86 + private YangPatternRestriction effectivePatternRestriction;
87 +
88 + /**
89 + * Status of resolution. If completely resolved enum value is "RESOLVED",
90 + * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
91 + * is added to uses/type but it's not resolved value of enum should be
92 + * "PARTIALLY_RESOLVED".
93 + */
94 + private ResolvableStatus resolvableStatus;
95 +
96 + /**
77 * Default constructor. 97 * Default constructor.
78 */ 98 */
79 public YangType() { 99 public YangType() {
100 +
101 + nodeIdentifier = new YangNodeIdentifier();
102 + resolvableStatus = ResolvableStatus.UNRESOLVED;
103 + }
104 +
105 + /**
106 + * Returns prefix associated with data type name.
107 + *
108 + * @return prefix associated with data type name
109 + */
110 + public String getPrefix() {
111 + return nodeIdentifier.getPrefix();
112 + }
113 +
114 + /**
115 + * Set prefix associated with data type name.
116 + *
117 + * @param prefix prefix associated with data type name
118 + */
119 + public void setPrefix(String prefix) {
120 + nodeIdentifier.setPrefix(prefix);
80 } 121 }
81 122
82 /** 123 /**
...@@ -85,7 +126,7 @@ public class YangType<T> implements Parsable { ...@@ -85,7 +126,7 @@ public class YangType<T> implements Parsable {
85 * @return the name of data type 126 * @return the name of data type
86 */ 127 */
87 public String getDataTypeName() { 128 public String getDataTypeName() {
88 - return dataTypeName; 129 + return nodeIdentifier.getName();
89 } 130 }
90 131
91 /** 132 /**
...@@ -94,7 +135,7 @@ public class YangType<T> implements Parsable { ...@@ -94,7 +135,7 @@ public class YangType<T> implements Parsable {
94 * @param typeName the name to set 135 * @param typeName the name to set
95 */ 136 */
96 public void setDataTypeName(String typeName) { 137 public void setDataTypeName(String typeName) {
97 - dataTypeName = typeName; 138 + nodeIdentifier.setName(typeName);
98 } 139 }
99 140
100 /** 141 /**
...@@ -152,6 +193,60 @@ public class YangType<T> implements Parsable { ...@@ -152,6 +193,60 @@ public class YangType<T> implements Parsable {
152 } 193 }
153 194
154 /** 195 /**
196 + * Returns node identifier.
197 + *
198 + * @return node identifier
199 + */
200 + public YangNodeIdentifier getNodeIdentifier() {
201 + return nodeIdentifier;
202 + }
203 +
204 + /**
205 + * Set node identifier.
206 + *
207 + * @param nodeIdentifier the node identifier
208 + */
209 + public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) {
210 + this.nodeIdentifier = nodeIdentifier;
211 + }
212 +
213 + /**
214 + * Return effective built-in type.
215 + *
216 + * @return effective built-in type
217 + */
218 + public YangDataTypes getEffectiveBuiltInType() {
219 + return effectiveBuiltInType;
220 + }
221 +
222 + /**
223 + * Set effective built-in type.
224 + *
225 + * @param effectiveBuiltInType effective built-in type
226 + */
227 + public void setEffectiveBuiltInType(YangDataTypes effectiveBuiltInType) {
228 + this.effectiveBuiltInType = effectiveBuiltInType;
229 + }
230 +
231 + /**
232 + * Returns effective pattern restriction.
233 + *
234 + * @return effective pattern restriction
235 + */
236 + public YangPatternRestriction getEffectivePatternRestriction() {
237 + return effectivePatternRestriction;
238 + }
239 +
240 + /**
241 + * Set effective pattern restriction.
242 + *
243 + * @param effectivePatternRestriction effective pattern restriction
244 + */
245 + public void setEffectivePatternRestriction(YangPatternRestriction effectivePatternRestriction) {
246 + this.effectivePatternRestriction = effectivePatternRestriction;
247 + }
248 +
249 + /**
155 * Returns the type of the parsed data. 250 * Returns the type of the parsed data.
156 * 251 *
157 * @return returns TYPE_DATA 252 * @return returns TYPE_DATA
...@@ -182,4 +277,19 @@ public class YangType<T> implements Parsable { ...@@ -182,4 +277,19 @@ public class YangType<T> implements Parsable {
182 // TODO auto-generated method stub, to be implemented by parser 277 // TODO auto-generated method stub, to be implemented by parser
183 278
184 } 279 }
280 +
281 + @Override
282 + public ResolvableStatus getResolvableStatus() {
283 + return resolvableStatus;
284 + }
285 +
286 + @Override
287 + public void setResolvableStatus(ResolvableStatus resolvableStatus) {
288 + this.resolvableStatus = resolvableStatus;
289 + }
290 +
291 + @Override
292 + public void resolve() {
293 + //TODO: implement the method.
294 + }
185 } 295 }
......
...@@ -75,9 +75,14 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable { ...@@ -75,9 +75,14 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
75 private YangStatusType status; 75 private YangStatusType status;
76 76
77 /** 77 /**
78 - * Maintain the derived type information. 78 + * Name of the typedef.
79 */ 79 */
80 - private YangType<YangDerivedType> derivedType; 80 + private String name;
81 +
82 + /**
83 + * Maintain the data type information.
84 + */
85 + private YangType<?> dataType;
81 86
82 /** 87 /**
83 * Units of the data type. 88 * Units of the data type.
...@@ -92,7 +97,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable { ...@@ -92,7 +97,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
92 } 97 }
93 98
94 /** 99 /**
95 - * Get the default value. 100 + * Returns the default value.
96 * 101 *
97 * @return the default value 102 * @return the default value
98 */ 103 */
...@@ -110,7 +115,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable { ...@@ -110,7 +115,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
110 } 115 }
111 116
112 /** 117 /**
113 - * Get the description. 118 + * Returns the description.
114 * 119 *
115 * @return the description 120 * @return the description
116 */ 121 */
...@@ -130,7 +135,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable { ...@@ -130,7 +135,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
130 } 135 }
131 136
132 /** 137 /**
133 - * Get the textual reference. 138 + * Returns the textual reference.
134 * 139 *
135 * @return the reference 140 * @return the reference
136 */ 141 */
...@@ -150,7 +155,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable { ...@@ -150,7 +155,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
150 } 155 }
151 156
152 /** 157 /**
153 - * Get the status. 158 + * Returns the status.
154 * 159 *
155 * @return the status 160 * @return the status
156 */ 161 */
...@@ -170,25 +175,25 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable { ...@@ -170,25 +175,25 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
170 } 175 }
171 176
172 /** 177 /**
173 - * Get the derived type. 178 + * Returns the data type.
174 * 179 *
175 - * @return the derived type 180 + * @return the data type
176 */ 181 */
177 - public YangType<YangDerivedType> getDerivedType() { 182 + public YangType<?> getDataType() {
178 - return derivedType; 183 + return dataType;
179 } 184 }
180 185
181 /** 186 /**
182 - * Set the derived type. 187 + * Set the data type.
183 * 188 *
184 - * @param derivedType the derived type 189 + * @param dataType the data type
185 */ 190 */
186 - public void setDerivedType(YangType<YangDerivedType> derivedType) { 191 + public void setDataType(YangType<?> dataType) {
187 - this.derivedType = derivedType; 192 + this.dataType = dataType;
188 } 193 }
189 194
190 /** 195 /**
191 - * Get the unit. 196 + * Returns the unit.
192 * 197 *
193 * @return the units 198 * @return the units
194 */ 199 */
...@@ -232,47 +237,17 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable { ...@@ -232,47 +237,17 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
232 */ 237 */
233 @Override 238 @Override
234 public void validateDataOnExit() throws DataModelException { 239 public void validateDataOnExit() throws DataModelException {
235 - YangType<YangDerivedType> type = getDerivedType(); 240 + // TODO auto-generated method stub, to be implemented by parser
236 - if (type == null) {
237 - throw new DataModelException("Typedef does not have type info.");
238 - }
239 - if (type.getDataType() != YangDataTypes.DERIVED
240 - || type.getDataTypeName() == null) {
241 - throw new DataModelException("Typedef type is not derived.");
242 - }
243 -
244 - YangDerivedType derivedTypeInfo = type.getDataTypeExtendedInfo();
245 - if (derivedTypeInfo == null) {
246 - throw new DataModelException("derrived type does not have derived info.");
247 - }
248 -
249 - YangType<?> baseType = derivedTypeInfo.getBaseType();
250 - if (baseType == null) {
251 - throw new DataModelException("Base type of a derived type is missing.");
252 - }
253 -
254 - if (derivedTypeInfo.getEffectiveYangBuiltInType() == null) {
255 - /* resolve the effective type from the data tree. */
256 - /*
257 - * TODO: try to resolve the nested reference, if possible in the
258 - * partial tree, otherwise we need to resolve finally when the
259 - * complete module is created.
260 - */
261 - YangModule.addToResolveList(this);
262 - }
263 } 241 }
264 242
265 /** 243 /**
266 - * Get the YANG name of the typedef. 244 + * Returns the YANG name of the typedef.
267 * 245 *
268 * @return YANG name of the typedef 246 * @return YANG name of the typedef
269 */ 247 */
270 @Override 248 @Override
271 public String getName() { 249 public String getName() {
272 - if (getDerivedType() != null) { 250 + return name;
273 - return getDerivedType().getDataTypeName();
274 - }
275 - return null;
276 } 251 }
277 252
278 /** 253 /**
...@@ -282,12 +257,6 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable { ...@@ -282,12 +257,6 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
282 */ 257 */
283 @Override 258 @Override
284 public void setName(String name) { 259 public void setName(String name) {
285 - if (getDerivedType() == null) { 260 + this.name = name;
286 - throw new RuntimeException(
287 - "Derrived Type info needs to be set in parser when the typedef listner is processed");
288 - }
289 - getDerivedType().setDataTypeName(name);
290 - getDerivedType().setDataType(YangDataTypes.DERIVED);
291 } 261 }
292 -
293 } 262 }
......
...@@ -52,12 +52,12 @@ import org.onosproject.yangutils.utils.YangConstructType; ...@@ -52,12 +52,12 @@ import org.onosproject.yangutils.utils.YangConstructType;
52 * Data model node to maintain information defined in YANG uses. 52 * Data model node to maintain information defined in YANG uses.
53 * 53 *
54 */ 54 */
55 -public class YangUses extends YangNode implements YangCommonInfo, Parsable { 55 +public class YangUses extends YangNode implements YangCommonInfo, Parsable, Resolvable {
56 56
57 /** 57 /**
58 - * Name of YANG uses. 58 + * YANG node identifier.
59 */ 59 */
60 - private String name; 60 + private YangNodeIdentifier nodeIdentifier;
61 61
62 /** 62 /**
63 * Referred group. 63 * Referred group.
...@@ -80,28 +80,20 @@ public class YangUses extends YangNode implements YangCommonInfo, Parsable { ...@@ -80,28 +80,20 @@ public class YangUses extends YangNode implements YangCommonInfo, Parsable {
80 private YangStatusType status; 80 private YangStatusType status;
81 81
82 /** 82 /**
83 - * Create an YANG uses node. 83 + * Status of resolution. If completely resolved enum value is "RESOLVED",
84 + * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
85 + * is added to uses/type but it's not resolved value of enum should be
86 + * "PARTIALLY_RESOLVED".
84 */ 87 */
85 - public YangUses() { 88 + private ResolvableStatus resolvableStatus;
86 - super(YangNodeType.USES_NODE);
87 - }
88 89
89 /** 90 /**
90 - * Returns the name. 91 + * Create an YANG uses node.
91 - *
92 - * @return the name
93 - */
94 - public String getRefGroupingName() {
95 - return name;
96 - }
97 -
98 - /**
99 - * Set the name.
100 - *
101 - * @param refGroupingName the referred grouping name to set
102 */ 92 */
103 - public void setRefGroupingName(String refGroupingName) { 93 + public YangUses() {
104 - name = refGroupingName; 94 + super(YangNodeType.USES_NODE);
95 + nodeIdentifier = new YangNodeIdentifier();
96 + resolvableStatus = ResolvableStatus.UNRESOLVED;
105 } 97 }
106 98
107 /** 99 /**
...@@ -214,12 +206,62 @@ public class YangUses extends YangNode implements YangCommonInfo, Parsable { ...@@ -214,12 +206,62 @@ public class YangUses extends YangNode implements YangCommonInfo, Parsable {
214 206
215 @Override 207 @Override
216 public String getName() { 208 public String getName() {
217 - return name; 209 + return nodeIdentifier.getName();
218 } 210 }
219 211
220 @Override 212 @Override
221 public void setName(String name) { 213 public void setName(String name) {
222 - this.name = name; 214 + nodeIdentifier.setName(name);
215 + }
216 +
217 + /**
218 + * Returns node identifier.
219 + *
220 + * @return node identifier
221 + */
222 + public YangNodeIdentifier getNodeIdentifier() {
223 + return nodeIdentifier;
223 } 224 }
224 225
226 + /**
227 + * Set node identifier.
228 + *
229 + * @param nodeIdentifier the node identifier
230 + */
231 + public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) {
232 + this.nodeIdentifier = nodeIdentifier;
233 + }
234 +
235 + /**
236 + * Returns prefix associated with uses.
237 + *
238 + * @return prefix associated with uses
239 + */
240 + public String getPrefix() {
241 + return nodeIdentifier.getPrefix();
242 + }
243 +
244 + /**
245 + * Get prefix associated with uses.
246 + *
247 + * @param prefix prefix associated with uses
248 + */
249 + public void setPrefix(String prefix) {
250 + nodeIdentifier.setPrefix(prefix);
251 + }
252 +
253 + @Override
254 + public void resolve() {
255 + //TODO: implement the method.
256 + }
257 +
258 + @Override
259 + public ResolvableStatus getResolvableStatus() {
260 + return resolvableStatus;
261 + }
262 +
263 + @Override
264 + public void setResolvableStatus(ResolvableStatus resolvableStatus) {
265 + this.resolvableStatus = resolvableStatus;
266 + }
225 } 267 }
......
...@@ -21,6 +21,8 @@ package org.onosproject.yangutils.datamodel.exceptions; ...@@ -21,6 +21,8 @@ package org.onosproject.yangutils.datamodel.exceptions;
21 public class DataModelException extends Exception { 21 public class DataModelException extends Exception {
22 22
23 private static final long serialVersionUID = 201601270658L; 23 private static final long serialVersionUID = 201601270658L;
24 + private int lineNumber;
25 + private int charPositionInLine;
24 26
25 /** 27 /**
26 * Constructor to create a data model exception with message. 28 * Constructor to create a data model exception with message.
...@@ -49,4 +51,40 @@ public class DataModelException extends Exception { ...@@ -49,4 +51,40 @@ public class DataModelException extends Exception {
49 public DataModelException(final Throwable cause) { 51 public DataModelException(final Throwable cause) {
50 super(cause); 52 super(cause);
51 } 53 }
54 +
55 + /**
56 + * Returns line number of the exception.
57 + *
58 + * @return line number of the exception
59 + */
60 + public int getLineNumber() {
61 + return this.lineNumber;
62 + }
63 +
64 + /**
65 + * Returns position of the exception.
66 + *
67 + * @return position of the exception
68 + */
69 + public int getCharPositionInLine() {
70 + return this.charPositionInLine;
71 + }
72 +
73 + /**
74 + * Sets line number of YANG file.
75 + *
76 + * @param line line number of YANG file
77 + */
78 + public void setLine(int line) {
79 + this.lineNumber = line;
80 + }
81 +
82 + /**
83 + * Sets position of exception.
84 + *
85 + * @param charPosition position of exception
86 + */
87 + public void setCharPosition(int charPosition) {
88 + this.charPositionInLine = charPosition;
89 + }
52 } 90 }
......
...@@ -16,11 +16,14 @@ ...@@ -16,11 +16,14 @@
16 16
17 package org.onosproject.yangutils.datamodel.utils; 17 package org.onosproject.yangutils.datamodel.utils;
18 18
19 +import java.util.List;
19 import org.onosproject.yangutils.datamodel.CollisionDetector; 20 import org.onosproject.yangutils.datamodel.CollisionDetector;
21 +import org.onosproject.yangutils.datamodel.HasResolutionInfo;
20 import org.onosproject.yangutils.datamodel.YangLeaf; 22 import org.onosproject.yangutils.datamodel.YangLeaf;
21 import org.onosproject.yangutils.datamodel.YangLeafList; 23 import org.onosproject.yangutils.datamodel.YangLeafList;
22 import org.onosproject.yangutils.datamodel.YangLeavesHolder; 24 import org.onosproject.yangutils.datamodel.YangLeavesHolder;
23 import org.onosproject.yangutils.datamodel.YangNode; 25 import org.onosproject.yangutils.datamodel.YangNode;
26 +import org.onosproject.yangutils.datamodel.YangResolutionInfo;
24 import org.onosproject.yangutils.datamodel.exceptions.DataModelException; 27 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
25 import org.onosproject.yangutils.utils.YangConstructType; 28 import org.onosproject.yangutils.utils.YangConstructType;
26 29
...@@ -39,27 +42,23 @@ public final class DataModelUtils { ...@@ -39,27 +42,23 @@ public final class DataModelUtils {
39 * Detects the colliding identifier name in a given YANG node and its child. 42 * Detects the colliding identifier name in a given YANG node and its child.
40 * 43 *
41 * @param identifierName name for which collision detection is to be 44 * @param identifierName name for which collision detection is to be
42 - * checked. 45 + * checked
43 - * @param dataType type of YANG node asking for detecting collision. 46 + * @param dataType type of YANG node asking for detecting collision
44 - * @param node instance of calling node. 47 + * @param node instance of calling node
45 - * @throws DataModelException a violation of data model rules. 48 + * @throws DataModelException a violation of data model rules
46 */ 49 */
47 public static void detectCollidingChildUtil(String identifierName, YangConstructType dataType, YangNode node) 50 public static void detectCollidingChildUtil(String identifierName, YangConstructType dataType, YangNode node)
48 throws DataModelException { 51 throws DataModelException {
49 - if (((YangLeavesHolder) node).getListOfLeaf() != null) { 52 + if (dataType == YangConstructType.LEAF_DATA) {
50 - for (YangLeaf leaf : ((YangLeavesHolder) node).getListOfLeaf()) { 53 + YangLeavesHolder leavesHolder = (YangLeavesHolder) node;
51 - if (leaf.getLeafName().equals(identifierName)) { 54 + if (leavesHolder.getListOfLeaf() != null) {
52 - throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf \"" 55 + detectCollidingLeaf(leavesHolder, identifierName);
53 - + leaf.getLeafName() + "\"");
54 - }
55 } 56 }
56 } 57 }
57 - if (((YangLeavesHolder) node).getListOfLeafList() != null) { 58 + if (dataType == YangConstructType.LEAF_LIST_DATA) {
58 - for (YangLeafList leafList : ((YangLeavesHolder) node).getListOfLeafList()) { 59 + if (((YangLeavesHolder) node).getListOfLeafList() != null) {
59 - if (leafList.getLeafName().equals(identifierName)) { 60 + YangLeavesHolder leavesHolder = (YangLeavesHolder) node;
60 - throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf " + 61 + detectCollidingLeafList(leavesHolder, identifierName);
61 - "list \"" + leafList.getLeafName() + "\"");
62 - }
63 } 62 }
64 } 63 }
65 node = node.getChild(); 64 node = node.getChild();
...@@ -70,4 +69,78 @@ public final class DataModelUtils { ...@@ -70,4 +69,78 @@ public final class DataModelUtils {
70 node = node.getNextSibling(); 69 node = node.getNextSibling();
71 } 70 }
72 } 71 }
72 +
73 + /**
74 + * Detects the colliding identifier name in a given leaf node.
75 + *
76 + * @param leavesHolder leaves node against which collision to be checked
77 + * @param identifierName name for which collision detection is to be
78 + * checked
79 + * @throws DataModelException a violation of data model rules
80 + */
81 + private static void detectCollidingLeaf(YangLeavesHolder leavesHolder, String identifierName) throws
82 + DataModelException {
83 + for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
84 + if (leaf.getLeafName().equals(identifierName)) {
85 + throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf \""
86 + + leaf.getLeafName() + "\"");
87 + }
88 + }
89 + }
90 +
91 + /**
92 + * Detects the colliding identifier name in a given leaf-list node.
93 + *
94 + * @param leavesHolder leaves node against which collision to be checked
95 + * @param identifierName name for which collision detection is to be
96 + * checked
97 + * @throws DataModelException a violation of data model rules
98 + */
99 + private static void detectCollidingLeafList(YangLeavesHolder leavesHolder, String identifierName) throws
100 + DataModelException {
101 + for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
102 + if (leafList.getLeafName().equals(identifierName)) {
103 + throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf " +
104 + "list \"" + leafList.getLeafName() + "\"");
105 + }
106 + }
107 + }
108 +
109 + /**
110 + * Add a resolution information.
111 + *
112 + * @param resolutionInfo information about the YANG construct which has to
113 + * be resolved
114 + * @throws DataModelException a violation of data model rules
115 + */
116 + public static void addResolutionInfo(YangResolutionInfo resolutionInfo) throws DataModelException {
117 + /* get the module node to add maintain the list of nested reference */
118 + YangNode curNode = resolutionInfo.getHolderOfEntityToResolve();
119 + while (!(curNode instanceof HasResolutionInfo)) {
120 + curNode = curNode.getParent();
121 + if (curNode == null) {
122 + throw new DataModelException("Internal datamodel error: Datamodel tree is not correct");
123 + }
124 + }
125 + HasResolutionInfo resolutionNode = (HasResolutionInfo) curNode;
126 + resolutionNode.addToResolutionList(resolutionInfo);
127 + }
128 +
129 + /**
130 + * Resolve linking for a resolution list.
131 + *
132 + * @param resolutionList resolution list for which linking to be done
133 + * @param resolutionInfoNode module/sub-module node
134 + * @throws DataModelException a violation of data model rules
135 + */
136 + public static void resolveLinkingForResolutionList(List<YangResolutionInfo> resolutionList,
137 + HasResolutionInfo resolutionInfoNode)
138 + throws DataModelException {
139 + for (YangResolutionInfo resolutionInfo : resolutionList) {
140 + if (resolutionInfo.getPrefix() == null ||
141 + resolutionInfo.getPrefix().equals(resolutionInfoNode.getPrefix())) {
142 + resolutionInfo.resolveLinkingForResolutionInfo(resolutionInfoNode.getPrefix());
143 + }
144 + }
145 + }
73 } 146 }
......
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 + * use this file except in compliance with the License. You may obtain a copy of
6 + * 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, WITHOUT
12 + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 + * License for the specific language governing permissions and limitations under
14 + * the License.
15 + */
16 +
17 +package org.onosproject.yangutils.linker;
18 +
19 +import java.util.Map;
20 +import org.onosproject.yangutils.datamodel.HasResolutionInfo;
21 +
22 +/**
23 + * Abstraction of entity which provides linking service of YANG files.
24 + */
25 +public interface YangLinker {
26 +
27 + /**
28 + * Resolve the import and include dependencies for a given resolution
29 + * information.
30 + *
31 + * @param fileMapEntry map entry for which resolution is to be done
32 + * @param yangFilesMap map of dependent file and resolution information*/
33 + void resolveDependencies(Map.Entry<String, HasResolutionInfo> fileMapEntry, Map<String,
34 + HasResolutionInfo> yangFilesMap);
35 +}
1 +/*
2 + * Copyright 2016 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 +/**
18 + * Provide inter file and inter jar linking implementation.
19 + */
20 +package org.onosproject.yangutils.linker.impl;
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 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 +/**
18 + * Provide inter jar and inter file linking abstract interface.
19 + */
20 +package org.onosproject.yangutils.linker;
...\ No newline at end of file ...\ No newline at end of file
...@@ -23,13 +23,13 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; ...@@ -23,13 +23,13 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
23 import org.onosproject.yangutils.parser.exceptions.ParserException; 23 import org.onosproject.yangutils.parser.exceptions.ParserException;
24 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 24 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
25 25
26 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 26 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; 30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
32 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; 31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
32 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
33 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; 33 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
34 import static org.onosproject.yangutils.utils.YangConstructType.BELONGS_TO_DATA; 34 import static org.onosproject.yangutils.utils.YangConstructType.BELONGS_TO_DATA;
35 35
...@@ -119,6 +119,7 @@ public final class BelongsToListener { ...@@ -119,6 +119,7 @@ public final class BelongsToListener {
119 case SUB_MODULE_DATA: { 119 case SUB_MODULE_DATA: {
120 YangSubModule subModule = (YangSubModule) tmpNode; 120 YangSubModule subModule = (YangSubModule) tmpNode;
121 subModule.setBelongsTo((YangBelongsTo) tmpBelongstoNode); 121 subModule.setBelongsTo((YangBelongsTo) tmpBelongstoNode);
122 + subModule.setPrefix(subModule.getBelongsTo().getPrefix());
122 break; 123 break;
123 } 124 }
124 default: 125 default:
......
...@@ -113,12 +113,12 @@ public final class ImportListener { ...@@ -113,12 +113,12 @@ public final class ImportListener {
113 switch (tmpNode.getYangConstructType()) { 113 switch (tmpNode.getYangConstructType()) {
114 case MODULE_DATA: { 114 case MODULE_DATA: {
115 YangModule module = (YangModule) tmpNode; 115 YangModule module = (YangModule) tmpNode;
116 - module.addImportedInfo((YangImport) tmpImportNode); 116 + module.addToImportList((YangImport) tmpImportNode);
117 break; 117 break;
118 } 118 }
119 case SUB_MODULE_DATA: { 119 case SUB_MODULE_DATA: {
120 YangSubModule subModule = (YangSubModule) tmpNode; 120 YangSubModule subModule = (YangSubModule) tmpNode;
121 - subModule.addImportedInfo((YangImport) tmpImportNode); 121 + subModule.addToImportList((YangImport) tmpImportNode);
122 break; 122 break;
123 } 123 }
124 default: 124 default:
......
...@@ -24,13 +24,13 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; ...@@ -24,13 +24,13 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
24 import org.onosproject.yangutils.parser.exceptions.ParserException; 24 import org.onosproject.yangutils.parser.exceptions.ParserException;
25 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 25 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
26 26
27 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; 30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
32 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; 31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
33 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; 32 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
33 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
34 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.INCLUDE_DATA; 35 import static org.onosproject.yangutils.utils.YangConstructType.INCLUDE_DATA;
36 36
...@@ -112,12 +112,12 @@ public final class IncludeListener { ...@@ -112,12 +112,12 @@ public final class IncludeListener {
112 switch (tmpNode.getYangConstructType()) { 112 switch (tmpNode.getYangConstructType()) {
113 case MODULE_DATA: { 113 case MODULE_DATA: {
114 YangModule module = (YangModule) tmpNode; 114 YangModule module = (YangModule) tmpNode;
115 - module.addIncludedInfo((YangInclude) tmpIncludeNode); 115 + module.addToIncludeList((YangInclude) tmpIncludeNode);
116 break; 116 break;
117 } 117 }
118 case SUB_MODULE_DATA: { 118 case SUB_MODULE_DATA: {
119 YangSubModule subModule = (YangSubModule) tmpNode; 119 YangSubModule subModule = (YangSubModule) tmpNode;
120 - subModule.addIncludedInfo((YangInclude) tmpIncludeNode); 120 + subModule.addToIncludeList((YangInclude) tmpIncludeNode);
121 break; 121 break;
122 } 122 }
123 default: 123 default:
......
...@@ -16,8 +16,10 @@ ...@@ -16,8 +16,10 @@
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.HasResolutionInfo;
19 import org.onosproject.yangutils.datamodel.YangModule; 20 import org.onosproject.yangutils.datamodel.YangModule;
20 import org.onosproject.yangutils.datamodel.YangRevision; 21 import org.onosproject.yangutils.datamodel.YangRevision;
22 +import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
21 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 23 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
22 import org.onosproject.yangutils.parser.exceptions.ParserException; 24 import org.onosproject.yangutils.parser.exceptions.ParserException;
23 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 25 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
...@@ -113,5 +115,13 @@ public final class ModuleListener { ...@@ -113,5 +115,13 @@ public final class ModuleListener {
113 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, MODULE_DATA, 115 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, MODULE_DATA,
114 ctx.identifier().getText(), EXIT)); 116 ctx.identifier().getText(), EXIT));
115 } 117 }
118 + try {
119 + ((HasResolutionInfo) listener.getParsedDataStack().peek()).resolveSelfFileLinking();
120 + } catch (DataModelException e) {
121 + ParserException parserException = new ParserException(e.getMessage());
122 + parserException.setLine(e.getLineNumber());
123 + parserException.setCharPosition(e.getCharPositionInLine());
124 + throw parserException;
125 + }
116 } 126 }
117 } 127 }
......
...@@ -16,8 +16,10 @@ ...@@ -16,8 +16,10 @@
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.HasResolutionInfo;
19 import org.onosproject.yangutils.datamodel.YangRevision; 20 import org.onosproject.yangutils.datamodel.YangRevision;
20 import org.onosproject.yangutils.datamodel.YangSubModule; 21 import org.onosproject.yangutils.datamodel.YangSubModule;
22 +import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
21 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 23 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
22 import org.onosproject.yangutils.parser.exceptions.ParserException; 24 import org.onosproject.yangutils.parser.exceptions.ParserException;
23 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 25 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
...@@ -118,5 +120,13 @@ public final class SubModuleListener { ...@@ -118,5 +120,13 @@ public final class SubModuleListener {
118 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, SUB_MODULE_DATA, 120 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, SUB_MODULE_DATA,
119 ctx.identifier().getText(), EXIT)); 121 ctx.identifier().getText(), EXIT));
120 } 122 }
123 + try {
124 + ((HasResolutionInfo) listener.getParsedDataStack().peek()).resolveSelfFileLinking();
125 + } catch (DataModelException e) {
126 + ParserException parserException = new ParserException(e.getMessage());
127 + parserException.setLine(e.getLineNumber());
128 + parserException.setCharPosition(e.getCharPositionInLine());
129 + throw parserException;
130 + }
121 } 131 }
122 } 132 }
......
...@@ -17,18 +17,15 @@ ...@@ -17,18 +17,15 @@
17 package org.onosproject.yangutils.parser.impl.listeners; 17 package org.onosproject.yangutils.parser.impl.listeners;
18 18
19 import org.onosproject.yangutils.datamodel.YangContainer; 19 import org.onosproject.yangutils.datamodel.YangContainer;
20 -import org.onosproject.yangutils.datamodel.YangDataTypes; 20 +import org.onosproject.yangutils.datamodel.YangInput;
21 -import org.onosproject.yangutils.datamodel.YangDerivedType;
22 import org.onosproject.yangutils.datamodel.YangList; 21 import org.onosproject.yangutils.datamodel.YangList;
23 import org.onosproject.yangutils.datamodel.YangModule; 22 import org.onosproject.yangutils.datamodel.YangModule;
24 import org.onosproject.yangutils.datamodel.YangNode; 23 import org.onosproject.yangutils.datamodel.YangNode;
25 -import org.onosproject.yangutils.datamodel.YangSubModule;
26 -import org.onosproject.yangutils.datamodel.YangType;
27 -import org.onosproject.yangutils.datamodel.YangTypeDef;
28 -import org.onosproject.yangutils.datamodel.YangInput;
29 -import org.onosproject.yangutils.datamodel.YangOutput;
30 import org.onosproject.yangutils.datamodel.YangNotification; 24 import org.onosproject.yangutils.datamodel.YangNotification;
25 +import org.onosproject.yangutils.datamodel.YangOutput;
31 import org.onosproject.yangutils.datamodel.YangRpc; 26 import org.onosproject.yangutils.datamodel.YangRpc;
27 +import org.onosproject.yangutils.datamodel.YangSubModule;
28 +import org.onosproject.yangutils.datamodel.YangTypeDef;
32 import org.onosproject.yangutils.datamodel.exceptions.DataModelException; 29 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
33 import org.onosproject.yangutils.parser.Parsable; 30 import org.onosproject.yangutils.parser.Parsable;
34 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 31 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
...@@ -123,12 +120,8 @@ public final class TypeDefListener { ...@@ -123,12 +120,8 @@ public final class TypeDefListener {
123 * Create a derived type information, the base type must be set in type 120 * Create a derived type information, the base type must be set in type
124 * listener. 121 * listener.
125 */ 122 */
126 - YangType<YangDerivedType> derivedType = new YangType<YangDerivedType>();
127 - derivedType.setDataType(YangDataTypes.DERIVED);
128 - derivedType.setDataTypeName(identifier);
129 -
130 YangTypeDef typeDefNode = getYangTypeDefNode(JAVA_GENERATION); 123 YangTypeDef typeDefNode = getYangTypeDefNode(JAVA_GENERATION);
131 - typeDefNode.setDerivedType(derivedType); 124 + typeDefNode.setName(identifier);
132 125
133 Parsable curData = listener.getParsedDataStack().peek(); 126 Parsable curData = listener.getParsedDataStack().peek();
134 127
......
...@@ -1102,7 +1102,7 @@ public class TempJavaCodeFragmentFiles { ...@@ -1102,7 +1102,7 @@ public class TempJavaCodeFragmentFiles {
1102 public void addTypeDefAttributeToTempFiles(YangNode curNode) throws IOException { 1102 public void addTypeDefAttributeToTempFiles(YangNode curNode) throws IOException {
1103 1103
1104 JavaAttributeInfo javaAttributeInfo = getAttributeInfoOfTypeDef(curNode, 1104 JavaAttributeInfo javaAttributeInfo = getAttributeInfoOfTypeDef(curNode,
1105 - ((YangTypeDef) curNode).getDerivedType().getDataTypeExtendedInfo().getBaseType(), 1105 + ((YangTypeDef) curNode).getDataType(),
1106 ((YangTypeDef) curNode).getName(), false); 1106 ((YangTypeDef) curNode).getName(), false);
1107 addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo); 1107 addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
1108 } 1108 }
......
...@@ -18,7 +18,6 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -18,7 +18,6 @@ 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;
...@@ -170,7 +169,7 @@ public class ConfigListenerTest { ...@@ -170,7 +169,7 @@ public class ConfigListenerTest {
170 YangLeaf leafInfo = leafIterator.next(); 169 YangLeaf leafInfo = leafIterator.next();
171 170
172 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 171 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
173 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 172 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
174 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 173 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
175 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 174 assertThat(leafInfo.getUnits(), is("\"seconds\""));
176 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 175 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
...@@ -206,7 +205,7 @@ public class ConfigListenerTest { ...@@ -206,7 +205,7 @@ public class ConfigListenerTest {
206 YangLeaf leafInfo = leafIterator.next(); 205 YangLeaf leafInfo = leafIterator.next();
207 206
208 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 207 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
209 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 208 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
210 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 209 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
211 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 210 assertThat(leafInfo.getUnits(), is("\"seconds\""));
212 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 211 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
......
...@@ -193,7 +193,7 @@ public class ContainerListenerTest { ...@@ -193,7 +193,7 @@ public class ContainerListenerTest {
193 YangLeaf leafInfo = leafIterator.next(); 193 YangLeaf leafInfo = leafIterator.next();
194 194
195 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 195 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
196 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 196 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
197 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 197 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
198 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 198 assertThat(leafInfo.getUnits(), is("\"seconds\""));
199 assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT)); 199 assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
......
...@@ -18,7 +18,6 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -18,7 +18,6 @@ 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;
...@@ -178,7 +177,7 @@ public class DescriptionListenerTest { ...@@ -178,7 +177,7 @@ public class DescriptionListenerTest {
178 YangLeaf leafInfo = leafIterator.next(); 177 YangLeaf leafInfo = leafIterator.next();
179 178
180 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 179 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
181 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 180 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
182 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 181 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
183 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 182 assertThat(leafInfo.getUnits(), is("\"seconds\""));
184 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 183 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
...@@ -215,7 +214,7 @@ public class DescriptionListenerTest { ...@@ -215,7 +214,7 @@ public class DescriptionListenerTest {
215 YangLeaf leafInfo = leafIterator.next(); 214 YangLeaf leafInfo = leafIterator.next();
216 215
217 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 216 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
218 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 217 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
219 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 218 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
220 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 219 assertThat(leafInfo.getUnits(), is("\"seconds\""));
221 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 220 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
......
...@@ -18,7 +18,6 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -18,7 +18,6 @@ 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;
...@@ -68,7 +67,7 @@ public class LeafListListenerTest { ...@@ -68,7 +67,7 @@ public class LeafListListenerTest {
68 YangLeafList leafListInfo = leafListIterator.next(); 67 YangLeafList leafListInfo = leafListIterator.next();
69 68
70 assertThat(leafListInfo.getLeafName(), is("invalid-interval")); 69 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
71 - assertThat(leafListInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 70 + assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
72 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 71 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
73 assertThat(leafListInfo.getUnits(), is("\"seconds\"")); 72 assertThat(leafListInfo.getUnits(), is("\"seconds\""));
74 assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 73 assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
...@@ -163,7 +162,7 @@ public class LeafListListenerTest { ...@@ -163,7 +162,7 @@ public class LeafListListenerTest {
163 YangLeafList leafListInfo = leafListIterator.next(); 162 YangLeafList leafListInfo = leafListIterator.next();
164 163
165 assertThat(leafListInfo.getLeafName(), is("invalid-interval")); 164 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
166 - assertThat(leafListInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 165 + assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
167 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 166 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
168 assertThat(leafListInfo.getUnits(), is("\"seconds\"")); 167 assertThat(leafListInfo.getUnits(), is("\"seconds\""));
169 assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 168 assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
...@@ -200,7 +199,7 @@ public class LeafListListenerTest { ...@@ -200,7 +199,7 @@ public class LeafListListenerTest {
200 YangLeafList leafListInfo = leafListIterator.next(); 199 YangLeafList leafListInfo = leafListIterator.next();
201 200
202 assertThat(leafListInfo.getLeafName(), is("invalid-interval")); 201 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
203 - assertThat(leafListInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 202 + assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
204 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 203 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
205 assertThat(leafListInfo.getUnits(), is("\"seconds\"")); 204 assertThat(leafListInfo.getUnits(), is("\"seconds\""));
206 assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 205 assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
......
...@@ -68,7 +68,7 @@ public class LeafListenerTest { ...@@ -68,7 +68,7 @@ public class LeafListenerTest {
68 YangLeaf leafInfo = leafIterator.next(); 68 YangLeaf leafInfo = leafIterator.next();
69 69
70 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 70 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
71 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 71 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
72 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 72 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
73 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 73 assertThat(leafInfo.getUnits(), is("\"seconds\""));
74 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 74 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
...@@ -162,7 +162,7 @@ public class LeafListenerTest { ...@@ -162,7 +162,7 @@ public class LeafListenerTest {
162 YangLeaf leafInfo = leafIterator.next(); 162 YangLeaf leafInfo = leafIterator.next();
163 163
164 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 164 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
165 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 165 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
166 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 166 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
167 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 167 assertThat(leafInfo.getUnits(), is("\"seconds\""));
168 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 168 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
...@@ -225,7 +225,7 @@ public class LeafListenerTest { ...@@ -225,7 +225,7 @@ public class LeafListenerTest {
225 YangLeaf leafInfo = leafIterator.next(); 225 YangLeaf leafInfo = leafIterator.next();
226 226
227 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 227 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
228 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 228 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
229 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 229 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
230 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 230 assertThat(leafInfo.getUnits(), is("\"seconds\""));
231 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 231 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
......
...@@ -162,7 +162,7 @@ public class ListListenerTest { ...@@ -162,7 +162,7 @@ public class ListListenerTest {
162 YangLeaf leafInfo = leafIterator.next(); 162 YangLeaf leafInfo = leafIterator.next();
163 163
164 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 164 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
165 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 165 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
166 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 166 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
167 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 167 assertThat(leafInfo.getUnits(), is("\"seconds\""));
168 assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT)); 168 assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
......
...@@ -16,21 +16,19 @@ ...@@ -16,21 +16,19 @@
16 16
17 package org.onosproject.yangutils.parser.impl.listeners; 17 package org.onosproject.yangutils.parser.impl.listeners;
18 18
19 +import java.io.IOException;
20 +import java.util.ListIterator;
19 import org.junit.Test; 21 import org.junit.Test;
20 -import org.onosproject.yangutils.datamodel.YangNode; 22 +import org.onosproject.yangutils.datamodel.YangLeaf;
21 import org.onosproject.yangutils.datamodel.YangModule; 23 import org.onosproject.yangutils.datamodel.YangModule;
24 +import org.onosproject.yangutils.datamodel.YangNode;
25 +import org.onosproject.yangutils.datamodel.YangNodeType;
22 import org.onosproject.yangutils.datamodel.YangNotification; 26 import org.onosproject.yangutils.datamodel.YangNotification;
23 import org.onosproject.yangutils.datamodel.YangStatusType; 27 import org.onosproject.yangutils.datamodel.YangStatusType;
24 -import org.onosproject.yangutils.datamodel.YangNodeType;
25 import org.onosproject.yangutils.datamodel.YangTypeDef; 28 import org.onosproject.yangutils.datamodel.YangTypeDef;
26 -import org.onosproject.yangutils.datamodel.YangLeaf;
27 -import org.onosproject.yangutils.datamodel.YangDataTypes;
28 import org.onosproject.yangutils.parser.exceptions.ParserException; 29 import org.onosproject.yangutils.parser.exceptions.ParserException;
29 import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; 30 import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
30 31
31 -import java.io.IOException;
32 -import java.util.ListIterator;
33 -
34 import static org.hamcrest.core.Is.is; 32 import static org.hamcrest.core.Is.is;
35 import static org.junit.Assert.assertThat; 33 import static org.junit.Assert.assertThat;
36 34
...@@ -63,8 +61,6 @@ public class NotificationListenerTest { ...@@ -63,8 +61,6 @@ public class NotificationListenerTest {
63 YangTypeDef typeDef = (YangTypeDef) yangNotification.getChild(); 61 YangTypeDef typeDef = (YangTypeDef) yangNotification.getChild();
64 assertThat(typeDef.getName(), is("my-type")); 62 assertThat(typeDef.getName(), is("my-type"));
65 assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED)); 63 assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
66 - assertThat(typeDef.getDerivedType().getDataTypeExtendedInfo()
67 - .getBaseType().getDataType(), is(YangDataTypes.INT32));
68 64
69 ListIterator<YangLeaf> leafIterator = yangNotification.getListOfLeaf().listIterator(); 65 ListIterator<YangLeaf> leafIterator = yangNotification.getListOfLeaf().listIterator();
70 YangLeaf leafInfo = leafIterator.next(); 66 YangLeaf leafInfo = leafIterator.next();
......
...@@ -18,7 +18,6 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -18,7 +18,6 @@ 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;
...@@ -177,7 +176,7 @@ public class ReferenceListenerTest { ...@@ -177,7 +176,7 @@ public class ReferenceListenerTest {
177 YangLeaf leafInfo = leafIterator.next(); 176 YangLeaf leafInfo = leafIterator.next();
178 177
179 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 178 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
180 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 179 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
181 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 180 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
182 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 181 assertThat(leafInfo.getUnits(), is("\"seconds\""));
183 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 182 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
...@@ -214,7 +213,7 @@ public class ReferenceListenerTest { ...@@ -214,7 +213,7 @@ public class ReferenceListenerTest {
214 YangLeaf leafInfo = leafIterator.next(); 213 YangLeaf leafInfo = leafIterator.next();
215 214
216 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 215 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
217 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 216 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
218 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 217 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
219 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 218 assertThat(leafInfo.getUnits(), is("\"seconds\""));
220 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 219 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
......
...@@ -18,7 +18,6 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -18,7 +18,6 @@ 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;
...@@ -187,7 +186,7 @@ public class StatusListenerTest { ...@@ -187,7 +186,7 @@ public class StatusListenerTest {
187 YangLeaf leafInfo = leafIterator.next(); 186 YangLeaf leafInfo = leafIterator.next();
188 187
189 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 188 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
190 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 189 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
191 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 190 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
192 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 191 assertThat(leafInfo.getUnits(), is("\"seconds\""));
193 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 192 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
...@@ -224,7 +223,7 @@ public class StatusListenerTest { ...@@ -224,7 +223,7 @@ public class StatusListenerTest {
224 YangLeaf leafInfo = leafIterator.next(); 223 YangLeaf leafInfo = leafIterator.next();
225 224
226 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 225 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
227 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 226 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
228 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 227 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
229 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 228 assertThat(leafInfo.getUnits(), is("\"seconds\""));
230 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 229 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
......
...@@ -2,7 +2,6 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -2,7 +2,6 @@ package org.onosproject.yangutils.parser.impl.listeners;
2 2
3 import java.io.IOException; 3 import java.io.IOException;
4 import java.util.ListIterator; 4 import java.util.ListIterator;
5 -
6 import org.junit.Test; 5 import org.junit.Test;
7 import org.onosproject.yangutils.datamodel.YangDataTypes; 6 import org.onosproject.yangutils.datamodel.YangDataTypes;
8 import org.onosproject.yangutils.datamodel.YangLeaf; 7 import org.onosproject.yangutils.datamodel.YangLeaf;
...@@ -45,7 +44,7 @@ public class TypeListenerTest { ...@@ -45,7 +44,7 @@ public class TypeListenerTest {
45 YangLeaf leafInfo = leafIterator.next(); 44 YangLeaf leafInfo = leafIterator.next();
46 45
47 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 46 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
48 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"hello\"")); 47 + assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
49 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED)); 48 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
50 } 49 }
51 50
...@@ -71,7 +70,7 @@ public class TypeListenerTest { ...@@ -71,7 +70,7 @@ public class TypeListenerTest {
71 YangLeaf leafInfo = leafIterator.next(); 70 YangLeaf leafInfo = leafIterator.next();
72 71
73 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 72 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
74 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 73 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
75 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 74 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
76 } 75 }
77 76
...@@ -97,7 +96,7 @@ public class TypeListenerTest { ...@@ -97,7 +96,7 @@ public class TypeListenerTest {
97 YangLeafList leafListInfo = leafListIterator.next(); 96 YangLeafList leafListInfo = leafListIterator.next();
98 97
99 assertThat(leafListInfo.getLeafName(), is("invalid-interval")); 98 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
100 - assertThat(leafListInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 99 + assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
101 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16)); 100 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
102 } 101 }
103 } 102 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -18,7 +18,6 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -18,7 +18,6 @@ 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;
...@@ -117,7 +116,7 @@ public class UnitsListenerTest { ...@@ -117,7 +116,7 @@ public class UnitsListenerTest {
117 116
118 // Check whether leaf properties is set correctly. 117 // Check whether leaf properties is set correctly.
119 assertThat(leafInfo.getLeafName(), is("invalid-interval")); 118 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
120 - assertThat(leafInfo.getDataType().getDataTypeName(), is("\"uint16\"")); 119 + assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
121 assertThat(leafInfo.getUnits(), is("\"seconds\"")); 120 assertThat(leafInfo.getUnits(), is("\"seconds\""));
122 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\"")); 121 assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
123 assertThat(leafInfo.isConfig(), is(true)); 122 assertThat(leafInfo.isConfig(), is(true));
......
...@@ -3,6 +3,6 @@ module Test { ...@@ -3,6 +3,6 @@ module Test {
3 namespace http://huawei.com; 3 namespace http://huawei.com;
4 prefix Ant; 4 prefix Ant;
5 leaf invalid-interval { 5 leaf invalid-interval {
6 - type "hello"; 6 + type P:hello;
7 } 7 }
8 -}
...\ No newline at end of file ...\ No newline at end of file
8 +}
......
...@@ -5,17 +5,17 @@ module Test { ...@@ -5,17 +5,17 @@ module Test {
5 list valid { 5 list valid {
6 key address; 6 key address;
7 leaf address { 7 leaf address {
8 - type ip; 8 + type P:ip;
9 } 9 }
10 grouping endpoint { 10 grouping endpoint {
11 description "grouping under test"; 11 description "grouping under test";
12 status current; 12 status current;
13 reference "RFC 6020"; 13 reference "RFC 6020";
14 leaf address { 14 leaf address {
15 - type ip-address; 15 + type P:ip-address;
16 } 16 }
17 leaf port { 17 leaf port {
18 - type port-number; 18 + type P:port-number;
19 } 19 }
20 } 20 }
21 } 21 }
......
...@@ -5,10 +5,10 @@ module Test { ...@@ -5,10 +5,10 @@ module Test {
5 container valid { 5 container valid {
6 grouping endpoint { 6 grouping endpoint {
7 leaf address { 7 leaf address {
8 - type ip-address; 8 + type P:ip-address;
9 } 9 }
10 leaf port { 10 leaf port {
11 - type port-number; 11 + type P:port-number;
12 } 12 }
13 } 13 }
14 } 14 }
......
...@@ -5,14 +5,14 @@ module Test { ...@@ -5,14 +5,14 @@ module Test {
5 list valid { 5 list valid {
6 key address; 6 key address;
7 leaf address { 7 leaf address {
8 - type ip; 8 + type P:ip;
9 } 9 }
10 grouping endpoint { 10 grouping endpoint {
11 leaf address { 11 leaf address {
12 - type ip-address; 12 + type P:ip-address;
13 } 13 }
14 leaf port { 14 leaf port {
15 - type port-number; 15 + type P:port-number;
16 } 16 }
17 } 17 }
18 } 18 }
......
...@@ -4,10 +4,10 @@ module Test { ...@@ -4,10 +4,10 @@ module Test {
4 prefix Ant; 4 prefix Ant;
5 grouping endpoint { 5 grouping endpoint {
6 leaf address { 6 leaf address {
7 - type ip-address; 7 + type P:ip-address;
8 } 8 }
9 leaf port { 9 leaf port {
10 - type port-number; 10 + type P:port-number;
11 } 11 }
12 } 12 }
13 } 13 }
......
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + container ospf {
6 + list valid {
7 + key "invalid-interval";
8 + leaf invalid-interval {
9 + type hello;
10 + }
11 + }
12 + typedef hello {
13 + type String;
14 + }
15 + }
16 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + container ospf {
6 + list valid {
7 + key "invalid-interval";
8 + leaf invalid-interval {
9 + type hello;
10 + }
11 + }
12 + }
13 + typedef hello {
14 + type String;
15 + }
16 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + typedef hello {
6 + type String;
7 + }
8 + container ospf {
9 + list valid {
10 + key "invalid-interval";
11 + leaf invalid-interval {
12 + type hello;
13 + }
14 + }
15 + }
16 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + container ospf {
6 + list valid {
7 + key "invalid-interval";
8 + leaf invalid-interval {
9 + type hello;
10 + }
11 + }
12 + }
13 + container isis {
14 + typedef hello {
15 + type String;
16 + }
17 + }
18 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + typedef Percentage {
6 + type INT;
7 + }
8 + container ospf {
9 + list valid {
10 + key "invalid-interval";
11 + leaf invalid-interval {
12 + type Ant:FirstClass;
13 + }
14 + typedef FirstClass {
15 + type Ant:PassingClass;
16 + }
17 + }
18 + typedef PassingClass {
19 + type Percentage;
20 + }
21 + }
22 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + typedef Percentage {
6 + type P:Per;
7 + }
8 + container ospf {
9 + list valid {
10 + key "invalid-interval";
11 + leaf invalid-interval {
12 + type FirstClass;
13 + }
14 + typedef FirstClass {
15 + type PassingClass;
16 + }
17 + }
18 + typedef PassingClass {
19 + type Percentage;
20 + }
21 + }
22 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + typedef Percentage {
6 + type int32;
7 + }
8 + container ospf {
9 + list valid {
10 + key "invalid-interval";
11 + leaf invalid-interval {
12 + type FirstClass;
13 + }
14 + typedef FirstClass {
15 + type PassingClass;
16 + }
17 + }
18 + typedef PassingClass {
19 + type Percentage;
20 + }
21 + }
22 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + typedef Percentage {
6 + type int32;
7 + }
8 + container ospf {
9 + list valid {
10 + key "invalid-interval";
11 + leaf invalid-interval {
12 + type Ant:FirstClass;
13 + }
14 + typedef FirstClass {
15 + type P:PassingClass;
16 + }
17 + }
18 + typedef PassingClass {
19 + type Ant:Percentage;
20 + }
21 + }
22 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + typedef Percentage {
6 + type int32;
7 + }
8 + container ospf {
9 + list valid {
10 + key "invalid-interval";
11 + leaf invalid-interval {
12 + type Ant:FirstClass;
13 + }
14 + typedef FirstClass {
15 + type PassingClass;
16 + }
17 + }
18 + typedef PassingClass {
19 + type Ant:Percentage;
20 + }
21 + }
22 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + leaf invalid-interval {
6 + type hello;
7 + }
8 + typedef hello {
9 + type String;
10 + }
11 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + leaf invalid-interval {
6 + type hello;
7 + }
8 + typedef hi {
9 + type String;
10 + }
11 +}
...@@ -5,7 +5,7 @@ module Test { ...@@ -5,7 +5,7 @@ module Test {
5 list valid { 5 list valid {
6 key address; 6 key address;
7 leaf address { 7 leaf address {
8 - type ip; 8 + type P:ip;
9 } 9 }
10 uses endpoint { 10 uses endpoint {
11 description "grouping under test"; 11 description "grouping under test";
......
...@@ -16,10 +16,10 @@ module rock { ...@@ -16,10 +16,10 @@ module rock {
16 } 16 }
17 } 17 }
18 leaf if-admin-status { 18 leaf if-admin-status {
19 - type admin-status; 19 + type P:admin-status;
20 } 20 }
21 leaf if-oper-status { 21 leaf if-oper-status {
22 - type oper-status; 22 + type P:oper-status;
23 } 23 }
24 } 24 }
25 } 25 }
......
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + typedef hello {
6 + type String;
7 + }
8 + leaf invalid-interval {
9 + type hello;
10 + }
11 +}