X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fbinding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fjava%2Fapi%2Fgenerator%2FInterfaceTemplate.xtend;fp=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fbinding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fjava%2Fapi%2Fgenerator%2FInterfaceTemplate.xtend;h=fb9d606272fd466113e1e888864facb36602956d;hb=4f104c6b522822ad1bea0ab5799eca0fa6a98d99;hp=0000000000000000000000000000000000000000;hpb=d4c36ceaa53ca2d748d8c53920617d746bb4fecb;p=controller.git diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/InterfaceTemplate.xtend b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/InterfaceTemplate.xtend new file mode 100644 index 0000000000..fb9d606272 --- /dev/null +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/InterfaceTemplate.xtend @@ -0,0 +1,153 @@ +package org.opendaylight.controller.sal.java.api.generator + +import java.util.List +import java.util.Map +import org.opendaylight.controller.binding.generator.util.TypeConstants +import org.opendaylight.controller.sal.binding.model.api.Constant +import org.opendaylight.controller.sal.binding.model.api.Enumeration +import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject +import org.opendaylight.controller.sal.binding.model.api.GeneratedType +import org.opendaylight.controller.sal.binding.model.api.MethodSignature +import org.opendaylight.controller.sal.binding.model.api.Type +import java.util.LinkedHashMap + +class InterfaceTemplate { + + val GeneratedType genType + val Map imports + val List consts + val List methods + val List enums + val List enclosedGeneratedTypes + + new(GeneratedType genType) { + if (genType == null) { + throw new IllegalArgumentException("Generated type reference cannot be NULL!") + } + + this.genType = genType + imports = GeneratorUtil.createImports(genType) + consts = genType.constantDefinitions + methods = genType.methodDefinitions + enums = genType.enumerations + enclosedGeneratedTypes = genType.enclosedTypes + } + + def generate() { + val body = generateBody + val pkgAndImports = generatePkgAndImports + return pkgAndImports.toString + body.toString + } + + def private generateBody() ''' + «genType.comment.generateComment» + «generateIfcDeclaration» { + + «generateInnerClasses» + + «generateEnums» + + «generateConstants» + + «generateMethods» + + } + + ''' + + def private generateComment(String comment) ''' + «IF comment != null && !comment.empty» + /* + «comment» + */ + «ENDIF» + ''' + + def private generateIfcDeclaration() ''' + public interface «genType.name»« + IF (!genType.implements.empty)»« + " extends "»« + FOR type : genType.implements SEPARATOR ", "»« + type.resolveName»« + ENDFOR»« + ENDIF + »''' + + def private generateInnerClasses() ''' + «IF !enclosedGeneratedTypes.empty» + «FOR innerClass : enclosedGeneratedTypes SEPARATOR "\n"» + «IF (innerClass instanceof GeneratedTransferObject)» + «val classTemplate = new ClassTemplate(innerClass as GeneratedTransferObject)» + «classTemplate.generateAsInnerClass» + «ENDIF» + «ENDFOR» + «ENDIF» + ''' + + def private generateEnums() ''' + «IF !enums.empty» + «FOR e : enums SEPARATOR "\n"» + «val enumTemplate = new EnumTemplate(e)» + «enumTemplate.generateAsInnerClass» + «ENDFOR» + «ENDIF» + ''' + + def private generateConstants() ''' + «IF !consts.empty» + «FOR c : consts» + «IF c.name != TypeConstants.PATTERN_CONSTANT_NAME» + public static final «c.type.resolveName» «c.name» = «c.value»; + «ENDIF» + «ENDFOR» + «ENDIF» + ''' + + def private generateMethods() ''' + «IF !methods.empty» + «FOR m : methods SEPARATOR "\n"» + «m.comment.generateComment» + «m.returnType.resolveName» «m.name»(«m.parameters.generateParameters»); + «ENDFOR» + «ENDIF» + ''' + + def private generateParameters(List parameters) '''« + IF !parameters.empty»« + FOR parameter : parameters SEPARATOR ", "»« + parameter.type.resolveName» «parameter.name»« + ENDFOR»« + ENDIF + »''' + + def private generatePkgAndImports() ''' + package «genType.packageName»; + + + «IF !imports.empty» + «FOR entry : resolveImports.entrySet» + import «entry.value».«entry.key»; + «ENDFOR» + «ENDIF» + + ''' + + def private Map resolveImports() { + val innerTypeImports = GeneratorUtil.createChildImports(genType) + val Map resolvedImports = new LinkedHashMap + for (Map.Entry entry : imports.entrySet() + innerTypeImports.entrySet) { + val typeName = entry.getKey(); + val packageName = entry.getValue(); + if (packageName != genType.packageName && packageName != genType.fullyQualifiedName) { + resolvedImports.put(typeName, packageName); + } + } + return resolvedImports + } + + def private resolveName(Type type) { + GeneratorUtil.putTypeIntoImports(genType, type, imports); + GeneratorUtil.getExplicitType(genType, type, imports) + } + +} \ No newline at end of file