Added NotificationListener interfaces
[mdsal.git] / code-generator / binding-generator-impl / src / main / java / org / opendaylight / yangtools / sal / binding / generator / impl / BindingGeneratorImpl.java
index 452811eb5e5fbf5a07b813a575b2487acf870064..f6e96d83012869a0655e42b9dcbc7f813de0d656 100644 (file)
@@ -21,12 +21,14 @@ import java.util.Map;
 import java.util.Set;\r
 import java.util.concurrent.Future;\r
 \r
+import org.opendaylight.yangtools.binding.generator.util.BindingTypes;\r
 import org.opendaylight.yangtools.binding.generator.util.ReferencedTypeImpl;\r
 import org.opendaylight.yangtools.binding.generator.util.Types;\r
 import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl;\r
 import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTypeBuilderImpl;\r
 import org.opendaylight.yangtools.sal.binding.generator.api.BindingGenerator;\r
 import org.opendaylight.yangtools.sal.binding.generator.spi.TypeProvider;\r
+import org.opendaylight.yangtools.sal.binding.model.api.AccessModifier;\r
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;\r
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;\r
 import org.opendaylight.yangtools.sal.binding.model.api.ParameterizedType;\r
@@ -611,11 +613,18 @@ public final class BindingGeneratorImpl implements BindingGenerator {
             throw new IllegalArgumentException("Reference to Set of Notification Definitions in module "\r
                     + module.getName() + " cannot be NULL.");\r
         }\r
-\r
-        final String basePackageName = moduleNamespaceToPackageName(module);\r
-        final List<Type> genNotifyTypes = new ArrayList<>();\r
         final Set<NotificationDefinition> notifications = module.getNotifications();\r
-\r
+        if(notifications.isEmpty()) return Collections.emptyList();\r
+        \r
+        final GeneratedTypeBuilder listenerInterface = moduleTypeBuilder(module, "Listener");\r
+        listenerInterface.addImplementsType(BindingTypes.NOTIFICATION_LISTENER);\r
+        \r
+        \r
+        \r
+        final String basePackageName = moduleNamespaceToPackageName(module);\r
+        final List<Type> generatedTypes = new ArrayList<>();\r
+        \r
+        \r
         for (final NotificationDefinition notification : notifications) {\r
             if (notification != null) {\r
                 DataNodeIterator it = new DataNodeIterator(notification);\r
@@ -623,25 +632,32 @@ public final class BindingGeneratorImpl implements BindingGenerator {
                 // Containers\r
                 for (ContainerSchemaNode node : it.allContainers()) {\r
                     if (!node.isAddedByUses()) {\r
-                        genNotifyTypes.add(containerToGenType(basePackageName, node));\r
+                        generatedTypes.add(containerToGenType(basePackageName, node));\r
                     }\r
                 }\r
                 // Lists\r
                 for (ListSchemaNode node : it.allLists()) {\r
                     if (!node.isAddedByUses()) {\r
-                        genNotifyTypes.addAll(listToGenType(basePackageName, node));\r
+                        generatedTypes.addAll(listToGenType(basePackageName, node));\r
                     }\r
                 }\r
-                final GeneratedTypeBuilder notificationTypeBuilder = addDefaultInterfaceDefinition(basePackageName,\r
+                final GeneratedTypeBuilder notificationInterface = addDefaultInterfaceDefinition(basePackageName,\r
                         notification);\r
-                notificationTypeBuilder.addImplementsType(Types\r
+                notificationInterface.addImplementsType(Types\r
                         .typeForClass(org.opendaylight.yangtools.yang.binding.Notification.class));\r
                 // Notification object\r
-                resolveDataSchemaNodes(basePackageName, notificationTypeBuilder, notification.getChildNodes());\r
-                genNotifyTypes.add(notificationTypeBuilder.toInstance());\r
+                resolveDataSchemaNodes(basePackageName, notificationInterface, notification.getChildNodes());\r
+                \r
+                listenerInterface.addMethod("on"+notificationInterface.getName()) //\r
+                    .setAccessModifier(AccessModifier.PUBLIC)\r
+                    .addParameter(notificationInterface, "notification")\r
+                    .setReturnType(Types.VOID);\r
+                \r
+                generatedTypes.add(notificationInterface.toInstance());\r
             }\r
         }\r
-        return genNotifyTypes;\r
+        generatedTypes.add(listenerInterface.toInstance());\r
+        return generatedTypes;\r
     }\r
 \r
     /**\r