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
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
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=");
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;
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;
+ }
+ }
}