Committed by
Gerrit Code Review
[ONOS-4350] Inter file linking implementation and inter-jar linking framework
Change-Id: I71a26ba3e0b9d17261e78a9313fe7f047195932e
Showing
63 changed files
with
1548 additions
and
273 deletions
utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/ResolutionType.java
deleted
100644 → 0
1 | -/* | ||
2 | - * Copyright 2016-present Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | - | ||
17 | -package org.onosproject.yangutils.datamodel; | ||
18 | - | ||
19 | -/** | ||
20 | - * Represents 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 | -} |
... | @@ -15,10 +15,14 @@ | ... | @@ -15,10 +15,14 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.yangutils.datamodel; | 16 | package org.onosproject.yangutils.datamodel; |
17 | 17 | ||
18 | +import java.util.Set; | ||
18 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
19 | import org.onosproject.yangutils.parser.Parsable; | 20 | import org.onosproject.yangutils.parser.Parsable; |
21 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
20 | import org.onosproject.yangutils.utils.YangConstructType; | 22 | import org.onosproject.yangutils.utils.YangConstructType; |
21 | 23 | ||
24 | +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.findReferredNode; | ||
25 | + | ||
22 | /*- | 26 | /*- |
23 | * Reference 6020. | 27 | * Reference 6020. |
24 | * | 28 | * |
... | @@ -46,7 +50,7 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -46,7 +50,7 @@ import org.onosproject.yangutils.utils.YangConstructType; |
46 | /** | 50 | /** |
47 | * Represents the belongs-to data type information. | 51 | * Represents the belongs-to data type information. |
48 | */ | 52 | */ |
49 | -public class YangBelongsTo implements Parsable { | 53 | +public class YangBelongsTo implements Parsable, LocationInfo { |
50 | 54 | ||
51 | /** | 55 | /** |
52 | * Reference RFC 6020. | 56 | * Reference RFC 6020. |
... | @@ -70,6 +74,12 @@ public class YangBelongsTo implements Parsable { | ... | @@ -70,6 +74,12 @@ public class YangBelongsTo implements Parsable { |
70 | */ | 74 | */ |
71 | private String prefix; | 75 | private String prefix; |
72 | 76 | ||
77 | + // Error Line number. | ||
78 | + private int lineNumber; | ||
79 | + | ||
80 | + // Error character position. | ||
81 | + private int charPosition; | ||
82 | + | ||
73 | /** | 83 | /** |
74 | * Create a belongs to object. | 84 | * Create a belongs to object. |
75 | */ | 85 | */ |
... | @@ -90,7 +100,6 @@ public class YangBelongsTo implements Parsable { | ... | @@ -90,7 +100,6 @@ public class YangBelongsTo implements Parsable { |
90 | * Sets the belongs to module name. | 100 | * Sets the belongs to module name. |
91 | * | 101 | * |
92 | * @param belongsToModuleName the belongs to module name to set | 102 | * @param belongsToModuleName the belongs to module name to set |
93 | - * | ||
94 | */ | 103 | */ |
95 | public void setBelongsToModuleName(String belongsToModuleName) { | 104 | public void setBelongsToModuleName(String belongsToModuleName) { |
96 | this.belongsToModuleName = belongsToModuleName; | 105 | this.belongsToModuleName = belongsToModuleName; |
... | @@ -161,4 +170,47 @@ public class YangBelongsTo implements Parsable { | ... | @@ -161,4 +170,47 @@ public class YangBelongsTo implements Parsable { |
161 | public void validateDataOnExit() throws DataModelException { | 170 | public void validateDataOnExit() throws DataModelException { |
162 | // TODO auto-generated method stub, to be implemented by parser | 171 | // TODO auto-generated method stub, to be implemented by parser |
163 | } | 172 | } |
173 | + | ||
174 | + @Override | ||
175 | + public int getLineNumber() { | ||
176 | + return lineNumber; | ||
177 | + } | ||
178 | + | ||
179 | + @Override | ||
180 | + public int getCharPosition() { | ||
181 | + return charPosition; | ||
182 | + } | ||
183 | + | ||
184 | + @Override | ||
185 | + public void setLineNumber(int lineNumber) { | ||
186 | + this.lineNumber = lineNumber; | ||
187 | + } | ||
188 | + | ||
189 | + @Override | ||
190 | + public void setCharPosition(int charPositionInLine) { | ||
191 | + this.charPosition = charPositionInLine; | ||
192 | + } | ||
193 | + | ||
194 | + /** | ||
195 | + * Links the belongs to with a module. | ||
196 | + * | ||
197 | + * @param yangFileInfoSet YANG file information set | ||
198 | + * @throws DataModelException a violation in data model rule | ||
199 | + */ | ||
200 | + public void linkWithModule(Set<YangFileInfo> yangFileInfoSet) | ||
201 | + throws DataModelException { | ||
202 | + String belongsToModuleName = getBelongsToModuleName(); | ||
203 | + YangNode moduleNode = findReferredNode(yangFileInfoSet, belongsToModuleName); | ||
204 | + if (moduleNode != null) { | ||
205 | + if (moduleNode instanceof YangModule) { | ||
206 | + setModuleNode(moduleNode); | ||
207 | + return; | ||
208 | + } | ||
209 | + } | ||
210 | + DataModelException exception = new DataModelException("YANG file error : Module " + belongsToModuleName + | ||
211 | + "to which sub-module belongs to is not found."); | ||
212 | + exception.setLine(getLineNumber()); | ||
213 | + exception.setCharPosition(getCharPosition()); | ||
214 | + throw exception; | ||
215 | + } | ||
164 | } | 216 | } | ... | ... |
... | @@ -17,10 +17,10 @@ | ... | @@ -17,10 +17,10 @@ |
17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
18 | 18 | ||
19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
20 | +import org.onosproject.yangutils.linker.impl.ResolvableStatus; | ||
20 | import com.google.common.base.Strings; | 21 | import com.google.common.base.Strings; |
21 | 22 | ||
22 | -import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED; | 23 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY; |
23 | -import static org.onosproject.yangutils.datamodel.ResolvableStatus.RESOLVED; | ||
24 | import static org.onosproject.yangutils.datamodel.YangDataTypes.BITS; | 24 | import static org.onosproject.yangutils.datamodel.YangDataTypes.BITS; |
25 | import static org.onosproject.yangutils.datamodel.YangDataTypes.BOOLEAN; | 25 | import static org.onosproject.yangutils.datamodel.YangDataTypes.BOOLEAN; |
26 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 26 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
... | @@ -30,6 +30,8 @@ import static org.onosproject.yangutils.datamodel.YangDataTypes.IDENTITYREF; | ... | @@ -30,6 +30,8 @@ import static org.onosproject.yangutils.datamodel.YangDataTypes.IDENTITYREF; |
30 | import static org.onosproject.yangutils.datamodel.YangDataTypes.LEAFREF; | 30 | import static org.onosproject.yangutils.datamodel.YangDataTypes.LEAFREF; |
31 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | 31 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; |
32 | import static org.onosproject.yangutils.datamodel.YangDataTypes.UNION; | 32 | import static org.onosproject.yangutils.datamodel.YangDataTypes.UNION; |
33 | +import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
34 | +import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | ||
33 | import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType; | 35 | import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType; |
34 | import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction; | 36 | import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction; |
35 | import static org.onosproject.yangutils.utils.RestrictionResolver.processRangeRestriction; | 37 | import static org.onosproject.yangutils.utils.RestrictionResolver.processRangeRestriction; |
... | @@ -236,7 +238,7 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -236,7 +238,7 @@ public class YangDerivedInfo<T> implements LocationInfo { |
236 | * Check whether the referred typedef is resolved. | 238 | * Check whether the referred typedef is resolved. |
237 | */ | 239 | */ |
238 | if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED && baseType.getResolvableStatus() != RESOLVED) { | 240 | if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED && baseType.getResolvableStatus() != RESOLVED) { |
239 | - throw new DataModelException("Linker Error: Referred typedef is not resolved."); | 241 | + throw new DataModelException("Linker Error: Referred typedef is not resolved for type."); |
240 | } | 242 | } |
241 | 243 | ||
242 | /* | 244 | /* |
... | @@ -301,6 +303,28 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -301,6 +303,28 @@ public class YangDerivedInfo<T> implements LocationInfo { |
301 | */ | 303 | */ |
302 | return RESOLVED; | 304 | return RESOLVED; |
303 | } | 305 | } |
306 | + } else if (getEffectiveBuiltInType() == BINARY) { | ||
307 | + if (refDerivedInfo.getResolvedExtendedInfo() == null) { | ||
308 | + resolveLengthRestriction(null); | ||
309 | + /* | ||
310 | + * Return the resolution status as resolved, if it's not | ||
311 | + * resolve length restriction will throw exception | ||
312 | + * in previous function. | ||
313 | + */ | ||
314 | + return RESOLVED; | ||
315 | + } else { | ||
316 | + if (!(refDerivedInfo.getResolvedExtendedInfo() instanceof YangRangeRestriction)) { | ||
317 | + throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " + | ||
318 | + "type."); | ||
319 | + } | ||
320 | + resolveLengthRestriction((YangRangeRestriction) refDerivedInfo.getResolvedExtendedInfo()); | ||
321 | + /* | ||
322 | + * Return the resolution status as resolved, if it's not | ||
323 | + * resolve length restriction will throw exception | ||
324 | + * in previous function. | ||
325 | + */ | ||
326 | + return RESOLVED; | ||
327 | + } | ||
304 | } | 328 | } |
305 | } else { | 329 | } else { |
306 | setEffectiveBuiltInType((baseType.getDataType())); | 330 | setEffectiveBuiltInType((baseType.getDataType())); |
... | @@ -356,6 +380,28 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -356,6 +380,28 @@ public class YangDerivedInfo<T> implements LocationInfo { |
356 | */ | 380 | */ |
357 | return RESOLVED; | 381 | return RESOLVED; |
358 | } | 382 | } |
383 | + } else if (getEffectiveBuiltInType() == BINARY) { | ||
384 | + if (baseType.getDataTypeExtendedInfo() == null) { | ||
385 | + resolveLengthRestriction(null); | ||
386 | + /* | ||
387 | + * Return the resolution status as resolved, if it's not | ||
388 | + * resolve length restriction will throw exception | ||
389 | + * in previous function. | ||
390 | + */ | ||
391 | + return RESOLVED; | ||
392 | + } else { | ||
393 | + if (!(baseType.getDataTypeExtendedInfo() instanceof YangRangeRestriction)) { | ||
394 | + throw new DataModelException("Linker error: Referred typedef restriction info is of invalid " + | ||
395 | + "type."); | ||
396 | + } | ||
397 | + resolveLengthRestriction((YangRangeRestriction) baseType.getDataTypeExtendedInfo()); | ||
398 | + /* | ||
399 | + * Return the resolution status as resolved, if it's not | ||
400 | + * resolve length restriction will throw exception | ||
401 | + * in previous function. | ||
402 | + */ | ||
403 | + return RESOLVED; | ||
404 | + } | ||
359 | } | 405 | } |
360 | } | 406 | } |
361 | 407 | ... | ... |
... | @@ -15,10 +15,14 @@ | ... | @@ -15,10 +15,14 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.yangutils.datamodel; | 16 | package org.onosproject.yangutils.datamodel; |
17 | 17 | ||
18 | +import java.util.Set; | ||
18 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
19 | import org.onosproject.yangutils.parser.Parsable; | 20 | import org.onosproject.yangutils.parser.Parsable; |
21 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
20 | import org.onosproject.yangutils.utils.YangConstructType; | 22 | import org.onosproject.yangutils.utils.YangConstructType; |
21 | 23 | ||
24 | +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.findReferredNode; | ||
25 | + | ||
22 | /* | 26 | /* |
23 | * Reference:RFC 6020. | 27 | * Reference:RFC 6020. |
24 | * The "import" statement makes definitions from one module available | 28 | * The "import" statement makes definitions from one module available |
... | @@ -64,7 +68,7 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -64,7 +68,7 @@ import org.onosproject.yangutils.utils.YangConstructType; |
64 | * Represents the information about the imported modules. | 68 | * Represents the information about the imported modules. |
65 | */ | 69 | */ |
66 | public class YangImport | 70 | public class YangImport |
67 | - implements Parsable { | 71 | + implements Parsable, LocationInfo { |
68 | 72 | ||
69 | /** | 73 | /** |
70 | * Name of the module that is being imported. | 74 | * Name of the module that is being imported. |
... | @@ -78,7 +82,7 @@ public class YangImport | ... | @@ -78,7 +82,7 @@ public class YangImport |
78 | 82 | ||
79 | /** | 83 | /** |
80 | * Reference:RFC 6020. | 84 | * Reference:RFC 6020. |
81 | - * | 85 | + * <p> |
82 | * The import's "revision-date" statement is used to specify the exact | 86 | * The import's "revision-date" statement is used to specify the exact |
83 | * version of the module to import. The "revision-date" statement MUST match | 87 | * version of the module to import. The "revision-date" statement MUST match |
84 | * the most recent "revision" statement in the imported module. organization | 88 | * the most recent "revision" statement in the imported module. organization |
... | @@ -87,10 +91,20 @@ public class YangImport | ... | @@ -87,10 +91,20 @@ public class YangImport |
87 | private String revision; | 91 | private String revision; |
88 | 92 | ||
89 | /** | 93 | /** |
94 | + * Reference to node which is imported. | ||
95 | + */ | ||
96 | + private YangNode importedNode; | ||
97 | + | ||
98 | + // Error Line number. | ||
99 | + private int lineNumber; | ||
100 | + | ||
101 | + // Error character position. | ||
102 | + private int charPosition; | ||
103 | + | ||
104 | + /** | ||
90 | * Creates a YANG import. | 105 | * Creates a YANG import. |
91 | */ | 106 | */ |
92 | public YangImport() { | 107 | public YangImport() { |
93 | - | ||
94 | } | 108 | } |
95 | 109 | ||
96 | /** | 110 | /** |
... | @@ -181,4 +195,91 @@ public class YangImport | ... | @@ -181,4 +195,91 @@ public class YangImport |
181 | // TODO auto-generated method stub, to be implemented by parser | 195 | // TODO auto-generated method stub, to be implemented by parser |
182 | 196 | ||
183 | } | 197 | } |
198 | + | ||
199 | + /** | ||
200 | + * Returns imported node. | ||
201 | + * | ||
202 | + * @return imported node | ||
203 | + */ | ||
204 | + public YangNode getImportedNode() { | ||
205 | + return importedNode; | ||
206 | + } | ||
207 | + | ||
208 | + /** | ||
209 | + * Sets imported node. | ||
210 | + * | ||
211 | + * @param importedNode imported node | ||
212 | + */ | ||
213 | + public void setImportedNode(YangNode importedNode) { | ||
214 | + this.importedNode = importedNode; | ||
215 | + } | ||
216 | + | ||
217 | + @Override | ||
218 | + public int getLineNumber() { | ||
219 | + return lineNumber; | ||
220 | + } | ||
221 | + | ||
222 | + @Override | ||
223 | + public int getCharPosition() { | ||
224 | + return charPosition; | ||
225 | + } | ||
226 | + | ||
227 | + @Override | ||
228 | + public void setLineNumber(int lineNumber) { | ||
229 | + this.lineNumber = lineNumber; | ||
230 | + } | ||
231 | + | ||
232 | + @Override | ||
233 | + public void setCharPosition(int charPositionInLine) { | ||
234 | + this.charPosition = charPositionInLine; | ||
235 | + } | ||
236 | + | ||
237 | + /** | ||
238 | + * Adds reference to an import. | ||
239 | + * | ||
240 | + * @param yangFileInfoSet YANG file info set | ||
241 | + * @throws DataModelException a violation of data model rules | ||
242 | + */ | ||
243 | + public void addReferenceToImport(Set<YangFileInfo> yangFileInfoSet) throws DataModelException { | ||
244 | + String importedModuleName = getModuleName(); | ||
245 | + String importedModuleRevision = getRevision(); | ||
246 | + YangNode moduleNode = null; | ||
247 | + /* | ||
248 | + * Find the imported module node for a given module name | ||
249 | + * with a specified revision if revision is not null. | ||
250 | + */ | ||
251 | + if (importedModuleRevision != null) { | ||
252 | + String importedModuleNameWithRevision = importedModuleName + "@" + importedModuleRevision; | ||
253 | + moduleNode = findReferredNode(yangFileInfoSet, importedModuleNameWithRevision); | ||
254 | + } | ||
255 | + | ||
256 | + /* | ||
257 | + * Find the imported module node for a given module name | ||
258 | + * without revision if can't find with revision. | ||
259 | + */ | ||
260 | + if (moduleNode == null) { | ||
261 | + moduleNode = findReferredNode(yangFileInfoSet, importedModuleName); | ||
262 | + } | ||
263 | + | ||
264 | + if (moduleNode != null) { | ||
265 | + if (moduleNode instanceof YangModule) { | ||
266 | + if (getRevision() == null || getRevision().isEmpty()) { | ||
267 | + setImportedNode(moduleNode); | ||
268 | + return; | ||
269 | + } | ||
270 | + // Match revision if import is with revision. | ||
271 | + if (((YangModule) moduleNode).getRevision().getRevDate().equals(importedModuleRevision)) { | ||
272 | + setImportedNode(moduleNode); | ||
273 | + return; | ||
274 | + } | ||
275 | + } | ||
276 | + } | ||
277 | + | ||
278 | + // Exception if there is no match. | ||
279 | + DataModelException exception = new DataModelException("YANG file error : Imported module " | ||
280 | + + importedModuleName + " with revision " + importedModuleRevision + " is not found."); | ||
281 | + exception.setLine(getLineNumber()); | ||
282 | + exception.setCharPosition(getCharPosition()); | ||
283 | + throw exception; | ||
284 | + } | ||
184 | } | 285 | } | ... | ... |
... | @@ -15,10 +15,14 @@ | ... | @@ -15,10 +15,14 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.yangutils.datamodel; | 16 | package org.onosproject.yangutils.datamodel; |
17 | 17 | ||
18 | +import java.util.Set; | ||
18 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
19 | import org.onosproject.yangutils.parser.Parsable; | 20 | import org.onosproject.yangutils.parser.Parsable; |
21 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
20 | import org.onosproject.yangutils.utils.YangConstructType; | 22 | import org.onosproject.yangutils.utils.YangConstructType; |
21 | 23 | ||
24 | +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.findReferredNode; | ||
25 | + | ||
22 | /* | 26 | /* |
23 | * Reference:RFC 6020. | 27 | * Reference:RFC 6020. |
24 | * The "include" statement is used to make content from a submodule | 28 | * The "include" statement is used to make content from a submodule |
... | @@ -38,7 +42,7 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -38,7 +42,7 @@ import org.onosproject.yangutils.utils.YangConstructType; |
38 | * Represents the information about the included sub-modules. | 42 | * Represents the information about the included sub-modules. |
39 | */ | 43 | */ |
40 | public class YangInclude | 44 | public class YangInclude |
41 | - implements Parsable { | 45 | + implements Parsable, LocationInfo { |
42 | 46 | ||
43 | /** | 47 | /** |
44 | * Name of the sub-module that is being included. | 48 | * Name of the sub-module that is being included. |
... | @@ -52,6 +56,17 @@ public class YangInclude | ... | @@ -52,6 +56,17 @@ public class YangInclude |
52 | private String revision; | 56 | private String revision; |
53 | 57 | ||
54 | /** | 58 | /** |
59 | + * Reference to node which is included. | ||
60 | + */ | ||
61 | + private YangNode includedNode; | ||
62 | + | ||
63 | + // Error Line number. | ||
64 | + private int lineNumber; | ||
65 | + | ||
66 | + // Error character position. | ||
67 | + private int charPosition; | ||
68 | + | ||
69 | + /** | ||
55 | * Creates a YANG include. | 70 | * Creates a YANG include. |
56 | */ | 71 | */ |
57 | public YangInclude() { | 72 | public YangInclude() { |
... | @@ -127,4 +142,98 @@ public class YangInclude | ... | @@ -127,4 +142,98 @@ public class YangInclude |
127 | 142 | ||
128 | } | 143 | } |
129 | 144 | ||
145 | + public YangNode getIncludedNode() { | ||
146 | + return includedNode; | ||
147 | + } | ||
148 | + | ||
149 | + public void setIncludedNode(YangNode includedNode) { | ||
150 | + this.includedNode = includedNode; | ||
151 | + } | ||
152 | + | ||
153 | + @Override | ||
154 | + public int getLineNumber() { | ||
155 | + return lineNumber; | ||
156 | + } | ||
157 | + | ||
158 | + @Override | ||
159 | + public int getCharPosition() { | ||
160 | + return charPosition; | ||
161 | + } | ||
162 | + | ||
163 | + @Override | ||
164 | + public void setLineNumber(int lineNumber) { | ||
165 | + this.lineNumber = lineNumber; | ||
166 | + } | ||
167 | + | ||
168 | + @Override | ||
169 | + public void setCharPosition(int charPositionInLine) { | ||
170 | + this.charPosition = charPositionInLine; | ||
171 | + } | ||
172 | + | ||
173 | + /** | ||
174 | + * Adds reference to an include. | ||
175 | + * | ||
176 | + * @param yangFileInfoSet YANG file info set | ||
177 | + * @return YANG sub module node | ||
178 | + * @throws DataModelException a violation of data model rules | ||
179 | + */ | ||
180 | + public YangSubModule addReferenceToInclude(Set<YangFileInfo> yangFileInfoSet) throws DataModelException { | ||
181 | + String includedSubModuleName = getSubModuleName(); | ||
182 | + String includedSubModuleRevision = getRevision(); | ||
183 | + YangNode subModuleNode = null; | ||
184 | + | ||
185 | + /* | ||
186 | + * Find the included sub-module node for a given module name | ||
187 | + * with a specified revision if revision is not null. | ||
188 | + */ | ||
189 | + if (includedSubModuleRevision != null) { | ||
190 | + String includedSubModuleNameWithRevision = includedSubModuleName + "@" + includedSubModuleRevision; | ||
191 | + subModuleNode = findReferredNode(yangFileInfoSet, includedSubModuleNameWithRevision); | ||
192 | + } | ||
193 | + | ||
194 | + /* | ||
195 | + * Find the imported sub module node for a given module name | ||
196 | + * without revision if can't find with revision. | ||
197 | + */ | ||
198 | + if (subModuleNode == null) { | ||
199 | + subModuleNode = findReferredNode(yangFileInfoSet, includedSubModuleName); | ||
200 | + } | ||
201 | + | ||
202 | + if (subModuleNode != null) { | ||
203 | + if (subModuleNode instanceof YangSubModule) { | ||
204 | + if (getRevision() == null || getRevision().isEmpty()) { | ||
205 | + setIncludedNode(subModuleNode); | ||
206 | + return (YangSubModule) subModuleNode; | ||
207 | + } | ||
208 | + // Match revision if inclusion is with revision. | ||
209 | + if (((YangSubModule) subModuleNode).getRevision().getRevDate().equals(includedSubModuleRevision)) { | ||
210 | + setIncludedNode(subModuleNode); | ||
211 | + return (YangSubModule) subModuleNode; | ||
212 | + } | ||
213 | + } | ||
214 | + } | ||
215 | + // Exception if there is no match. | ||
216 | + DataModelException exception = new DataModelException("YANG file error : Included sub module " + | ||
217 | + includedSubModuleName + "with a given revision is not found."); | ||
218 | + exception.setLine(getLineNumber()); | ||
219 | + exception.setCharPosition(getCharPosition()); | ||
220 | + throw exception; | ||
221 | + } | ||
222 | + | ||
223 | + /** | ||
224 | + * Reports an error when included sub-module doesn't meet condition that | ||
225 | + * "included sub-modules should belong module, as defined by the | ||
226 | + * "belongs-to" statement or sub-modules are only allowed to include other | ||
227 | + * sub-modules belonging to the same module. | ||
228 | + * | ||
229 | + * @throws DataModelException a violation in data model rule | ||
230 | + */ | ||
231 | + public void reportIncludeError() throws DataModelException { | ||
232 | + DataModelException exception = new DataModelException("YANG file error : Included sub-module " + | ||
233 | + getSubModuleName() + "doesn't belongs to parent module also it doesn't belongs" + | ||
234 | + "to sub-module belonging to the same parent module."); | ||
235 | + exception.setLine(getLineNumber()); | ||
236 | + exception.setCharPosition(getCharPosition()); | ||
237 | + throw exception; | ||
238 | + } | ||
130 | } | 239 | } | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangLengthRestriction.java
0 → 100644
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onosproject.yangutils.datamodel; | ||
18 | + | ||
19 | +/*- | ||
20 | + * Reference RFC 6020. | ||
21 | + * | ||
22 | + * Binary can be restricted with "length" statements alone. | ||
23 | + * | ||
24 | + */ | ||
25 | + | ||
26 | +import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
27 | +import org.onosproject.yangutils.parser.Parsable; | ||
28 | +import org.onosproject.yangutils.utils.YangConstructType; | ||
29 | +import org.onosproject.yangutils.utils.builtindatatype.YangUint64; | ||
30 | + | ||
31 | +/** | ||
32 | + * Represents the restriction for length data type. | ||
33 | + */ | ||
34 | +public class YangLengthRestriction implements YangDesc, YangReference, YangAppErrorInfo, Parsable { | ||
35 | + | ||
36 | + /*- | ||
37 | + * Reference RFC 6020. | ||
38 | + * The length Statement | ||
39 | + * | ||
40 | + * The "length" statement, which is an optional sub-statement to the | ||
41 | + * "type" statement, takes as an argument a length expression string. | ||
42 | + * It is used to restrict the built-in type "string", or types derived | ||
43 | + * from "string". | ||
44 | + * A "length" statement restricts the number of unicode characters in | ||
45 | + * the string. | ||
46 | + * A length range consists of an explicit value, or a lower bound, two | ||
47 | + * consecutive dots "..", and an upper bound. Multiple values or ranges | ||
48 | + * can be given, separated by "|". Length-restricting values MUST NOT | ||
49 | + * be negative. If multiple values or ranges are given, they all MUST | ||
50 | + * be disjoint and MUST be in ascending order. If a length restriction | ||
51 | + * is applied to an already length-restricted type, the new restriction | ||
52 | + * MUST be equal or more limiting, that is, raising the lower bounds, | ||
53 | + * reducing the upper bounds, removing explicit length values or ranges, | ||
54 | + * or splitting ranges into multiple ranges with intermediate gaps. A | ||
55 | + * length value is a non-negative integer, or one of the special values | ||
56 | + * "min" or "max". "min" and "max" mean the minimum and maximum length | ||
57 | + * accepted for the type being restricted, respectively. An | ||
58 | + * implementation is not required to support a length value larger than | ||
59 | + * 18446744073709551615. | ||
60 | + * The length's sub-statements | ||
61 | + * | ||
62 | + * +---------------+---------+-------------+-----------------+ | ||
63 | + * | substatement | section | cardinality | mapped data type| | ||
64 | + * +---------------+---------+-------------+-----------------+ | ||
65 | + * | description | 7.19.3 | 0..1 | string | | ||
66 | + * | error-app-tag | 7.5.4.2 | 0..1 | string | | ||
67 | + * | error-message | 7.5.4.1 | 0..1 | string | | ||
68 | + * | reference | 7.19.4 | 0..1 | string | | ||
69 | + * +---------------+---------+-------------+-----------------+ | ||
70 | + */ | ||
71 | + | ||
72 | + /** | ||
73 | + * Length restriction information. | ||
74 | + */ | ||
75 | + private YangRangeRestriction<YangUint64> lengthRestriction; | ||
76 | + | ||
77 | + /** | ||
78 | + * Textual reference. | ||
79 | + */ | ||
80 | + private String reference; | ||
81 | + | ||
82 | + /** | ||
83 | + * Application's error message, to be used for data error. | ||
84 | + */ | ||
85 | + private String errorMessage; | ||
86 | + | ||
87 | + /** | ||
88 | + * Application's error tag, to be filled in data validation error response. | ||
89 | + */ | ||
90 | + private String errorAppTag; | ||
91 | + | ||
92 | + /** | ||
93 | + * Textual description. | ||
94 | + */ | ||
95 | + private String description; | ||
96 | + | ||
97 | + /** | ||
98 | + * Creates a YANG length restriction object. | ||
99 | + */ | ||
100 | + public YangLengthRestriction() { | ||
101 | + } | ||
102 | + | ||
103 | + /** | ||
104 | + * Returns the length restriction on the string data. | ||
105 | + * | ||
106 | + * @return length restriction on the string data | ||
107 | + */ | ||
108 | + public YangRangeRestriction<YangUint64> getLengthRestriction() { | ||
109 | + return lengthRestriction; | ||
110 | + } | ||
111 | + | ||
112 | + /** | ||
113 | + * Sets the length restriction on the string data. | ||
114 | + * | ||
115 | + * @param lengthRestriction length restriction on the string data | ||
116 | + */ | ||
117 | + public void setLengthRestriction(YangRangeRestriction<YangUint64> lengthRestriction) { | ||
118 | + this.lengthRestriction = lengthRestriction; | ||
119 | + } | ||
120 | + | ||
121 | + /** | ||
122 | + * Returns the textual reference of the length restriction. | ||
123 | + * | ||
124 | + * @return textual reference of the length restriction | ||
125 | + */ | ||
126 | + @Override | ||
127 | + public String getReference() { | ||
128 | + return reference; | ||
129 | + } | ||
130 | + | ||
131 | + /** | ||
132 | + * Sets the textual reference of the length restriction. | ||
133 | + * | ||
134 | + * @param ref textual reference of the length restriction | ||
135 | + */ | ||
136 | + @Override | ||
137 | + public void setReference(String ref) { | ||
138 | + reference = ref; | ||
139 | + } | ||
140 | + | ||
141 | + /** | ||
142 | + * Returns the description of the length restriction. | ||
143 | + * | ||
144 | + * @return description of the length restriction | ||
145 | + */ | ||
146 | + @Override | ||
147 | + public String getDescription() { | ||
148 | + return description; | ||
149 | + } | ||
150 | + | ||
151 | + /** | ||
152 | + * Sets the description of the length restriction. | ||
153 | + * | ||
154 | + * @param desc description of the length restriction | ||
155 | + */ | ||
156 | + @Override | ||
157 | + public void setDescription(String desc) { | ||
158 | + description = desc; | ||
159 | + | ||
160 | + } | ||
161 | + | ||
162 | + /** | ||
163 | + * Returns application's error message, to be used for data error. | ||
164 | + * | ||
165 | + * @return Application's error message, to be used for data error | ||
166 | + */ | ||
167 | + @Override | ||
168 | + public String getGetErrorMessage() { | ||
169 | + return errorMessage; | ||
170 | + } | ||
171 | + | ||
172 | + /** | ||
173 | + * Sets Application's error message, to be used for data error. | ||
174 | + * | ||
175 | + * @param errMsg Application's error message, to be used for data error | ||
176 | + */ | ||
177 | + @Override | ||
178 | + public void setErrorMessage(String errMsg) { | ||
179 | + errorMessage = errMsg; | ||
180 | + | ||
181 | + } | ||
182 | + | ||
183 | + /** | ||
184 | + * Returns application's error tag, to be used for data error. | ||
185 | + * | ||
186 | + * @return application's error tag, to be used for data error | ||
187 | + */ | ||
188 | + @Override | ||
189 | + public String getGetErrorAppTag() { | ||
190 | + return errorAppTag; | ||
191 | + } | ||
192 | + | ||
193 | + /** | ||
194 | + * Sets application's error tag, to be used for data error. | ||
195 | + * | ||
196 | + * @param errTag application's error tag, to be used for data error. | ||
197 | + */ | ||
198 | + @Override | ||
199 | + public void setErrorAppTag(String errTag) { | ||
200 | + errorAppTag = errTag; | ||
201 | + } | ||
202 | + | ||
203 | + @Override | ||
204 | + public YangConstructType getYangConstructType() { | ||
205 | + return YangConstructType.PATTERN_DATA; | ||
206 | + } | ||
207 | + | ||
208 | + @Override | ||
209 | + public void validateDataOnEntry() throws DataModelException { | ||
210 | + //TODO: implement the method. | ||
211 | + } | ||
212 | + | ||
213 | + @Override | ||
214 | + public void validateDataOnExit() throws DataModelException { | ||
215 | + //TODO: implement the method. | ||
216 | + } | ||
217 | +} |
... | @@ -15,14 +15,20 @@ | ... | @@ -15,14 +15,20 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.yangutils.datamodel; | 16 | package org.onosproject.yangutils.datamodel; |
17 | 17 | ||
18 | +import java.util.Iterator; | ||
18 | import java.util.LinkedList; | 19 | import java.util.LinkedList; |
19 | import java.util.List; | 20 | import java.util.List; |
20 | - | 21 | +import java.util.Set; |
21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
23 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
24 | +import org.onosproject.yangutils.linker.impl.YangReferenceResolver; | ||
25 | +import org.onosproject.yangutils.linker.impl.YangResolutionInfo; | ||
22 | import org.onosproject.yangutils.parser.Parsable; | 26 | import org.onosproject.yangutils.parser.Parsable; |
27 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
23 | import org.onosproject.yangutils.utils.YangConstructType; | 28 | import org.onosproject.yangutils.utils.YangConstructType; |
24 | 29 | ||
25 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil; | 30 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil; |
31 | +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.linkInterFileReferences; | ||
26 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList; | 32 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList; |
27 | 33 | ||
28 | /*- | 34 | /*- |
... | @@ -79,7 +85,7 @@ public class YangModule extends YangNode | ... | @@ -79,7 +85,7 @@ public class YangModule extends YangNode |
79 | 85 | ||
80 | /** | 86 | /** |
81 | * Reference:RFC 6020. | 87 | * Reference:RFC 6020. |
82 | - * | 88 | + * <p> |
83 | * The "contact" statement provides contact information for the module. The | 89 | * The "contact" statement provides contact information for the module. The |
84 | * argument is a string that is used to specify contact information for the | 90 | * argument is a string that is used to specify contact information for the |
85 | * person or persons to whom technical queries concerning this module should | 91 | * person or persons to whom technical queries concerning this module should |
... | @@ -90,7 +96,7 @@ public class YangModule extends YangNode | ... | @@ -90,7 +96,7 @@ public class YangModule extends YangNode |
90 | 96 | ||
91 | /** | 97 | /** |
92 | * Reference:RFC 6020. | 98 | * Reference:RFC 6020. |
93 | - * | 99 | + * <p> |
94 | * The "description" statement takes as an argument a string that contains a | 100 | * The "description" statement takes as an argument a string that contains a |
95 | * human-readable textual description of this definition. The text is | 101 | * human-readable textual description of this definition. The text is |
96 | * provided in a language (or languages) chosen by the module developer; for | 102 | * provided in a language (or languages) chosen by the module developer; for |
... | @@ -125,7 +131,7 @@ public class YangModule extends YangNode | ... | @@ -125,7 +131,7 @@ public class YangModule extends YangNode |
125 | 131 | ||
126 | /** | 132 | /** |
127 | * Reference:RFC 6020. | 133 | * Reference:RFC 6020. |
128 | - * | 134 | + * <p> |
129 | * The "organization" statement defines the party responsible for this | 135 | * The "organization" statement defines the party responsible for this |
130 | * module. The argument is a string that is used to specify a textual | 136 | * module. The argument is a string that is used to specify a textual |
131 | * description of the organization(s) under whose auspices this module was | 137 | * description of the organization(s) under whose auspices this module was |
... | @@ -408,6 +414,14 @@ public class YangModule extends YangNode | ... | @@ -408,6 +414,14 @@ public class YangModule extends YangNode |
408 | resolveLinkingForResolutionList(resolutionList, this); | 414 | resolveLinkingForResolutionList(resolutionList, this); |
409 | } | 415 | } |
410 | 416 | ||
417 | + @Override | ||
418 | + public void resolveInterFileLinking() throws DataModelException { | ||
419 | + // Get the list to be resolved. | ||
420 | + List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(); | ||
421 | + // Resolve linking for a resolution list. | ||
422 | + linkInterFileReferences(resolutionList, this); | ||
423 | + } | ||
424 | + | ||
411 | /** | 425 | /** |
412 | * Returns the textual reference. | 426 | * Returns the textual reference. |
413 | * | 427 | * |
... | @@ -525,4 +539,43 @@ public class YangModule extends YangNode | ... | @@ -525,4 +539,43 @@ public class YangModule extends YangNode |
525 | public void setResolutionList(List<YangResolutionInfo> resolutionList) { | 539 | public void setResolutionList(List<YangResolutionInfo> resolutionList) { |
526 | unresolvedResolutionList = resolutionList; | 540 | unresolvedResolutionList = resolutionList; |
527 | } | 541 | } |
542 | + | ||
543 | + @Override | ||
544 | + public void addReferencesToImportList(Set<YangFileInfo> yangFileInfoSet) | ||
545 | + throws LinkerException { | ||
546 | + Iterator<YangImport> importInfoIterator = getImportList().iterator(); | ||
547 | + // Run through the imported list to add references. | ||
548 | + while (importInfoIterator.hasNext()) { | ||
549 | + YangImport yangImport = importInfoIterator.next(); | ||
550 | + try { | ||
551 | + yangImport.addReferenceToImport(yangFileInfoSet); | ||
552 | + } catch (DataModelException e) { | ||
553 | + throw new LinkerException(e.getMessage()); | ||
554 | + } | ||
555 | + } | ||
556 | + } | ||
557 | + | ||
558 | + @Override | ||
559 | + public void addReferencesToIncludeList(Set<YangFileInfo> yangFileInfoSet) | ||
560 | + throws LinkerException { | ||
561 | + Iterator<YangInclude> includeInfoIterator = getIncludeList().iterator(); | ||
562 | + // Run through the included list to add references. | ||
563 | + while (includeInfoIterator.hasNext()) { | ||
564 | + YangInclude yangInclude = includeInfoIterator.next(); | ||
565 | + YangSubModule subModule = null; | ||
566 | + try { | ||
567 | + subModule = yangInclude.addReferenceToInclude(yangFileInfoSet); | ||
568 | + } catch (DataModelException e) { | ||
569 | + throw new LinkerException(e.getMessage()); | ||
570 | + } | ||
571 | + // Check if the referred sub-modules parent is self | ||
572 | + if (!(subModule.getBelongsTo().getModuleNode() == this)) { | ||
573 | + try { | ||
574 | + yangInclude.reportIncludeError(); | ||
575 | + } catch (DataModelException e) { | ||
576 | + throw new LinkerException(e.getMessage()); | ||
577 | + } | ||
578 | + } | ||
579 | + } | ||
580 | + } | ||
528 | } | 581 | } | ... | ... |
... | @@ -15,14 +15,20 @@ | ... | @@ -15,14 +15,20 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.yangutils.datamodel; | 16 | package org.onosproject.yangutils.datamodel; |
17 | 17 | ||
18 | +import java.util.Iterator; | ||
18 | import java.util.LinkedList; | 19 | import java.util.LinkedList; |
19 | import java.util.List; | 20 | import java.util.List; |
20 | - | 21 | +import java.util.Set; |
21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
23 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
24 | +import org.onosproject.yangutils.linker.impl.YangReferenceResolver; | ||
25 | +import org.onosproject.yangutils.linker.impl.YangResolutionInfo; | ||
22 | import org.onosproject.yangutils.parser.Parsable; | 26 | import org.onosproject.yangutils.parser.Parsable; |
27 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
23 | import org.onosproject.yangutils.utils.YangConstructType; | 28 | import org.onosproject.yangutils.utils.YangConstructType; |
24 | 29 | ||
25 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil; | 30 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil; |
31 | +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.linkInterFileReferences; | ||
26 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList; | 32 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList; |
27 | 33 | ||
28 | /* | 34 | /* |
... | @@ -92,7 +98,7 @@ public class YangSubModule extends YangNode | ... | @@ -92,7 +98,7 @@ public class YangSubModule extends YangNode |
92 | 98 | ||
93 | /** | 99 | /** |
94 | * Reference RFC 6020. | 100 | * Reference RFC 6020. |
95 | - * | 101 | + * <p> |
96 | * The "contact" statement provides contact information for the module. The | 102 | * The "contact" statement provides contact information for the module. The |
97 | * argument is a string that is used to specify contact information for the | 103 | * argument is a string that is used to specify contact information for the |
98 | * person or persons to whom technical queries concerning this module should | 104 | * person or persons to whom technical queries concerning this module should |
... | @@ -338,6 +344,14 @@ public class YangSubModule extends YangNode | ... | @@ -338,6 +344,14 @@ public class YangSubModule extends YangNode |
338 | resolveLinkingForResolutionList(resolutionList, this); | 344 | resolveLinkingForResolutionList(resolutionList, this); |
339 | } | 345 | } |
340 | 346 | ||
347 | + @Override | ||
348 | + public void resolveInterFileLinking() throws DataModelException { | ||
349 | + // Get the list to be resolved. | ||
350 | + List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(); | ||
351 | + // Resolve linking for a resolution list. | ||
352 | + linkInterFileReferences(resolutionList, this); | ||
353 | + } | ||
354 | + | ||
341 | /** | 355 | /** |
342 | * Returns the list of leaves. | 356 | * Returns the list of leaves. |
343 | * | 357 | * |
... | @@ -507,4 +521,54 @@ public class YangSubModule extends YangNode | ... | @@ -507,4 +521,54 @@ public class YangSubModule extends YangNode |
507 | public void setResolutionList(List<YangResolutionInfo> resolutionList) { | 521 | public void setResolutionList(List<YangResolutionInfo> resolutionList) { |
508 | this.unresolvedResolutionList = resolutionList; | 522 | this.unresolvedResolutionList = resolutionList; |
509 | } | 523 | } |
524 | + | ||
525 | + /** | ||
526 | + * Links the sub-module with module. | ||
527 | + * | ||
528 | + * @param yangFileInfoSet YANG file information set | ||
529 | + * @throws DataModelException a violation in data model rule | ||
530 | + */ | ||
531 | + public void linkWithModule(Set<YangFileInfo> yangFileInfoSet) | ||
532 | + throws DataModelException { | ||
533 | + getBelongsTo().linkWithModule(yangFileInfoSet); | ||
534 | + } | ||
535 | + | ||
536 | + @Override | ||
537 | + public void addReferencesToIncludeList(Set<YangFileInfo> yangFileInfoSet) | ||
538 | + throws LinkerException { | ||
539 | + Iterator<YangInclude> includeInfoIterator = getIncludeList().iterator(); | ||
540 | + // Run through the included list to add references. | ||
541 | + while (includeInfoIterator.hasNext()) { | ||
542 | + YangInclude yangInclude = includeInfoIterator.next(); | ||
543 | + YangSubModule subModule = null; | ||
544 | + try { | ||
545 | + subModule = yangInclude.addReferenceToInclude(yangFileInfoSet); | ||
546 | + } catch (DataModelException e) { | ||
547 | + throw new LinkerException(e.getMessage()); | ||
548 | + } | ||
549 | + // Check if the referred sub-modules parent is self | ||
550 | + if (!(subModule.getBelongsTo().getModuleNode() == getBelongsTo().getModuleNode())) { | ||
551 | + try { | ||
552 | + yangInclude.reportIncludeError(); | ||
553 | + } catch (DataModelException e) { | ||
554 | + throw new LinkerException(e.getMessage()); | ||
555 | + } | ||
556 | + } | ||
557 | + } | ||
558 | + } | ||
559 | + | ||
560 | + @Override | ||
561 | + public void addReferencesToImportList(Set<YangFileInfo> yangFileInfoSet) | ||
562 | + throws LinkerException { | ||
563 | + Iterator<YangImport> importInfoIterator = getImportList().iterator(); | ||
564 | + // Run through the imported list to add references. | ||
565 | + while (importInfoIterator.hasNext()) { | ||
566 | + YangImport yangImport = importInfoIterator.next(); | ||
567 | + try { | ||
568 | + yangImport.addReferenceToImport(yangFileInfoSet); | ||
569 | + } catch (DataModelException e) { | ||
570 | + throw new LinkerException(e.getMessage()); | ||
571 | + } | ||
572 | + } | ||
573 | + } | ||
510 | } | 574 | } | ... | ... |
... | @@ -17,6 +17,9 @@ | ... | @@ -17,6 +17,9 @@ |
17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
18 | 18 | ||
19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
20 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
21 | +import org.onosproject.yangutils.linker.impl.Resolvable; | ||
22 | +import org.onosproject.yangutils.linker.impl.ResolvableStatus; | ||
20 | import org.onosproject.yangutils.parser.Parsable; | 23 | import org.onosproject.yangutils.parser.Parsable; |
21 | import org.onosproject.yangutils.utils.YangConstructType; | 24 | import org.onosproject.yangutils.utils.YangConstructType; |
22 | 25 | ||
... | @@ -244,21 +247,25 @@ public class YangType<T> | ... | @@ -244,21 +247,25 @@ public class YangType<T> |
244 | } | 247 | } |
245 | 248 | ||
246 | @Override | 249 | @Override |
247 | - public void resolve() throws DataModelException { | 250 | + public void resolve() throws LinkerException { |
248 | /* | 251 | /* |
249 | * Check whether the data type is derived. | 252 | * Check whether the data type is derived. |
250 | */ | 253 | */ |
251 | if (getDataType() != DERIVED) { | 254 | if (getDataType() != DERIVED) { |
252 | - throw new DataModelException("Linker Error: Resolve should only be called for derived data types."); | 255 | + throw new LinkerException("Linker Error: Resolve should only be called for derived data types."); |
253 | } | 256 | } |
254 | 257 | ||
255 | // Check if the derived info is present. | 258 | // Check if the derived info is present. |
256 | YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo(); | 259 | YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo(); |
257 | if (derivedInfo == null) { | 260 | if (derivedInfo == null) { |
258 | - throw new DataModelException("Linker Error: Derived information is missing."); | 261 | + throw new LinkerException("Linker Error: Derived information is missing."); |
259 | } | 262 | } |
260 | 263 | ||
261 | // Initiate the resolution | 264 | // Initiate the resolution |
262 | - setResolvableStatus(derivedInfo.resolve()); | 265 | + try { |
266 | + setResolvableStatus(derivedInfo.resolve()); | ||
267 | + } catch (DataModelException e) { | ||
268 | + throw new LinkerException(e.getMessage()); | ||
269 | + } | ||
263 | } | 270 | } |
264 | } | 271 | } | ... | ... |
... | @@ -16,6 +16,9 @@ | ... | @@ -16,6 +16,9 @@ |
16 | package org.onosproject.yangutils.datamodel; | 16 | package org.onosproject.yangutils.datamodel; |
17 | 17 | ||
18 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 18 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
19 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
20 | +import org.onosproject.yangutils.linker.impl.Resolvable; | ||
21 | +import org.onosproject.yangutils.linker.impl.ResolvableStatus; | ||
19 | import org.onosproject.yangutils.parser.Parsable; | 22 | import org.onosproject.yangutils.parser.Parsable; |
20 | import org.onosproject.yangutils.utils.YangConstructType; | 23 | import org.onosproject.yangutils.utils.YangConstructType; |
21 | 24 | ||
... | @@ -259,37 +262,49 @@ public class YangUses | ... | @@ -259,37 +262,49 @@ public class YangUses |
259 | 262 | ||
260 | @Override | 263 | @Override |
261 | public void resolve() | 264 | public void resolve() |
262 | - throws DataModelException { | 265 | + throws LinkerException { |
263 | 266 | ||
264 | YangGrouping referredGrouping = getRefGroup(); | 267 | YangGrouping referredGrouping = getRefGroup(); |
265 | 268 | ||
266 | if (referredGrouping == null) { | 269 | if (referredGrouping == null) { |
267 | - throw new DataModelException("YANG uses linker error, cannot resolve uses"); | 270 | + throw new LinkerException("Linker Exception: YANG uses linker error, cannot resolve uses"); |
268 | } | 271 | } |
269 | 272 | ||
270 | YangNode usesParentNode = getParentNodeInGenCode(this); | 273 | YangNode usesParentNode = getParentNodeInGenCode(this); |
271 | if ((!(usesParentNode instanceof YangLeavesHolder)) | 274 | if ((!(usesParentNode instanceof YangLeavesHolder)) |
272 | || (!(usesParentNode instanceof CollisionDetector))) { | 275 | || (!(usesParentNode instanceof CollisionDetector))) { |
273 | - throw new DataModelException("YANG uses holder construct is wrong"); | 276 | + throw new LinkerException("Linker Exception: YANG uses holder construct is wrong"); |
274 | } | 277 | } |
275 | 278 | ||
276 | YangLeavesHolder usesParentLeavesHolder = (YangLeavesHolder) usesParentNode; | 279 | YangLeavesHolder usesParentLeavesHolder = (YangLeavesHolder) usesParentNode; |
277 | if (referredGrouping.getListOfLeaf() != null) { | 280 | if (referredGrouping.getListOfLeaf() != null) { |
278 | for (YangLeaf leaf : referredGrouping.getListOfLeaf()) { | 281 | for (YangLeaf leaf : referredGrouping.getListOfLeaf()) { |
279 | - ((CollisionDetector) usesParentLeavesHolder).detectCollidingChild(leaf.getName(), | 282 | + try { |
280 | - YangConstructType.LEAF_DATA); | 283 | + ((CollisionDetector) usesParentLeavesHolder).detectCollidingChild(leaf.getName(), |
284 | + YangConstructType.LEAF_DATA); | ||
285 | + } catch (DataModelException e) { | ||
286 | + throw new LinkerException(e.getMessage()); | ||
287 | + } | ||
281 | usesParentLeavesHolder.addLeaf(leaf); | 288 | usesParentLeavesHolder.addLeaf(leaf); |
282 | } | 289 | } |
283 | } | 290 | } |
284 | if (referredGrouping.getListOfLeafList() != null) { | 291 | if (referredGrouping.getListOfLeafList() != null) { |
285 | for (YangLeafList leafList : referredGrouping.getListOfLeafList()) { | 292 | for (YangLeafList leafList : referredGrouping.getListOfLeafList()) { |
286 | - ((CollisionDetector) usesParentLeavesHolder).detectCollidingChild(leafList.getName(), | 293 | + try { |
287 | - YangConstructType.LEAF_LIST_DATA); | 294 | + ((CollisionDetector) usesParentLeavesHolder).detectCollidingChild(leafList.getName(), |
295 | + YangConstructType.LEAF_LIST_DATA); | ||
296 | + } catch (DataModelException e) { | ||
297 | + throw new LinkerException(e.getMessage()); | ||
298 | + } | ||
288 | usesParentLeavesHolder.addLeafList(leafList); | 299 | usesParentLeavesHolder.addLeafList(leafList); |
289 | } | 300 | } |
290 | } | 301 | } |
291 | 302 | ||
292 | - YangNode.cloneSubTree(getRefGroup(), usesParentNode); | 303 | + try { |
304 | + YangNode.cloneSubTree(getRefGroup(), usesParentNode); | ||
305 | + } catch (DataModelException e) { | ||
306 | + throw new LinkerException(e.getMessage()); | ||
307 | + } | ||
293 | } | 308 | } |
294 | 309 | ||
295 | @Override | 310 | @Override | ... | ... |
... | @@ -16,17 +16,15 @@ | ... | @@ -16,17 +16,15 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.datamodel.utils; | 17 | package org.onosproject.yangutils.datamodel.utils; |
18 | 18 | ||
19 | -import java.util.Iterator; | ||
20 | import java.util.List; | 19 | import java.util.List; |
21 | - | 20 | +import java.util.Set; |
22 | import org.onosproject.yangutils.datamodel.CollisionDetector; | 21 | import org.onosproject.yangutils.datamodel.CollisionDetector; |
23 | -import org.onosproject.yangutils.datamodel.YangImport; | ||
24 | import org.onosproject.yangutils.datamodel.YangLeaf; | 22 | import org.onosproject.yangutils.datamodel.YangLeaf; |
25 | import org.onosproject.yangutils.datamodel.YangLeafList; | 23 | import org.onosproject.yangutils.datamodel.YangLeafList; |
26 | import org.onosproject.yangutils.datamodel.YangLeavesHolder; | 24 | import org.onosproject.yangutils.datamodel.YangLeavesHolder; |
27 | import org.onosproject.yangutils.datamodel.YangNode; | 25 | import org.onosproject.yangutils.datamodel.YangNode; |
28 | -import org.onosproject.yangutils.datamodel.YangReferenceResolver; | 26 | +import org.onosproject.yangutils.linker.impl.YangReferenceResolver; |
29 | -import org.onosproject.yangutils.datamodel.YangResolutionInfo; | 27 | +import org.onosproject.yangutils.linker.impl.YangResolutionInfo; |
30 | import org.onosproject.yangutils.datamodel.YangRpc; | 28 | import org.onosproject.yangutils.datamodel.YangRpc; |
31 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 29 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
32 | import org.onosproject.yangutils.parser.Parsable; | 30 | import org.onosproject.yangutils.parser.Parsable; |
... | @@ -48,14 +46,13 @@ public final class DataModelUtils { | ... | @@ -48,14 +46,13 @@ public final class DataModelUtils { |
48 | * Detects the colliding identifier name in a given YANG node and its child. | 46 | * Detects the colliding identifier name in a given YANG node and its child. |
49 | * | 47 | * |
50 | * @param identifierName name for which collision detection is to be | 48 | * @param identifierName name for which collision detection is to be |
51 | - * checked | 49 | + * checked |
52 | - * @param dataType type of YANG node asking for detecting collision | 50 | + * @param dataType type of YANG node asking for detecting collision |
53 | - * @param node instance of calling node | 51 | + * @param node instance of calling node |
54 | * @throws DataModelException a violation of data model rules | 52 | * @throws DataModelException a violation of data model rules |
55 | */ | 53 | */ |
56 | public static void detectCollidingChildUtil(String identifierName, YangConstructType dataType, YangNode node) | 54 | public static void detectCollidingChildUtil(String identifierName, YangConstructType dataType, YangNode node) |
57 | throws DataModelException { | 55 | throws DataModelException { |
58 | - | ||
59 | if (dataType == YangConstructType.USES_DATA || dataType == YangConstructType.GROUPING_DATA) { | 56 | if (dataType == YangConstructType.USES_DATA || dataType == YangConstructType.GROUPING_DATA) { |
60 | detectCollidingForUsesGrouping(identifierName, dataType, node); | 57 | detectCollidingForUsesGrouping(identifierName, dataType, node); |
61 | } else { | 58 | } else { |
... | @@ -81,9 +78,9 @@ public final class DataModelUtils { | ... | @@ -81,9 +78,9 @@ public final class DataModelUtils { |
81 | * Detects colliding of uses and grouping only with uses and grouping respectively. | 78 | * Detects colliding of uses and grouping only with uses and grouping respectively. |
82 | * | 79 | * |
83 | * @param identifierName name for which collision detection is to be | 80 | * @param identifierName name for which collision detection is to be |
84 | - * checked | 81 | + * checked |
85 | - * @param dataType type of YANG node asking for detecting collision | 82 | + * @param dataType type of YANG node asking for detecting collision |
86 | - * @param node node instance of calling node | 83 | + * @param node node instance of calling node |
87 | * @throws DataModelException a violation of data model rules | 84 | * @throws DataModelException a violation of data model rules |
88 | */ | 85 | */ |
89 | public static void detectCollidingForUsesGrouping(String identifierName, YangConstructType dataType, YangNode node) | 86 | public static void detectCollidingForUsesGrouping(String identifierName, YangConstructType dataType, YangNode node) |
... | @@ -103,9 +100,9 @@ public final class DataModelUtils { | ... | @@ -103,9 +100,9 @@ public final class DataModelUtils { |
103 | /** | 100 | /** |
104 | * Detects the colliding identifier name in a given leaf node. | 101 | * Detects the colliding identifier name in a given leaf node. |
105 | * | 102 | * |
106 | - * @param listOfLeaf List of leaves to detect collision | 103 | + * @param listOfLeaf List of leaves to detect collision |
107 | * @param identifierName name for which collision detection is to be | 104 | * @param identifierName name for which collision detection is to be |
108 | - * checked | 105 | + * checked |
109 | * @throws DataModelException a violation of data model rules | 106 | * @throws DataModelException a violation of data model rules |
110 | */ | 107 | */ |
111 | private static void detectCollidingLeaf(List<YangLeaf> listOfLeaf, String identifierName) | 108 | private static void detectCollidingLeaf(List<YangLeaf> listOfLeaf, String identifierName) |
... | @@ -127,7 +124,7 @@ public final class DataModelUtils { | ... | @@ -127,7 +124,7 @@ public final class DataModelUtils { |
127 | * | 124 | * |
128 | * @param listOfLeafList list of leaf-lists to detect collision | 125 | * @param listOfLeafList list of leaf-lists to detect collision |
129 | * @param identifierName name for which collision detection is to be | 126 | * @param identifierName name for which collision detection is to be |
130 | - * checked | 127 | + * checked |
131 | * @throws DataModelException a violation of data model rules | 128 | * @throws DataModelException a violation of data model rules |
132 | */ | 129 | */ |
133 | private static void detectCollidingLeafList(List<YangLeafList> listOfLeafList, String identifierName) | 130 | private static void detectCollidingLeafList(List<YangLeafList> listOfLeafList, String identifierName) |
... | @@ -148,7 +145,7 @@ public final class DataModelUtils { | ... | @@ -148,7 +145,7 @@ public final class DataModelUtils { |
148 | * Add a resolution information. | 145 | * Add a resolution information. |
149 | * | 146 | * |
150 | * @param resolutionInfo information about the YANG construct which has to | 147 | * @param resolutionInfo information about the YANG construct which has to |
151 | - * be resolved | 148 | + * be resolved |
152 | * @throws DataModelException a violation of data model rules | 149 | * @throws DataModelException a violation of data model rules |
153 | */ | 150 | */ |
154 | public static void addResolutionInfo(YangResolutionInfo resolutionInfo) | 151 | public static void addResolutionInfo(YangResolutionInfo resolutionInfo) |
... | @@ -165,64 +162,41 @@ public final class DataModelUtils { | ... | @@ -165,64 +162,41 @@ public final class DataModelUtils { |
165 | } | 162 | } |
166 | YangReferenceResolver resolutionNode = (YangReferenceResolver) curNode; | 163 | YangReferenceResolver resolutionNode = (YangReferenceResolver) curNode; |
167 | 164 | ||
168 | - if (!isPrefixValid(resolutionInfo.getEntityToResolveInfo().getEntityPrefix(), | ||
169 | - resolutionNode)) { | ||
170 | - throw new DataModelException("The prefix used is not valid"); | ||
171 | - } | ||
172 | resolutionNode.addToResolutionList(resolutionInfo); | 165 | resolutionNode.addToResolutionList(resolutionInfo); |
173 | } | 166 | } |
174 | 167 | ||
175 | /** | 168 | /** |
176 | - * Evaluates whether the prefix in uses/type is valid. | 169 | + * Resolve linking for a resolution list. |
177 | * | 170 | * |
178 | - * @param entityPrefix prefix in the current module/sub-module | 171 | + * @param resolutionList resolution list for which linking to be done |
179 | - * @param resolutionNode uses/type node which has the prefix with it | 172 | + * @param dataModelRootNode module/sub-module node |
180 | - * @return whether prefix is valid or not | 173 | + * @throws DataModelException a violation of data model rules |
181 | */ | 174 | */ |
182 | - private static boolean isPrefixValid(String entityPrefix, YangReferenceResolver resolutionNode) { | 175 | + public static void resolveLinkingForResolutionList(List<YangResolutionInfo> resolutionList, |
183 | - if (entityPrefix == null) { | 176 | + YangReferenceResolver dataModelRootNode) |
184 | - return true; | 177 | + throws DataModelException { |
185 | - } | ||
186 | - | ||
187 | - if (resolutionNode.getPrefix().contentEquals(entityPrefix)) { | ||
188 | - return true; | ||
189 | - } | ||
190 | - | ||
191 | - if (resolutionNode.getImportList() != null) { | ||
192 | - for (YangImport importedInfo : resolutionNode.getImportList()) { | ||
193 | - if (importedInfo.getPrefixId().contentEquals(entityPrefix)) { | ||
194 | - return true; | ||
195 | - } | ||
196 | - } | ||
197 | - } | ||
198 | - | ||
199 | - if (resolutionNode.getIncludeList() != null) { | ||
200 | - /** | ||
201 | - * TODO: check if the prefix matches with the imported data | ||
202 | 178 | ||
203 | - for (YangInclude includedInfo : resolutionNode.getIncludeList()) { | 179 | + for (YangResolutionInfo resolutionInfo : resolutionList) { |
204 | - if (includedInfo.contentEquals(prefix)) { | 180 | + resolutionInfo.resolveLinkingForResolutionInfo(dataModelRootNode); |
205 | - return true; | ||
206 | - } | ||
207 | - }*/ | ||
208 | } | 181 | } |
209 | - | ||
210 | - return false; | ||
211 | } | 182 | } |
212 | 183 | ||
213 | /** | 184 | /** |
214 | - * Resolve linking for a resolution list. | 185 | + * Links type/uses referring to typedef/uses of inter YANG file. |
215 | * | 186 | * |
216 | - * @param resolutionList resolution list for which linking to be done | 187 | + * @param resolutionList resolution list for which linking to be done |
217 | * @param dataModelRootNode module/sub-module node | 188 | * @param dataModelRootNode module/sub-module node |
218 | * @throws DataModelException a violation of data model rules | 189 | * @throws DataModelException a violation of data model rules |
219 | */ | 190 | */ |
220 | - public static void resolveLinkingForResolutionList(List<YangResolutionInfo> resolutionList, | 191 | + public static void linkInterFileReferences(List<YangResolutionInfo> resolutionList, |
221 | - YangReferenceResolver dataModelRootNode) | 192 | + YangReferenceResolver dataModelRootNode) |
222 | throws DataModelException { | 193 | throws DataModelException { |
223 | - | 194 | + /* |
195 | + * Run through the resolution list, find type/uses referring to | ||
196 | + * inter file typedef/grouping, ask for linking. | ||
197 | + */ | ||
224 | for (YangResolutionInfo resolutionInfo : resolutionList) { | 198 | for (YangResolutionInfo resolutionInfo : resolutionList) { |
225 | - resolutionInfo.resolveLinkingForResolutionInfo(dataModelRootNode.getPrefix()); | 199 | + resolutionInfo.linkInterFile(dataModelRootNode); |
226 | } | 200 | } |
227 | } | 201 | } |
228 | 202 | ||
... | @@ -244,24 +218,23 @@ public final class DataModelUtils { | ... | @@ -244,24 +218,23 @@ public final class DataModelUtils { |
244 | } | 218 | } |
245 | 219 | ||
246 | /** | 220 | /** |
247 | - * Returns module's data model node to which sub-module belongs to. | 221 | + * Returns referred node in a given set. |
248 | * | 222 | * |
249 | - * @param yangFileInfo YANG file information | 223 | + * @param yangFileInfoSet YANG file info set |
250 | - * @param belongsToModuleName name of the module to which sub-module belongs to | 224 | + * @param refNodeName name of the node which is referred |
251 | - * @return module node to which sub-module belongs to | 225 | + * @return referred node's reference |
252 | - * @throws DataModelException when belongs to module node is not found | ||
253 | */ | 226 | */ |
254 | - public static YangNode findBelongsToModuleNode(List<YangFileInfo> yangFileInfo, | 227 | + public static YangNode findReferredNode(Set<YangFileInfo> yangFileInfoSet, String refNodeName) { |
255 | - String belongsToModuleName) throws DataModelException { | 228 | + /* |
256 | - Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); | 229 | + * Run through the YANG files to see which YANG file matches the |
257 | - while (yangFileIterator.hasNext()) { | 230 | + * referred node name. |
258 | - YangFileInfo yangFile = yangFileIterator.next(); | 231 | + */ |
259 | - YangNode yangNode = yangFile.getRootNode(); | 232 | + for (YangFileInfo yangFileInfo : yangFileInfoSet) { |
260 | - if (yangNode.getName().equals(belongsToModuleName)) { | 233 | + YangNode yangNode = yangFileInfo.getRootNode(); |
261 | - return yangNode; | 234 | + if (yangNode.getName().equals(refNodeName)) { |
235 | + return yangFileInfo.getRootNode(); | ||
262 | } | 236 | } |
263 | } | 237 | } |
264 | - throw new DataModelException("YANG file error : Module " + belongsToModuleName + " to which sub-module " + | 238 | + return null; |
265 | - "belongs to is not found."); | ||
266 | } | 239 | } |
267 | } | 240 | } | ... | ... |
... | @@ -16,8 +16,8 @@ | ... | @@ -16,8 +16,8 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.linker; | 17 | package org.onosproject.yangutils.linker; |
18 | 18 | ||
19 | -import java.util.Map; | 19 | +import java.util.Set; |
20 | -import org.onosproject.yangutils.datamodel.YangReferenceResolver; | 20 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; |
21 | 21 | ||
22 | /** | 22 | /** |
23 | * Abstraction of entity which provides linking service of YANG files. | 23 | * Abstraction of entity which provides linking service of YANG files. |
... | @@ -28,8 +28,7 @@ public interface YangLinker { | ... | @@ -28,8 +28,7 @@ public interface YangLinker { |
28 | * Resolve the import and include dependencies for a given resolution | 28 | * Resolve the import and include dependencies for a given resolution |
29 | * information. | 29 | * information. |
30 | * | 30 | * |
31 | - * @param fileMapEntry map entry for which resolution is to be done | 31 | + * @param yangFileInfoSet set of all dependent YANG files |
32 | - * @param yangFilesMap map of dependent file and resolution information*/ | 32 | + */ |
33 | - void resolveDependencies(Map.Entry<String, YangReferenceResolver> fileMapEntry, Map<String, | 33 | + void resolveDependencies(Set<YangFileInfo> yangFileInfoSet); |
34 | - YangReferenceResolver> yangFilesMap); | ||
35 | } | 34 | } | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/linker/exceptions/LinkerException.java
0 → 100644
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onosproject.yangutils.linker.exceptions; | ||
18 | + | ||
19 | +/** | ||
20 | + * Represents base class for exceptions in linker operations. | ||
21 | + */ | ||
22 | +public class LinkerException extends RuntimeException { | ||
23 | + | ||
24 | + private static final long serialVersionUID = 20160211L; | ||
25 | + private int lineNumber; | ||
26 | + private int charPositionInLine; | ||
27 | + private String fileName; | ||
28 | + | ||
29 | + /** | ||
30 | + * Creates a new linker exception. | ||
31 | + */ | ||
32 | + public LinkerException() { | ||
33 | + super(); | ||
34 | + } | ||
35 | + | ||
36 | + /** | ||
37 | + * Creates a new linker exception with given message. | ||
38 | + * | ||
39 | + * @param message the detail of exception in string | ||
40 | + */ | ||
41 | + public LinkerException(String message) { | ||
42 | + super(message); | ||
43 | + } | ||
44 | + | ||
45 | + /** | ||
46 | + * Creates a new linker exception from given message and cause. | ||
47 | + * | ||
48 | + * @param message the detail of exception in string | ||
49 | + * @param cause underlying cause of the error | ||
50 | + */ | ||
51 | + public LinkerException(final String message, final Throwable cause) { | ||
52 | + super(message, cause); | ||
53 | + } | ||
54 | + | ||
55 | + /** | ||
56 | + * Creates a new linker exception from cause. | ||
57 | + * | ||
58 | + * @param cause underlying cause of the error | ||
59 | + */ | ||
60 | + public LinkerException(final Throwable cause) { | ||
61 | + super(cause); | ||
62 | + } | ||
63 | + | ||
64 | + /** | ||
65 | + * Returns line number of the exception. | ||
66 | + * | ||
67 | + * @return line number of the exception | ||
68 | + */ | ||
69 | + public int getLineNumber() { | ||
70 | + return this.lineNumber; | ||
71 | + } | ||
72 | + | ||
73 | + /** | ||
74 | + * Returns YANG file name of the exception. | ||
75 | + * | ||
76 | + * @return YANG file name of the exception | ||
77 | + */ | ||
78 | + public String getFileName() { | ||
79 | + return this.fileName; | ||
80 | + } | ||
81 | + | ||
82 | + /** | ||
83 | + * Returns position of the exception. | ||
84 | + * | ||
85 | + * @return position of the exception | ||
86 | + */ | ||
87 | + public int getCharPositionInLine() { | ||
88 | + return this.charPositionInLine; | ||
89 | + } | ||
90 | + | ||
91 | + /** | ||
92 | + * Sets line number of YANG file. | ||
93 | + * | ||
94 | + * @param line line number of YANG file | ||
95 | + */ | ||
96 | + public void setLine(int line) { | ||
97 | + this.lineNumber = line; | ||
98 | + } | ||
99 | + | ||
100 | + /** | ||
101 | + * Sets position of exception. | ||
102 | + * | ||
103 | + * @param charPosition position of exception | ||
104 | + */ | ||
105 | + public void setCharPosition(int charPosition) { | ||
106 | + this.charPositionInLine = charPosition; | ||
107 | + } | ||
108 | + | ||
109 | + /** | ||
110 | + * Sets file name in parser exception. | ||
111 | + * | ||
112 | + * @param fileName YANG file name | ||
113 | + */ | ||
114 | + public void setFileName(String fileName) { | ||
115 | + this.fileName = fileName; | ||
116 | + } | ||
117 | +} |
utils/yangutils/src/main/java/org/onosproject/yangutils/linker/exceptions/package-info.java
0 → 100644
1 | +/* | ||
2 | + * Copyright 2016-present 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 | +/** | ||
18 | + * Custom linker exceptions. | ||
19 | + */ | ||
20 | +package org.onosproject.yangutils.linker.exceptions; |
... | @@ -14,9 +14,9 @@ | ... | @@ -14,9 +14,9 @@ |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | -package org.onosproject.yangutils.datamodel; | 17 | +package org.onosproject.yangutils.linker.impl; |
18 | 18 | ||
19 | -import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 19 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; |
20 | 20 | ||
21 | /** | 21 | /** |
22 | * Abstraction of YANG resolvable information. Abstracted to obtain the | 22 | * Abstraction of YANG resolvable information. Abstracted to obtain the |
... | @@ -47,8 +47,8 @@ public interface Resolvable { | ... | @@ -47,8 +47,8 @@ public interface Resolvable { |
47 | /** | 47 | /** |
48 | * Resolves the linking. | 48 | * Resolves the linking. |
49 | * | 49 | * |
50 | - * @throws DataModelException data model error | 50 | + * @throws LinkerException linker error |
51 | */ | 51 | */ |
52 | void resolve() | 52 | void resolve() |
53 | - throws DataModelException; | 53 | + throws LinkerException; |
54 | } | 54 | } | ... | ... |
... | @@ -14,7 +14,7 @@ | ... | @@ -14,7 +14,7 @@ |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | -package org.onosproject.yangutils.datamodel; | 17 | +package org.onosproject.yangutils.linker.impl; |
18 | 18 | ||
19 | /** | 19 | /** |
20 | * Represents the status of resolvable entity. | 20 | * Represents the status of resolvable entity. |
... | @@ -40,6 +40,12 @@ public enum ResolvableStatus { | ... | @@ -40,6 +40,12 @@ public enum ResolvableStatus { |
40 | /** | 40 | /** |
41 | * Identifies that resolvable entity is resolved. | 41 | * Identifies that resolvable entity is resolved. |
42 | */ | 42 | */ |
43 | - RESOLVED | 43 | + RESOLVED, |
44 | + | ||
45 | + /** | ||
46 | + * Identifies that resolvable entity is inter file linked (i.e. complete | ||
47 | + * linking with external files). | ||
48 | + */ | ||
49 | + INTER_FILE_LINKED | ||
44 | 50 | ||
45 | } | 51 | } | ... | ... |
... | @@ -13,9 +13,12 @@ | ... | @@ -13,9 +13,12 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.yangutils.datamodel; | 16 | +package org.onosproject.yangutils.linker.impl; |
17 | 17 | ||
18 | -import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 18 | +import org.onosproject.yangutils.datamodel.YangNode; |
19 | +import org.onosproject.yangutils.datamodel.YangType; | ||
20 | +import org.onosproject.yangutils.datamodel.YangUses; | ||
21 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
19 | 22 | ||
20 | /** | 23 | /** |
21 | * Represents information about entity being resolved. | 24 | * Represents information about entity being resolved. |
... | @@ -61,7 +64,7 @@ public class YangEntityToResolveInfo<T> { | ... | @@ -61,7 +64,7 @@ public class YangEntityToResolveInfo<T> { |
61 | * Sets parent node which contains the entity to be resolved. | 64 | * Sets parent node which contains the entity to be resolved. |
62 | * | 65 | * |
63 | * @param holderOfEntityToResolve parent node which contains the entity to | 66 | * @param holderOfEntityToResolve parent node which contains the entity to |
64 | - * be resolved | 67 | + * be resolved |
65 | */ | 68 | */ |
66 | public void setHolderOfEntityToResolve(YangNode holderOfEntityToResolve) { | 69 | public void setHolderOfEntityToResolve(YangNode holderOfEntityToResolve) { |
67 | this.holderOfEntityToResolve = holderOfEntityToResolve; | 70 | this.holderOfEntityToResolve = holderOfEntityToResolve; |
... | @@ -71,10 +74,10 @@ public class YangEntityToResolveInfo<T> { | ... | @@ -71,10 +74,10 @@ public class YangEntityToResolveInfo<T> { |
71 | * Retrieves the prefix of the entity. | 74 | * Retrieves the prefix of the entity. |
72 | * | 75 | * |
73 | * @return entities prefix | 76 | * @return entities prefix |
74 | - * @throws DataModelException data model error | 77 | + * @throws LinkerException linker error |
75 | */ | 78 | */ |
76 | public String getEntityPrefix() | 79 | public String getEntityPrefix() |
77 | - throws DataModelException { | 80 | + throws LinkerException { |
78 | if (getEntityToResolve() == null) { | 81 | if (getEntityToResolve() == null) { |
79 | return null; | 82 | return null; |
80 | } | 83 | } |
... | @@ -86,7 +89,7 @@ public class YangEntityToResolveInfo<T> { | ... | @@ -86,7 +89,7 @@ public class YangEntityToResolveInfo<T> { |
86 | } else if (entityToBeResolved instanceof YangUses) { | 89 | } else if (entityToBeResolved instanceof YangUses) { |
87 | prefix = ((YangUses) entityToBeResolved).getPrefix(); | 90 | prefix = ((YangUses) entityToBeResolved).getPrefix(); |
88 | } else { | 91 | } else { |
89 | - throw new DataModelException("Data Model Exception: Entity to resolved is other than type/uses"); | 92 | + throw new LinkerException("Linker Exception: Entity to resolved is other than type/uses"); |
90 | } | 93 | } |
91 | return prefix; | 94 | return prefix; |
92 | } | 95 | } | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
0 → 100644
1 | +/* | ||
2 | + * Copyright 2016-present 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.impl; | ||
18 | + | ||
19 | +import java.util.Set; | ||
20 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
21 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
22 | +import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
23 | +import org.onosproject.yangutils.linker.YangLinker; | ||
24 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
25 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
26 | + | ||
27 | +import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE; | ||
28 | + | ||
29 | +/** | ||
30 | + * Representation of entity which provides linking service of YANG files. | ||
31 | + */ | ||
32 | +public class YangLinkerManager implements YangLinker { | ||
33 | + @Override | ||
34 | + public void resolveDependencies(Set<YangFileInfo> yangFileInfoSet) { | ||
35 | + | ||
36 | + // Carry out linking of sub module with module. | ||
37 | + linkSubModulesToParentModule(yangFileInfoSet); | ||
38 | + | ||
39 | + // Add references to import list. | ||
40 | + addRefToYangFilesImportList(yangFileInfoSet); | ||
41 | + | ||
42 | + // Add reference to include list. | ||
43 | + addRefToYangFilesIncludeList(yangFileInfoSet); | ||
44 | + | ||
45 | + // TODO check for circular import/include. | ||
46 | + | ||
47 | + // Carry out inter-file linking. | ||
48 | + processInterFileLinking(yangFileInfoSet); | ||
49 | + } | ||
50 | + | ||
51 | + /** | ||
52 | + * Resolves sub-module linking by linking sub module with parent module. | ||
53 | + * | ||
54 | + * @param yangFileInfoSet set of YANG files info | ||
55 | + * @throws LinkerException fails to link sub-module to parent module | ||
56 | + */ | ||
57 | + public void linkSubModulesToParentModule(Set<YangFileInfo> yangFileInfoSet) throws LinkerException { | ||
58 | + for (YangFileInfo yangFileInfo : yangFileInfoSet) { | ||
59 | + YangNode yangNode = yangFileInfo.getRootNode(); | ||
60 | + if (yangNode instanceof YangSubModule) { | ||
61 | + try { | ||
62 | + ((YangSubModule) yangNode).linkWithModule(yangFileInfoSet); | ||
63 | + } catch (DataModelException e) { | ||
64 | + String errorInfo = "YANG file error: " + yangFileInfo.getYangFileName() + " at line: " | ||
65 | + + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE | ||
66 | + + e.getMessage(); | ||
67 | + throw new LinkerException(errorInfo); | ||
68 | + } | ||
69 | + } | ||
70 | + } | ||
71 | + } | ||
72 | + | ||
73 | + /** | ||
74 | + * Adds imported node information to the import list. | ||
75 | + * | ||
76 | + * @param yangFileInfoSet set of YANG files info | ||
77 | + * @throws LinkerException fails to find imported module | ||
78 | + */ | ||
79 | + public void addRefToYangFilesImportList(Set<YangFileInfo> yangFileInfoSet) throws LinkerException { | ||
80 | + for (YangFileInfo yangFileInfo : yangFileInfoSet) { | ||
81 | + YangNode yangNode = yangFileInfo.getRootNode(); | ||
82 | + if (yangNode instanceof YangReferenceResolver) { | ||
83 | + ((YangReferenceResolver) yangNode).addReferencesToImportList(yangFileInfoSet); | ||
84 | + } | ||
85 | + } | ||
86 | + } | ||
87 | + | ||
88 | + /** | ||
89 | + * Adds included node information to the include list. | ||
90 | + * | ||
91 | + * @param yangFileInfoSet set of YANG files info | ||
92 | + * @throws LinkerException fails to find included sub-module | ||
93 | + */ | ||
94 | + public void addRefToYangFilesIncludeList(Set<YangFileInfo> yangFileInfoSet) throws LinkerException { | ||
95 | + for (YangFileInfo yangFileInfo : yangFileInfoSet) { | ||
96 | + YangNode yangNode = yangFileInfo.getRootNode(); | ||
97 | + if (yangNode instanceof YangReferenceResolver) { | ||
98 | + ((YangReferenceResolver) yangNode).addReferencesToIncludeList(yangFileInfoSet); | ||
99 | + } | ||
100 | + } | ||
101 | + } | ||
102 | + | ||
103 | + /** | ||
104 | + * Processes inter file linking for type and uses. | ||
105 | + * | ||
106 | + * @param yangFileInfoSet set of YANG files info | ||
107 | + * @throws LinkerException a violation in linker execution | ||
108 | + */ | ||
109 | + public void processInterFileLinking(Set<YangFileInfo> yangFileInfoSet) throws LinkerException { | ||
110 | + for (YangFileInfo yangFileInfo : yangFileInfoSet) { | ||
111 | + try { | ||
112 | + ((YangReferenceResolver) yangFileInfo.getRootNode()).resolveInterFileLinking(); | ||
113 | + } catch (DataModelException e) { | ||
114 | + String errorInfo = "Error in file: " + yangFileInfo.getYangFileName() + " at line: " | ||
115 | + + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE + e.getMessage(); | ||
116 | + throw new LinkerException(errorInfo); | ||
117 | + } | ||
118 | + } | ||
119 | + } | ||
120 | +} |
... | @@ -14,10 +14,15 @@ | ... | @@ -14,10 +14,15 @@ |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | -package org.onosproject.yangutils.datamodel; | 17 | +package org.onosproject.yangutils.linker.impl; |
18 | 18 | ||
19 | import java.util.List; | 19 | import java.util.List; |
20 | +import java.util.Set; | ||
21 | +import org.onosproject.yangutils.datamodel.YangImport; | ||
22 | +import org.onosproject.yangutils.datamodel.YangInclude; | ||
20 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 23 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
24 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
25 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
21 | 26 | ||
22 | /** | 27 | /** |
23 | * Abstraction of YANG dependency resolution information. Abstracted to obtain the | 28 | * Abstraction of YANG dependency resolution information. Abstracted to obtain the |
... | @@ -33,7 +38,7 @@ public interface YangReferenceResolver { | ... | @@ -33,7 +38,7 @@ public interface YangReferenceResolver { |
33 | List<YangResolutionInfo> getUnresolvedResolutionList(); | 38 | List<YangResolutionInfo> getUnresolvedResolutionList(); |
34 | 39 | ||
35 | /** | 40 | /** |
36 | - * Add to the resolution list. | 41 | + * Adds to the resolution list. |
37 | * | 42 | * |
38 | * @param resolutionInfo resolution information | 43 | * @param resolutionInfo resolution information |
39 | */ | 44 | */ |
... | @@ -54,7 +59,7 @@ public interface YangReferenceResolver { | ... | @@ -54,7 +59,7 @@ public interface YangReferenceResolver { |
54 | List<YangImport> getImportList(); | 59 | List<YangImport> getImportList(); |
55 | 60 | ||
56 | /** | 61 | /** |
57 | - * Add to the import list. | 62 | + * Adds to the import list. |
58 | * | 63 | * |
59 | * @param yangImport import to be added | 64 | * @param yangImport import to be added |
60 | */ | 65 | */ |
... | @@ -75,14 +80,14 @@ public interface YangReferenceResolver { | ... | @@ -75,14 +80,14 @@ public interface YangReferenceResolver { |
75 | List<YangInclude> getIncludeList(); | 80 | List<YangInclude> getIncludeList(); |
76 | 81 | ||
77 | /** | 82 | /** |
78 | - * Add to the include list. | 83 | + * Adds to the include list. |
79 | * | 84 | * |
80 | * @param yangInclude include to be added | 85 | * @param yangInclude include to be added |
81 | */ | 86 | */ |
82 | void addToIncludeList(YangInclude yangInclude); | 87 | void addToIncludeList(YangInclude yangInclude); |
83 | 88 | ||
84 | /** | 89 | /** |
85 | - * Create include list. | 90 | + * Creates include list. |
86 | * | 91 | * |
87 | * @param includeList include list | 92 | * @param includeList include list |
88 | */ | 93 | */ |
... | @@ -96,16 +101,39 @@ public interface YangReferenceResolver { | ... | @@ -96,16 +101,39 @@ public interface YangReferenceResolver { |
96 | String getPrefix(); | 101 | String getPrefix(); |
97 | 102 | ||
98 | /** | 103 | /** |
99 | - * Set prefix of resolution list root node. | 104 | + * Sets prefix of resolution list root node. |
100 | * | 105 | * |
101 | * @param prefix resolution root node prefix | 106 | * @param prefix resolution root node prefix |
102 | */ | 107 | */ |
103 | void setPrefix(String prefix); | 108 | void setPrefix(String prefix); |
104 | 109 | ||
105 | /** | 110 | /** |
106 | - * Resolve self file linking. | 111 | + * Resolves self file linking. |
107 | * | 112 | * |
108 | * @throws DataModelException a violation in data model rule | 113 | * @throws DataModelException a violation in data model rule |
109 | */ | 114 | */ |
110 | void resolveSelfFileLinking() throws DataModelException; | 115 | void resolveSelfFileLinking() throws DataModelException; |
116 | + | ||
117 | + /** | ||
118 | + * Resolves inter file linking. | ||
119 | + * | ||
120 | + * @throws DataModelException a violation in data model rule | ||
121 | + */ | ||
122 | + void resolveInterFileLinking() throws DataModelException; | ||
123 | + | ||
124 | + /** | ||
125 | + * Adds references to include. | ||
126 | + * | ||
127 | + * @param yangFileInfoSet YANG file info set | ||
128 | + * @throws LinkerException a violation of linker rules | ||
129 | + */ | ||
130 | + void addReferencesToIncludeList(Set<YangFileInfo> yangFileInfoSet) throws LinkerException; | ||
131 | + | ||
132 | + /** | ||
133 | + * Adds references to import. | ||
134 | + * | ||
135 | + * @param yangFileInfoSet YANG file info set | ||
136 | + * @throws LinkerException a violation of linker rules | ||
137 | + */ | ||
138 | + void addReferencesToImportList(Set<YangFileInfo> yangFileInfoSet) throws LinkerException; | ||
111 | } | 139 | } | ... | ... |
This diff is collapsed. Click to expand it.
... | @@ -15,6 +15,6 @@ | ... | @@ -15,6 +15,6 @@ |
15 | */ | 15 | */ |
16 | 16 | ||
17 | /** | 17 | /** |
18 | - * Provide inter file and inter jar linking implementation. | 18 | + * Provide intra/inter file and inter jar linking implementation. |
19 | */ | 19 | */ |
20 | -package org.onosproject.yangutils.linker.impl; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
20 | +package org.onosproject.yangutils.linker.impl; | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java
... | @@ -74,20 +74,26 @@ public final class BelongsToListener { | ... | @@ -74,20 +74,26 @@ public final class BelongsToListener { |
74 | * (belongsto), perform validations and update the data model tree. | 74 | * (belongsto), perform validations and update the data model tree. |
75 | * | 75 | * |
76 | * @param listener Listener's object | 76 | * @param listener Listener's object |
77 | - * @param ctx context object of the grammar rule | 77 | + * @param ctx context object of the grammar rule |
78 | */ | 78 | */ |
79 | public static void processBelongsToEntry(TreeWalkListener listener, | 79 | public static void processBelongsToEntry(TreeWalkListener listener, |
80 | GeneratedYangParser.BelongstoStatementContext ctx) { | 80 | GeneratedYangParser.BelongstoStatementContext ctx) { |
81 | 81 | ||
82 | // Check for stack to be non empty. | 82 | // Check for stack to be non empty. |
83 | checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(), | 83 | checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(), |
84 | - ENTRY); | 84 | + ENTRY); |
85 | 85 | ||
86 | String identifier = getValidIdentifier(ctx.identifier().getText(), BELONGS_TO_DATA, ctx); | 86 | String identifier = getValidIdentifier(ctx.identifier().getText(), BELONGS_TO_DATA, ctx); |
87 | 87 | ||
88 | YangBelongsTo belongstoNode = new YangBelongsTo(); | 88 | YangBelongsTo belongstoNode = new YangBelongsTo(); |
89 | belongstoNode.setBelongsToModuleName(identifier); | 89 | belongstoNode.setBelongsToModuleName(identifier); |
90 | 90 | ||
91 | + // Set the line number and character position in line for the belongs to. | ||
92 | + int errorLine = ctx.getStart().getLine(); | ||
93 | + int errorPosition = ctx.getStart().getCharPositionInLine(); | ||
94 | + belongstoNode.setLineNumber(errorLine); | ||
95 | + belongstoNode.setCharPosition(errorPosition); | ||
96 | + | ||
91 | // Push belongsto into the stack. | 97 | // Push belongsto into the stack. |
92 | listener.getParsedDataStack().push(belongstoNode); | 98 | listener.getParsedDataStack().push(belongstoNode); |
93 | } | 99 | } |
... | @@ -97,14 +103,14 @@ public final class BelongsToListener { | ... | @@ -97,14 +103,14 @@ public final class BelongsToListener { |
97 | * validations and update the data model tree. | 103 | * validations and update the data model tree. |
98 | * | 104 | * |
99 | * @param listener Listener's object | 105 | * @param listener Listener's object |
100 | - * @param ctx context object of the grammar rule | 106 | + * @param ctx context object of the grammar rule |
101 | */ | 107 | */ |
102 | public static void processBelongsToExit(TreeWalkListener listener, | 108 | public static void processBelongsToExit(TreeWalkListener listener, |
103 | GeneratedYangParser.BelongstoStatementContext ctx) { | 109 | GeneratedYangParser.BelongstoStatementContext ctx) { |
104 | 110 | ||
105 | // Check for stack to be non empty. | 111 | // Check for stack to be non empty. |
106 | checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(), | 112 | checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(), |
107 | - EXIT); | 113 | + EXIT); |
108 | 114 | ||
109 | Parsable tmpBelongstoNode = listener.getParsedDataStack().peek(); | 115 | Parsable tmpBelongstoNode = listener.getParsedDataStack().peek(); |
110 | if (tmpBelongstoNode instanceof YangBelongsTo) { | 116 | if (tmpBelongstoNode instanceof YangBelongsTo) { |
... | @@ -112,7 +118,7 @@ public final class BelongsToListener { | ... | @@ -112,7 +118,7 @@ public final class BelongsToListener { |
112 | 118 | ||
113 | // Check for stack to be empty. | 119 | // Check for stack to be empty. |
114 | checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, | 120 | checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, |
115 | - ctx.identifier().getText(), EXIT); | 121 | + ctx.identifier().getText(), EXIT); |
116 | 122 | ||
117 | Parsable tmpNode = listener.getParsedDataStack().peek(); | 123 | Parsable tmpNode = listener.getParsedDataStack().peek(); |
118 | switch (tmpNode.getYangConstructType()) { | 124 | switch (tmpNode.getYangConstructType()) { |
... | @@ -129,7 +135,7 @@ public final class BelongsToListener { | ... | @@ -129,7 +135,7 @@ public final class BelongsToListener { |
129 | } | 135 | } |
130 | } else { | 136 | } else { |
131 | throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BELONGS_TO_DATA, | 137 | throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BELONGS_TO_DATA, |
132 | - ctx.identifier().getText(), EXIT)); | 138 | + ctx.identifier().getText(), EXIT)); |
133 | } | 139 | } |
134 | } | 140 | } |
135 | } | 141 | } | ... | ... |
... | @@ -73,7 +73,7 @@ public final class ImportListener { | ... | @@ -73,7 +73,7 @@ public final class ImportListener { |
73 | * (import), perform validations and update the data model tree. | 73 | * (import), perform validations and update the data model tree. |
74 | * | 74 | * |
75 | * @param listener Listener's object | 75 | * @param listener Listener's object |
76 | - * @param ctx context object of the grammar rule | 76 | + * @param ctx context object of the grammar rule |
77 | */ | 77 | */ |
78 | public static void processImportEntry(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { | 78 | public static void processImportEntry(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { |
79 | 79 | ||
... | @@ -85,6 +85,12 @@ public final class ImportListener { | ... | @@ -85,6 +85,12 @@ public final class ImportListener { |
85 | YangImport importNode = new YangImport(); | 85 | YangImport importNode = new YangImport(); |
86 | importNode.setModuleName(identifier); | 86 | importNode.setModuleName(identifier); |
87 | 87 | ||
88 | + // Set the line number and character position in line for the belongs to. | ||
89 | + int errorLine = ctx.getStart().getLine(); | ||
90 | + int errorPosition = ctx.getStart().getCharPositionInLine(); | ||
91 | + importNode.setLineNumber(errorLine); | ||
92 | + importNode.setCharPosition(errorPosition); | ||
93 | + | ||
88 | // Push import node to the stack. | 94 | // Push import node to the stack. |
89 | listener.getParsedDataStack().push(importNode); | 95 | listener.getParsedDataStack().push(importNode); |
90 | } | 96 | } |
... | @@ -94,7 +100,7 @@ public final class ImportListener { | ... | @@ -94,7 +100,7 @@ public final class ImportListener { |
94 | * validations and update the data model tree. | 100 | * validations and update the data model tree. |
95 | * | 101 | * |
96 | * @param listener Listener's object | 102 | * @param listener Listener's object |
97 | - * @param ctx context object of the grammar rule | 103 | + * @param ctx context object of the grammar rule |
98 | */ | 104 | */ |
99 | public static void processImportExit(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { | 105 | public static void processImportExit(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { |
100 | 106 | ||
... | @@ -107,7 +113,7 @@ public final class ImportListener { | ... | @@ -107,7 +113,7 @@ public final class ImportListener { |
107 | 113 | ||
108 | // Check for stack to be non empty. | 114 | // Check for stack to be non empty. |
109 | checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(), | 115 | checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(), |
110 | - EXIT); | 116 | + EXIT); |
111 | 117 | ||
112 | Parsable tmpNode = listener.getParsedDataStack().peek(); | 118 | Parsable tmpNode = listener.getParsedDataStack().peek(); |
113 | switch (tmpNode.getYangConstructType()) { | 119 | switch (tmpNode.getYangConstructType()) { |
... | @@ -128,7 +134,7 @@ public final class ImportListener { | ... | @@ -128,7 +134,7 @@ public final class ImportListener { |
128 | } | 134 | } |
129 | } else { | 135 | } else { |
130 | throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, IMPORT_DATA, | 136 | throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, IMPORT_DATA, |
131 | - ctx.identifier().getText(), EXIT)); | 137 | + ctx.identifier().getText(), EXIT)); |
132 | } | 138 | } |
133 | } | 139 | } |
134 | } | 140 | } | ... | ... |
... | @@ -72,19 +72,25 @@ public final class IncludeListener { | ... | @@ -72,19 +72,25 @@ public final class IncludeListener { |
72 | * (include), perform validations and update the data model tree. | 72 | * (include), perform validations and update the data model tree. |
73 | * | 73 | * |
74 | * @param listener Listener's object | 74 | * @param listener Listener's object |
75 | - * @param ctx context object of the grammar rule | 75 | + * @param ctx context object of the grammar rule |
76 | */ | 76 | */ |
77 | public static void processIncludeEntry(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { | 77 | public static void processIncludeEntry(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { |
78 | 78 | ||
79 | // Check for stack to be non empty. | 79 | // Check for stack to be non empty. |
80 | checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(), | 80 | checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(), |
81 | - ENTRY); | 81 | + ENTRY); |
82 | 82 | ||
83 | String identifier = getValidIdentifier(ctx.identifier().getText(), INCLUDE_DATA, ctx); | 83 | String identifier = getValidIdentifier(ctx.identifier().getText(), INCLUDE_DATA, ctx); |
84 | 84 | ||
85 | YangInclude includeNode = new YangInclude(); | 85 | YangInclude includeNode = new YangInclude(); |
86 | includeNode.setSubModuleName(identifier); | 86 | includeNode.setSubModuleName(identifier); |
87 | 87 | ||
88 | + // Set the line number and character position in line for the belongs to. | ||
89 | + int errorLine = ctx.getStart().getLine(); | ||
90 | + int errorPosition = ctx.getStart().getCharPositionInLine(); | ||
91 | + includeNode.setLineNumber(errorLine); | ||
92 | + includeNode.setCharPosition(errorPosition); | ||
93 | + | ||
88 | listener.getParsedDataStack().push(includeNode); | 94 | listener.getParsedDataStack().push(includeNode); |
89 | } | 95 | } |
90 | 96 | ||
... | @@ -93,7 +99,7 @@ public final class IncludeListener { | ... | @@ -93,7 +99,7 @@ public final class IncludeListener { |
93 | * validations and update the data model tree. | 99 | * validations and update the data model tree. |
94 | * | 100 | * |
95 | * @param listener Listener's object | 101 | * @param listener Listener's object |
96 | - * @param ctx context object of the grammar rule | 102 | + * @param ctx context object of the grammar rule |
97 | */ | 103 | */ |
98 | public static void processIncludeExit(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { | 104 | public static void processIncludeExit(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { |
99 | 105 | ||
... | @@ -106,7 +112,7 @@ public final class IncludeListener { | ... | @@ -106,7 +112,7 @@ public final class IncludeListener { |
106 | 112 | ||
107 | // Check for stack to be non empty. | 113 | // Check for stack to be non empty. |
108 | checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(), | 114 | checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(), |
109 | - EXIT); | 115 | + EXIT); |
110 | 116 | ||
111 | Parsable tmpNode = listener.getParsedDataStack().peek(); | 117 | Parsable tmpNode = listener.getParsedDataStack().peek(); |
112 | switch (tmpNode.getYangConstructType()) { | 118 | switch (tmpNode.getYangConstructType()) { |
... | @@ -127,7 +133,7 @@ public final class IncludeListener { | ... | @@ -127,7 +133,7 @@ public final class IncludeListener { |
127 | } | 133 | } |
128 | } else { | 134 | } else { |
129 | throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, INCLUDE_DATA, | 135 | throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, INCLUDE_DATA, |
130 | - ctx.identifier().getText(), EXIT)); | 136 | + ctx.identifier().getText(), EXIT)); |
131 | } | 137 | } |
132 | } | 138 | } |
133 | } | 139 | } | ... | ... |
... | @@ -16,7 +16,6 @@ | ... | @@ -16,7 +16,6 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | -import org.onosproject.yangutils.datamodel.YangDataTypes; | ||
20 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; | 19 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
21 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; | 20 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; |
22 | import org.onosproject.yangutils.datamodel.YangStringRestriction; | 21 | import org.onosproject.yangutils.datamodel.YangStringRestriction; |
... | @@ -27,7 +26,9 @@ import org.onosproject.yangutils.parser.exceptions.ParserException; | ... | @@ -27,7 +26,9 @@ import org.onosproject.yangutils.parser.exceptions.ParserException; |
27 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 26 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
28 | import org.onosproject.yangutils.utils.YangConstructType; | 27 | import org.onosproject.yangutils.utils.YangConstructType; |
29 | 28 | ||
29 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY; | ||
30 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 30 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
31 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | ||
31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | 33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; |
33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; |
... | @@ -99,8 +100,8 @@ public final class LengthRestrictionListener { | ... | @@ -99,8 +100,8 @@ public final class LengthRestrictionListener { |
99 | * Sets the length restriction to type. | 100 | * Sets the length restriction to type. |
100 | * | 101 | * |
101 | * @param listener listener's object | 102 | * @param listener listener's object |
102 | - * @param type Yang type for which length restriction to be set | 103 | + * @param type Yang type for which length restriction to be set |
103 | - * @param ctx context object of the grammar rule | 104 | + * @param ctx context object of the grammar rule |
104 | */ | 105 | */ |
105 | private static void setLengthRestriction(TreeWalkListener listener, YangType type, | 106 | private static void setLengthRestriction(TreeWalkListener listener, YangType type, |
106 | GeneratedYangParser.LengthStatementContext ctx) { | 107 | GeneratedYangParser.LengthStatementContext ctx) { |
... | @@ -115,10 +116,10 @@ public final class LengthRestrictionListener { | ... | @@ -115,10 +116,10 @@ public final class LengthRestrictionListener { |
115 | return; | 116 | return; |
116 | } | 117 | } |
117 | 118 | ||
118 | - if (type.getDataType() != YangDataTypes.STRING) { | 119 | + if (type.getDataType() != STRING && type.getDataType() != BINARY) { |
119 | ParserException parserException = new ParserException("YANG file error : " + | 120 | ParserException parserException = new ParserException("YANG file error : " + |
120 | YangConstructType.getYangConstructType(LENGTH_DATA) + " name " + ctx.length().getText() + | 121 | YangConstructType.getYangConstructType(LENGTH_DATA) + " name " + ctx.length().getText() + |
121 | - " can be used to restrict the built-in type string or types derived from string."); | 122 | + " can be used to restrict the built-in type string/binary or types derived from string/binary."); |
122 | parserException.setLine(ctx.getStart().getLine()); | 123 | parserException.setLine(ctx.getStart().getLine()); |
123 | parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | 124 | parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); |
124 | throw parserException; | 125 | throw parserException; |
... | @@ -127,14 +128,18 @@ public final class LengthRestrictionListener { | ... | @@ -127,14 +128,18 @@ public final class LengthRestrictionListener { |
127 | YangRangeRestriction lengthRestriction = processLengthRestriction(null, ctx.getStart().getLine(), | 128 | YangRangeRestriction lengthRestriction = processLengthRestriction(null, ctx.getStart().getLine(), |
128 | ctx.getStart().getCharPositionInLine(), false, ctx.length().getText()); | 129 | ctx.getStart().getCharPositionInLine(), false, ctx.length().getText()); |
129 | 130 | ||
130 | - YangStringRestriction stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo(); | 131 | + if (type.getDataType() == STRING) { |
132 | + YangStringRestriction stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo(); | ||
133 | + if (stringRestriction == null) { | ||
134 | + stringRestriction = new YangStringRestriction(); | ||
135 | + type.setDataTypeExtendedInfo(stringRestriction); | ||
136 | + } | ||
131 | 137 | ||
132 | - if (stringRestriction == null) { | 138 | + stringRestriction.setLengthRestriction(lengthRestriction); |
133 | - stringRestriction = new YangStringRestriction(); | 139 | + } else { |
134 | - type.setDataTypeExtendedInfo(stringRestriction); | 140 | + type.setDataTypeExtendedInfo(lengthRestriction); |
135 | } | 141 | } |
136 | 142 | ||
137 | - stringRestriction.setLengthRestriction(lengthRestriction); | ||
138 | listener.getParsedDataStack().push(lengthRestriction); | 143 | listener.getParsedDataStack().push(lengthRestriction); |
139 | } | 144 | } |
140 | 145 | ||
... | @@ -143,7 +148,7 @@ public final class LengthRestrictionListener { | ... | @@ -143,7 +148,7 @@ public final class LengthRestrictionListener { |
143 | * It is called when parser exits from grammar rule (length). | 148 | * It is called when parser exits from grammar rule (length). |
144 | * | 149 | * |
145 | * @param listener listener's object | 150 | * @param listener listener's object |
146 | - * @param ctx context object of the grammar rule | 151 | + * @param ctx context object of the grammar rule |
147 | */ | 152 | */ |
148 | public static void processLengthRestrictionExit(TreeWalkListener listener, | 153 | public static void processLengthRestrictionExit(TreeWalkListener listener, |
149 | GeneratedYangParser.LengthStatementContext ctx) { | 154 | GeneratedYangParser.LengthStatementContext ctx) { | ... | ... |
... | @@ -16,7 +16,7 @@ | ... | @@ -16,7 +16,7 @@ |
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.YangReferenceResolver; | 19 | +import org.onosproject.yangutils.linker.impl.YangReferenceResolver; |
20 | import org.onosproject.yangutils.datamodel.YangModule; | 20 | import org.onosproject.yangutils.datamodel.YangModule; |
21 | import org.onosproject.yangutils.datamodel.YangRevision; | 21 | import org.onosproject.yangutils.datamodel.YangRevision; |
22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java
... | @@ -16,7 +16,7 @@ | ... | @@ -16,7 +16,7 @@ |
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.YangReferenceResolver; | 19 | +import org.onosproject.yangutils.linker.impl.YangReferenceResolver; |
20 | import org.onosproject.yangutils.datamodel.YangRevision; | 20 | import org.onosproject.yangutils.datamodel.YangRevision; |
21 | import org.onosproject.yangutils.datamodel.YangSubModule; | 21 | import org.onosproject.yangutils.datamodel.YangSubModule; |
22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ... | ... |
... | @@ -22,26 +22,24 @@ import org.onosproject.yangutils.datamodel.YangLeaf; | ... | @@ -22,26 +22,24 @@ import org.onosproject.yangutils.datamodel.YangLeaf; |
22 | import org.onosproject.yangutils.datamodel.YangLeafList; | 22 | import org.onosproject.yangutils.datamodel.YangLeafList; |
23 | import org.onosproject.yangutils.datamodel.YangNode; | 23 | import org.onosproject.yangutils.datamodel.YangNode; |
24 | import org.onosproject.yangutils.datamodel.YangNodeIdentifier; | 24 | import org.onosproject.yangutils.datamodel.YangNodeIdentifier; |
25 | -import org.onosproject.yangutils.datamodel.YangResolutionInfo; | ||
26 | import org.onosproject.yangutils.datamodel.YangType; | 25 | import org.onosproject.yangutils.datamodel.YangType; |
27 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 26 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
28 | import org.onosproject.yangutils.datamodel.YangUnion; | 27 | import org.onosproject.yangutils.datamodel.YangUnion; |
29 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 28 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
29 | +import org.onosproject.yangutils.linker.impl.YangResolutionInfo; | ||
30 | import org.onosproject.yangutils.parser.Parsable; | 30 | import org.onosproject.yangutils.parser.Parsable; |
31 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 31 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
32 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 32 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
33 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 33 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
34 | 34 | ||
35 | -import static org.onosproject.yangutils.datamodel.ResolvableStatus.UNRESOLVED; | ||
36 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo; | 35 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo; |
37 | import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION; | 36 | import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION; |
38 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangType; | 37 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangType; |
38 | +import static org.onosproject.yangutils.linker.impl.ResolvableStatus.UNRESOLVED; | ||
39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | 40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; |
41 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction | 41 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; |
42 | - .constructExtendedListenerErrorMessage; | 42 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; |
43 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction | ||
44 | - .constructListenerErrorMessage; | ||
45 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 43 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
46 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; | 44 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; |
47 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 45 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
... | @@ -81,10 +79,10 @@ public final class TypeListener { | ... | @@ -81,10 +79,10 @@ public final class TypeListener { |
81 | * (type), performs validation and updates the data model tree. | 79 | * (type), performs validation and updates the data model tree. |
82 | * | 80 | * |
83 | * @param listener listener's object | 81 | * @param listener listener's object |
84 | - * @param ctx context object of the grammar rule | 82 | + * @param ctx context object of the grammar rule |
85 | */ | 83 | */ |
86 | public static void processTypeEntry(TreeWalkListener listener, | 84 | public static void processTypeEntry(TreeWalkListener listener, |
87 | - GeneratedYangParser.TypeStatementContext ctx) { | 85 | + GeneratedYangParser.TypeStatementContext ctx) { |
88 | 86 | ||
89 | // Check for stack to be non empty. | 87 | // Check for stack to be non empty. |
90 | checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPE_DATA, ctx.string().getText(), ENTRY); | 88 | checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPE_DATA, ctx.string().getText(), ENTRY); |
... | @@ -190,6 +188,8 @@ public final class TypeListener { | ... | @@ -190,6 +188,8 @@ public final class TypeListener { |
190 | YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>(); | 188 | YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>(); |
191 | ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo); | 189 | ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo); |
192 | 190 | ||
191 | + type.setResolvableStatus(UNRESOLVED); | ||
192 | + | ||
193 | // Add resolution information to the list | 193 | // Add resolution information to the list |
194 | YangResolutionInfo resolutionInfo = | 194 | YangResolutionInfo resolutionInfo = |
195 | new YangResolutionInfo<YangType>(type, unionNode, errorLine, errorPosition); | 195 | new YangResolutionInfo<YangType>(type, unionNode, errorLine, errorPosition); |
... | @@ -211,13 +211,15 @@ public final class TypeListener { | ... | @@ -211,13 +211,15 @@ public final class TypeListener { |
211 | YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>(); | 211 | YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>(); |
212 | ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo); | 212 | ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo); |
213 | 213 | ||
214 | + type.setResolvableStatus(UNRESOLVED); | ||
215 | + | ||
214 | // Add resolution information to the list | 216 | // Add resolution information to the list |
215 | YangResolutionInfo resolutionInfo = | 217 | YangResolutionInfo resolutionInfo = |
216 | new YangResolutionInfo<YangType>(type, typeDef, errorLine, errorPosition); | 218 | new YangResolutionInfo<YangType>(type, typeDef, errorLine, errorPosition); |
217 | addToResolutionList(resolutionInfo, ctx); | 219 | addToResolutionList(resolutionInfo, ctx); |
218 | } | 220 | } |
219 | break; | 221 | break; |
220 | - //TODO: deviate replacement statement.case TYPEDEF_DATA: //TODO | 222 | + //TODO: deviate replacement statement. |
221 | 223 | ||
222 | default: | 224 | default: |
223 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA, | 225 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA, |
... | @@ -233,10 +235,10 @@ public final class TypeListener { | ... | @@ -233,10 +235,10 @@ public final class TypeListener { |
233 | * validations and update the data model tree. | 235 | * validations and update the data model tree. |
234 | * | 236 | * |
235 | * @param listener Listener's object | 237 | * @param listener Listener's object |
236 | - * @param ctx context object of the grammar rule | 238 | + * @param ctx context object of the grammar rule |
237 | */ | 239 | */ |
238 | public static void processTypeExit(TreeWalkListener listener, | 240 | public static void processTypeExit(TreeWalkListener listener, |
239 | - GeneratedYangParser.TypeStatementContext ctx) { | 241 | + GeneratedYangParser.TypeStatementContext ctx) { |
240 | 242 | ||
241 | // Check for stack to be non empty. | 243 | // Check for stack to be non empty. |
242 | checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, TYPE_DATA, ctx.string().getText(), EXIT); | 244 | checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, TYPE_DATA, ctx.string().getText(), EXIT); |
... | @@ -252,15 +254,15 @@ public final class TypeListener { | ... | @@ -252,15 +254,15 @@ public final class TypeListener { |
252 | * Adds to resolution list. | 254 | * Adds to resolution list. |
253 | * | 255 | * |
254 | * @param resolutionInfo resolution information | 256 | * @param resolutionInfo resolution information |
255 | - * @param ctx context object of the grammar rule | 257 | + * @param ctx context object of the grammar rule |
256 | */ | 258 | */ |
257 | private static void addToResolutionList(YangResolutionInfo<YangType> resolutionInfo, | 259 | private static void addToResolutionList(YangResolutionInfo<YangType> resolutionInfo, |
258 | - GeneratedYangParser.TypeStatementContext ctx) { | 260 | + GeneratedYangParser.TypeStatementContext ctx) { |
259 | try { | 261 | try { |
260 | addResolutionInfo(resolutionInfo); | 262 | addResolutionInfo(resolutionInfo); |
261 | } catch (DataModelException e) { | 263 | } catch (DataModelException e) { |
262 | throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, | 264 | throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, |
263 | - TYPE_DATA, ctx.string().getText(), EXIT, e.getMessage())); | 265 | + TYPE_DATA, ctx.string().getText(), ENTRY, e.getMessage())); |
264 | } | 266 | } |
265 | } | 267 | } |
266 | } | 268 | } | ... | ... |
... | @@ -26,7 +26,7 @@ import org.onosproject.yangutils.datamodel.YangNode; | ... | @@ -26,7 +26,7 @@ import org.onosproject.yangutils.datamodel.YangNode; |
26 | import org.onosproject.yangutils.datamodel.YangNodeIdentifier; | 26 | import org.onosproject.yangutils.datamodel.YangNodeIdentifier; |
27 | import org.onosproject.yangutils.datamodel.YangNotification; | 27 | import org.onosproject.yangutils.datamodel.YangNotification; |
28 | import org.onosproject.yangutils.datamodel.YangOutput; | 28 | import org.onosproject.yangutils.datamodel.YangOutput; |
29 | -import org.onosproject.yangutils.datamodel.YangResolutionInfo; | 29 | +import org.onosproject.yangutils.linker.impl.YangResolutionInfo; |
30 | import org.onosproject.yangutils.datamodel.YangSubModule; | 30 | import org.onosproject.yangutils.datamodel.YangSubModule; |
31 | import org.onosproject.yangutils.datamodel.YangUses; | 31 | import org.onosproject.yangutils.datamodel.YangUses; |
32 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 32 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ... | ... |
... | @@ -16,6 +16,8 @@ | ... | @@ -16,6 +16,8 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.plugin.manager; | 17 | package org.onosproject.yangutils.plugin.manager; |
18 | 18 | ||
19 | +import java.util.Objects; | ||
20 | +import org.onosproject.yangutils.linker.impl.ResolvableStatus; | ||
19 | import org.onosproject.yangutils.datamodel.YangNode; | 21 | import org.onosproject.yangutils.datamodel.YangNode; |
20 | 22 | ||
21 | /** | 23 | /** |
... | @@ -29,11 +31,21 @@ public class YangFileInfo { | ... | @@ -29,11 +31,21 @@ public class YangFileInfo { |
29 | private String yangFileName; | 31 | private String yangFileName; |
30 | 32 | ||
31 | /** | 33 | /** |
34 | + * YANG file revision. | ||
35 | + */ | ||
36 | + private String revision; | ||
37 | + | ||
38 | + /** | ||
32 | * Data model node after parsing YANG file. | 39 | * Data model node after parsing YANG file. |
33 | */ | 40 | */ |
34 | private YangNode rootNode; | 41 | private YangNode rootNode; |
35 | 42 | ||
36 | /** | 43 | /** |
44 | + * Resolution status of YANG file. | ||
45 | + */ | ||
46 | + private ResolvableStatus resolvableStatus; | ||
47 | + | ||
48 | + /** | ||
37 | * Returns data model node for YANG file. | 49 | * Returns data model node for YANG file. |
38 | * | 50 | * |
39 | * @return data model node for YANG file | 51 | * @return data model node for YANG file |
... | @@ -68,4 +80,58 @@ public class YangFileInfo { | ... | @@ -68,4 +80,58 @@ public class YangFileInfo { |
68 | public void setYangFileName(String yangFileName) { | 80 | public void setYangFileName(String yangFileName) { |
69 | this.yangFileName = yangFileName; | 81 | this.yangFileName = yangFileName; |
70 | } | 82 | } |
83 | + | ||
84 | + /** | ||
85 | + * Returns the revision of YANG file. | ||
86 | + * | ||
87 | + * @return revision of YANG file | ||
88 | + */ | ||
89 | + public String getRevision() { | ||
90 | + return revision; | ||
91 | + } | ||
92 | + | ||
93 | + /** | ||
94 | + * Sets the revision of YANG file. | ||
95 | + * | ||
96 | + * @param revision revision of YANG file | ||
97 | + */ | ||
98 | + public void setRevision(String revision) { | ||
99 | + this.revision = revision; | ||
100 | + } | ||
101 | + | ||
102 | + /** | ||
103 | + * Returns the resolution status of YANG file. | ||
104 | + * | ||
105 | + * @return resolution status of YANG file | ||
106 | + */ | ||
107 | + public ResolvableStatus getResolvableStatus() { | ||
108 | + return resolvableStatus; | ||
109 | + } | ||
110 | + | ||
111 | + /** | ||
112 | + * Sets the resolution status of YANG file. | ||
113 | + * | ||
114 | + * @param resolvableStatus resolution status of YANG file | ||
115 | + */ | ||
116 | + public void setResolvableStatus(ResolvableStatus resolvableStatus) { | ||
117 | + this.resolvableStatus = resolvableStatus; | ||
118 | + } | ||
119 | + | ||
120 | + @Override | ||
121 | + public boolean equals(Object obj) { | ||
122 | + | ||
123 | + if (this == obj) { | ||
124 | + return true; | ||
125 | + } | ||
126 | + if (obj instanceof YangFileInfo) { | ||
127 | + final YangFileInfo other = (YangFileInfo) obj; | ||
128 | + return Objects.equals(this.yangFileName, other.yangFileName); | ||
129 | + } | ||
130 | + return false; | ||
131 | + } | ||
132 | + | ||
133 | + @Override | ||
134 | + public int hashCode() { | ||
135 | + return Objects.hashCode(this.yangFileName); | ||
136 | + } | ||
71 | } | 137 | } | ... | ... |
This diff is collapsed. Click to expand it.
... | @@ -16,7 +16,6 @@ | ... | @@ -16,7 +16,6 @@ |
16 | package org.onosproject.yangutils.translator.tojava.javamodel; | 16 | package org.onosproject.yangutils.translator.tojava.javamodel; |
17 | 17 | ||
18 | import java.io.IOException; | 18 | import java.io.IOException; |
19 | - | ||
20 | import org.onosproject.yangutils.datamodel.YangBelongsTo; | 19 | import org.onosproject.yangutils.datamodel.YangBelongsTo; |
21 | import org.onosproject.yangutils.datamodel.YangModule; | 20 | import org.onosproject.yangutils.datamodel.YangModule; |
22 | import org.onosproject.yangutils.datamodel.YangSubModule; | 21 | import org.onosproject.yangutils.datamodel.YangSubModule; |
... | @@ -105,10 +104,10 @@ public class YangJavaSubModule | ... | @@ -105,10 +104,10 @@ public class YangJavaSubModule |
105 | * Returns the name space of the module to which the sub module belongs to. | 104 | * Returns the name space of the module to which the sub module belongs to. |
106 | * | 105 | * |
107 | * @param belongsToInfo Information of the module to which the sub module | 106 | * @param belongsToInfo Information of the module to which the sub module |
108 | - * belongs | 107 | + * belongs |
109 | * @return the name space string of the module. | 108 | * @return the name space string of the module. |
110 | */ | 109 | */ |
111 | - private String getNameSpaceFromModule(YangBelongsTo belongsToInfo) { | 110 | + public String getNameSpaceFromModule(YangBelongsTo belongsToInfo) { |
112 | return ((YangModule) belongsToInfo.getModuleNode()).getNameSpace().getUri(); | 111 | return ((YangModule) belongsToInfo.getModuleNode()).getNameSpace().getUri(); |
113 | } | 112 | } |
114 | 113 | ... | ... |
... | @@ -24,14 +24,17 @@ import org.onosproject.yangutils.datamodel.YangType; | ... | @@ -24,14 +24,17 @@ import org.onosproject.yangutils.datamodel.YangType; |
24 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 24 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
25 | import org.onosproject.yangutils.datamodel.YangUnion; | 25 | import org.onosproject.yangutils.datamodel.YangUnion; |
26 | import org.onosproject.yangutils.translator.exception.TranslatorException; | 26 | import org.onosproject.yangutils.translator.exception.TranslatorException; |
27 | -import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer; | ||
28 | import org.onosproject.yangutils.translator.tojava.JavaFileInfo; | 27 | import org.onosproject.yangutils.translator.tojava.JavaFileInfo; |
28 | +import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer; | ||
29 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumeration; | 29 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumeration; |
30 | +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule; | ||
31 | +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule; | ||
30 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDef; | 32 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDef; |
31 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUnion; | 33 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUnion; |
32 | 34 | ||
33 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase; | 35 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase; |
34 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; | 36 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; |
37 | +import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage; | ||
35 | import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER; | 38 | import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER; |
36 | import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE; | 39 | import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE; |
37 | import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER; | 40 | import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER; |
... | @@ -109,7 +112,7 @@ public final class AttributesJavaDataType { | ... | @@ -109,7 +112,7 @@ public final class AttributesJavaDataType { |
109 | * Returns from string method parsed string. | 112 | * Returns from string method parsed string. |
110 | * | 113 | * |
111 | * @param targetDataType target data type | 114 | * @param targetDataType target data type |
112 | - * @param yangType YANG type | 115 | + * @param yangType YANG type |
113 | * @return parsed string | 116 | * @return parsed string |
114 | */ | 117 | */ |
115 | public static String getParseFromStringMethod(String targetDataType, YangType<?> yangType) { | 118 | public static String getParseFromStringMethod(String targetDataType, YangType<?> yangType) { |
... | @@ -155,7 +158,7 @@ public final class AttributesJavaDataType { | ... | @@ -155,7 +158,7 @@ public final class AttributesJavaDataType { |
155 | /** | 158 | /** |
156 | * Returns java import class. | 159 | * Returns java import class. |
157 | * | 160 | * |
158 | - * @param yangType YANG type | 161 | + * @param yangType YANG type |
159 | * @param isListAttr if the attribute need to be a list | 162 | * @param isListAttr if the attribute need to be a list |
160 | * @return java import class | 163 | * @return java import class |
161 | */ | 164 | */ |
... | @@ -260,9 +263,9 @@ public final class AttributesJavaDataType { | ... | @@ -260,9 +263,9 @@ public final class AttributesJavaDataType { |
260 | /** | 263 | /** |
261 | * Returns java import package. | 264 | * Returns java import package. |
262 | * | 265 | * |
263 | - * @param yangType YANG type | 266 | + * @param yangType YANG type |
264 | * @param isListAttr if the attribute is of list type | 267 | * @param isListAttr if the attribute is of list type |
265 | - * @param classInfo java import class info | 268 | + * @param classInfo java import class info |
266 | * @return java import package | 269 | * @return java import package |
267 | */ | 270 | */ |
268 | public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr, String classInfo) { | 271 | public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr, String classInfo) { |
... | @@ -424,6 +427,20 @@ public final class AttributesJavaDataType { | ... | @@ -424,6 +427,20 @@ public final class AttributesJavaDataType { |
424 | throw new TranslatorException("invalid child node is being processed."); | 427 | throw new TranslatorException("invalid child node is being processed."); |
425 | } | 428 | } |
426 | JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo(); | 429 | JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo(); |
430 | + if (parentInfo.getPackage() == null) { | ||
431 | + if (parent instanceof YangJavaModule) { | ||
432 | + YangJavaModule module = (YangJavaModule) parent; | ||
433 | + String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module | ||
434 | + .getRevision().getRevDate()); | ||
435 | + return modulePkg + PERIOD + getCamelCase(module.getName(), null).toLowerCase(); | ||
436 | + } else if (parent instanceof YangJavaSubModule) { | ||
437 | + YangJavaSubModule submodule = (YangJavaSubModule) parent; | ||
438 | + String subModulePkg = getRootPackage(submodule.getVersion(), | ||
439 | + submodule.getNameSpaceFromModule(submodule.getBelongsTo()), | ||
440 | + submodule.getRevision().getRevDate()); | ||
441 | + return subModulePkg + PERIOD + getCamelCase(submodule.getName(), null).toLowerCase(); | ||
442 | + } | ||
443 | + } | ||
427 | return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase(); | 444 | return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase(); |
428 | } | 445 | } |
429 | } | 446 | } | ... | ... |
... | @@ -21,7 +21,6 @@ import java.io.IOException; | ... | @@ -21,7 +21,6 @@ import java.io.IOException; |
21 | import java.util.LinkedList; | 21 | import java.util.LinkedList; |
22 | import java.util.List; | 22 | import java.util.List; |
23 | import java.util.Stack; | 23 | import java.util.Stack; |
24 | -import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
25 | 24 | ||
26 | /** | 25 | /** |
27 | * Represents utility for searching the files in a directory. | 26 | * Represents utility for searching the files in a directory. |
... | @@ -43,8 +42,8 @@ public final class YangFileScanner { | ... | @@ -43,8 +42,8 @@ public final class YangFileScanner { |
43 | * @param root specified directory | 42 | * @param root specified directory |
44 | * @return list of java files | 43 | * @return list of java files |
45 | * @throws NullPointerException when no files are there. | 44 | * @throws NullPointerException when no files are there. |
46 | - * @throws IOException when files get deleted while performing the | 45 | + * @throws IOException when files get deleted while performing the |
47 | - * operations | 46 | + * operations |
48 | */ | 47 | */ |
49 | public static List<String> getJavaFiles(String root) throws IOException { | 48 | public static List<String> getJavaFiles(String root) throws IOException { |
50 | 49 | ||
... | @@ -52,33 +51,27 @@ public final class YangFileScanner { | ... | @@ -52,33 +51,27 @@ public final class YangFileScanner { |
52 | } | 51 | } |
53 | 52 | ||
54 | /** | 53 | /** |
55 | - * Returns the list of YANG file information. | 54 | + * Returns the list of YANG file. |
56 | * | 55 | * |
57 | * @param root specified directory | 56 | * @param root specified directory |
58 | * @return list of YANG file information | 57 | * @return list of YANG file information |
59 | * @throws NullPointerException when no files are there | 58 | * @throws NullPointerException when no files are there |
60 | - * @throws IOException when files get deleted while performing the | 59 | + * @throws IOException when files get deleted while performing the |
61 | - * operations | 60 | + * operations |
62 | */ | 61 | */ |
63 | - public static List<YangFileInfo> getYangFiles(String root) throws IOException { | 62 | + public static List<String> getYangFiles(String root) throws IOException { |
64 | List<String> yangFiles = getFiles(root, YANG_FILE_EXTENTION); | 63 | List<String> yangFiles = getFiles(root, YANG_FILE_EXTENTION); |
65 | - List<YangFileInfo> fileInfo = new LinkedList<>(); | 64 | + return yangFiles; |
66 | - for (String yangFile : yangFiles) { | ||
67 | - YangFileInfo yangFileInfo = new YangFileInfo(); | ||
68 | - yangFileInfo.setYangFileName(yangFile); | ||
69 | - fileInfo.add(yangFileInfo); | ||
70 | - } | ||
71 | - return fileInfo; | ||
72 | } | 65 | } |
73 | 66 | ||
74 | /** | 67 | /** |
75 | * Returns the list of required files. | 68 | * Returns the list of required files. |
76 | * | 69 | * |
77 | - * @param root specified directory | 70 | + * @param root specified directory |
78 | * @param extension file extension | 71 | * @param extension file extension |
79 | * @return list of required files | 72 | * @return list of required files |
80 | * @throws NullPointerException when no file is there | 73 | * @throws NullPointerException when no file is there |
81 | - * @throws IOException when files get deleted while performing the operations | 74 | + * @throws IOException when files get deleted while performing the operations |
82 | */ | 75 | */ |
83 | public static List<String> getFiles(String root, String extension) throws IOException { | 76 | public static List<String> getFiles(String root, String extension) throws IOException { |
84 | 77 | ... | ... |
... | @@ -23,18 +23,20 @@ import java.io.IOException; | ... | @@ -23,18 +23,20 @@ import java.io.IOException; |
23 | import java.nio.file.Files; | 23 | import java.nio.file.Files; |
24 | import java.nio.file.StandardCopyOption; | 24 | import java.nio.file.StandardCopyOption; |
25 | import java.util.ArrayList; | 25 | import java.util.ArrayList; |
26 | -import java.util.LinkedList; | ||
27 | import java.util.Iterator; | 26 | import java.util.Iterator; |
28 | import java.util.List; | 27 | import java.util.List; |
28 | +import java.util.LinkedList; | ||
29 | import java.util.Stack; | 29 | import java.util.Stack; |
30 | +import java.util.Set; | ||
30 | 31 | ||
31 | import org.apache.commons.io.FileUtils; | 32 | import org.apache.commons.io.FileUtils; |
32 | import org.apache.maven.model.Resource; | 33 | import org.apache.maven.model.Resource; |
33 | import org.apache.maven.project.MavenProject; | 34 | import org.apache.maven.project.MavenProject; |
35 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
36 | + | ||
34 | import org.slf4j.Logger; | 37 | import org.slf4j.Logger; |
35 | import org.sonatype.plexus.build.incremental.BuildContext; | 38 | import org.sonatype.plexus.build.incremental.BuildContext; |
36 | 39 | ||
37 | -import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
38 | import static org.onosproject.yangutils.utils.UtilConstants.COMMA; | 40 | import static org.onosproject.yangutils.utils.UtilConstants.COMMA; |
39 | import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING; | 41 | import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING; |
40 | import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE; | 42 | import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE; |
... | @@ -81,9 +83,9 @@ public final class YangIoUtils { | ... | @@ -81,9 +83,9 @@ public final class YangIoUtils { |
81 | /** | 83 | /** |
82 | * Adds package info file for the created directory. | 84 | * Adds package info file for the created directory. |
83 | * | 85 | * |
84 | - * @param path directory path | 86 | + * @param path directory path |
85 | - * @param classInfo class info for the package | 87 | + * @param classInfo class info for the package |
86 | - * @param pack package of the directory | 88 | + * @param pack package of the directory |
87 | * @param isChildNode is it a child node | 89 | * @param isChildNode is it a child node |
88 | * @throws IOException when fails to create package info file | 90 | * @throws IOException when fails to create package info file |
89 | */ | 91 | */ |
... | @@ -167,7 +169,7 @@ public final class YangIoUtils { | ... | @@ -167,7 +169,7 @@ public final class YangIoUtils { |
167 | /** | 169 | /** |
168 | * Adds generated source directory to the compilation root. | 170 | * Adds generated source directory to the compilation root. |
169 | * | 171 | * |
170 | - * @param source directory | 172 | + * @param source directory |
171 | * @param project current maven project | 173 | * @param project current maven project |
172 | * @param context current build context | 174 | * @param context current build context |
173 | */ | 175 | */ |
... | @@ -180,7 +182,7 @@ public final class YangIoUtils { | ... | @@ -180,7 +182,7 @@ public final class YangIoUtils { |
180 | /** | 182 | /** |
181 | * Removes extra char from the string. | 183 | * Removes extra char from the string. |
182 | * | 184 | * |
183 | - * @param valueString string to be trimmed | 185 | + * @param valueString string to be trimmed |
184 | * @param removealStirng extra chars | 186 | * @param removealStirng extra chars |
185 | * @return new string | 187 | * @return new string |
186 | */ | 188 | */ |
... | @@ -215,8 +217,8 @@ public final class YangIoUtils { | ... | @@ -215,8 +217,8 @@ public final class YangIoUtils { |
215 | * Returns the directory path of the package in canonical form. | 217 | * Returns the directory path of the package in canonical form. |
216 | * | 218 | * |
217 | * @param baseCodeGenPath base path where the generated files needs to be | 219 | * @param baseCodeGenPath base path where the generated files needs to be |
218 | - * put | 220 | + * put |
219 | - * @param pathOfJavaPkg java package of the file being generated | 221 | + * @param pathOfJavaPkg java package of the file being generated |
220 | * @return absolute path of the package in canonical form | 222 | * @return absolute path of the package in canonical form |
221 | */ | 223 | */ |
222 | public static String getDirectory(String baseCodeGenPath, String pathOfJavaPkg) { | 224 | public static String getDirectory(String baseCodeGenPath, String pathOfJavaPkg) { |
... | @@ -236,8 +238,8 @@ public final class YangIoUtils { | ... | @@ -236,8 +238,8 @@ public final class YangIoUtils { |
236 | * Returns the absolute path of the package in canonical form. | 238 | * Returns the absolute path of the package in canonical form. |
237 | * | 239 | * |
238 | * @param baseCodeGenPath base path where the generated files needs to be | 240 | * @param baseCodeGenPath base path where the generated files needs to be |
239 | - * put | 241 | + * put |
240 | - * @param pathOfJavaPkg java package of the file being generated | 242 | + * @param pathOfJavaPkg java package of the file being generated |
241 | * @return absolute path of the package in canonical form | 243 | * @return absolute path of the package in canonical form |
242 | */ | 244 | */ |
243 | public static String getAbsolutePackagePath(String baseCodeGenPath, String pathOfJavaPkg) { | 245 | public static String getAbsolutePackagePath(String baseCodeGenPath, String pathOfJavaPkg) { |
... | @@ -247,12 +249,12 @@ public final class YangIoUtils { | ... | @@ -247,12 +249,12 @@ public final class YangIoUtils { |
247 | /** | 249 | /** |
248 | * Copies YANG files to the current project's output directory. | 250 | * Copies YANG files to the current project's output directory. |
249 | * | 251 | * |
250 | - * @param yangFileInfo list of YANG files | 252 | + * @param yangFileInfo set of YANG files |
251 | - * @param outputDir project's output directory | 253 | + * @param outputDir project's output directory |
252 | - * @param project maven project | 254 | + * @param project maven project |
253 | * @throws IOException when fails to copy files to destination resource directory | 255 | * @throws IOException when fails to copy files to destination resource directory |
254 | */ | 256 | */ |
255 | - public static void copyYangFilesToTarget(List<YangFileInfo> yangFileInfo, String outputDir, MavenProject project) | 257 | + public static void copyYangFilesToTarget(Set<YangFileInfo> yangFileInfo, String outputDir, MavenProject project) |
256 | throws IOException { | 258 | throws IOException { |
257 | 259 | ||
258 | List<File> files = getListOfFile(yangFileInfo); | 260 | List<File> files = getListOfFile(yangFileInfo); |
... | @@ -274,10 +276,10 @@ public final class YangIoUtils { | ... | @@ -274,10 +276,10 @@ public final class YangIoUtils { |
274 | /** | 276 | /** |
275 | * Provides a list of files from list of strings. | 277 | * Provides a list of files from list of strings. |
276 | * | 278 | * |
277 | - * @param yangFileInfo list of yang file information | 279 | + * @param yangFileInfo set of yang file information |
278 | * @return list of files | 280 | * @return list of files |
279 | */ | 281 | */ |
280 | - private static List<File> getListOfFile(List<YangFileInfo> yangFileInfo) { | 282 | + private static List<File> getListOfFile(Set<YangFileInfo> yangFileInfo) { |
281 | List<File> files = new ArrayList<>(); | 283 | List<File> files = new ArrayList<>(); |
282 | Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); | 284 | Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); |
283 | while (yangFileIterator.hasNext()) { | 285 | while (yangFileIterator.hasNext()) { |
... | @@ -291,7 +293,7 @@ public final class YangIoUtils { | ... | @@ -291,7 +293,7 @@ public final class YangIoUtils { |
291 | * Merges the temp java files to main java files. | 293 | * Merges the temp java files to main java files. |
292 | * | 294 | * |
293 | * @param appendFile temp file | 295 | * @param appendFile temp file |
294 | - * @param srcFile main file | 296 | + * @param srcFile main file |
295 | * @throws IOException when fails to append contents | 297 | * @throws IOException when fails to append contents |
296 | */ | 298 | */ |
297 | public static void mergeJavaFiles(File appendFile, File srcFile) throws IOException { | 299 | public static void mergeJavaFiles(File appendFile, File srcFile) throws IOException { | ... | ... |
This diff is collapsed. Click to expand it.
... | @@ -32,12 +32,13 @@ import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ... | @@ -32,12 +32,13 @@ import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
32 | import static org.hamcrest.CoreMatchers.nullValue; | 32 | import static org.hamcrest.CoreMatchers.nullValue; |
33 | import static org.hamcrest.MatcherAssert.assertThat; | 33 | import static org.hamcrest.MatcherAssert.assertThat; |
34 | import static org.hamcrest.core.Is.is; | 34 | import static org.hamcrest.core.Is.is; |
35 | -import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED; | 35 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY; |
36 | -import static org.onosproject.yangutils.datamodel.ResolvableStatus.RESOLVED; | ||
37 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 36 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
38 | import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; | 37 | import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; |
39 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | 38 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; |
40 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; | 39 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; |
40 | +import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
41 | +import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | ||
41 | 42 | ||
42 | /** | 43 | /** |
43 | * Test cases for testing "type" intra file linking. | 44 | * Test cases for testing "type" intra file linking. |
... | @@ -516,4 +517,48 @@ public class IntraFileTypeLinkingTest { | ... | @@ -516,4 +517,48 @@ public class IntraFileTypeLinkingTest { |
516 | YangNode node = | 517 | YangNode node = |
517 | manager.getDataModel("src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang"); | 518 | manager.getDataModel("src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang"); |
518 | } | 519 | } |
520 | + | ||
521 | + /** | ||
522 | + * Checks self resolution when typedef and leaf using type are siblings for binary type. | ||
523 | + */ | ||
524 | + @Test | ||
525 | + public void processSelfResolutionWhenTypeAndTypedefAtRootLevelForBinary() | ||
526 | + throws IOException, ParserException { | ||
527 | + | ||
528 | + YangNode node | ||
529 | + = manager.getDataModel("src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang"); | ||
530 | + | ||
531 | + // Check whether the data model tree returned is of type module. | ||
532 | + assertThat(node instanceof YangModule, is(true)); | ||
533 | + | ||
534 | + // Check whether the node type is set properly to module. | ||
535 | + assertThat(node.getNodeType(), is(MODULE_NODE)); | ||
536 | + | ||
537 | + // Check whether the module name is set correctly. | ||
538 | + YangModule yangNode = (YangModule) node; | ||
539 | + assertThat(yangNode.getName(), is("ospf")); | ||
540 | + | ||
541 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
542 | + YangLeaf leafInfo = leafIterator.next(); | ||
543 | + | ||
544 | + assertThat(leafInfo.getName(), is("typedef14")); | ||
545 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("type14")); | ||
546 | + assertThat(leafInfo.getDataType().getDataType(), is(DERIVED)); | ||
547 | + | ||
548 | + assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(), | ||
549 | + is((YangTypeDef) node.getChild())); | ||
550 | + | ||
551 | + assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED)); | ||
552 | + | ||
553 | + YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
554 | + | ||
555 | + // Check for the effective built-in type. | ||
556 | + assertThat(derivedInfo.getEffectiveBuiltInType(), is(BINARY)); | ||
557 | + | ||
558 | + // Check for the restriction. | ||
559 | + assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue())); | ||
560 | + assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue())); | ||
561 | + assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | ||
562 | + assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | ||
563 | + } | ||
519 | } | 564 | } | ... | ... |
... | @@ -21,7 +21,6 @@ import java.util.ListIterator; | ... | @@ -21,7 +21,6 @@ import java.util.ListIterator; |
21 | import org.junit.Rule; | 21 | import org.junit.Rule; |
22 | import org.junit.Test; | 22 | import org.junit.Test; |
23 | import org.junit.rules.ExpectedException; | 23 | import org.junit.rules.ExpectedException; |
24 | -import org.onosproject.yangutils.datamodel.ResolvableStatus; | ||
25 | import org.onosproject.yangutils.datamodel.YangContainer; | 24 | import org.onosproject.yangutils.datamodel.YangContainer; |
26 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 25 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
27 | import org.onosproject.yangutils.datamodel.YangGrouping; | 26 | import org.onosproject.yangutils.datamodel.YangGrouping; |
... | @@ -32,6 +31,8 @@ import org.onosproject.yangutils.datamodel.YangNode; | ... | @@ -32,6 +31,8 @@ import org.onosproject.yangutils.datamodel.YangNode; |
32 | import org.onosproject.yangutils.datamodel.YangNodeType; | 31 | import org.onosproject.yangutils.datamodel.YangNodeType; |
33 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 32 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
34 | import org.onosproject.yangutils.datamodel.YangUses; | 33 | import org.onosproject.yangutils.datamodel.YangUses; |
34 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
35 | +import org.onosproject.yangutils.linker.impl.ResolvableStatus; | ||
35 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 36 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
36 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 37 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
37 | 38 | ||
... | @@ -293,9 +294,9 @@ public class IntraFileUsesLinkingTest { | ... | @@ -293,9 +294,9 @@ public class IntraFileUsesLinkingTest { |
293 | */ | 294 | */ |
294 | @Test | 295 | @Test |
295 | public void processSelfResolutionGroupingReferencingItselfFailureScenerio() | 296 | public void processSelfResolutionGroupingReferencingItselfFailureScenerio() |
296 | - throws IOException, ParserException { | 297 | + throws IOException { |
297 | 298 | ||
298 | - thrown.expect(ParserException.class); | 299 | + thrown.expect(LinkerException.class); |
299 | thrown.expectMessage( | 300 | thrown.expectMessage( |
300 | "YANG file error: Duplicate input identifier detected, same as leaf \"zip-code\""); | 301 | "YANG file error: Duplicate input identifier detected, same as leaf \"zip-code\""); |
301 | YangNode node = manager | 302 | YangNode node = manager | ... | ... |
... | @@ -30,6 +30,7 @@ import org.onosproject.yangutils.datamodel.YangRangeRestriction; | ... | @@ -30,6 +30,7 @@ import org.onosproject.yangutils.datamodel.YangRangeRestriction; |
30 | import org.onosproject.yangutils.datamodel.YangStringRestriction; | 30 | import org.onosproject.yangutils.datamodel.YangStringRestriction; |
31 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 31 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
32 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 32 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
33 | +import org.onosproject.yangutils.linker.exceptions.LinkerException; | ||
33 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 34 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
34 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 35 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
35 | import org.onosproject.yangutils.utils.builtindatatype.YangInt32; | 36 | import org.onosproject.yangutils.utils.builtindatatype.YangInt32; |
... | @@ -39,11 +40,11 @@ import static org.hamcrest.CoreMatchers.nullValue; | ... | @@ -39,11 +40,11 @@ import static org.hamcrest.CoreMatchers.nullValue; |
39 | import static org.hamcrest.MatcherAssert.assertThat; | 40 | import static org.hamcrest.MatcherAssert.assertThat; |
40 | import static org.hamcrest.core.Is.is; | 41 | import static org.hamcrest.core.Is.is; |
41 | import static org.hamcrest.core.IsNull.notNullValue; | 42 | import static org.hamcrest.core.IsNull.notNullValue; |
42 | -import static org.onosproject.yangutils.datamodel.ResolvableStatus.RESOLVED; | ||
43 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 43 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
44 | import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; | 44 | import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; |
45 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | 45 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; |
46 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; | 46 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; |
47 | +import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | ||
47 | 48 | ||
48 | /** | 49 | /** |
49 | * Test cases for testing restriction resolution. | 50 | * Test cases for testing restriction resolution. |
... | @@ -225,9 +226,9 @@ public final class RestrictionResolutionTest { | ... | @@ -225,9 +226,9 @@ public final class RestrictionResolutionTest { |
225 | /** | 226 | /** |
226 | * Checks length restriction in typedef and in type with not stricter value. | 227 | * Checks length restriction in typedef and in type with not stricter value. |
227 | */ | 228 | */ |
228 | - @Test(expected = ParserException.class) | 229 | + @Test(expected = LinkerException.class) |
229 | public void processLengthRestrictionInTypedefAndTypeInValid() | 230 | public void processLengthRestrictionInTypedefAndTypeInValid() |
230 | - throws IOException, ParserException, DataModelException { | 231 | + throws IOException, DataModelException { |
231 | YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang"); | 232 | YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang"); |
232 | } | 233 | } |
233 | 234 | ||
... | @@ -429,9 +430,9 @@ public final class RestrictionResolutionTest { | ... | @@ -429,9 +430,9 @@ public final class RestrictionResolutionTest { |
429 | /** | 430 | /** |
430 | * Checks range restriction for string in referred type. | 431 | * Checks range restriction for string in referred type. |
431 | */ | 432 | */ |
432 | - @Test(expected = ParserException.class) | 433 | + @Test(expected = LinkerException.class) |
433 | public void processRangeRestrictionInStringInRefType() | 434 | public void processRangeRestrictionInStringInRefType() |
434 | - throws IOException, ParserException, DataModelException { | 435 | + throws IOException, DataModelException { |
435 | YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInStringInRefType.yang"); | 436 | YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInStringInRefType.yang"); |
436 | } | 437 | } |
437 | 438 | ||
... | @@ -826,9 +827,9 @@ public final class RestrictionResolutionTest { | ... | @@ -826,9 +827,9 @@ public final class RestrictionResolutionTest { |
826 | * Checks multiple pattern and length restriction in referred type and | 827 | * Checks multiple pattern and length restriction in referred type and |
827 | * typedef invalid scenario. | 828 | * typedef invalid scenario. |
828 | */ | 829 | */ |
829 | - @Test(expected = ParserException.class) | 830 | + @Test(expected = LinkerException.class) |
830 | public void processMultiplePatternAndLengthRestrictionInValid() | 831 | public void processMultiplePatternAndLengthRestrictionInValid() |
831 | - throws IOException, ParserException, DataModelException { | 832 | + throws IOException, DataModelException { |
832 | YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang"); | 833 | YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang"); |
833 | } | 834 | } |
834 | } | 835 | } | ... | ... |
... | @@ -144,7 +144,7 @@ public class LengthRestrictionListenerTest { | ... | @@ -144,7 +144,7 @@ public class LengthRestrictionListenerTest { |
144 | public void processLengthWithInvalidType() throws IOException, ParserException { | 144 | public void processLengthWithInvalidType() throws IOException, ParserException { |
145 | thrown.expect(ParserException.class); | 145 | thrown.expect(ParserException.class); |
146 | thrown.expectMessage("YANG file error : length name \"1..100\" can be used to restrict the built-in type" + | 146 | thrown.expectMessage("YANG file error : length name \"1..100\" can be used to restrict the built-in type" + |
147 | - " string or types derived from string."); | 147 | + " string/binary or types derived from string/binary."); |
148 | YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidType.yang"); | 148 | YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidType.yang"); |
149 | } | 149 | } |
150 | 150 | ... | ... |
... | @@ -26,7 +26,6 @@ import java.util.List; | ... | @@ -26,7 +26,6 @@ import java.util.List; |
26 | import org.junit.Rule; | 26 | import org.junit.Rule; |
27 | import org.junit.Test; | 27 | import org.junit.Test; |
28 | import org.junit.rules.ExpectedException; | 28 | import org.junit.rules.ExpectedException; |
29 | -import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
30 | 29 | ||
31 | import static org.hamcrest.core.Is.is; | 30 | import static org.hamcrest.core.Is.is; |
32 | import static org.hamcrest.core.IsNot.not; | 31 | import static org.hamcrest.core.IsNot.not; |
... | @@ -49,11 +48,11 @@ public final class YangFileScannerTest { | ... | @@ -49,11 +48,11 @@ public final class YangFileScannerTest { |
49 | /** | 48 | /** |
50 | * A private constructor is tested. | 49 | * A private constructor is tested. |
51 | * | 50 | * |
52 | - * @throws SecurityException if any security violation is observed | 51 | + * @throws SecurityException if any security violation is observed |
53 | - * @throws NoSuchMethodException if when the method is not found | 52 | + * @throws NoSuchMethodException if when the method is not found |
54 | - * @throws IllegalArgumentException if there is illegal argument found | 53 | + * @throws IllegalArgumentException if there is illegal argument found |
55 | - * @throws InstantiationException if instantiation is provoked for the private constructor | 54 | + * @throws InstantiationException if instantiation is provoked for the private constructor |
56 | - * @throws IllegalAccessException if instance is provoked or a method is provoked | 55 | + * @throws IllegalAccessException if instance is provoked or a method is provoked |
57 | * @throws InvocationTargetException when an exception occurs by the method or constructor | 56 | * @throws InvocationTargetException when an exception occurs by the method or constructor |
58 | */ | 57 | */ |
59 | @Test | 58 | @Test |
... | @@ -101,7 +100,7 @@ public final class YangFileScannerTest { | ... | @@ -101,7 +100,7 @@ public final class YangFileScannerTest { |
101 | /** | 100 | /** |
102 | * Method used for creating file inside the specified directory. | 101 | * Method used for creating file inside the specified directory. |
103 | * | 102 | * |
104 | - * @param myDir the path where file has to be created inside | 103 | + * @param myDir the path where file has to be created inside |
105 | * @param fileName the name of the file to be created | 104 | * @param fileName the name of the file to be created |
106 | */ | 105 | */ |
107 | private void createFile(File myDir, String fileName) throws IOException { | 106 | private void createFile(File myDir, String fileName) throws IOException { |
... | @@ -136,7 +135,7 @@ public final class YangFileScannerTest { | ... | @@ -136,7 +135,7 @@ public final class YangFileScannerTest { |
136 | 135 | ||
137 | String emptyYangDir = baseDir + separator + "scanner1"; | 136 | String emptyYangDir = baseDir + separator + "scanner1"; |
138 | File path = createDirectory(emptyYangDir); | 137 | File path = createDirectory(emptyYangDir); |
139 | - List<YangFileInfo> emptyDirContents = getYangFiles(path.toString()); | 138 | + List<String> emptyDirContents = getYangFiles(path.toString()); |
140 | List<String> expectedContents = new LinkedList<>(); | 139 | List<String> expectedContents = new LinkedList<>(); |
141 | assertThat(true, is(emptyDirContents.equals(expectedContents))); | 140 | assertThat(true, is(emptyDirContents.equals(expectedContents))); |
142 | } | 141 | } | ... | ... |
... | @@ -6,13 +6,13 @@ module Test { | ... | @@ -6,13 +6,13 @@ module Test { |
6 | list valid { | 6 | list valid { |
7 | key "invalid-interval"; | 7 | key "invalid-interval"; |
8 | leaf invalid-interval { | 8 | leaf invalid-interval { |
9 | - type hello; | 9 | + type Ant:hello; |
10 | } | 10 | } |
11 | } | 11 | } |
12 | } | 12 | } |
13 | container isis { | 13 | container isis { |
14 | typedef hello { | 14 | typedef hello { |
15 | - type String; | 15 | + type string; |
16 | } | 16 | } |
17 | } | 17 | } |
18 | } | 18 | } | ... | ... |
... | @@ -3,7 +3,7 @@ module Test { | ... | @@ -3,7 +3,7 @@ module Test { |
3 | namespace http://huawei.com; | 3 | namespace http://huawei.com; |
4 | prefix Ant; | 4 | prefix Ant; |
5 | typedef Percentage { | 5 | typedef Percentage { |
6 | - type INT; | 6 | + type Ant:INT; |
7 | } | 7 | } |
8 | container ospf { | 8 | container ospf { |
9 | list valid { | 9 | list valid { | ... | ... |
... | @@ -2,9 +2,9 @@ module Test { | ... | @@ -2,9 +2,9 @@ module Test { |
2 | yang-version 1; | 2 | yang-version 1; |
3 | namespace http://huawei.com; | 3 | namespace http://huawei.com; |
4 | prefix Ant; | 4 | prefix Ant; |
5 | - container test{ | 5 | + container test { |
6 | - leaf leaf2{ | 6 | + leaf leaf2 { |
7 | - type String; | 7 | + type string; |
8 | } | 8 | } |
9 | grouping treat { | 9 | grouping treat { |
10 | grouping create { | 10 | grouping create { |
... | @@ -13,5 +13,5 @@ module Test { | ... | @@ -13,5 +13,5 @@ module Test { |
13 | } | 13 | } |
14 | } | 14 | } |
15 | } | 15 | } |
16 | - uses treat; | 16 | + uses Ant:treat; |
17 | } | 17 | } | ... | ... |
utils/yangutils/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang
0 → 100644
1 | +module ospf { | ||
2 | + namespace "urn:cisco:params:xml:ns:yang:ospf"; | ||
3 | + // replace with IANA namespace when assigned | ||
4 | + prefix ospf; | ||
5 | + revision 2020-10-20 { | ||
6 | + description | ||
7 | + "Initial revision."; | ||
8 | + } | ||
9 | + | ||
10 | + typedef type14 { | ||
11 | + type binary; | ||
12 | + } | ||
13 | + | ||
14 | + leaf typedef14 { | ||
15 | + type type14; | ||
16 | + } | ||
17 | +} |
... | @@ -3,9 +3,9 @@ module Test { | ... | @@ -3,9 +3,9 @@ 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 Ant:hello; |
7 | } | 7 | } |
8 | typedef hi { | 8 | typedef hi { |
9 | - type String; | 9 | + type string; |
10 | } | 10 | } |
11 | } | 11 | } | ... | ... |
1 | + module ietf-network-topology { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology"; | ||
4 | + prefix nt; | ||
5 | + | ||
6 | + import ietf-inet-types { | ||
7 | + prefix inet; | ||
8 | + } | ||
9 | + import ietf-network { | ||
10 | + prefix nd; | ||
11 | + } | ||
12 | + leaf source-node { | ||
13 | + type nd:node-id; | ||
14 | + description | ||
15 | + "Source node identifier, must be in same topology."; | ||
16 | + } | ||
17 | + } |
1 | + module ietf-network { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
4 | + prefix nd; | ||
5 | + | ||
6 | + import ietf-inet-types { | ||
7 | + prefix inet; | ||
8 | + } | ||
9 | + leaf node-ref { | ||
10 | + type node-id; | ||
11 | + description | ||
12 | + "Used to reference a node. | ||
13 | + Nodes are identified relative to the network they are | ||
14 | + contained in."; | ||
15 | + } | ||
16 | + | ||
17 | + typedef node-id { | ||
18 | + type inet:uri; | ||
19 | + description | ||
20 | + "Identifier for a node."; | ||
21 | + } | ||
22 | + } |
-
Please register or login to post a comment