import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedPropertyBuilder;
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder;
+import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder;
import org.opendaylight.mdsal.binding.javav2.spec.base.BaseIdentity;
import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
}
}
- if (namespaceType.equals(BindingNamespaceType.Data)) {
+ //TODO: it's not correct for some special cases
+ if (namespaceType.equals(BindingNamespaceType.Data) && !(schemaNode instanceof GroupingDefinition)) {
it.addImplementsType(BindingTypes.augmentable(it));
}
final GeneratedTypeBuilder genType = processDataSchemaNode(module, basePackageName, childOf, node,
schemaContext, verboseClassComments, genCtx, genTypeBuilders, typeProvider, namespaceType);
if (genType != null) {
- constructGetter(parent, node.getQName().getLocalName(), node.getDescription(), genType, node.getStatus());
+ StringBuilder getterName = new StringBuilder(node.getQName().getLocalName());
+ if (!namespaceType.equals(BindingNamespaceType.Data)) {
+ getterName.append('_').append(BindingNamespaceType.Data);
+ }
+ final MethodSignatureBuilder getter = constructGetter(parent, getterName.toString(), node.getDescription(), genType, node.getStatus());
+ if (!namespaceType.equals(BindingNamespaceType.Data)) {
+ getter.setAccessModifier(AccessModifier.DEFAULT);
+ }
resolveDataSchemaNodes(module, basePackageName, genType, genType, node.getChildNodes(), genCtx,
schemaContext, verboseClassComments, genTypeBuilders, typeProvider, namespaceType);
}
private static Type resolveLeafSchemaNodeAsMethod(final String nodeName, final SchemaContext schemaContext,
final GeneratedTypeBuilder typeBuilder, final Map<Module, ModuleContext> genCtx, final LeafSchemaNode leaf,
final Module module, final TypeProvider typeProvider) {
- if (leaf == null || typeBuilder == null || leaf.isAddedByUses()) {
+ if (leaf == null || typeBuilder == null) {
return null;
}
final boolean verboseClassComments, Map<Module, ModuleContext> genCtx, final Map<String, Map<String,
GeneratedTypeBuilder>> genTypeBuilders, final TypeProvider typeProvider, final BindingNamespaceType namespaceType) {
- if (node.isAugmenting() || node.isAddedByUses()) {
+ if (node.isAugmenting()) {
return null;
}
final String packageName = packageNameForGeneratedType(basePackageName, node.getPath(), namespaceType);
--- /dev/null
+module class-type-test {\r
+\r
+ description "ODL BGPCEP snippet challenge";\r
+\r
+ prefix "class";\r
+ namespace "org.class.type.test";\r
+\r
+ container my-cont { //data.myCont, dto.myContBuilder\r
+ uses classtype-object; //data.my_cont.ClassType, dto.my_cont.ClassTypeBuilder\r
+ }\r
+\r
+ typedef class-type { //type.classType\r
+ type uint8 {\r
+ range 1..7;\r
+ }\r
+ }\r
+\r
+ grouping classtype-object { //grp.ClassTypeObjectGrouping\r
+ container class-type { //grp.classtype_object.ClassTypeData\r
+ leaf class-type { //public type.ClassType getClassType()\r
+ type class-type;\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file
import com.google.common.annotations.Beta;
import com.google.common.base.CharMatcher;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Interner;
import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
return generateNormalizedPackageName(parentAugmentPackageName, last);
}
+ public static String packageNameForSubGeneratedType(final String parentPackageName,
+ final SchemaNode node) {
+ final QName last = node.getPath().getLastComponent();
+
+ return generateNormalizedPackageName(parentPackageName, last);
+ }
+
+ public static String replacePackageTopNamespace(final String basePackageName,
+ final String toReplacePackageName,
+ final BindingNamespaceType toReplaceNameSpace,
+ final BindingNamespaceType replacedNameSpace) {
+ Preconditions.checkArgument(basePackageName != null);
+ String normalizeBasePackageName = JavaIdentifierNormalizer.normalizeFullPackageName(basePackageName);
+
+ if (!normalizeBasePackageName.equals(toReplacePackageName)) {
+ final String topPackageName = new StringBuilder(normalizeBasePackageName)
+ .append('.').append(toReplaceNameSpace.getPackagePrefix()).toString();
+
+ Preconditions.checkState(toReplacePackageName.equals(topPackageName)
+ || toReplacePackageName.contains(topPackageName),
+ "Package name to replace does not belong to the given namespace to replace!");
+
+ return new StringBuilder(normalizeBasePackageName)
+ .append('.')
+ .append(replacedNameSpace.getPackagePrefix())
+ .append(toReplacePackageName.substring(topPackageName.length()))
+ .toString();
+ } else {
+ return new StringBuilder(normalizeBasePackageName)
+ .append('.').append(replacedNameSpace.getPackagePrefix()).toString();
+ }
+ }
+
private static final ThreadLocal<MessageDigest> SHA1_MD = new ThreadLocal<MessageDigest>() {
@Override
protected MessageDigest initialValue() {
import java.util.List;
import java.util.Optional;
import com.google.common.base.Preconditions;
+import org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil;
import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer;
import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTypeForBuilder;
}
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().equals(baseName)
- || 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
/**
* @return package definition for template
*/
- private String packageDefinition() {
+ protected String packageDefinition() {
final StringBuilder sb = new StringBuilder();
sb.append("package ")
.append(type.getPackageName())
* @param importedTypePackageName imported types package name
* @return equals packages
*/
- private boolean hasSamePackage(final String importedTypePackageName) {
+ protected boolean hasSamePackage(final String importedTypePackageName) {
return type.getPackageName().equals(importedTypePackageName);
}
import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty;
import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
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.MethodSignature;
import org.opendaylight.mdsal.binding.javav2.model.api.ParameterizedType;
import org.opendaylight.mdsal.binding.javav2.model.api.Type;
super(type);
this.properties = propertiesFromMethods(createMethods());
putToImportMap(Builder.class.getSimpleName(), Builder.class.getPackage().getName());
+ putToImportMap(type.getName(), type.getPackageName());
+ }
+
+ @Override
+ protected String packageDefinition() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("package ")
+ .append(((GeneratedTypeForBuilder)getType()).getPackageNameForBuilder())
+ .append(";\n\n");
+ return sb.toString();
+ }
+
+ @Override
+ protected boolean hasSamePackage(final String importedTypePackageName) {
+ return ((GeneratedTypeForBuilder)getType()).getPackageNameForBuilder()
+ .equals(importedTypePackageName);
}
/**
getRestrictions(field.getReturnType).getLengthConstraints)}
}
}
- public @{genType.getName}Builder set@{toFirstUpper(field.getName)}(final @{field.getReturnType.getName} value) {
+
+ public @{genType.getName}Builder set@{toFirstUpper(field.getName)}(final @{field.getReturnType.getFullyQualifiedName} value) {
@if(!field.getReturnType.isInstanceOf[GeneratedType] && getRestrictions(field.getReturnType) != null) {
if (value != null) {
@if(getRestrictions(field.getReturnType).getRangeConstraints != null && !getRestrictions(field.getReturnType).getRangeConstraints.isEmpty) {