Correct docs declaration
[mdsal.git] / binding2 / mdsal-binding2-generator-util / src / main / java / org / opendaylight / mdsal / binding / javav2 / generator / util / generated / type / builder / GeneratedTypeBuilderImpl.java
old mode 100644 (file)
new mode 100755 (executable)
index 9b0f0a5..e18bf9a
@@ -9,10 +9,16 @@
 package org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder;
 
 import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
 import java.util.List;
 import java.util.Optional;
+import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext;
+import org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil;
 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
+import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTypeForBuilder;
+import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment;
 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder;
+import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
 import org.opendaylight.yangtools.yang.common.QName;
 
 @Beta
@@ -23,22 +29,27 @@ public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder
     private String reference;
     private String moduleName;
     private List<QName> schemaPath;
+    private boolean isWithBuilder = false;
+    private String basePackageName = null;
 
-    public GeneratedTypeBuilderImpl(final String packageName, final String name) {
-        super(packageName, name);
+    public GeneratedTypeBuilderImpl(final String packageName, final String name, ModuleContext context) {
+        super(packageName, name, context);
         setAbstract(true);
     }
 
-    public GeneratedTypeBuilderImpl(final String packageName, final String name,
-                                    final boolean isPkNameNormalized,
-                                    final boolean isTypeNormalized) {
-        super(packageName, name, isPkNameNormalized, isTypeNormalized);
+    public GeneratedTypeBuilderImpl(final String packageName, final String name, final boolean isPkNameNormalized,
+            final boolean isTypeNormalized, ModuleContext context) {
+        super(packageName, name, isPkNameNormalized, isTypeNormalized, context);
         setAbstract(true);
     }
 
     @Override
     public GeneratedType toInstance() {
-        return new GeneratedTypeImpl(this);
+        if (this.isWithBuilder()) {
+            return new GeneratedTypeWithBuilderImpl(this);
+        } else {
+            return new GeneratedTypeImpl(this);
+        }
     }
 
     @Override
@@ -68,8 +79,11 @@ public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder
         builder.append(getPackageName());
         builder.append(", name=");
         builder.append(getName());
-        builder.append(", comment=");
-        builder.append(getComment());
+        final TypeComment comment = getComment();
+        if (comment != null) {
+            builder.append(", comment=");
+            builder.append(comment.getJavadoc());
+        }
         builder.append(", annotations=");
         builder.append(getAnnotations());
         builder.append(", implements=");
@@ -92,14 +106,30 @@ public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder
         return this;
     }
 
-    private static final class GeneratedTypeImpl extends AbstractGeneratedType {
+    public boolean isWithBuilder() {
+        return isWithBuilder;
+    }
+
+    public void setWithBuilder(boolean withBuilder) {
+        isWithBuilder = withBuilder;
+    }
+
+    public String getBasePackageName() {
+        return basePackageName;
+    }
+
+    public void setBasePackageName(String basePackageName) {
+        this.basePackageName = basePackageName;
+    }
+
+    private static class GeneratedTypeImpl extends AbstractGeneratedType {
 
         private final String description;
         private final String reference;
         private final String moduleName;
         private final List<QName> schemaPath;
 
-        public GeneratedTypeImpl(final GeneratedTypeBuilderImpl builder) {
+        GeneratedTypeImpl(final GeneratedTypeBuilderImpl builder) {
             super(builder);
 
             this.description = builder.description;
@@ -128,4 +158,34 @@ public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder
             return moduleName;
         }
     }
+
+    private static final class GeneratedTypeWithBuilderImpl extends GeneratedTypeImpl
+            implements GeneratedTypeForBuilder {
+
+        private final String basePackageName;
+        private final String builderPackageName;
+
+        GeneratedTypeWithBuilderImpl(GeneratedTypeBuilderImpl builder) {
+            super(builder);
+            Preconditions.checkState(builder.getBasePackageName() != null,
+                    "Base package name can not be null for type with builder!");
+            this.basePackageName = builder.getBasePackageName();
+            this.builderPackageName = generatePackageNameForBuilder();
+        }
+
+        private String generatePackageNameForBuilder() {
+            return BindingGeneratorUtil.replacePackageTopNamespace(this.basePackageName, this.getPackageName(),
+                    BindingNamespaceType.Data, BindingNamespaceType.Builder);
+        }
+
+        @Override
+        public String getPackageNameForBuilder() {
+            return this.builderPackageName;
+        }
+
+        @Override
+        public String getBasePackageName() {
+            return this.basePackageName;
+        }
+    }
 }