Fix issue resulting in duplicate module in YANG gui.
Change-Id: I9d91c648706ef127a2674a27c6a83812aca293da
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
index 5b21e83..b8eaf6e 100644
--- a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
@@ -80,16 +80,15 @@
public class YangCompilerManager implements YangCompilerService {
private static final Logger log = getLogger(YangCompilerManager.class);
+ private static final String SLASH = File.separator;
private final YangUtilsParser yangUtilsParser = new YangUtilsParserManager();
private final YangLinker yangLinker = new YangLinkerManager();
private final Set<YangNode> yangNodeSet = new HashSet<>();
-
// YANG file information set.
private Set<YangFileInfo> yangFileInfoSet; //initialize in tool invocation;
private YangFileInfo curYangFileInfo = new YangFileInfo();
private Set<Path> genJavaPath = new LinkedHashSet<>();
private YangModel model;
- private static final String SLASH = File.separator;
@Override
public YangCompiledOutput compileYangFiles(YangCompilationParam param)
@@ -101,72 +100,6 @@
}
/**
- * Returns YANG model for application.
- *
- * @param path path for metadata file
- * @param info list of YANG node info
- * @param modelId model id
- * @param fromUt if method is called from unit test
- * @return YANG model
- */
- public static YangModel processYangModel(
- String path, List<YangNodeInfo> info, String modelId, boolean fromUt) {
- YangModel.Builder b = DefaultYangModel.builder();
- YangModuleId id;
- for (YangNodeInfo i : info) {
- id = processModuleId(i.getNode());
- String serFile = path + id.moduleName() + id.revision() + ".ser";
- if (!fromUt) {
- serializeModuleMetaData(serFile, i.getNode());
- }
- //take the absolute jar path and make a new path for our yang files.
- String fileName = getFileName(i.getNode().getFileName());
- YangModuleExtendedInfo module = new YangModuleExtendedInfo(
- id, new File(path + fileName), new File(serFile), i.isInterJar());
- module.setSchema(i.getNode());
- b.addModule(id, module);
- }
- return b.addModelId(modelId).build();
- }
-
- /**
- * Returns the file name from provided absolute path.
- *
- * @param absPath absolute path
- * @return file name
- */
- private static String getFileName(String absPath) {
- String[] file = absPath.split(SLASH);
- return file[file.length - 1];
- }
-
- /**
- * Serializes YANG Node.
- *
- * @param serFileName path of resource directory
- * @param node YangNode
- */
- private static void serializeModuleMetaData(String serFileName, YangNode node) {
- try (FileOutputStream outStream = new FileOutputStream(serFileName);
- ObjectOutputStream objOutStream = new ObjectOutputStream(outStream)) {
- objOutStream.writeObject(node);
- } catch (IOException e) {
- log.info("Error while serializing YANG node", e);
- }
- }
-
- /**
- * Returns YANG module id for a given YANG module node.
- *
- * @param module YANG module
- * @return YANG module id for a given YANG module node
- */
- public static YangModuleId processModuleId(YangNode module) {
- String rev = getDateInStringFormat(module);
- return new DefaultYangModuleId(module.getName(), rev);
- }
-
- /**
* Returns YANG node set.
*
* @return YANG node set
@@ -437,45 +370,13 @@
}
private void setNodeInfo(Set<YangFileInfo> yangFileInfoSet,
- List<YangNodeInfo> infos) {
+ List<YangNodeInfo> infos) {
for (YangFileInfo i : yangFileInfoSet) {
infos.add(new YangNodeInfo(i.getRootNode(), i.isInterJar()));
}
}
/**
- * Returns YANG model for serialization.
- *
- * @param path path for metadata file
- * @param list set of YANG file info
- * @param modelId model id
- * @param fromUt if method is called from unit test
- * @return YANG model
- */
- private static YangModel getModelForSerialization(
- String path, Set<YangFileInfo> list, String modelId, boolean fromUt) {
- YangModel.Builder b = DefaultYangModel.builder();
- YangModuleId id;
- boolean interJar;
-
- for (YangFileInfo info : list) {
- YangNode node = info.getRootNode();
- id = processModuleId(node);
- interJar = info.isInterJar();
- String serFile = path + id.moduleName() + id.revision() + ".ser";
- if (!fromUt) {
- serializeModuleMetaData(serFile, node);
- }
- //take the absolute jar path and make a new path for our yang files.
- String fileName = getFileName(node.getFileName());
- YangModuleExtendedInfo module = new YangModuleExtendedInfo(
- id, new File(path + fileName), new File(serFile), interJar);
- module.setSchema(node);
- b.addModule(id, module);
- }
- return b.addModelId(modelId).build();
- }
- /**
* Copies yang files to resource directory.
*
* @param path yang file paths
@@ -520,6 +421,105 @@
}
/**
+ * Returns YANG model for application.
+ *
+ * @param path path for metadata file
+ * @param info list of YANG node info
+ * @param modelId model id
+ * @param fromUt if method is called from unit test
+ * @return YANG model
+ */
+ public static YangModel processYangModel(
+ String path, List<YangNodeInfo> info, String modelId, boolean fromUt) {
+ YangModel.Builder b = DefaultYangModel.builder();
+ YangModuleId id;
+ for (YangNodeInfo i : info) {
+ id = processModuleId(i.getNode());
+ String serFile = path + id.moduleName() + id.revision() + ".ser";
+ if (!fromUt) {
+ serializeModuleMetaData(serFile, i.getNode());
+ }
+ //take the absolute jar path and make a new path for our yang files.
+ String fileName = getFileName(i.getNode().getFileName());
+ YangModuleExtendedInfo module = new YangModuleExtendedInfo(
+ id, new File(path + fileName), new File(serFile), i.isInterJar());
+ module.setSchema(i.getNode());
+ b.addModule(id, module);
+ }
+ return b.addModelId(modelId).build();
+ }
+
+ /**
+ * Returns the file name from provided absolute path.
+ *
+ * @param absPath absolute path
+ * @return file name
+ */
+ private static String getFileName(String absPath) {
+ String[] file = absPath.split(SLASH);
+ return file[file.length - 1];
+ }
+
+ /**
+ * Serializes YANG Node.
+ *
+ * @param serFileName path of resource directory
+ * @param node YangNode
+ */
+ private static void serializeModuleMetaData(String serFileName, YangNode node) {
+ try (FileOutputStream outStream = new FileOutputStream(serFileName);
+ ObjectOutputStream objOutStream = new ObjectOutputStream(outStream)) {
+ objOutStream.writeObject(node);
+ } catch (IOException e) {
+ log.info("Error while serializing YANG node", e);
+ }
+ }
+
+ /**
+ * Returns YANG module id for a given YANG module node.
+ *
+ * @param module YANG module
+ * @return YANG module id for a given YANG module node
+ */
+ public static YangModuleId processModuleId(YangNode module) {
+ String rev = getDateInStringFormat(module);
+ return new DefaultYangModuleId(module.getName(), rev);
+ }
+
+ /**
+ * Returns YANG model for serialization.
+ *
+ * @param path path for metadata file
+ * @param list set of YANG file info
+ * @param modelId model id
+ * @param fromUt if method is called from unit test
+ * @return YANG model
+ */
+ private static YangModel getModelForSerialization(
+ String path, Set<YangFileInfo> list, String modelId, boolean fromUt) {
+ YangModel.Builder b = DefaultYangModel.builder();
+ YangModuleId id;
+ boolean interJar;
+
+ for (YangFileInfo info : list) {
+ YangNode node = info.getRootNode();
+ id = processModuleId(node);
+ interJar = info.isInterJar();
+ String serFile = path + id.moduleName() + id.revision() + ".ser";
+ if (!fromUt) {
+ serializeModuleMetaData(serFile, node);
+ }
+ //take the absolute jar path and make a new path for our yang files.
+ String fileName = getFileName(node.getFileName());
+ YangModuleExtendedInfo module = new YangModuleExtendedInfo(
+ id, new File(path + fileName), new File(serFile), interJar);
+ module.setSchema(node);
+ b.addModule(id, module);
+ }
+ return b.addModelId(modelId).build();
+ }
+
+ /**
* Provides a list of files from list of strings.
*
* @param yangFileInfo set of yang file information
@@ -547,7 +547,7 @@
YangModel model;
try (FileInputStream fileInputStream = new FileInputStream(info);
ObjectInputStream objectInputStream =
- new ObjectInputStream(fileInputStream)) {
+ new ObjectInputStream(fileInputStream)) {
model = ((YangModel) objectInputStream.readObject());
} catch (IOException | ClassNotFoundException e) {
throw new IOException(info + " failed to fetch nodes due to " + e
@@ -609,10 +609,10 @@
while (enumEntries.hasMoreElements()) {
JarEntry file = (JarEntry) enumEntries.nextElement();
if (file.getName().endsWith(YANG_META_DATA) ||
- file.getName().endsWith(".yang")) {
+ file.getName().endsWith(".yang")) {
String name = getFileName(file.getName());
File serializedFile = new File(directory + SLASH +
- YANG_RESOURCES + SLASH + name);
+ YANG_RESOURCES + SLASH + name);
if (file.isDirectory()) {
serializedFile.mkdirs();
continue;
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangModuleExtendedInfo.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangModuleExtendedInfo.java
index 0eaf59c..d1f8c20 100644
--- a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangModuleExtendedInfo.java
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangModuleExtendedInfo.java
@@ -29,7 +29,6 @@
public class YangModuleExtendedInfo extends DefaultYangModule implements Serializable {
private YangNode schema;
- private boolean interJar;
/**
* Creates an instance of YANG module extended information.
@@ -39,7 +38,19 @@
* @param metadata meta data resource path
* @param interJar flag indicating if module is from inter-jar
*/
- public YangModuleExtendedInfo(YangModuleId id, File yangSrc, File metadata, boolean interJar) {
+ public YangModuleExtendedInfo(YangModuleId id, File yangSrc, File metadata,
+ boolean interJar) {
+ super(id, yangSrc, metadata, interJar);
+ }
+
+ /**
+ * Creates an instance of YANG module extended information.
+ *
+ * @param id module id
+ * @param yangSrc YANG resource path
+ * @param metadata meta data resource path
+ */
+ public YangModuleExtendedInfo(YangModuleId id, File yangSrc, File metadata) {
super(id, yangSrc, metadata);
}
@@ -60,22 +71,4 @@
public void setSchema(YangNode schema) {
this.schema = schema;
}
-
- /**
- * Returns true if it's inter-jar node.
- *
- * @return true if inter-jar node, false otherwise
- */
- public boolean isInterJar() {
- return interJar;
- }
-
- /**
- * Sets true if it's inter-jar node.
- *
- * @param interJar true if inter-jar node, false otherwise
- */
- public void interJar(boolean interJar) {
- this.interJar = interJar;
- }
}
diff --git a/model/src/main/java/org/onosproject/yang/model/DefaultYangModel.java b/model/src/main/java/org/onosproject/yang/model/DefaultYangModel.java
index ba21f72..81f874a 100644
--- a/model/src/main/java/org/onosproject/yang/model/DefaultYangModel.java
+++ b/model/src/main/java/org/onosproject/yang/model/DefaultYangModel.java
@@ -64,7 +64,9 @@
public Set<YangModuleId> getYangModulesId() {
Set<YangModuleId> ids = new LinkedHashSet<>();
for (Map.Entry<YangModuleId, YangModule> entry : moduleMap.entrySet()) {
- ids.add(entry.getKey());
+ if (!entry.getValue().isInterJar()) {
+ ids.add(entry.getKey());
+ }
}
return ids;
}
diff --git a/model/src/main/java/org/onosproject/yang/model/DefaultYangModule.java b/model/src/main/java/org/onosproject/yang/model/DefaultYangModule.java
index 6b5824b..1127375 100644
--- a/model/src/main/java/org/onosproject/yang/model/DefaultYangModule.java
+++ b/model/src/main/java/org/onosproject/yang/model/DefaultYangModule.java
@@ -34,6 +34,7 @@
private YangModuleId id;
private File yangSrc;
private File metadata;
+ private boolean interJar;
/**
* Creates an instance of default YANG module.
@@ -51,6 +52,25 @@
this.metadata = metadata;
}
+ /**
+ * Creates an instance of default YANG module.
+ *
+ * @param id YANG module id
+ * @param yangSrc YANG source file path
+ * @param metadata YANG metadata source file path
+ * @param interJar is this module is in dependent jar
+ */
+ public DefaultYangModule(YangModuleId id, File yangSrc, File metadata,
+ boolean interJar) {
+ checkNotNull(yangSrc);
+ checkNotNull(metadata);
+ checkNotNull(id);
+ this.id = id;
+ this.yangSrc = yangSrc;
+ this.metadata = metadata;
+ this.interJar = interJar;
+ }
+
@Override
public YangModuleId getYangModuleId() {
return id;
@@ -75,6 +95,16 @@
}
}
+ /**
+ * Returns true if it's inter-jar node.
+ *
+ * @return true if inter-jar node, false otherwise
+ */
+ public boolean isInterJar() {
+ return interJar;
+ }
+
+
@Override
public int hashCode() {
return Objects.hash(id, yangSrc, metadata);
diff --git a/model/src/main/java/org/onosproject/yang/model/YangModel.java b/model/src/main/java/org/onosproject/yang/model/YangModel.java
index 558fbdf..5a7e766 100644
--- a/model/src/main/java/org/onosproject/yang/model/YangModel.java
+++ b/model/src/main/java/org/onosproject/yang/model/YangModel.java
@@ -31,7 +31,7 @@
Set<YangModule> getYangModules();
/**
- * Returns set of YANG modules identifier.
+ * Returns set of YANG modules identifier which belongs to this artifact.
*
* @return YANG module identifier
*/
diff --git a/model/src/main/java/org/onosproject/yang/model/YangModule.java b/model/src/main/java/org/onosproject/yang/model/YangModule.java
index 506f3e6..1904a6e 100644
--- a/model/src/main/java/org/onosproject/yang/model/YangModule.java
+++ b/model/src/main/java/org/onosproject/yang/model/YangModule.java
@@ -43,4 +43,11 @@
* @return stream
*/
InputStream getMetadata();
+
+ /**
+ * Returns true if module is used as inter jar, false otherwise.
+ *
+ * @return true if module is used as inter jar, false otherwise
+ */
+ boolean isInterJar();
}
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/RuntimeHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/RuntimeHelper.java
index 6380f62..b7294c9 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/RuntimeHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/RuntimeHelper.java
@@ -34,7 +34,6 @@
import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getDateInStringFormat;
import static org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil.translate;
-import static org.onosproject.yang.compiler.utils.UtilConstants.AT;
import static org.onosproject.yang.runtime.helperutils.YangApacheUtils.getYangModel;
import static org.slf4j.LoggerFactory.getLogger;
@@ -75,6 +74,7 @@
public static Set<YangNode> getNodes(
YangModel model,
ConcurrentMap<String, ConcurrentMap<String, YangSchemaNode>> yangSchemaStore) {
+ Set<YangNode> selfNodes = new HashSet<>();
Set<YangNode> nodes = new HashSet<>();
for (YangModule info : model.getYangModules()) {
YangModuleExtendedInfo ex = (YangModuleExtendedInfo) info;
@@ -84,14 +84,17 @@
String date = getDateInStringFormat(node);
String revName = name;
if (date != null) {
- revName = name + AT + date;
+ revName = name + "@" + date;
}
node = (YangNode) yangSchemaStore.get(name).get(revName);
+ } else {
+ selfNodes.add((YangNode) node);
}
nodes.add((YangNode) node);
}
//Target linking.
- return addLinkerAndJavaInfo(nodes);
+ addLinkerAndJavaInfo(nodes);
+ return selfNodes;
}
/**