MDSAL-301: Binding v2 - Rework javadoc generation
[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 fbe3fbe..d2d3049
@@ -9,12 +9,14 @@
 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 com.google.common.base.Preconditions;
-import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer;
+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;
@@ -27,22 +29,23 @@ 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() {
-        if (this.isDataObjectType()) {
+        if (this.isWithBuilder()) {
             return new GeneratedTypeWithBuilderImpl(this);
         } else {
             return new GeneratedTypeImpl(this);
@@ -76,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=");
@@ -100,6 +106,22 @@ public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder
         return this;
     }
 
+    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;
@@ -145,35 +167,25 @@ public final class GeneratedTypeBuilderImpl extends AbstractGeneratedTypeBuilder
 
         public 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() {
-            Preconditions.checkArgument(this.basePackageName != null);
-            String normalizeBasePackageName = JavaIdentifierNormalizer.normalizeFullPackageName(this.basePackageName);
-
-            if (!normalizeBasePackageName.equals(this.getPackageName())) {
-                final String baseName = new StringBuilder(normalizeBasePackageName)
-                        .append(".").append(BindingNamespaceType.Data.getPackagePrefix()).toString();
-
-                Preconditions.checkState(this.getPackageName().contains(baseName),
-                        "Package name does not contain base name!");
-
-                return new StringBuilder(normalizeBasePackageName)
-                        .append(".")
-                        .append(BindingNamespaceType.Builder.getPackagePrefix())
-                        .append(this.getPackageName().substring(baseName.length()))
-                        .toString();
-            } else {
-                return new StringBuilder(normalizeBasePackageName)
-                        .append(".").append(BindingNamespaceType.Builder.getPackagePrefix()).toString();
-            }
+            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;
+        }
     }
 }