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 {
@Property
var GeneratorListener listener;
+ @Property
+ var extension GeneratedClassLoadingStrategy classLoadingStrategy
+
public static val CLASS_TYPE = Types.typeForClass(Class);
public new(ClassPool pool) {
BINDING_CODEC = BindingCodec.asCtClass;
ctQName = QName.asCtClass
+
+ classLoadingStrategy = GeneratedClassLoadingStrategy.TCCLClassLoadingStrategy;
}
def Class<? extends BindingCodec<Map<QName, Object>, Object>> transformerFor(Class<?> inputType) {
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);
def Class<? extends BindingCodec<Map<QName, Object>, 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<? extends BindingCodec<Map<QName,Object>, Object>>;
private def Class<?> getGeneratedClass(Class<? extends Object> 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;
}
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;
bodyChecked = '''
{
«QName.name» _localQName = QNAME;
-
+
if($2 == null) {
return null;
}
«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();
}
}
}
- private def dispatch String deserializeBodyImpl(GeneratedType type, SchemaNode node) '''
- {
- «QName.name» _localQName = «QName.name».create($1,QNAME.getLocalName());
-
- if($2 == null) {
- return null;
- }
- java.util.Map _compositeNode = (java.util.Map) $2;
- «type.builderName» _builder = new «type.builderName»();
- return _builder.build();
- }
- '''
-
- private def dispatch String deserializeBodyImpl(GeneratedType type, ListSchemaNode node) '''
+ private def String deserializeBodyWithAugmentations(GeneratedType type, DataNodeContainer node) '''
{
«QName.name» _localQName = «QName.name».create($1,QNAME.getLocalName());
if($2 == null) {
java.util.Map _compositeNode = (java.util.Map) $2;
//System.out.println(_localQName + " " + _compositeNode);
«type.builderName» _builder = new «type.builderName»();
- «deserializeKey(type, node)»
«deserializeDataNodeContainerBody(type, node)»
«deserializeAugmentations»
return _builder.build();
}
'''
- private def dispatch String deserializeBodyImpl(GeneratedType type, ContainerSchemaNode node) '''
+ 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;
- //System.out.println(_localQName + " " + _compositeNode);
«type.builderName» _builder = new «type.builderName»();
- «deserializeDataNodeContainerBody(type, node)»
- «deserializeAugmentations»
return _builder.build();
}
'''
-
- private def dispatch String deserializeBodyImpl(GeneratedType type, NotificationDefinition node) '''
+
+ private def dispatch String deserializeBodyImpl(GeneratedType type, ListSchemaNode node) '''
{
«QName.name» _localQName = «QName.name».create($1,QNAME.getLocalName());
if($2 == null) {
java.util.Map _compositeNode = (java.util.Map) $2;
//System.out.println(_localQName + " " + _compositeNode);
«type.builderName» _builder = new «type.builderName»();
+ «deserializeKey(type, node)»
«deserializeDataNodeContainerBody(type, node)»
«deserializeAugmentations»
return _builder.build();
}
'''
- private def dispatch String deserializeBodyImpl(GeneratedType type, ChoiceCaseNode node) '''
- {
- «QName.name» _localQName = «QName.name».create($1,QNAME.getLocalName());
+ private def dispatch String deserializeBodyImpl(GeneratedType type, ContainerSchemaNode node) {
+ return deserializeBodyWithAugmentations(type, node);
+ }
- if($2 == null) {
- return null;
- }
- java.util.Map _compositeNode = (java.util.Map) $2;
- //System.out.println(_localQName + " " + _compositeNode);
- «type.builderName» _builder = new «type.builderName»();
- «deserializeDataNodeContainerBody(type, node)»
- «deserializeAugmentations»
- return _builder.build();
- }
- '''
+ private def dispatch String deserializeBodyImpl(GeneratedType type, NotificationDefinition 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) {
deserializeNodeContainerBodyImpl(type, type.allProperties, node);
_hasNext = _iterator.hasNext();
}
}
-
+
////System.out.println(" list" + «propertyName»);
'''
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);
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);
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)
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;
}
'''
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;
}
}
}
-
private def dispatch Class<? extends BindingCodec<Map<QName, Object>, Object>> generateValueTransformer(
Class<?> inputType, GeneratedTransferObject typeSpec, BitsTypeDefinition typeDef) {
try {
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;
}
'''
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»);
}
'''
'''«QName.asCtClass.name».create("«node.namespace»","«node.formattedRevision»","«node.localName»")''')
}
- private def dispatch String serializeBody(GeneratedType type, ListSchemaNode node) '''
+ private def String serializeBodyImpl(GeneratedType type, DataNodeContainer nodeContainer) '''
{
«QName.name» _resultName = «QName.name».create($1,QNAME.getLocalName());
java.util.List _childNodes = new java.util.ArrayList();
«type.resolvedName» value = («type.resolvedName») $2;
- «transformDataContainerBody(type, type.allProperties, node)»
+ «transformDataContainerBody(type, type.allProperties, nodeContainer)»
«serializeAugmentations»
return ($r) java.util.Collections.singletonMap(_resultName,_childNodes);
}
'''
- private def dispatch String serializeBody(GeneratedType type, NotificationDefinition node) '''
- {
- «QName.name» _resultName = «QName.name».create($1,QNAME.getLocalName());
- java.util.List _childNodes = new java.util.ArrayList();
- «type.resolvedName» value = («type.resolvedName») $2;
- «transformDataContainerBody(type, type.allProperties, node)»
- «serializeAugmentations»
- return ($r) java.util.Collections.singletonMap(_resultName,_childNodes);
- }
- '''
-
-
+ private def dispatch String serializeBody(GeneratedType type, ListSchemaNode node) {
+ return serializeBodyImpl(type, node);
+ }
- private def dispatch String serializeBody(GeneratedType type, ChoiceCaseNode node) '''
- {
- «QName.name» _resultName = «QName.name».create($1,QNAME.getLocalName());
- java.util.List _childNodes = new java.util.ArrayList();
- «type.resolvedName» value = («type.resolvedName») $2;
- «transformDataContainerBody(type, type.allProperties, node)»
- «serializeAugmentations»
- return ($r) java.util.Collections.singletonMap(_resultName,_childNodes);
- }
- '''
+ private def dispatch String serializeBody(GeneratedType type, NotificationDefinition node) {
+ return serializeBodyImpl(type, node);
+ }
+
+ private def dispatch String serializeBody(GeneratedType type, ContainerSchemaNode 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) '''
{
}
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,
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)»;
}
def CtClass asCtClass(Type type) {
- val cls = loadClassWithTCCL(type.fullyQualifiedName)
+ val cls = loadClass(type.fullyQualifiedName)
return cls.asCtClass;
}