#9 Passing source bean name into macro, re-ordering parameters

This commit is contained in:
Gunnar Morling 2013-05-16 21:56:40 +02:00
parent 0eee784bd9
commit 4b1862f52e

View File

@ -1,4 +1,3 @@
<#-- @ftlvariable name="" type="org.mapstruct.ap.model.Mapper" -->
<#-- <#--
Copyright 2012-2013 Gunnar Morling (http://www.gunnarmorling.de/) Copyright 2012-2013 Gunnar Morling (http://www.gunnarmorling.de/)
@ -68,13 +67,14 @@ public class ${implementationName} implements ${interfaceName} {
<#list beanMapping.propertyMappings as propertyMapping> <#list beanMapping.propertyMappings as propertyMapping>
<@simpleMap <@simpleMap
sourceBeanName=beanMapping.mappingMethod.parameterName
sourcePropertyName=propertyMapping.sourceName
targetType=propertyMapping.targetType
targetBeanName=beanMapping.targetType.name?uncap_first targetBeanName=beanMapping.targetType.name?uncap_first
beanMappingMappingMethod=beanMapping.mappingMethod
conversion=propertyMapping.toConversion
mappingMethod=propertyMapping.mappingMethod!""
sourceName=propertyMapping.sourceName
targetPropertyName=propertyMapping.targetName?cap_first targetPropertyName=propertyMapping.targetName?cap_first
targetType=propertyMapping.targetType /> conversion=propertyMapping.toConversion
mappingMethod=propertyMapping.mappingMethod
/>
</#list> </#list>
return ${beanMapping.targetType.name?uncap_first}; return ${beanMapping.targetType.name?uncap_first};
@ -116,13 +116,14 @@ public class ${implementationName} implements ${interfaceName} {
<#list beanMapping.propertyMappings as propertyMapping> <#list beanMapping.propertyMappings as propertyMapping>
<@simpleMap <@simpleMap
sourceBeanName=beanMapping.reverseMappingMethod.parameterName
sourcePropertyName=propertyMapping.targetName
targetType=propertyMapping.sourceType
targetBeanName=beanMapping.sourceType.name?uncap_first targetBeanName=beanMapping.sourceType.name?uncap_first
beanMappingMappingMethod=beanMapping.reverseMappingMethod
conversion=propertyMapping.fromConversion
mappingMethod=propertyMapping.reverseMappingMethod!""
sourceName=propertyMapping.targetName
targetPropertyName=propertyMapping.sourceName?cap_first targetPropertyName=propertyMapping.sourceName?cap_first
targetType=propertyMapping.sourceType /> conversion=propertyMapping.fromConversion
mappingMethod=propertyMapping.reverseMappingMethod
/>
</#list> </#list>
return ${beanMapping.sourceType.name?uncap_first}; return ${beanMapping.sourceType.name?uncap_first};
@ -132,25 +133,29 @@ public class ${implementationName} implements ${interfaceName} {
</#if> </#if>
</#list> </#list>
} }
<#macro simpleMap targetType sourceName targetBeanName targetPropertyName beanMappingMappingMethod mappingMethod conversion="">
<#-- Generates the mapping of one bean property -->
<#macro simpleMap sourceBeanName sourcePropertyName targetType targetBeanName targetPropertyName conversion="" mappingMethod="">
<#-- a) simple conversion -->
<#if conversion != ""> <#if conversion != "">
<#if targetType.primitive == true> <#if targetType.primitive == true>
if( ${beanMappingMappingMethod.parameterName}.get${sourceName?cap_first}() != null ) { if( ${sourceBeanName}.get${sourcePropertyName?cap_first}() != null ) {
${targetBeanName}.set${targetPropertyName}( ${conversion} ); ${targetBeanName}.set${targetPropertyName}( ${conversion} );
} }
<#else> <#else>
${targetBeanName}.set${targetPropertyName}( ${conversion} ); ${targetBeanName}.set${targetPropertyName}( ${conversion} );
</#if> </#if>
<#-- invoke mapping method --> <#-- b) invoke mapping method -->
<#elseif mappingMethod != ""> <#elseif mappingMethod != "">
${targetBeanName}.set${targetPropertyName}( <#if mappingMethod.declaringMapper??>${mappingMethod.declaringMapper.name?uncap_first}.</#if>${mappingMethod.name}( ${beanMappingMappingMethod.parameterName}.get${sourceName?cap_first}() ) ); ${targetBeanName}.set${targetPropertyName}( <#if mappingMethod.declaringMapper??>${mappingMethod.declaringMapper.name?uncap_first}.</#if>${mappingMethod.name}( ${sourceBeanName}.get${sourcePropertyName?cap_first}() ) );
<#else> <#else>
<#if targetType.collectionType == true> <#if targetType.collectionType == true>
if ( ${beanMappingMappingMethod.parameterName}.get${sourceName?cap_first}() != null ) { if ( ${sourceBeanName}.get${sourcePropertyName?cap_first}() != null ) {
${targetBeanName}.set${targetPropertyName}( new <#if targetType.collectionImplementationType??>${targetType.collectionImplementationType.name}<#else>${targetType.name}</#if><#if targetType.elementType??><${targetType.elementType.name}></#if>( ${beanMappingMappingMethod.parameterName}.get${sourceName?cap_first}() ) ); ${targetBeanName}.set${targetPropertyName}( new <#if targetType.collectionImplementationType??>${targetType.collectionImplementationType.name}<#else>${targetType.name}</#if><#if targetType.elementType??><${targetType.elementType.name}></#if>( ${sourceBeanName}.get${sourcePropertyName?cap_first}() ) );
} }
<#-- c) simply set -->
<#else> <#else>
${targetBeanName}.set${targetPropertyName}( ${beanMappingMappingMethod.parameterName}.get${sourceName?cap_first}() ); ${targetBeanName}.set${targetPropertyName}( ${sourceBeanName}.get${sourcePropertyName?cap_first}() );
</#if> </#if>
</#if> </#if>
</#macro> </#macro>