Added NotificationListener interfaces 96/996/1
authorTony Tkacik <ttkacik@cisco.com>
Fri, 23 Aug 2013 14:30:53 +0000 (16:30 +0200)
committerTony Tkacik <ttkacik@cisco.com>
Fri, 23 Aug 2013 14:30:53 +0000 (16:30 +0200)
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
14 files changed:
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractTypeMemberBuilder.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedPropertyBuilderImpl.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedTypeBuilderImpl.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/MethodSignatureBuilderImpl.java
code-generator/binding-model-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/type/builder/GeneratedPropertyBuilder.java
code-generator/binding-model-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/type/builder/GeneratedTOBuilder.java
code-generator/binding-model-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java
code-generator/binding-model-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/type/builder/GeneratedTypeBuilderBase.java [new file with mode: 0644]
code-generator/binding-model-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/type/builder/MethodSignatureBuilder.java
code-generator/binding-model-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/type/builder/TypeMemberBuilder.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
index 1b9abbc6520ac0341831258151f2a7007ab42627..75d10a82c86d834a6156a31fa20844fda4822f83 100644 (file)
@@ -33,6 +33,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTypeBuilder;
+import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
@@ -492,7 +493,7 @@ public final class TypeProviderImpl implements TypeProvider {
      *
      */
     private Enumeration addInnerEnumerationToTypeBuilder(final EnumTypeDefinition enumTypeDef, final String enumName,
-            final GeneratedTypeBuilder typeBuilder) {
+            final GeneratedTypeBuilderBase<?> typeBuilder) {
         Preconditions.checkArgument(enumTypeDef != null, "EnumTypeDefinition reference cannot be NULL!");
         Preconditions.checkArgument(enumTypeDef.getValues() != null,
                 "EnumTypeDefinition MUST contain at least ONE value definition!");
@@ -647,7 +648,6 @@ public final class TypeProviderImpl implements TypeProvider {
     private GeneratedTransferObject wrapJavaTypeIntoTO(final String basePackageName, final TypeDefinition<?> typedef,
             final Type javaType) {
         if (javaType != null) {
-            final String typedefName = typedef.getQName().getLocalName();
             final String propertyName = "value";
 
             final GeneratedTOBuilder genTOBuilder = typedefToTransferObject(basePackageName, typedef);
index 1eb60fc5db3635999e951a4cba3ea6e46deb228d..f70e1f88e5177995451b35edb7e34e1d1fced142 100644 (file)
@@ -16,7 +16,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.type.builder.*;
 import java.util.ArrayList;\r
 import java.util.List;\r
 \r
-abstract class AbstractGeneratedTypeBuilder extends AbstractBaseType implements GeneratedTypeBuilder {\r
+abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T>> extends AbstractBaseType implements GeneratedTypeBuilderBase<T> {\r
 \r
     private String comment = "";\r
 \r
@@ -26,7 +26,7 @@ abstract class AbstractGeneratedTypeBuilder extends AbstractBaseType implements
     private final List<Constant> constants = new ArrayList<>();\r
     private final List<MethodSignatureBuilder> methodDefinitions = new ArrayList<>();\r
     private final List<GeneratedTypeBuilder> enclosedTypes = new ArrayList<>();\r
-    private final List<GeneratedTOBuilder> enclosingTransferObjects = new ArrayList<>();\r
+    private final List<GeneratedTOBuilder> enclosedTransferObjects = new ArrayList<>();\r
     private final List<GeneratedPropertyBuilder> properties = new ArrayList<>();\r
     private boolean isAbstract;\r
 \r
@@ -67,40 +67,34 @@ abstract class AbstractGeneratedTypeBuilder extends AbstractBaseType implements
     }\r
 \r
     protected List<GeneratedTOBuilder> getEnclosedTransferObjects() {\r
-        return enclosingTransferObjects;\r
-    }\r
-\r
-    @Override\r
-    public GeneratedTypeBuilder addEnclosingType(String name) {\r
-        if (name == null) {\r
-            throw new IllegalArgumentException("Name for Enclosing Generated Type cannot be null!");\r
-        }\r
-        GeneratedTypeBuilder builder = new GeneratedTOBuilderImpl(getFullyQualifiedName(), name);\r
-        enclosedTypes.add(builder);\r
-        return builder;\r
+        return enclosedTransferObjects;\r
     }\r
 \r
+    abstract protected T thisInstance();\r
+    \r
     @Override\r
     public GeneratedTOBuilder addEnclosingTransferObject(String name) {\r
         if (name == null) {\r
             throw new IllegalArgumentException("Name for Enclosing Generated Transfer Object cannot be null!");\r
         }\r
         GeneratedTOBuilder builder = new GeneratedTOBuilderImpl(getFullyQualifiedName(), name);\r
-        enclosingTransferObjects.add(builder);\r
+        enclosedTransferObjects.add(builder);\r
         return builder;\r
     }\r
 \r
     @Override\r
-    public void addEnclosingTransferObject(final GeneratedTOBuilder genTOBuilder) {\r
+    public T addEnclosingTransferObject(final GeneratedTOBuilder genTOBuilder) {\r
         if (genTOBuilder == null) {\r
             throw new IllegalArgumentException("Parameter genTOBuilder cannot be null!");\r
         }\r
-        enclosingTransferObjects.add(genTOBuilder);\r
+        enclosedTransferObjects.add(genTOBuilder);\r
+        return thisInstance();\r
     }\r
 \r
     @Override\r
-    public void addComment(String comment) {\r
+    public T addComment(String comment) {\r
         this.comment = comment;\r
+        return thisInstance();\r
     }\r
 \r
     @Override\r
@@ -118,16 +112,18 @@ abstract class AbstractGeneratedTypeBuilder extends AbstractBaseType implements
     }\r
 \r
     @Override\r
-    public void setAbstract(boolean isAbstract) {\r
+    public T setAbstract(boolean isAbstract) {\r
         this.isAbstract = isAbstract;\r
+        return thisInstance();\r
     }\r
 \r
     @Override\r
-    public boolean addImplementsType(Type genType) {\r
+    public T addImplementsType(Type genType) {\r
         if (genType == null) {\r
             throw new IllegalArgumentException("Type cannot be null");\r
         }\r
-        return implementsTypes.add(genType);\r
+        implementsTypes.add(genType);\r
+        return thisInstance();\r
     }\r
 \r
     @Override\r
@@ -220,7 +216,7 @@ abstract class AbstractGeneratedTypeBuilder extends AbstractBaseType implements
         if (getClass() != obj.getClass()) {\r
             return false;\r
         }\r
-        AbstractGeneratedTypeBuilder other = (AbstractGeneratedTypeBuilder) obj;\r
+        AbstractGeneratedTypeBuilder<T> other = (AbstractGeneratedTypeBuilder<T>) obj;\r
         if (getName() == null) {\r
             if (other.getName() != null) {\r
                 return false;\r
index f4ca581661349f2d9dbb4f11bec6a658d81fe309..02f6820824393928bb308d1fe67197b0310b122d 100644 (file)
@@ -16,7 +16,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.type.builder.TypeMemberB
 import java.util.ArrayList;
 import java.util.List;
 
-abstract class AbstractTypeMemberBuilder implements TypeMemberBuilder {
+abstract class AbstractTypeMemberBuilder<T extends TypeMemberBuilder<T>> implements TypeMemberBuilder<T> {
     private final String name;
     private Type returnType;
     private final List<AnnotationTypeBuilder> annotationBuilders;
@@ -68,33 +68,39 @@ abstract class AbstractTypeMemberBuilder implements TypeMemberBuilder {
         return name;
     }
 
+    protected abstract T thisInstance();
+    
     @Override
-    public void setReturnType(Type returnType) {
+    public T setReturnType(Type returnType) {
         if (returnType == null) {
             throw new IllegalArgumentException("Return Type of member cannot be null!");
         }
         this.returnType = returnType;
+        return thisInstance();
     }
 
     @Override
-    public void setAccessModifier(AccessModifier modifier) {
+    public T setAccessModifier(AccessModifier modifier) {
         if (modifier == null) {
             throw new IllegalArgumentException("Access Modifier for member type cannot be null!");
         }
         this.accessModifier = modifier;
+        return thisInstance();
     }
 
     @Override
-    public void setComment(String comment) {
+    public T setComment(String comment) {
         if (comment == null) {
             this.comment = "";
         }
         this.comment = comment;
+        return thisInstance();
     }
 
     @Override
-    public void setFinal(boolean isFinal) {
+    public T setFinal(boolean isFinal) {
         this.isFinal = isFinal;
+        return thisInstance();
     }
 
     protected List<AnnotationType> toAnnotationTypes() {
index e92564e2bde118f3857b30426192bcbbed2262ed..3089961a2b7e70bd71a62696af122e4cdd0c78c3 100644 (file)
@@ -14,7 +14,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPr
 
 import java.util.List;
 
-final class GeneratedPropertyBuilderImpl extends AbstractTypeMemberBuilder implements GeneratedPropertyBuilder {
+final class GeneratedPropertyBuilderImpl extends AbstractTypeMemberBuilder<GeneratedPropertyBuilder> implements GeneratedPropertyBuilder {
 
     private boolean isReadOnly;
 
@@ -24,10 +24,16 @@ final class GeneratedPropertyBuilderImpl extends AbstractTypeMemberBuilder imple
     }
 
     @Override
-    public void setReadOnly(boolean isReadOnly) {
+    public GeneratedPropertyBuilderImpl setReadOnly(boolean isReadOnly) {
         this.isReadOnly = isReadOnly;
+        return this;
     }
 
+    @Override
+    protected GeneratedPropertyBuilderImpl thisInstance() {
+        return this;
+    }
+    
     @Override
     public GeneratedProperty toInstance(Type definingType) {
         final List<AnnotationType> annotations = toAnnotationTypes();
index 3f7ece81ca2b72be839026609d9a6b633d0d1e14..3dfb58dc89de0930c294fae3ac7f4504095313fc 100644 (file)
@@ -13,7 +13,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.type.builder.*;
 import java.util.ArrayList;\r
 import java.util.List;\r
 \r
-public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder implements GeneratedTOBuilder {\r
+public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements GeneratedTOBuilder {\r
 \r
     private GeneratedTransferObject extendsType;\r
     private final List<GeneratedPropertyBuilder> properties = new ArrayList<>();\r
@@ -28,11 +28,12 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
     }\r
 \r
     @Override\r
-    public void setExtendsType(final GeneratedTransferObject genTransObj) {\r
+    public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {\r
         if (genTransObj == null) {\r
             throw new IllegalArgumentException("Generated Transfer Object cannot be null!");\r
         }\r
         extendsType = genTransObj;\r
+        return this;\r
     }\r
 \r
 \r
@@ -59,20 +60,28 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
     }\r
 \r
     @Override\r
-    public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {\r
-        return equalsProperties.add(property);\r
+    public GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property) {\r
+        equalsProperties.add(property);\r
+        return this;\r
     }\r
 \r
     @Override\r
-    public boolean addHashIdentity(GeneratedPropertyBuilder property) {\r
-        return hashProperties.add(property);\r
+    public GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property) {\r
+        hashProperties.add(property);\r
+        return this;\r
     }\r
 \r
     @Override\r
-    public boolean addToStringProperty(GeneratedPropertyBuilder property) {\r
-        return toStringProperties.add(property);\r
+    public GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property) {\r
+        toStringProperties.add(property);\r
+        return this;\r
     }\r
 \r
+    @Override\r
+    protected GeneratedTOBuilder thisInstance() {\r
+        return this;\r
+    }\r
+    \r
     @Override\r
     public GeneratedTransferObject toInstance() {\r
         return new GeneratedTransferObjectImpl(this);\r
index ae7d3320248c2aea2f27fd2c2d8d0cc8f6fd3068..22d11e53841c5d1a11c0f4b9f4eb412bf690967f 100644 (file)
@@ -9,8 +9,9 @@ package org.opendaylight.yangtools.binding.generator.util.generated.type.builder
 \r
 \r
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;\r
+import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTypeBuilder;\r
 \r
-public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder {\r
+public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTypeBuilder> implements GeneratedTypeBuilder {\r
 \r
     public GeneratedTypeBuilderImpl(String packageName, String name) {\r
         super(packageName, name);\r
@@ -47,6 +48,11 @@ public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder
         builder.append("]");\r
         return builder.toString();\r
     }\r
+    \r
+    @Override\r
+    protected GeneratedTypeBuilderImpl thisInstance() {\r
+        return this;\r
+    }\r
 \r
     private static final class GeneratedTypeImpl extends AbstractGeneratedType {\r
 \r
index f5782ad10bd5f712427d2f129aba59cbecf73fe4..8552804bcf069e72ee52b9f0702e90af904d8871 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder;
 
-final class MethodSignatureBuilderImpl extends AbstractTypeMemberBuilder implements MethodSignatureBuilder {
+final class MethodSignatureBuilderImpl extends AbstractTypeMemberBuilder<MethodSignatureBuilder> implements MethodSignatureBuilder {
 
     private final List<MethodSignature.Parameter> parameters;
     private boolean isAbstract;
@@ -26,15 +26,22 @@ final class MethodSignatureBuilderImpl extends AbstractTypeMemberBuilder impleme
     }
 
     @Override
-    public void setAbstract(boolean isAbstract) {
+    public MethodSignatureBuilder setAbstract(boolean isAbstract) {
         this.isAbstract = isAbstract;
+        return this;
     }
 
     @Override
-    public void addParameter(Type type, String name) {
+    public MethodSignatureBuilder addParameter(Type type, String name) {
         parameters.add(new MethodParameterImpl(name, type));
+        return this;
     }
 
+@Override
+    protected MethodSignatureBuilder thisInstance() {
+        return this;
+    }
+    
     @Override
     public MethodSignature toInstance(Type definingType) {
         final List<AnnotationType> annotations = toAnnotationTypes();
index b9a5dc371454461b7d13f13e491547b70598e632..18467ab156c970bc84456d5e8e132bc96507741b 100644 (file)
@@ -16,7 +16,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.Type;
  *
  * @see GeneratedProperty
  */
-public interface GeneratedPropertyBuilder extends TypeMemberBuilder {
+public interface GeneratedPropertyBuilder extends TypeMemberBuilder<GeneratedPropertyBuilder> {
 
     /**
      * Sets isReadOnly flag for property. If property is marked as read only
@@ -24,7 +24,7 @@ public interface GeneratedPropertyBuilder extends TypeMemberBuilder {
      *
      * @param isReadOnly Read Only property flag.
      */
-    public void setReadOnly(final boolean isReadOnly);
+    public GeneratedPropertyBuilder setReadOnly(final boolean isReadOnly);
 
     /**
      * Returns <code>new</code> <i>immutable</i> instance of Generated
index b4fafbf84b60d46770043a88888b91f2381085bd..b5807b9ed74c75031a1cc5784452f5db2d164778 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;
  * \r
  * @see GeneratedTransferObject\r
  */\r
-public interface GeneratedTOBuilder extends GeneratedTypeBuilder {\r
+public interface GeneratedTOBuilder extends GeneratedTypeBuilderBase<GeneratedTOBuilder> {\r
 \r
     /**\r
      * Add Generated Transfer Object from which will be extended current\r
@@ -28,8 +28,9 @@ public interface GeneratedTOBuilder extends GeneratedTypeBuilder {
      * \r
      * @param genTransObj\r
      *            Generated Transfer Object\r
+     * @return This instance of builder\r
      */\r
-    public void setExtendsType(final GeneratedTransferObject genTransObj);\r
+    public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj);\r
 \r
     /**\r
      * Add Property that will be part of <code>equals</code> definition. <br>\r
@@ -38,10 +39,9 @@ public interface GeneratedTOBuilder extends GeneratedTypeBuilder {
      * \r
      * @param property\r
      *            Generated Property Builder\r
-     * @return <code>true</code> if addition of Generated Property into list of\r
-     *         <code>equals</code> properties is successful.\r
+     * @return This instance of builder\r
      */\r
-    public boolean addEqualsIdentity(final GeneratedPropertyBuilder property);\r
+    public GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property);\r
 \r
     /**\r
      * Add Property that will be part of <code>hashCode</code> definition. <br>\r
@@ -50,10 +50,9 @@ public interface GeneratedTOBuilder extends GeneratedTypeBuilder {
      * \r
      * @param property\r
      *            Generated Property Builder\r
-     * @return <code>true</code> if addition of Generated Property into list of\r
-     *         <code>hashCode</code> properties is successful.\r
+     * @return This instance of builder\r
      */\r
-    public boolean addHashIdentity(final GeneratedPropertyBuilder property);\r
+    public GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property);\r
 \r
     /**\r
      * Add Property that will be part of <code>toString</code> definition. <br>\r
@@ -62,12 +61,10 @@ public interface GeneratedTOBuilder extends GeneratedTypeBuilder {
      * \r
      * @param property\r
      *            Generated Property Builder\r
-     * @return <code>true</code> if addition of Generated Property into list of\r
-     *         <code>toString</code> properties is successful.\r
+     * @return This instance of builder\r
      */\r
-    public boolean addToStringProperty(final GeneratedPropertyBuilder property);\r
+    public GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property);\r
 \r
-    @Override\r
     public GeneratedTransferObject toInstance();\r
 \r
     /**\r
index d7d78f466c0bfcff6d7e1d229901b0744428d9fb..4c79da50e165be8a2bb03ecb0b5f5ad59613ec5b 100644 (file)
@@ -17,186 +17,13 @@ import org.opendaylight.yangtools.sal.binding.model.api.Type;
  * \r
  * @see GeneratedType\r
  */\r
-public interface GeneratedTypeBuilder extends Type {\r
-\r
-    /**\r
-     * Adds new Enclosing Type into definition of Generated Type and returns\r
-     * <code>new</code> Instance of Generated Type Builder. <br>\r
-     * There is no need of specifying of Package Name because enclosing Type is\r
-     * already defined inside Generated Type with specific package name. <br>\r
-     * The name of enclosing Type cannot be same as Name of parent type and if\r
-     * there is already defined enclosing type with the same name, the new\r
-     * enclosing type will simply overwrite the older definition. <br>\r
-     * If the name of enclosing type is <code>null</code> the method SHOULD\r
-     * throw {@link IllegalArgumentException}\r
-     * \r
-     * @param name\r
-     *            Name of Enclosing Type\r
-     * @return <code>new</code> Instance of Generated Type Builder.\r
-     */\r
-    public GeneratedTypeBuilder addEnclosingType(final String name);\r
-\r
-    /**\r
-     * Adds new Enclosing Transfer Object into definition of Generated Type and\r
-     * returns <code>new</code> Instance of Generated TO Builder. <br>\r
-     * There is no need of specifying of Package Name because enclosing Type is\r
-     * already defined inside Generated Type with specific package name. <br>\r
-     * The name of enclosing Type cannot be same as Name of parent type and if\r
-     * there is already defined enclosing type with the same name, the new\r
-     * enclosing type will simply overwrite the older definition. <br>\r
-     * If the name of enclosing type is <code>null</code> the method SHOULD\r
-     * throw {@link IllegalArgumentException}\r
-     * \r
-     * @param name\r
-     *            Name of Enclosing Type\r
-     * @return <code>new</code> Instance of Generated Type Builder.\r
-     */\r
-    public GeneratedTOBuilder addEnclosingTransferObject(final String name);\r
-\r
-    /**\r
-     * Adds new Enclosing Transfer Object <code>genTOBuilder</code> into\r
-     * definition of Generated Type\r
-     * \r
-     * <br>\r
-     * There is no need of specifying of Package Name because enclosing Type is\r
-     * already defined inside Generated Type with specific package name. <br>\r
-     * The name of enclosing Type cannot be same as Name of parent type and if\r
-     * there is already defined enclosing type with the same name, the new\r
-     * enclosing type will simply overwrite the older definition. <br>\r
-     * If the parameter <code>genTOBuilder</code> of enclosing type is\r
-     * <code>null</code> the method SHOULD throw\r
-     * {@link IllegalArgumentException}\r
-     * \r
-     * @param <code>genTOBuilder</code> Name of Enclosing Type\r
-     */\r
-    public void addEnclosingTransferObject(final GeneratedTOBuilder genTOBuilder);\r
-\r
-    /**\r
-     * Adds String definition of comment into Method Signature definition. <br>\r
-     * The comment String MUST NOT contain anny comment specific chars (i.e.\r
-     * "/**" or "//") just plain String text description.\r
-     * \r
-     * @param comment\r
-     *            Comment String.\r
-     */\r
-    public void addComment(final String comment);\r
-\r
-    /**\r
-     * The method creates new AnnotationTypeBuilder containing specified package\r
-     * name an annotation name. <br>\r
-     * Neither the package name or annotation name can contain <code>null</code>\r
-     * references. In case that any of parameters contains <code>null</code> the\r
-     * method SHOULD thrown {@link IllegalArgumentException}\r
-     * \r
-     * @param packageName\r
-     *            Package Name of Annotation Type\r
-     * @param name\r
-     *            Name of Annotation Type\r
-     * @return <code>new</code> instance of Annotation Type Builder.\r
-     */\r
-    public AnnotationTypeBuilder addAnnotation(final String packageName, final String name);\r
-\r
-    /**\r
-     * Sets the <code>abstract</code> flag to define Generated Type as\r
-     * <i>abstract</i> type.\r
-     * \r
-     * @param isAbstract\r
-     *            abstract flag\r
-     */\r
-    public void setAbstract(boolean isAbstract);\r
-\r
-    /**\r
-     * Add Type to implements.\r
-     * \r
-     * @param genType\r
-     *            Type to implement\r
-     * @return <code>true</code> if the addition of type is successful.\r
-     */\r
-    public boolean addImplementsType(final Type genType);\r
-\r
-    /**\r
-     * Adds Constant definition and returns <code>new</code> Constant instance. <br>\r
-     * By definition Constant MUST be defined by return Type, Name and assigned\r
-     * value. The name SHOULD be defined with cpaital letters. Neither of method\r
-     * parameters can be <code>null</code> and the method SHOULD throw\r
-     * {@link IllegalArgumentException} if the contract is broken.\r
-     * \r
-     * @param type\r
-     *            Constant Type\r
-     * @param name\r
-     *            Name of Constant\r
-     * @param value\r
-     *            Assigned Value\r
-     * @return <code>new</code> Constant instance.\r
-     */\r
-    public Constant addConstant(final Type type, final String name, final Object value);\r
-\r
-    /**\r
-     * Adds new Enumeration definition for Generated Type Builder and returns\r
-     * Enum Builder for specifying all Enum parameters. <br>\r
-     * If there is already Enumeration stored with the same name, the old enum\r
-     * will be simply overwritten byt new enum definition. <br>\r
-     * Name of Enumeration cannot be <code>null</code>, if it is\r
-     * <code>null</code> the method SHOULD throw\r
-     * {@link IllegalArgumentException}\r
-     * \r
-     * @param name\r
-     *            Enumeration Name\r
-     * @return <code>new</code> instance of Enumeration Builder.\r
-     */\r
-    public EnumBuilder addEnumeration(final String name);\r
-\r
-    /**\r
-     * Add new Method Signature definition for Generated Type Builder and\r
-     * returns Method Signature Builder for specifying all Method parameters. <br>\r
-     * Name of Method cannot be <code>null</code>, if it is <code>null</code>\r
-     * the method SHOULD throw {@link IllegalArgumentException} <br>\r
-     * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as\r
-     * {@link MethodSignatureBuilder#setAbstract(true)},\r
-     * {@link MethodSignatureBuilder#setFinal(false)} and\r
-     * {@link MethodSignatureBuilder#setAccessModifier(PUBLIC)}\r
-     * \r
-     * @param name\r
-     *            Name of Method\r
-     * @return <code>new</code> instance of Method Signature Builder.\r
-     */\r
-    public MethodSignatureBuilder addMethod(final String name);\r
-\r
-    /**\r
-     * Checks if GeneratedTypeBuilder contains method with name\r
-     * <code>methodName</code>\r
-     * \r
-     * @param methodName\r
-     *            is method name\r
-     */\r
-    public boolean containsMethod(final String methodName);\r
-    \r
-    /**\r
-     * Add new Generated Property definition for Generated Transfer Object\r
-     * Builder and returns Generated Property Builder for specifying Property. <br>\r
-     * Name of Property cannot be <code>null</code>, if it is <code>null</code>\r
-     * the method SHOULD throw {@link IllegalArgumentException}\r
-     * \r
-     * @param name\r
-     *            Name of Property\r
-     * @return <code>new</code> instance of Generated Property Builder.\r
-     */\r
-    public GeneratedPropertyBuilder addProperty(final String name);\r
-\r
-    /**\r
-     * Check whether GeneratedTOBuilder contains property with name\r
-     * <code>name</code>\r
-     * \r
-     * @param name\r
-     *            of property which existance is checked\r
-     * @return true if property <code>name</code> exists in list of properties.\r
-     */\r
-    public boolean containsProperty(final String name);\r
-\r
+public interface GeneratedTypeBuilder extends GeneratedTypeBuilderBase<GeneratedTypeBuilder> {\r
+   \r
     /**\r
      * Returns the <code>new</code> <i>immutable</i> instance of Generated Type.\r
      * \r
      * @return the <code>new</code> <i>immutable</i> instance of Generated Type.\r
      */\r
     public GeneratedType toInstance();\r
+\r
 }\r
diff --git a/code-generator/binding-model-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/type/builder/GeneratedTypeBuilderBase.java b/code-generator/binding-model-api/src/main/java/org/opendaylight/yangtools/sal/binding/model/api/type/builder/GeneratedTypeBuilderBase.java
new file mode 100644 (file)
index 0000000..04bc913
--- /dev/null
@@ -0,0 +1,168 @@
+package org.opendaylight.yangtools.sal.binding.model.api.type.builder;
+
+import org.opendaylight.yangtools.sal.binding.model.api.Constant;
+import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
+import org.opendaylight.yangtools.sal.binding.model.api.Type;
+
+public interface GeneratedTypeBuilderBase <T extends GeneratedTypeBuilderBase<T>> extends Type {
+
+    /**
+     * Adds new Enclosing Transfer Object into definition of Generated Type and
+     * returns <code>new</code> Instance of Generated TO Builder. <br>
+     * There is no need of specifying of Package Name because enclosing Type is
+     * already defined inside Generated Type with specific package name. <br>
+     * The name of enclosing Type cannot be same as Name of parent type and if
+     * there is already defined enclosing type with the same name, the new
+     * enclosing type will simply overwrite the older definition. <br>
+     * If the name of enclosing type is <code>null</code> the method SHOULD
+     * throw {@link IllegalArgumentException}
+     * 
+     * @param name
+     *            Name of Enclosing Type
+     * @return <code>new</code> Instance of Generated Type Builder.
+     */
+    public GeneratedTOBuilder addEnclosingTransferObject(final String name);
+
+    /**
+     * Adds new Enclosing Transfer Object <code>genTOBuilder</code> into
+     * definition of Generated Type
+     * 
+     * <br>
+     * There is no need of specifying of Package Name because enclosing Type is
+     * already defined inside Generated Type with specific package name. <br>
+     * The name of enclosing Type cannot be same as Name of parent type and if
+     * there is already defined enclosing type with the same name, the new
+     * enclosing type will simply overwrite the older definition. <br>
+     * If the parameter <code>genTOBuilder</code> of enclosing type is
+     * <code>null</code> the method SHOULD throw
+     * {@link IllegalArgumentException}
+     * 
+     * @param <code>genTOBuilder</code> Name of Enclosing Type
+     */
+    public T addEnclosingTransferObject(final GeneratedTOBuilder genTOBuilder);
+
+    /**
+     * Adds String definition of comment into Method Signature definition. <br>
+     * The comment String MUST NOT contain anny comment specific chars (i.e.
+     * "/**" or "//") just plain String text description.
+     * 
+     * @param comment
+     *            Comment String.
+     */
+    public T addComment(final String comment);
+
+    /**
+     * The method creates new AnnotationTypeBuilder containing specified package
+     * name an annotation name. <br>
+     * Neither the package name or annotation name can contain <code>null</code>
+     * references. In case that any of parameters contains <code>null</code> the
+     * method SHOULD thrown {@link IllegalArgumentException}
+     * 
+     * @param packageName
+     *            Package Name of Annotation Type
+     * @param name
+     *            Name of Annotation Type
+     * @return <code>new</code> instance of Annotation Type Builder.
+     */
+    public AnnotationTypeBuilder addAnnotation(final String packageName, final String name);
+
+    /**
+     * Sets the <code>abstract</code> flag to define Generated Type as
+     * <i>abstract</i> type.
+     * 
+     * @param isAbstract
+     *            abstract flag
+     */
+    public T setAbstract(boolean isAbstract);
+
+    /**
+     * Add Type to implements.
+     * 
+     * @param genType
+     *            Type to implement
+     * @return <code>true</code> if the addition of type is successful.
+     */
+    public T addImplementsType(final Type genType);
+
+    /**
+     * Adds Constant definition and returns <code>new</code> Constant instance. <br>
+     * By definition Constant MUST be defined by return Type, Name and assigned
+     * value. The name SHOULD be defined with capital letters. Neither of method
+     * parameters can be <code>null</code> and the method SHOULD throw
+     * {@link IllegalArgumentException} if the contract is broken.
+     * 
+     * @param type
+     *            Constant Type
+     * @param name
+     *            Name of Constant
+     * @param value
+     *            Assigned Value
+     * @return <code>new</code> Constant instance.
+     */
+    public Constant addConstant(final Type type, final String name, final Object value);
+
+    /**
+     * Adds new Enumeration definition for Generated Type Builder and returns
+     * Enum Builder for specifying all Enum parameters. <br>
+     * If there is already Enumeration stored with the same name, the old enum
+     * will be simply overwritten byt new enum definition. <br>
+     * Name of Enumeration cannot be <code>null</code>, if it is
+     * <code>null</code> the method SHOULD throw
+     * {@link IllegalArgumentException}
+     * 
+     * @param name
+     *            Enumeration Name
+     * @return <code>new</code> instance of Enumeration Builder.
+     */
+    public EnumBuilder addEnumeration(final String name);
+
+    /**
+     * Add new Method Signature definition for Generated Type Builder and
+     * returns Method Signature Builder for specifying all Method parameters. <br>
+     * Name of Method cannot be <code>null</code>, if it is <code>null</code>
+     * the method SHOULD throw {@link IllegalArgumentException} <br>
+     * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
+     * {@link MethodSignatureBuilder#setAbstract(true)},
+     * {@link MethodSignatureBuilder#setFinal(false)} and
+     * {@link MethodSignatureBuilder#setAccessModifier(PUBLIC)}
+     * 
+     * @param name
+     *            Name of Method
+     * @return <code>new</code> instance of Method Signature Builder.
+     */
+    public MethodSignatureBuilder addMethod(final String name);
+
+    /**
+     * Checks if GeneratedTypeBuilder contains method with name
+     * <code>methodName</code>
+     * 
+     * @param methodName
+     *            is method name
+     */
+    public boolean containsMethod(final String methodName);
+    
+    /**
+     * Add new Generated Property definition for Generated Transfer Object
+     * Builder and returns Generated Property Builder for specifying Property. <br>
+     * Name of Property cannot be <code>null</code>, if it is <code>null</code>
+     * the method SHOULD throw {@link IllegalArgumentException}
+     * 
+     * @param name
+     *            Name of Property
+     * @return <code>new</code> instance of Generated Property Builder.
+     */
+    public GeneratedPropertyBuilder addProperty(final String name);
+
+    /**
+     * Check whether GeneratedTOBuilder contains property with name
+     * <code>name</code>
+     * 
+     * @param name
+     *            of property which existance is checked
+     * @return true if property <code>name</code> exists in list of properties.
+     */
+    public boolean containsProperty(final String name);
+
+
+    
+}
index 4785410a6ec4976a22039980a55758151bad93b8..905d229392ce9d3826ac1b25d74afce15b52fdde 100644 (file)
@@ -28,7 +28,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.Type;
  *
  * @see MethodSignature
  */
-public interface MethodSignatureBuilder extends TypeMemberBuilder {
+public interface MethodSignatureBuilder extends TypeMemberBuilder<MethodSignatureBuilder> {
 
     /**
      * Sets the flag for declaration of method as abstract or non abstract. If the flag <code>isAbstract == true</code>
@@ -37,7 +37,7 @@ public interface MethodSignatureBuilder extends TypeMemberBuilder {
      *
      * @param isAbstract is abstract flag
      */
-    public void setAbstract(boolean isAbstract);
+    public MethodSignatureBuilder setAbstract(boolean isAbstract);
 
     /**
      * Adds Parameter into the List of method parameters. Neither the Name or
@@ -50,7 +50,7 @@ public interface MethodSignatureBuilder extends TypeMemberBuilder {
      * @param type Parameter Type
      * @param name Parameter Name
      */
-    public void addParameter(final Type type, final String name);
+    public MethodSignatureBuilder addParameter(final Type type, final String name);
 
     /**
      * Returns <code>new</code> <i>immutable</i> instance of Method Signature.
index 360a141a062a85b7865f9b46d035173934fed195..bfad711bb0e06174264d62ed2a25f04e170be736 100644 (file)
@@ -6,7 +6,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.Type;
 /**
  *
  */
-public interface TypeMemberBuilder {
+public interface TypeMemberBuilder<T extends TypeMemberBuilder<T>> {
 
     /**
      * The method creates new AnnotationTypeBuilder containing specified
@@ -38,14 +38,14 @@ public interface TypeMemberBuilder {
      *
      * @param returnType Return Type of property.
      */
-    public void setReturnType(final Type returnType);
+    public T setReturnType(final Type returnType);
 
     /**
      * Sets the access modifier of property.
      *
      * @param modifier Access Modifier value.
      */
-    public void setAccessModifier(final AccessModifier modifier);
+    public T setAccessModifier(final AccessModifier modifier);
 
     /**
      * Adds String definition of comment into Method Signature definition.
@@ -55,7 +55,7 @@ public interface TypeMemberBuilder {
      *
      * @param comment Comment String.
      */
-    public void setComment(final String comment);
+    public T setComment(final String comment);
 
     /**
      * Sets the flag final for method signature. If this is set the method will be prohibited from overriding.
@@ -65,5 +65,5 @@ public interface TypeMemberBuilder {
      *
      * @param isFinal Is Final
      */
-    public void setFinal(final boolean isFinal);
+    public T setFinal(final boolean isFinal);
 }