gNotification flag implementation in utils to optimize notification search and notification listener addition in YMS
Change-Id: Iea666ca7af9641869cba2a67e23a025cbc1b7317
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java
index f04862e..94369d7 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java
@@ -16,6 +16,7 @@
package org.onosproject.yangutils.parser.impl.listeners;
+import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
import org.onosproject.yangutils.datamodel.YangModule;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNotification;
@@ -92,9 +93,11 @@
GeneratedYangParser.NotificationStatementContext ctx) {
// Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, NOTIFICATION_DATA, ctx.identifier().getText(), ENTRY);
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, NOTIFICATION_DATA,
+ ctx.identifier().getText(), ENTRY);
- String identifier = getValidIdentifier(ctx.identifier().getText(), NOTIFICATION_DATA, ctx);
+ String identifier = getValidIdentifier(ctx.identifier().getText(),
+ NOTIFICATION_DATA, ctx);
// Validate sub statement cardinality.
validateSubStatementsCardinality(ctx);
@@ -102,13 +105,15 @@
// Check for identifier collision
int line = ctx.getStart().getLine();
int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, NOTIFICATION_DATA);
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier,
+ NOTIFICATION_DATA);
Parsable curData = listener.getParsedDataStack().peek();
if (curData instanceof YangModule || curData instanceof YangSubModule) {
YangNotification notification = getYangNotificationNode(JAVA_GENERATION);
notification.setName(identifier);
+ ((RpcNotificationContainer) curData).setNotificationPresenceFlag(true);
YangNode curNode = (YangNode) curData;
try {
curNode.addChild(notification);
@@ -119,7 +124,7 @@
listener.getParsedDataStack().push(notification);
} else {
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, NOTIFICATION_DATA,
- ctx.identifier().getText(), ENTRY));
+ ctx.identifier().getText(), ENTRY));
}
}
@@ -134,13 +139,14 @@
GeneratedYangParser.NotificationStatementContext ctx) {
// Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, NOTIFICATION_DATA, ctx.identifier().getText(), EXIT);
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, NOTIFICATION_DATA,
+ ctx.identifier().getText(), EXIT);
if (listener.getParsedDataStack().peek() instanceof YangNotification) {
listener.getParsedDataStack().pop();
} else {
throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, NOTIFICATION_DATA,
- ctx.identifier().getText(), EXIT));
+ ctx.identifier().getText(), EXIT));
}
}
@@ -151,10 +157,13 @@
*/
private static void validateSubStatementsCardinality(GeneratedYangParser.NotificationStatementContext ctx) {
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, NOTIFICATION_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, NOTIFICATION_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, NOTIFICATION_DATA,
- ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA,
+ NOTIFICATION_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(),
+ DESCRIPTION_DATA, NOTIFICATION_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA,
+ NOTIFICATION_DATA,
+ ctx.identifier().getText());
}
}
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
index d6f81b9..a44164f 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
@@ -17,23 +17,25 @@
package org.onosproject.yangutils.translator.tojava.javamodel;
import java.io.IOException;
-
+import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
+import org.onosproject.yangutils.datamodel.YangLeavesHolder;
import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaNotification;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
import org.onosproject.yangutils.translator.exception.TranslatorException;
import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
+import org.onosproject.yangutils.utils.io.YangPluginConfig;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
@@ -71,7 +73,8 @@
public JavaFileInfoTranslator getJavaFileInfo() {
if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node");
+ throw new TranslatorException("Missing java info in java " +
+ "datamodel node");
}
return (JavaFileInfoTranslator) javaFileInfo;
}
@@ -114,11 +117,14 @@
* @throws TranslatorException translator operation fail
*/
@Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ public void generateCodeEntry(YangPluginConfig yangPlugin)
+ throws TranslatorException {
/*
- * As part of the notification support the following files needs to be generated.
- * 1) Subject of the notification(event), this is simple interface with builder class.
+ * As part of the notification support the following files needs to
+ * be generated.
+ * 1) Subject of the notification(event), this is simple interface with
+ * builder class.
* 2) Event class extending "AbstractEvent" and defining event type enum.
* 3) Event listener interface extending "EventListener".
*
@@ -132,7 +138,8 @@
addNotificationToExtendsList();
} catch (IOException e) {
throw new TranslatorException(
- "Failed to prepare generate code entry for notification node " + getName());
+ "Failed to prepare generate code entry for notification " +
+ "node " + getName());
}
}
@@ -167,8 +174,34 @@
try {
getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
} catch (IOException e) {
- throw new TranslatorException("Failed to generate code for notification node " + getName());
+ throw new TranslatorException("Failed to generate code for " +
+ "notification node " +
+ getName());
}
}
+
+ @Override
+ public void setNameSpaceAndAddToParentSchemaMap() {
+ // Get parent namespace.
+ if (this.getParent() != null) {
+ String nameSpace = this.getParent().getNameSpace();
+ // Set namespace for self node.
+ setNameSpace(nameSpace);
+ // Process addition of leaf to the child schema map of parent.
+ processAdditionOfSchemaNodeToParentMap(getName(), getNameSpace());
+ // Obtain the notification name as per enum in notification.
+ String enumName = getEnumJavaAttribute(getJavaFileInfo().getJavaName()).toUpperCase();
+
+ ((RpcNotificationContainer) this.getParent()).addToNotificationEnumMap(enumName, this);
+
+ }
+ /*
+ * Check if node contains leaf/leaf-list, if yes add namespace for leaf
+ * and leaf list.
+ */
+ if (this instanceof YangLeavesHolder) {
+ ((YangLeavesHolder) this).setLeafNameSpaceAndAddToParentSchemaMap();
+ }
+ }
}