mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#707 Automatic generation of iterable method if element mapping method(s) are qualified
This commit is contained in:
parent
9996fc66ab
commit
c8a9592bc9
@ -51,6 +51,7 @@ public class IterableMappingMethod extends MappingMethod {
|
|||||||
private final boolean overridden;
|
private final boolean overridden;
|
||||||
private final boolean mapNullToDefault;
|
private final boolean mapNullToDefault;
|
||||||
private final String loopVariableName;
|
private final String loopVariableName;
|
||||||
|
private final SelectionParameters selectionParameters;
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
|
|
||||||
@ -124,6 +125,7 @@ public class IterableMappingMethod extends MappingMethod {
|
|||||||
if ( method instanceof ForgedMethod ) {
|
if ( method instanceof ForgedMethod ) {
|
||||||
ForgedMethod forgedMethod = (ForgedMethod) method;
|
ForgedMethod forgedMethod = (ForgedMethod) method;
|
||||||
forgedMethod.addThrownTypes( assignment.getThrownTypes() );
|
forgedMethod.addThrownTypes( assignment.getThrownTypes() );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// target accessor is setter, so decorate assignment as setter
|
// target accessor is setter, so decorate assignment as setter
|
||||||
@ -157,7 +159,8 @@ public class IterableMappingMethod extends MappingMethod {
|
|||||||
mapNullToDefault,
|
mapNullToDefault,
|
||||||
loopVariableName,
|
loopVariableName,
|
||||||
beforeMappingMethods,
|
beforeMappingMethods,
|
||||||
afterMappingMethods );
|
afterMappingMethods,
|
||||||
|
selectionParameters );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,13 +168,15 @@ public class IterableMappingMethod extends MappingMethod {
|
|||||||
private IterableMappingMethod(Method method, Assignment parameterAssignment, MethodReference factoryMethod,
|
private IterableMappingMethod(Method method, Assignment parameterAssignment, MethodReference factoryMethod,
|
||||||
boolean mapNullToDefault, String loopVariableName,
|
boolean mapNullToDefault, String loopVariableName,
|
||||||
List<LifecycleCallbackMethodReference> beforeMappingReferences,
|
List<LifecycleCallbackMethodReference> beforeMappingReferences,
|
||||||
List<LifecycleCallbackMethodReference> afterMappingReferences) {
|
List<LifecycleCallbackMethodReference> afterMappingReferences,
|
||||||
|
SelectionParameters selectionParameters ) {
|
||||||
super( method, beforeMappingReferences, afterMappingReferences );
|
super( method, beforeMappingReferences, afterMappingReferences );
|
||||||
this.elementAssignment = parameterAssignment;
|
this.elementAssignment = parameterAssignment;
|
||||||
this.factoryMethod = factoryMethod;
|
this.factoryMethod = factoryMethod;
|
||||||
this.overridden = method.overridesMethod();
|
this.overridden = method.overridesMethod();
|
||||||
this.mapNullToDefault = mapNullToDefault;
|
this.mapNullToDefault = mapNullToDefault;
|
||||||
this.loopVariableName = loopVariableName;
|
this.loopVariableName = loopVariableName;
|
||||||
|
this.selectionParameters = selectionParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Parameter getSourceParameter() {
|
public Parameter getSourceParameter() {
|
||||||
@ -305,6 +310,15 @@ public class IterableMappingMethod extends MappingMethod {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( this.selectionParameters != null ) {
|
||||||
|
if ( !this.selectionParameters.equals( other.selectionParameters ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( other.selectionParameters != null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +250,12 @@ public class PropertyMapping extends ModelElement {
|
|||||||
|
|
||||||
// No mapping found. Try to forge a mapping
|
// No mapping found. Try to forge a mapping
|
||||||
if ( assignment == null ) {
|
if ( assignment == null ) {
|
||||||
assignment = forgeMapOrIterableMapping( sourceType, targetType, sourceRefStr, method.getExecutable() );
|
if ( (sourceType.isCollectionType() || sourceType.isArrayType()) && targetType.isIterableType() ) {
|
||||||
|
assignment = forgeIterableMapping( sourceType, targetType, sourceRefStr, method.getExecutable() );
|
||||||
|
}
|
||||||
|
else if ( sourceType.isMapType() && targetType.isMapType() ) {
|
||||||
|
assignment = forgeMapMapping( sourceType, targetType, sourceRefStr, method.getExecutable() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( assignment != null ) {
|
if ( assignment != null ) {
|
||||||
@ -601,7 +606,7 @@ public class PropertyMapping extends ModelElement {
|
|||||||
return sourcePresenceChecker;
|
return sourcePresenceChecker;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Assignment forgeMapOrIterableMapping(Type sourceType, Type targetType, String sourceReference,
|
private Assignment forgeIterableMapping(Type sourceType, Type targetType, String sourceReference,
|
||||||
ExecutableElement element) {
|
ExecutableElement element) {
|
||||||
|
|
||||||
Assignment assignment = null;
|
Assignment assignment = null;
|
||||||
@ -609,9 +614,6 @@ public class PropertyMapping extends ModelElement {
|
|||||||
String name = getName( sourceType, targetType );
|
String name = getName( sourceType, targetType );
|
||||||
name = Strings.getSaveVariableName( name, ctx.getNamesOfMappingsToGenerate() );
|
name = Strings.getSaveVariableName( name, ctx.getNamesOfMappingsToGenerate() );
|
||||||
|
|
||||||
if ( ( sourceType.isCollectionType() || sourceType.isArrayType() )
|
|
||||||
&& ( targetType.isIterableType() ) ) {
|
|
||||||
|
|
||||||
// copy mapper configuration from the source method, its the same mapper
|
// copy mapper configuration from the source method, its the same mapper
|
||||||
MapperConfiguration config = method.getMapperConfiguration();
|
MapperConfiguration config = method.getMapperConfiguration();
|
||||||
ForgedMethod methodRef = new ForgedMethod( name, sourceType, targetType, config, element );
|
ForgedMethod methodRef = new ForgedMethod( name, sourceType, targetType, config, element );
|
||||||
@ -620,6 +622,7 @@ public class PropertyMapping extends ModelElement {
|
|||||||
IterableMappingMethod iterableMappingMethod = builder
|
IterableMappingMethod iterableMappingMethod = builder
|
||||||
.mappingContext( ctx )
|
.mappingContext( ctx )
|
||||||
.method( methodRef )
|
.method( methodRef )
|
||||||
|
.selectionParameters( selectionParameters )
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
if ( iterableMappingMethod != null ) {
|
if ( iterableMappingMethod != null ) {
|
||||||
@ -634,8 +637,17 @@ public class PropertyMapping extends ModelElement {
|
|||||||
assignment = AssignmentFactory.createMethodReference( methodRef, null, targetType );
|
assignment = AssignmentFactory.createMethodReference( methodRef, null, targetType );
|
||||||
assignment.setAssignment( AssignmentFactory.createDirect( sourceReference ) );
|
assignment.setAssignment( AssignmentFactory.createDirect( sourceReference ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return assignment;
|
||||||
}
|
}
|
||||||
else if ( sourceType.isMapType() && targetType.isMapType() ) {
|
|
||||||
|
private Assignment forgeMapMapping(Type sourceType, Type targetType, String sourceReference,
|
||||||
|
ExecutableElement element) {
|
||||||
|
|
||||||
|
Assignment assignment = null;
|
||||||
|
|
||||||
|
String name = getName( sourceType, targetType );
|
||||||
|
name = Strings.getSaveVariableName( name, ctx.getNamesOfMappingsToGenerate() );
|
||||||
|
|
||||||
// copy mapper configuration from the source method, its the same mapper
|
// copy mapper configuration from the source method, its the same mapper
|
||||||
MapperConfiguration config = method.getMapperConfiguration();
|
MapperConfiguration config = method.getMapperConfiguration();
|
||||||
@ -658,7 +670,7 @@ public class PropertyMapping extends ModelElement {
|
|||||||
assignment = AssignmentFactory.createMethodReference( methodRef, null, targetType );
|
assignment = AssignmentFactory.createMethodReference( methodRef, null, targetType );
|
||||||
assignment.setAssignment( AssignmentFactory.createDirect( sourceReference ) );
|
assignment.setAssignment( AssignmentFactory.createDirect( sourceReference ) );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return assignment;
|
return assignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,5 +64,45 @@ public class SelectionParameters {
|
|||||||
return resultType;
|
return resultType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = 3;
|
||||||
|
hash = 97 * hash + (this.qualifiers != null ? this.qualifiers.hashCode() : 0);
|
||||||
|
hash = 97 * hash + (this.qualifyingNames != null ? this.qualifyingNames.hashCode() : 0);
|
||||||
|
hash = 97 * hash + (this.resultType != null ? this.resultType.hashCode() : 0);
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if ( this == obj ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ( obj == null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ( getClass() != obj.getClass() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final SelectionParameters other = (SelectionParameters) obj;
|
||||||
|
|
||||||
|
if ( !equals( this.qualifiers, other.qualifiers ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !equals( this.qualifyingNames, other.qualifyingNames ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return equals( this.resultType, other.resultType );
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean equals(Object object1, Object object2) {
|
||||||
|
if ( object1 == null ) {
|
||||||
|
return (object2 == null);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return object1.equals( object2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class CityDto extends TopologyFeatureDto {
|
||||||
|
|
||||||
|
private int population;
|
||||||
|
|
||||||
|
public int getPopulation() {
|
||||||
|
return population;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPopulation(int population) {
|
||||||
|
this.population = population;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class CityEntity extends TopologyFeatureEntity {
|
||||||
|
|
||||||
|
private int population;
|
||||||
|
|
||||||
|
public int getPopulation() {
|
||||||
|
return population;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPopulation(int population) {
|
||||||
|
this.population = population;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mapstruct.ap.testutil.IssueKey;
|
||||||
|
import org.mapstruct.ap.testutil.WithClasses;
|
||||||
|
import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@IssueKey( "707" )
|
||||||
|
@WithClasses( {
|
||||||
|
CityDto.class,
|
||||||
|
CityEntity.class,
|
||||||
|
RiverDto.class,
|
||||||
|
RiverEntity.class,
|
||||||
|
TopologyDto.class,
|
||||||
|
TopologyEntity.class,
|
||||||
|
TopologyFeatureDto.class,
|
||||||
|
TopologyFeatureEntity.class,
|
||||||
|
TopologyMapper.class
|
||||||
|
} )
|
||||||
|
@RunWith( AnnotationProcessorTestRunner.class )
|
||||||
|
public class IterableAndQualifiersTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGenerationBasedOnQualifier() {
|
||||||
|
|
||||||
|
TopologyDto topologyDto1 = new TopologyDto();
|
||||||
|
List<TopologyFeatureDto> topologyFeatures1 = new ArrayList<TopologyFeatureDto>();
|
||||||
|
RiverDto riverDto = new RiverDto();
|
||||||
|
riverDto.setName( "Rhine" );
|
||||||
|
riverDto.setLength( 5 );
|
||||||
|
topologyFeatures1.add( riverDto );
|
||||||
|
topologyDto1.setTopologyFeatures( topologyFeatures1 );
|
||||||
|
|
||||||
|
TopologyEntity result1 = TopologyMapper.INSTANCE.mapTopologyAsRiver( topologyDto1 );
|
||||||
|
assertThat( result1.getTopologyFeatures() ).hasSize( 1 );
|
||||||
|
assertThat( result1.getTopologyFeatures().get( 0 ).getName() ).isEqualTo( "Rhine" );
|
||||||
|
assertThat( result1.getTopologyFeatures().get( 0 ) ).isInstanceOf( RiverEntity.class );
|
||||||
|
assertThat( ( (RiverEntity) result1.getTopologyFeatures().get( 0 ) ).getLength() ).isEqualTo( 5 );
|
||||||
|
|
||||||
|
TopologyDto topologyDto2 = new TopologyDto();
|
||||||
|
List<TopologyFeatureDto> topologyFeatures2 = new ArrayList<TopologyFeatureDto>();
|
||||||
|
CityDto cityDto = new CityDto();
|
||||||
|
cityDto.setName( "Amsterdam" );
|
||||||
|
cityDto.setPopulation( 800000 );
|
||||||
|
topologyFeatures2.add( cityDto );
|
||||||
|
topologyDto2.setTopologyFeatures( topologyFeatures2 );
|
||||||
|
|
||||||
|
TopologyEntity result2 = TopologyMapper.INSTANCE.mapTopologyAsCity( topologyDto2 );
|
||||||
|
assertThat( result2.getTopologyFeatures() ).hasSize( 1 );
|
||||||
|
assertThat( result2.getTopologyFeatures().get( 0 ).getName() ).isEqualTo( "Amsterdam" );
|
||||||
|
assertThat( result2.getTopologyFeatures().get( 0 ) ).isInstanceOf( CityEntity.class );
|
||||||
|
assertThat( ( (CityEntity) result2.getTopologyFeatures().get( 0 ) ).getPopulation() ).isEqualTo( 800000 );
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class RiverDto extends TopologyFeatureDto {
|
||||||
|
|
||||||
|
private int length;
|
||||||
|
|
||||||
|
public int getLength() {
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLength(int length) {
|
||||||
|
this.length = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class RiverEntity extends TopologyFeatureEntity {
|
||||||
|
|
||||||
|
private int length;
|
||||||
|
|
||||||
|
public int getLength() {
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLength(int length) {
|
||||||
|
this.length = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class TopologyDto {
|
||||||
|
|
||||||
|
private List<TopologyFeatureDto> topologyFeatures;
|
||||||
|
|
||||||
|
public List<TopologyFeatureDto> getTopologyFeatures() {
|
||||||
|
return topologyFeatures;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTopologyFeatures(List<TopologyFeatureDto> topologyFeatures) {
|
||||||
|
this.topologyFeatures = topologyFeatures;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class TopologyEntity {
|
||||||
|
|
||||||
|
private List<TopologyFeatureEntity> topologyFeatures;
|
||||||
|
|
||||||
|
public List<TopologyFeatureEntity> getTopologyFeatures() {
|
||||||
|
return topologyFeatures;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTopologyFeatures(List<TopologyFeatureEntity> topologyFeatures) {
|
||||||
|
this.topologyFeatures = topologyFeatures;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class TopologyFeatureDto {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class TopologyFeatureEntity {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2016 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.selection.qualifier.iterable;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.Qualifier;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public abstract class TopologyMapper {
|
||||||
|
|
||||||
|
public static final TopologyMapper INSTANCE = Mappers.getMapper( TopologyMapper.class );
|
||||||
|
|
||||||
|
@Mapping( target = "topologyFeatures", qualifiedBy = Rivers.class )
|
||||||
|
public abstract TopologyEntity mapTopologyAsRiver(TopologyDto dto);
|
||||||
|
|
||||||
|
@Mapping( target = "topologyFeatures", qualifiedBy = Cities.class )
|
||||||
|
public abstract TopologyEntity mapTopologyAsCity(TopologyDto dto);
|
||||||
|
|
||||||
|
@Rivers
|
||||||
|
protected TopologyFeatureEntity mapRiver( TopologyFeatureDto dto ) {
|
||||||
|
TopologyFeatureEntity topologyFeatureEntity = null;
|
||||||
|
if ( dto instanceof RiverDto ) {
|
||||||
|
RiverEntity riverEntity = new RiverEntity();
|
||||||
|
riverEntity.setLength( ( (RiverDto) dto ).getLength() );
|
||||||
|
topologyFeatureEntity = riverEntity;
|
||||||
|
topologyFeatureEntity.setName( dto.getName() );
|
||||||
|
}
|
||||||
|
return topologyFeatureEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Cities
|
||||||
|
protected TopologyFeatureEntity mapCity( TopologyFeatureDto dto ) {
|
||||||
|
TopologyFeatureEntity topologyFeatureEntity = null;
|
||||||
|
if ( dto instanceof CityDto ) {
|
||||||
|
CityEntity cityEntity = new CityEntity();
|
||||||
|
cityEntity.setPopulation( ( (CityDto) dto ).getPopulation() );
|
||||||
|
topologyFeatureEntity = cityEntity;
|
||||||
|
topologyFeatureEntity.setName( dto.getName() );
|
||||||
|
}
|
||||||
|
return topologyFeatureEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Qualifier
|
||||||
|
@Target(ElementType.METHOD)
|
||||||
|
@Retention(RetentionPolicy.CLASS)
|
||||||
|
public @interface Rivers {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Qualifier
|
||||||
|
@Target(ElementType.METHOD)
|
||||||
|
@Retention(RetentionPolicy.CLASS)
|
||||||
|
public @interface Cities {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user