X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=code-generator%2Fbinding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fsal%2Fjava%2Fapi%2Fgenerator%2FInterfaceTemplate.xtend;h=606fd753718b096bee210193b44231bd9ef3318c;hb=157ebf5fe763a9572121e1a2d9043d1ce3bbb4c7;hp=d1352f8e57b509e8f26ef193f8b401cbb09aba2d;hpb=ec56ea485701a02467ccd61cf82e1fd97a98d5ed;p=mdsal.git diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/InterfaceTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/InterfaceTemplate.xtend index d1352f8e57..606fd75371 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/InterfaceTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/InterfaceTemplate.xtend @@ -1,201 +1,184 @@ -package org.opendaylight.yangtools.sal.java.api.generator - -import java.util.List -import org.opendaylight.yangtools.binding.generator.util.TypeConstants -import org.opendaylight.yangtools.sal.binding.model.api.Constant -import org.opendaylight.yangtools.sal.binding.model.api.Enumeration -import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject -import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.sal.java.api.generator + +import java.util.List +import org.opendaylight.yangtools.binding.generator.util.TypeConstants +import org.opendaylight.yangtools.sal.binding.model.api.Constant +import org.opendaylight.yangtools.sal.binding.model.api.Enumeration +import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject +import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType -/** - * Template for generating JAVA interfaces. - */ -class InterfaceTemplate extends BaseTemplate { - - /** - * List of constant instances which are generated as JAVA public static final attributes. - */ - val List consts - - /** - * List of method signatures which are generated as method declarations. - */ - val List methods - - /** - * List of enumeration which are generated as JAVA enum type. - */ - val List enums - - /** - * List of generated types which are enclosed inside genType - */ - val List enclosedGeneratedTypes - - /** - * Creates the instance of this class which is used for generating the interface file source - * code from genType. - * - * @throws IllegalArgumentException if genType equals null - */ - new(GeneratedType genType) { - super(genType) - if (genType == null) { - throw new IllegalArgumentException("Generated type reference cannot be NULL!") - } - - consts = genType.constantDefinitions - methods = genType.methodDefinitions - enums = genType.enumerations - enclosedGeneratedTypes = genType.enclosedTypes - } - - - - /** - * Template method which generate the whole body of the interface. - * - * @return string with code for interface body in JAVA format - */ - override body() ''' - «type.comment.generateComment» - public interface «type.name» - «superInterfaces» - { - - «generateInnerClasses» - - «generateEnums» - - «generateConstants» - - «generateMethods» - - } - - ''' - - /** - * Template method which generates JAVA comment. - * - * @param comment - * string with the comment for whole JAVA interface - * @return string with comment in JAVA format - */ - def private generateComment(String comment) ''' - «IF comment != null && !comment.empty» - /* - «comment» - */ - «ENDIF» - ''' - - def private generateAnnotations(List annotations) ''' - «IF annotations != null && !annotations.empty» - «FOR annotation : annotations» - @«annotation.name» - «IF annotation.parameters != null && !annotation.parameters.empty» - ( - «FOR param : annotation.parameters SEPARATOR ","» - «param.name»=«param.value» - «ENDFOR» - ) - «ENDIF» - «ENDFOR» - «ENDIF» - ''' - - /** - * Template method which generates the interface name declaration. - * - * @return string with the code for the interface declaration in JAVA format - */ - def private superInterfaces() - ''' - «IF (!type.implements.empty)» - extends - «FOR type : type.implements SEPARATOR ","» - «type.importedName» - «ENDFOR» - « ENDIF» - ''' - /** - * Template method which generates inner classes inside this interface. - * - * @return string with the source code for inner classes in JAVA format - */ - 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» - ''' - - /** - * Template method which generates JAVA enum type. - * - * @return string with inner enum source code in JAVA format - */ - def private generateEnums() ''' - «IF !enums.empty» - «FOR e : enums SEPARATOR "\n"» - «val enumTemplate = new EnumTemplate(e)» - «enumTemplate.generateAsInnerClass» - «ENDFOR» - «ENDIF» - ''' - - /** - * Template method wich generates JAVA constants. - * - * @return string with constants in JAVA format - */ - def private generateConstants() ''' - «IF !consts.empty» - «FOR c : consts» - «IF c.name != TypeConstants.PATTERN_CONSTANT_NAME» - public static final «c.type.importedName» «c.name» = «c.value»; - «ENDIF» - «ENDFOR» - «ENDIF» - ''' - - /** - * Template method which generates the declaration of the methods. - * - * @return string with the declaration of methods source code in JAVA format - */ - def private generateMethods() ''' - «IF !methods.empty» - «FOR m : methods SEPARATOR "\n"» - «m.comment.generateComment» - «m.annotations.generateAnnotations» - «m.returnType.importedName» «m.name»(«m.parameters.generateParameters»); - «ENDFOR» - «ENDIF» - ''' - - /** - * Template method which generates method parameters with their types from parameters. - * - * @param parameters - * list of parameter instances which are transformed to the method parameters - * @return string with the list of the method parameters with their types in JAVA format - */ - def private generateParameters(List parameters) '''« - IF !parameters.empty»« - FOR parameter : parameters SEPARATOR ", "»« - parameter.type.importedName» «parameter.name»« - ENDFOR»« - ENDIF - »''' - - -} - +/** + * Template for generating JAVA interfaces. + */ +class InterfaceTemplate extends BaseTemplate { + + /** + * List of constant instances which are generated as JAVA public static final attributes. + */ + val List consts + + /** + * List of method signatures which are generated as method declarations. + */ + val List methods + + /** + * List of enumeration which are generated as JAVA enum type. + */ + val List enums + + /** + * List of generated types which are enclosed inside genType + */ + val List enclosedGeneratedTypes + + /** + * Creates the instance of this class which is used for generating the interface file source + * code from genType. + * + * @throws IllegalArgumentException if genType equals null + */ + new(GeneratedType genType) { + super(genType) + if (genType == null) { + throw new IllegalArgumentException("Generated type reference cannot be NULL!") + } + + consts = genType.constantDefinitions + methods = genType.methodDefinitions + enums = genType.enumerations + enclosedGeneratedTypes = genType.enclosedTypes + } + + /** + * Template method which generate the whole body of the interface. + * + * @return string with code for interface body in JAVA format + */ + override body() ''' + «wrapToDocumentation(formatDataForJavaDoc(type))» + public interface «type.name» + «superInterfaces» + { + + «generateInnerClasses» + + «generateEnums» + + «generateConstants» + + «generateMethods» + + } + + ''' + + + def private generateAnnotations(List annotations) ''' + «IF annotations != null && !annotations.empty» + «FOR annotation : annotations» + @«annotation.importedName» + «IF annotation.parameters != null && !annotation.parameters.empty» + ( + «FOR param : annotation.parameters SEPARATOR ","» + «param.name»=«param.value» + «ENDFOR» + ) + «ENDIF» + «ENDFOR» + «ENDIF» + ''' + + /** + * Template method which generates the interface name declaration. + * + * @return string with the code for the interface declaration in JAVA format + */ + def private superInterfaces() + ''' + «IF (!type.implements.empty)» + extends + «FOR type : type.implements SEPARATOR ","» + «type.importedName» + «ENDFOR» + « ENDIF» + ''' + + /** + * Template method which generates inner classes inside this interface. + * + * @return string with the source code for inner classes in JAVA format + */ + def private generateInnerClasses() ''' + «IF !enclosedGeneratedTypes.empty» + «FOR innerClass : enclosedGeneratedTypes SEPARATOR "\n"» + «IF (innerClass instanceof GeneratedTransferObject)» + «IF innerClass.unionType» + «val unionTemplate = new UnionTemplate(innerClass)» + «unionTemplate.generateAsInnerClass» + «this.importMap.putAll(unionTemplate.importMap)» + «ELSE» + «val classTemplate = new ClassTemplate(innerClass)» + «classTemplate.generateAsInnerClass» + «this.importMap.putAll(classTemplate.importMap)» + «ENDIF» + + «ENDIF» + «ENDFOR» + «ENDIF» + ''' + + /** + * Template method which generates JAVA enum type. + * + * @return string with inner enum source code in JAVA format + */ + def private generateEnums() ''' + «IF !enums.empty» + «FOR e : enums SEPARATOR "\n"» + «val enumTemplate = new EnumTemplate(e)» + «enumTemplate.generateAsInnerClass» + «ENDFOR» + «ENDIF» + ''' + + /** + * Template method wich generates JAVA constants. + * + * @return string with constants in JAVA format + */ + def private generateConstants() ''' + «IF !consts.empty» + «FOR c : consts» + «IF c.name != TypeConstants.PATTERN_CONSTANT_NAME» + public static final «c.type.importedName» «c.name» = «c.value»; + «ENDIF» + «ENDFOR» + «ENDIF» + ''' + + /** + * Template method which generates the declaration of the methods. + * + * @return string with the declaration of methods source code in JAVA format + */ + def private generateMethods() ''' + «IF !methods.empty» + «FOR m : methods SEPARATOR "\n"» + «m.comment.asJavadoc» + «m.annotations.generateAnnotations» + «m.returnType.importedName» «m.name»(«m.parameters.generateParameters»); + «ENDFOR» + «ENDIF» + ''' + +} +