X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fjava%2Fapi%2Fgenerator%2FBaseTemplate.xtend;h=5d3c27f224730650771a90f5eed3ddc1873e0583;hb=d396ffad163ba838868eb19803f388e3adfc74db;hp=24ea00a0191f132dac0c1568ba06e06802bc5be0;hpb=99459c3a8270ef41ff6c95f88f2db7bc1b278269;p=mdsal.git
diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend
index 24ea00a019..5d3c27f224 100644
--- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend
+++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend
@@ -7,14 +7,12 @@
*/
package org.opendaylight.mdsal.binding.java.api.generator
-import static extension org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.encodeAngleBrackets
-import static extension org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.replaceAllIllegalChars
+import static extension org.opendaylight.mdsal.binding.generator.BindingGeneratorUtil.encodeAngleBrackets
+import static org.opendaylight.mdsal.binding.model.ri.Types.STRING;
+import static org.opendaylight.mdsal.binding.model.ri.Types.objectType;
import com.google.common.base.CharMatcher
import com.google.common.base.Splitter
-import com.google.common.collect.ImmutableMap
-import com.google.common.collect.Iterables
-import java.math.BigInteger
import java.util.Collection
import java.util.List
import java.util.Locale
@@ -33,49 +31,17 @@ import org.opendaylight.mdsal.binding.model.api.MethodSignature
import org.opendaylight.mdsal.binding.model.api.Restrictions
import org.opendaylight.mdsal.binding.model.api.Type
import org.opendaylight.mdsal.binding.model.api.TypeMemberComment
-import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition.Single
-import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition.Multiple
-import org.opendaylight.mdsal.binding.model.util.TypeConstants
-import org.opendaylight.mdsal.binding.model.util.Types
+import org.opendaylight.mdsal.binding.model.ri.TypeConstants
import org.opendaylight.mdsal.binding.spec.naming.BindingMapping
-import org.opendaylight.yangtools.yang.common.QName
-import org.opendaylight.yangtools.yang.common.Uint8
-import org.opendaylight.yangtools.yang.common.Uint16
-import org.opendaylight.yangtools.yang.common.Uint32
-import org.opendaylight.yangtools.yang.common.Uint64
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode
-import org.opendaylight.yangtools.yang.model.api.NotificationDefinition
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition
-import org.opendaylight.yangtools.yang.model.api.SchemaNode
-import org.opendaylight.yangtools.yang.model.api.YangStmtMapping
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement
-import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement
-import org.opendaylight.yangtools.yang.model.export.DeclaredStatementFormatter
+import org.opendaylight.yangtools.yang.binding.BaseIdentity
@SuppressModernizer
abstract class BaseTemplate extends JavaFileTemplate {
static final char NEW_LINE = '\n'
static final char SPACE = ' '
- static val AMP_MATCHER = CharMatcher.is('&')
static val WS_MATCHER = CharMatcher.anyOf("\n\t")
static val SPACES_PATTERN = Pattern.compile(" +")
static val NL_SPLITTER = Splitter.on(NEW_LINE)
- static val TAIL_COMMENT_PATTERN = Pattern.compile("*/", Pattern.LITERAL);
- static val YANG_FORMATTER = DeclaredStatementFormatter.builder()
- .addIgnoredStatement(YangStmtMapping.CONTACT)
- .addIgnoredStatement(YangStmtMapping.DESCRIPTION)
- .addIgnoredStatement(YangStmtMapping.REFERENCE)
- .addIgnoredStatement(YangStmtMapping.ORGANIZATION)
- .build();
-
- protected static val UINT_TYPES = ImmutableMap.of(
- Types.typeForClass(Uint8), Types.typeForClass(Short),
- Types.typeForClass(Uint16), Types.typeForClass(Integer),
- Types.typeForClass(Uint32), Types.typeForClass(Long),
- Types.typeForClass(Uint64), Types.typeForClass(BigInteger)
- );
new(GeneratedType type) {
super(type)
@@ -102,20 +68,6 @@ abstract class BaseTemplate extends JavaFileTemplate {
"_" + property.name
}
- final protected static def propertyNameFromGetter(MethodSignature getter) {
- var String prefix;
- if (getter.name.startsWith(BindingMapping.BOOLEAN_GETTER_PREFIX)) {
- prefix = BindingMapping.BOOLEAN_GETTER_PREFIX
- } else if (getter.name.startsWith(BindingMapping.GETTER_PREFIX)) {
- prefix = BindingMapping.GETTER_PREFIX
- } else if (getter.name.startsWith(BindingMapping.NONNULL_PREFIX)) {
- prefix = BindingMapping.NONNULL_PREFIX
- } else {
- throw new IllegalArgumentException(getter + " is not a getter")
- }
- return getter.name.substring(prefix.length).toFirstLower;
- }
-
/**
* Template method which generates the getter method for field
*
@@ -124,7 +76,8 @@ abstract class BaseTemplate extends JavaFileTemplate {
* @return string with the getter method source code in JAVA format
*/
protected def getterMethod(GeneratedProperty field) '''
- public «field.returnType.importedName» «field.getterMethodName»() {
+ «val methodName = field.getterMethodName»
+ public «field.returnType.importedName» «methodName»() {
«val fieldName = field.fieldName»
«IF field.returnType.name.endsWith("[]")»
return «fieldName» == null ? null : «fieldName».clone();
@@ -135,8 +88,7 @@ abstract class BaseTemplate extends JavaFileTemplate {
'''
final protected def getterMethodName(GeneratedProperty field) {
- val prefix = if(field.returnType.equals(Types.BOOLEAN)) "is" else "get"
- return '''«prefix»«field.name.toFirstUpper»'''
+ return '''«BindingMapping.GETTER_PREFIX»«field.name.toFirstUpper»'''
}
/**
@@ -237,14 +189,6 @@ abstract class BaseTemplate extends JavaFileTemplate {
'''.toString
}
- def static encodeJavadocSymbols(String description) {
- if (description.nullOrEmpty) {
- return description;
- }
-
- return TAIL_COMMENT_PATTERN.matcher(AMP_MATCHER.replaceFrom(description, "&")).replaceAll("*/")
- }
-
def protected String formatDataForJavaDoc(GeneratedType type, String additionalComment) {
val comment = type.comment
if (comment === null) {
@@ -266,80 +210,6 @@ abstract class BaseTemplate extends JavaFileTemplate {
'''
}
- def private static void appendSnippet(StringBuilder sb, GeneratedType type) {
- val optDef = type.yangSourceDefinition
- if (optDef.present) {
- val def = optDef.get
- sb.append(NEW_LINE)
-
- if (def instanceof Single) {
- val node = def.node
- sb.append("
\n") - .append("This class represents the following YANG schema fragment defined in module ") - .append(def.module.argument).append("\n") - .append("
\n") - appendYangSnippet(sb, def.module, (node as EffectiveStatement, ?>).declared) - sb.append("") - - if (node instanceof SchemaNode) { - sb.append("The schema path to identify an instance is\n") - .append("") - .append(formatSchemaPath(def.module.argument.localName, node.path.pathFromRoot)) - .append("\n") - - if (hasBuilderClass(node)) { - val builderName = type.name + "Builder"; - - sb.append("\n
To create instances of this class use {@link ").append(builderName) - .append("}.\n") - .append("@see ").append(builderName).append('\n') - if (node instanceof ListSchemaNode) { - val keyDef = node.keyDefinition - if (keyDef !== null && !keyDef.empty) { - sb.append("@see ").append(type.name).append("Key") - } - sb.append('\n'); - } - } - } - } else if (def instanceof Multiple) { - sb.append("
\n") - for (SchemaNode node : def.nodes) { - appendYangSnippet(sb, def.module, (node as EffectiveStatement, ?>).declared) - } - sb.append("\n") - } - } - } - - def private static void appendYangSnippet(StringBuilder sb, ModuleEffectiveStatement module, - DeclaredStatement> stmt) { - for (String str : YANG_FORMATTER.toYangTextSnippet(module, stmt)) { - sb.append(str.encodeJavadocSymbols.encodeAngleBrackets.replaceAllIllegalChars) - } - } - - def private static boolean hasBuilderClass(SchemaNode schemaNode) { - return schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode - || schemaNode instanceof RpcDefinition || schemaNode instanceof NotificationDefinition; - } - - def private static String formatSchemaPath(String moduleName, Iterable
@@ -362,13 +232,9 @@ abstract class BaseTemplate extends JavaFileTemplate { lastChar = text.charAt(text.length - 1) badEnding = true } - sb.append("") - sb.append(tempText) - sb.append("") + sb.append("").append(tempText).append("") - if(badEnding) + if (badEnding) sb.append(lastChar) return sb.toString @@ -429,7 +295,38 @@ abstract class BaseTemplate extends JavaFileTemplate { def protected emitConstant(Constant c) ''' «IF BindingMapping.QNAME_STATIC_FIELD_NAME.equals(c.name)» «val entry = c.value as Entry» + /** + * YANG identifier of the statement represented by this class. + */ public static final «c.type.importedNonNull» «c.name» = «entry.key.importedName».«BindingMapping.MODULE_INFO_QNAMEOF_METHOD_NAME»("«entry.value»"); + «ELSEIF BindingMapping.VALUE_STATIC_FIELD_NAME.equals(c.name) && BaseIdentity.equals(c.value)» + «val typeName = c.type.importedName» + «val override = OVERRIDE.importedName» + /** + * Singleton value representing the {@link «typeName»} identity. + */ + public static final «c.type.importedNonNull» «c.name» = new «typeName»() { + @«override» + public «CLASS.importedName»<«typeName»> «BindingMapping.BINDING_CONTRACT_IMPLEMENTED_INTERFACE_NAME»() { + return «typeName».class; + } + + @«override» + public int hashCode() { + return «typeName».class.hashCode(); + } + + @«override» + public boolean equals(final «objectType.importedName» obj) { + return obj == this || obj instanceof «typeName» + && «typeName».class.equals(((«typeName») obj).«BindingMapping.BINDING_CONTRACT_IMPLEMENTED_INTERFACE_NAME»()); + } + + @«override» + public «STRING.importedName» toString() { + return «MOREOBJECTS.importedName».toStringHelper("«c.type.name»").add("qname", QNAME).toString(); + } + }; «ELSE» public static final «c.type.importedName» «c.name» = «c.value»; «ENDIF»