X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=code-generator%2Fbinding-generator-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fsal%2Fbinding%2Fgenerator%2Fimpl%2FTransformerGenerator.xtend;h=0dc904b1083b907bc76dce4abd7d37c653fc43f2;hb=9493158709cd004ef2e20dcdbfd96ab8f6e95e53;hp=0103e69add6ca88482b4d978c7b02e74f664bb5d;hpb=dd6efbbb34963143efd4fb6810fb422fc17470f1;p=yangtools.git diff --git a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/TransformerGenerator.xtend b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/TransformerGenerator.xtend index 0103e69add..0dc904b108 100644 --- a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/TransformerGenerator.xtend +++ b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/TransformerGenerator.xtend @@ -72,6 +72,7 @@ import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit import java.util.Set import org.opendaylight.yangtools.sal.binding.generator.util.XtendHelper import org.opendaylight.yangtools.yang.model.api.NotificationDefinition +import org.opendaylight.yangtools.yang.binding.BindingMapping class TransformerGenerator { @@ -113,6 +114,9 @@ class TransformerGenerator { @Property var GeneratorListener listener; + @Property + var extension GeneratedClassLoadingStrategy classLoadingStrategy + public static val CLASS_TYPE = Types.typeForClass(Class); public new(ClassPool pool) { @@ -121,6 +125,8 @@ class TransformerGenerator { BINDING_CODEC = BindingCodec.asCtClass; ctQName = QName.asCtClass + + classLoadingStrategy = GeneratedClassLoadingStrategy.TCCLClassLoadingStrategy; } def Class, Object>> transformerFor(Class inputType) { @@ -154,7 +160,7 @@ class TransformerGenerator { typeSpecBuilder = pathToType.get(node.path); } var schemaNode = typeToSchemaNode.get(ref); - if(schemaNode === null) { + if (schemaNode === null) { schemaNode = node; } checkState(typeSpecBuilder !== null, "Could not find TypeDefinition for %s, $s", inputType.name, node); @@ -198,7 +204,7 @@ class TransformerGenerator { def Class, Object>> keyTransformerForIdentifiable(Class parentType) { return withClassLoaderAndLock(parentType.classLoader, lock) [ | val inputName = parentType.name + "Key"; - val inputType = loadClassWithTCCL(inputName); + val inputType = loadClass(inputName); val ret = getGeneratedClass(inputType) if (ret !== null) { return ret as Class, Object>>; @@ -247,24 +253,24 @@ class TransformerGenerator { private def Class getGeneratedClass(Class cls) { try { - return loadClassWithTCCL(cls.codecClassName) + return loadClass(cls.codecClassName) } catch (ClassNotFoundException e) { return null; } } private def Class keyTransformer(GeneratedType type, ListSchemaNode node) { - val cls = loadClassWithTCCL(type.resolvedName + "Key"); + val cls = loadClass(type.resolvedName + "Key"); keyTransformerFor(cls, type, node); } private def serializer(Type type, DataSchemaNode node) { - val cls = loadClassWithTCCL(type.resolvedName); + val cls = loadClass(type.resolvedName); transformerFor(cls, node); } private def Class valueSerializer(GeneratedTransferObject type, TypeDefinition typeDefinition) { - val cls = loadClassWithTCCL(type.resolvedName); + val cls = loadClass(type.resolvedName); val transformer = cls.generatedClass; if (transformer !== null) { return transformer; @@ -281,7 +287,7 @@ class TransformerGenerator { } private def Class valueSerializer(Enumeration type, TypeDefinition typeDefinition) { - val cls = loadClassWithTCCL(type.resolvedName); + val cls = loadClass(type.resolvedName); val transformer = cls.generatedClass; if (transformer !== null) { return transformer; @@ -543,7 +549,7 @@ class TransformerGenerator { bodyChecked = ''' { «QName.name» _localQName = QNAME; - + if($2 == null) { return null; } @@ -552,12 +558,12 @@ class TransformerGenerator { «type.builderName» _builder = new «type.builderName»(); boolean _is_empty = true; «FOR child : node.childNodes» - «val signature = properties.getFor(child)» - «deserializeProperty(child, signature.value, signature.key)» - _builder.«signature.key.toSetter»(«signature.key»); + «val signature = properties.getFor(child)» + «deserializeProperty(child, signature.value, signature.key)» + _builder.«signature.key.toSetter»(«signature.key»); «ENDFOR» if(_is_empty) { - return null; + return null; } return _builder.build(); } @@ -675,7 +681,7 @@ class TransformerGenerator { '''; } } - + private def String deserializeBodyWithAugmentations(GeneratedType type, DataNodeContainer node) ''' { «QName.name» _localQName = «QName.name».create($1,QNAME.getLocalName()); @@ -694,9 +700,9 @@ class TransformerGenerator { private def dispatch String deserializeBodyImpl(GeneratedType type, SchemaNode node) ''' { «QName.name» _localQName = «QName.name».create($1,QNAME.getLocalName()); - + if($2 == null) { - return null; + return null; } java.util.Map _compositeNode = (java.util.Map) $2; «type.builderName» _builder = new «type.builderName»(); @@ -721,15 +727,15 @@ class TransformerGenerator { ''' private def dispatch String deserializeBodyImpl(GeneratedType type, ContainerSchemaNode node) { - return deserializeBodyWithAugmentations(type,node); + return deserializeBodyWithAugmentations(type, node); } - + private def dispatch String deserializeBodyImpl(GeneratedType type, NotificationDefinition node) { - return deserializeBodyWithAugmentations(type,node); + return deserializeBodyWithAugmentations(type, node); } - private def dispatch String deserializeBodyImpl(GeneratedType type, ChoiceCaseNode node) { - return deserializeBodyWithAugmentations(type,node); + private def dispatch String deserializeBodyImpl(GeneratedType type, ChoiceCaseNode node) { + return deserializeBodyWithAugmentations(type, node); } private def deserializeDataNodeContainerBody(GeneratedType type, DataNodeContainer node) { @@ -787,7 +793,7 @@ class TransformerGenerator { _hasNext = _iterator.hasNext(); } } - + ////System.out.println(" list" + «propertyName»); ''' @@ -878,9 +884,9 @@ class TransformerGenerator { bodyChecked = ''' { ////System.out.println("«inputType.simpleName»#toDomValue: "+$1); - + if($1 == null) { - return null; + return null; } «typeSpec.resolvedName» _encapsulatedValue = («typeSpec.resolvedName») $1; ////System.out.println("«inputType.simpleName»#toDomValue:Enc: "+_encapsulatedValue); @@ -903,9 +909,9 @@ class TransformerGenerator { bodyChecked = ''' { ////System.out.println("«inputType.simpleName»#fromDomValue: "+$1); - + if($1 == null) { - return null; + return null; } «returnType.resolvedName» _simpleValue = «deserializeValue(returnType, "$1", null)»; «typeSpec.resolvedName» _value = new «typeSpec.resolvedName»(_simpleValue); @@ -937,7 +943,7 @@ class TransformerGenerator { try { val ctCls = createClass(typeSpec.codecClassName) [ val properties = typeSpec.allProperties; - val getterToTypeDefinition = XtendHelper.getTypes(typeDef).toMap[type | type.QName.getterName]; + val getterToTypeDefinition = XtendHelper.getTypes(typeDef).toMap[type|type.QName.getterName]; //staticField(Map,"AUGMENTATION_SERIALIZERS"); if (inputType.isYangBindingAvailable) { implementsType(BINDING_CODEC) @@ -948,25 +954,25 @@ class TransformerGenerator { method(Object, "toDomValue", Object) [ modifiers = PUBLIC + FINAL + STATIC val ctSpec = inputType.asCtClass; - bodyChecked = ''' { ////System.out.println("«inputType.simpleName»#toDomValue: "+$1); - + if($1 == null) { - return null; + return null; } «typeSpec.resolvedName» _value = («typeSpec.resolvedName») $1; «FOR property : properties.entrySet» - «IF property.key != "getValue"» - «property.value.resolvedName» «property.key» = («property.value.resolvedName») _value.«property. + «IF property.key != "getValue"» + «property.value.resolvedName» «property.key» = («property.value.resolvedName») _value.«property. key»(); - if(«property.key» != null) { - return «serializeValue(property.value, property.key, getterToTypeDefinition.get(property.key))»; - } - «ENDIF» + if(«property.key» != null) { + return «serializeValue(property.value, property.key, + getterToTypeDefinition.get(property.key))»; + } + «ENDIF» «ENDFOR» - + return null; } ''' @@ -983,13 +989,13 @@ class TransformerGenerator { bodyChecked = ''' { ////System.out.println("«inputType.simpleName»#fromDomValue: "+$1); - + if($1 == null) { - return null; + return null; } if($1 instanceof String) { - String _simpleValue = (String) $1; - return new «typeSpec.resolvedName»(_simpleValue.toCharArray()); + String _simpleValue = (String) $1; + return new «typeSpec.resolvedName»(_simpleValue.toCharArray()); } return null; } @@ -1014,7 +1020,6 @@ class TransformerGenerator { } } - private def dispatch Class, Object>> generateValueTransformer( Class inputType, GeneratedTransferObject typeSpec, BitsTypeDefinition typeDef) { try { @@ -1032,23 +1037,23 @@ class TransformerGenerator { bodyChecked = ''' { ////System.out.println("«inputType.simpleName»#toDomValue: "+$1); - + if($1 == null) { - return null; + return null; } «typeSpec.resolvedName» _encapsulatedValue = («typeSpec.resolvedName») $1; «HashSet.resolvedName» _value = new «HashSet.resolvedName»(); //System.out.println("«inputType.simpleName»#toDomValue:Enc: "+_encapsulatedValue); - + «FOR bit : typeDef.bits» - «val getter = bit.getterName()» - if(Boolean.TRUE.equals(_encapsulatedValue.«getter»())) { - _value.add("«bit.name»"); - } + «val getter = bit.getterName()» + if(Boolean.TRUE.equals(_encapsulatedValue.«getter»())) { + _value.add("«bit.name»"); + } «ENDFOR» «Set.resolvedName» _domValue = «Collections.resolvedName».unmodifiableSet(_value); //System.out.println("«inputType.simpleName»#toDomValue:DeEnc: "+_domValue); - + return _domValue; } ''' @@ -1066,15 +1071,15 @@ class TransformerGenerator { bodyChecked = ''' { //System.out.println("«inputType.simpleName»#fromDomValue: "+$1); - + if($1 == null) { - return null; + return null; } «Set.resolvedName» _domValue = («Set.resolvedName») $1; «FOR bit : sortedBits» - Boolean «bit.propertyName» = Boolean.valueOf(_domValue.contains("«bit.name»")); + Boolean «bit.propertyName» = Boolean.valueOf(_domValue.contains("«bit.name»")); «ENDFOR» - + return new «inputType.resolvedName»(«FOR bit : sortedBits SEPARATOR ","»«bit.propertyName»«ENDFOR»); } ''' @@ -1318,19 +1323,19 @@ class TransformerGenerator { ''' private def dispatch String serializeBody(GeneratedType type, ListSchemaNode node) { - return serializeBodyImpl(type,node); + return serializeBodyImpl(type, node); } private def dispatch String serializeBody(GeneratedType type, NotificationDefinition node) { - return serializeBodyImpl(type,node); + return serializeBodyImpl(type, node); } private def dispatch String serializeBody(GeneratedType type, ContainerSchemaNode node) { - return serializeBodyImpl(type,node); + return serializeBodyImpl(type, node); } - private def dispatch String serializeBody(GeneratedType type, ChoiceCaseNode node){ - return serializeBodyImpl(type,node); + private def dispatch String serializeBody(GeneratedType type, ChoiceCaseNode node) { + return serializeBodyImpl(type, node); } private def dispatch String serializeBody(GeneratedType type, SchemaNode node) ''' @@ -1375,15 +1380,15 @@ class TransformerGenerator { } private static def String getBooleanGetterName(DataSchemaNode node) { - return "is" + BindingGeneratorUtil.parseToClassName(node.QName.localName); + return "is" + BindingMapping.getPropertyName(node.QName.localName).toFirstUpper; } private static def String getGetterName(DataSchemaNode node) { - return "get" + BindingGeneratorUtil.parseToClassName(node.QName.localName); + return "get" + BindingMapping.getPropertyName(node.QName.localName).toFirstUpper; } private static def String getGetterName(QName node) { - return "get" + BindingGeneratorUtil.parseToClassName(node.localName); + return "get" + BindingMapping.getPropertyName(node.localName).toFirstUpper; } private def dispatch CharSequence serializeProperty(ListSchemaNode schema, ParameterizedType type, @@ -1404,7 +1409,7 @@ class TransformerGenerator { private def dispatch CharSequence serializeProperty(LeafSchemaNode schema, Type type, String propertyName) ''' «type.resolvedName» «propertyName» = value.«propertyName»(); - + if(«propertyName» != null) { «QName.name» _qname = «QName.name».create(_resultName,"«schema.QName.localName»"); Object _propValue = «serializeValue(type, propertyName, schema.type)»; @@ -1530,7 +1535,7 @@ class TransformerGenerator { } def CtClass asCtClass(Type type) { - val cls = loadClassWithTCCL(type.fullyQualifiedName) + val cls = loadClass(type.fullyQualifiedName) return cls.asCtClass; }