[ONOS-4670] Removal of Data Model dependencies on Linker
Change-Id: I3f9c5af30198ea31d743e06cea1764dcb306ec32
diff --git a/src/main/java/org/onosproject/yangutils/linker/impl/YangEntityToResolveInfo.java b/src/main/java/org/onosproject/yangutils/linker/impl/YangEntityToResolveInfoImpl.java
similarity index 77%
rename from src/main/java/org/onosproject/yangutils/linker/impl/YangEntityToResolveInfo.java
rename to src/main/java/org/onosproject/yangutils/linker/impl/YangEntityToResolveInfoImpl.java
index f239692..b8f63eb 100644
--- a/src/main/java/org/onosproject/yangutils/linker/impl/YangEntityToResolveInfo.java
+++ b/src/main/java/org/onosproject/yangutils/linker/impl/YangEntityToResolveInfoImpl.java
@@ -15,17 +15,18 @@
*/
package org.onosproject.yangutils.linker.impl;
+import org.onosproject.yangutils.datamodel.YangEntityToResolveInfo;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.datamodel.YangUses;
import org.onosproject.yangutils.linker.exceptions.LinkerException;
/**
- * Represents information about entity being resolved.
+ * Represents implementation of information about entity being resolved.
*
* @param <T> type of entity being resolved, uses / grouping
*/
-public class YangEntityToResolveInfo<T> {
+public class YangEntityToResolveInfoImpl<T> implements YangEntityToResolveInfo<T> {
// Parsable node for which resolution is to be performed.
private T entityToResolve;
@@ -33,39 +34,22 @@
// Holder of the YANG construct for which resolution has to be carried out.
private YangNode holderOfEntityToResolve;
- /**
- * Retrieves the entity to be resolved.
- *
- * @return entity to be resolved
- */
+ @Override
public T getEntityToResolve() {
return entityToResolve;
}
- /**
- * Sets entity to be resolved.
- *
- * @param entityToResolve entity to be resolved
- */
+ @Override
public void setEntityToResolve(T entityToResolve) {
this.entityToResolve = entityToResolve;
}
- /**
- * Retrieves the parent node which contains the entity to be resolved.
- *
- * @return parent node which contains the entity to be resolved
- */
+ @Override
public YangNode getHolderOfEntityToResolve() {
return holderOfEntityToResolve;
}
- /**
- * Sets parent node which contains the entity to be resolved.
- *
- * @param holderOfEntityToResolve parent node which contains the entity to
- * be resolved
- */
+ @Override
public void setHolderOfEntityToResolve(YangNode holderOfEntityToResolve) {
this.holderOfEntityToResolve = holderOfEntityToResolve;
}
diff --git a/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java b/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
index deaebb2..4e8a60a 100644
--- a/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
+++ b/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
@@ -16,14 +16,14 @@
package org.onosproject.yangutils.linker.impl;
+import java.util.HashSet;
import java.util.Set;
-
+import org.onosproject.yangutils.datamodel.ResolvableType;
import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangReferenceResolver;
import org.onosproject.yangutils.datamodel.YangSubModule;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.linker.ResolvableType;
import org.onosproject.yangutils.linker.YangLinker;
-import org.onosproject.yangutils.linker.YangReferenceResolver;
import org.onosproject.yangutils.linker.exceptions.LinkerException;
import org.onosproject.yangutils.plugin.manager.YangFileInfo;
@@ -34,9 +34,39 @@
*/
public class YangLinkerManager
implements YangLinker {
+
+ /*
+ * Set of all the YANG nodes, corresponding to the YANG files parsed by
+ * parser.
+ */
+ Set<YangNode> yangNodeSet = new HashSet<>();
+
+ /**
+ * Returns set of YANG node.
+ *
+ * @return set of YANG node
+ */
+ public Set<YangNode> getYangNodeSet() {
+ return yangNodeSet;
+ }
+
+ /**
+ * Creates YANG nodes set.
+ *
+ * @param yangFileInfoSet YANG file information set
+ */
+ public void createYangNodeSet(Set<YangFileInfo> yangFileInfoSet) {
+ for (YangFileInfo yangFileInfo : yangFileInfoSet) {
+ getYangNodeSet().add(yangFileInfo.getRootNode());
+ }
+ }
+
@Override
public void resolveDependencies(Set<YangFileInfo> yangFileInfoSet) {
+ // Create YANG node set.
+ createYangNodeSet(yangFileInfoSet);
+
// Carry out linking of sub module with module.
linkSubModulesToParentModule(yangFileInfoSet);
@@ -64,7 +94,7 @@
YangNode yangNode = yangFileInfo.getRootNode();
if (yangNode instanceof YangSubModule) {
try {
- ((YangSubModule) yangNode).linkWithModule(yangFileInfoSet);
+ ((YangSubModule) yangNode).linkWithModule(getYangNodeSet());
} catch (DataModelException e) {
String errorInfo = "YANG file error: " + yangFileInfo.getYangFileName() + " at line: "
+ e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
@@ -85,7 +115,14 @@
for (YangFileInfo yangFileInfo : yangFileInfoSet) {
YangNode yangNode = yangFileInfo.getRootNode();
if (yangNode instanceof YangReferenceResolver) {
- ((YangReferenceResolver) yangNode).addReferencesToImportList(yangFileInfoSet);
+ try {
+ ((YangReferenceResolver) yangNode).addReferencesToImportList(getYangNodeSet());
+ } catch (DataModelException e) {
+ String errorInfo = "Error in file: " + yangFileInfo.getYangFileName() + " at line: "
+ + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+ + e.getMessage();
+ throw new LinkerException(errorInfo);
+ }
}
}
}
@@ -100,7 +137,14 @@
for (YangFileInfo yangFileInfo : yangFileInfoSet) {
YangNode yangNode = yangFileInfo.getRootNode();
if (yangNode instanceof YangReferenceResolver) {
- ((YangReferenceResolver) yangNode).addReferencesToIncludeList(yangFileInfoSet);
+ try {
+ ((YangReferenceResolver) yangNode).addReferencesToIncludeList(getYangNodeSet());
+ } catch (DataModelException e) {
+ String errorInfo = "Error in file: " + yangFileInfo.getYangFileName() + " at line: "
+ + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+ + e.getMessage();
+ throw new LinkerException(errorInfo);
+ }
}
}
}
diff --git a/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfo.java b/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
similarity index 94%
rename from src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfo.java
rename to src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
index 83b11c4..0d43293 100644
--- a/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfo.java
+++ b/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
@@ -17,14 +17,14 @@
package org.onosproject.yangutils.linker.impl;
import java.util.Stack;
-
-import org.onosproject.yangutils.datamodel.LocationInfo;
import org.onosproject.yangutils.datamodel.YangDataTypes;
import org.onosproject.yangutils.datamodel.YangDerivedInfo;
import org.onosproject.yangutils.datamodel.YangGrouping;
import org.onosproject.yangutils.datamodel.YangImport;
import org.onosproject.yangutils.datamodel.YangInclude;
import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangReferenceResolver;
+import org.onosproject.yangutils.datamodel.YangResolutionInfo;
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.datamodel.YangTypeDef;
import org.onosproject.yangutils.datamodel.YangUses;
@@ -32,7 +32,6 @@
import org.onosproject.yangutils.linker.Resolvable;
import org.onosproject.yangutils.linker.ResolvableStatus;
import org.onosproject.yangutils.linker.YangLinkingPhase;
-import org.onosproject.yangutils.linker.YangReferenceResolver;
import static org.onosproject.yangutils.linker.ResolvableStatus.INTER_FILE_LINKED;
import static org.onosproject.yangutils.linker.ResolvableStatus.INTRA_FILE_RESOLVED;
@@ -41,21 +40,22 @@
import static org.onosproject.yangutils.linker.ResolvableStatus.UNRESOLVED;
import static org.onosproject.yangutils.linker.YangLinkingPhase.INTER_FILE;
import static org.onosproject.yangutils.linker.YangLinkingPhase.INTRA_FILE;
-import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_LINKER_ERROR;
import static org.onosproject.yangutils.utils.UtilConstants.GROUPING_LINKER_ERROR;
+import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_LINKER_ERROR;
/**
- * Represents resolution object which will be resolved by linker.
+ * Represents implementation of resolution object which will be resolved by
+ * linker.
*
* @param <T> type of resolution entity uses / type
*/
-public class YangResolutionInfo<T>
- implements LocationInfo {
+public class YangResolutionInfoImpl<T>
+ implements YangResolutionInfo<T> {
/**
* Information about the entity that needs to be resolved.
*/
- private YangEntityToResolveInfo<T> entityToResolveInfo;
+ private YangEntityToResolveInfoImpl<T> entityToResolveInfo;
/**
* Error line number.
@@ -77,14 +77,14 @@
* Stack for type/uses is maintained for hierarchical references, this is
* used during resolution.
*/
- private Stack<YangEntityToResolveInfo<T>> partialResolvedStack;
+ private Stack<YangEntityToResolveInfoImpl<T>> partialResolvedStack;
/**
* It is private to ensure the overloaded method be invoked to create an
* object.
*/
@SuppressWarnings("unused")
- private YangResolutionInfo() {
+ private YangResolutionInfoImpl() {
}
@@ -96,8 +96,8 @@
* @param lineNumber error line number
* @param charPositionInLine error character position in line
*/
- public YangResolutionInfo(T dataNode, YangNode holderNode, int lineNumber, int charPositionInLine) {
- setEntityToResolveInfo(new YangEntityToResolveInfo<>());
+ public YangResolutionInfoImpl(T dataNode, YangNode holderNode, int lineNumber, int charPositionInLine) {
+ setEntityToResolveInfo(new YangEntityToResolveInfoImpl<>());
getEntityToResolveInfo().setEntityToResolve(dataNode);
getEntityToResolveInfo().setHolderOfEntityToResolve(holderNode);
this.setLineNumber(lineNumber);
@@ -105,13 +105,7 @@
setPartialResolvedStack(new Stack<>());
}
- /**
- * Resolves linking with all the ancestors node for a resolution info.
- *
- * @param dataModelRootNode module/sub-module node
- * @throws DataModelException DataModelException a violation of data model
- * rules
- */
+ @Override
public void resolveLinkingForResolutionInfo(YangReferenceResolver dataModelRootNode)
throws DataModelException {
@@ -431,11 +425,12 @@
if (((YangTypeDef) referredNode).getTypeDefBaseType().getDataType()
== YangDataTypes.DERIVED) {
- YangEntityToResolveInfo<YangType<?>> unResolvedEntityInfo = new YangEntityToResolveInfo<>();
+ YangEntityToResolveInfoImpl<YangType<?>> unResolvedEntityInfo
+ = new YangEntityToResolveInfoImpl<>();
unResolvedEntityInfo.setEntityToResolve(((YangTypeDef) referredNode)
.getTypeDefBaseType());
unResolvedEntityInfo.setHolderOfEntityToResolve(referredNode);
- addInPartialResolvedStack((YangEntityToResolveInfo<T>) unResolvedEntityInfo);
+ addInPartialResolvedStack((YangEntityToResolveInfoImpl<T>) unResolvedEntityInfo);
}
} else if (getCurrentEntityToResolveFromStack() instanceof YangUses) {
@@ -462,10 +457,10 @@
YangNode curNode = node.getChild();
while (curNode != null) {
if (curNode instanceof YangUses) {
- YangEntityToResolveInfo<YangUses> unResolvedEntityInfo = new YangEntityToResolveInfo<>();
+ YangEntityToResolveInfoImpl<YangUses> unResolvedEntityInfo = new YangEntityToResolveInfoImpl<>();
unResolvedEntityInfo.setEntityToResolve((YangUses) curNode);
unResolvedEntityInfo.setHolderOfEntityToResolve(node);
- addInPartialResolvedStack((YangEntityToResolveInfo<T>) unResolvedEntityInfo);
+ addInPartialResolvedStack((YangEntityToResolveInfoImpl<T>) unResolvedEntityInfo);
}
curNode = curNode.getNextSibling();
@@ -478,7 +473,7 @@
*
* @return partial resolved YANG construct stack
*/
- private Stack<YangEntityToResolveInfo<T>> getPartialResolvedStack() {
+ private Stack<YangEntityToResolveInfoImpl<T>> getPartialResolvedStack() {
return partialResolvedStack;
}
@@ -487,7 +482,7 @@
*
* @param partialResolvedStack partial resolved YANG construct stack
*/
- private void setPartialResolvedStack(Stack<YangEntityToResolveInfo<T>> partialResolvedStack) {
+ private void setPartialResolvedStack(Stack<YangEntityToResolveInfoImpl<T>> partialResolvedStack) {
this.partialResolvedStack = partialResolvedStack;
}
@@ -496,7 +491,7 @@
*
* @param partialResolvedInfo partial resolved YANG construct stack
*/
- private void addInPartialResolvedStack(YangEntityToResolveInfo<T> partialResolvedInfo) {
+ private void addInPartialResolvedStack(YangEntityToResolveInfoImpl<T> partialResolvedInfo) {
getPartialResolvedStack().push(partialResolvedInfo);
}
@@ -510,12 +505,8 @@
return getPartialResolvedStack().peek().getEntityToResolve();
}
- /**
- * Retrieves information about the entity that needs to be resolved.
- *
- * @return information about the entity that needs to be resolved
- */
- public YangEntityToResolveInfo<T> getEntityToResolveInfo() {
+ @Override
+ public YangEntityToResolveInfoImpl<T> getEntityToResolveInfo() {
return entityToResolveInfo;
}
@@ -525,7 +516,7 @@
* @param entityToResolveInfo information about the entity that needs to be
* resolved
*/
- private void setEntityToResolveInfo(YangEntityToResolveInfo<T> entityToResolveInfo) {
+ private void setEntityToResolveInfo(YangEntityToResolveInfoImpl<T> entityToResolveInfo) {
this.entityToResolveInfo = entityToResolveInfo;
}
@@ -569,13 +560,7 @@
this.curReferenceResolver = curReferenceResolver;
}
- /**
- * Performs inter file linking of uses/type referring to typedef/grouping
- * of other YANG file.
- *
- * @param dataModelRootNode module/sub-module node
- * @throws DataModelException a violation in data model rule
- */
+ @Override
public void linkInterFile(YangReferenceResolver dataModelRootNode)
throws DataModelException {