From cabf63b8b147372d4da25e6e253d3e163e0c3356 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Wed, 7 Oct 2009 19:28:39 +0000 Subject: [PATCH] mapping exclusions git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@2073 50f2f4bb-b051-0410-bef5-90022cba6387 --- .../mapping/support/MappingConfiguration.java | 5 ++++ .../mapping/support/SpelMapper.java | 4 +-- .../mapping/support/SpelMapping.java | 27 ++++++++++++++----- .../mapping/support/SpelMapperTests.java | 18 ++++++++++++- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/org.springframework.context/src/main/java/org/springframework/mapping/support/MappingConfiguration.java b/org.springframework.context/src/main/java/org/springframework/mapping/support/MappingConfiguration.java index ea5a5a207ae..dacd256168f 100644 --- a/org.springframework.context/src/main/java/org/springframework/mapping/support/MappingConfiguration.java +++ b/org.springframework.context/src/main/java/org/springframework/mapping/support/MappingConfiguration.java @@ -50,4 +50,9 @@ public interface MappingConfiguration { */ MappingConfiguration setGenericConverter(GenericConverter converter); + /** + * Configures that this mapping should be excluded (ignored and not executed). + */ + void setExclude(); + } \ No newline at end of file diff --git a/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapper.java b/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapper.java index 57ed8818606..4e8dc251dd6 100644 --- a/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapper.java +++ b/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapper.java @@ -122,7 +122,7 @@ public class SpelMapper implements Mapper { * @param nestedMapper the nested mapper */ public void addNestedMapper(Mapper nestedMapper) { - Class[] typeInfo = getRequiredTypeInfo(nestedMapper); + Class[] typeInfo = getRequiredTypeInfo(nestedMapper); addNestedMapper(typeInfo[0], typeInfo[1], nestedMapper); } @@ -132,7 +132,7 @@ public class SpelMapper implements Mapper { * @param targetType the target nested property type * @param nestedMapper the nested mapper */ - public void addNestedMapper(Class sourceType, Class targetType, Mapper nestedMapper) { + public void addNestedMapper(Class sourceType, Class targetType, Mapper nestedMapper) { this.conversionService.addGenericConverter(sourceType, targetType, new MapperConverter(nestedMapper)); } diff --git a/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapping.java b/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapping.java index 3d84b497ce4..af5d6a756ef 100644 --- a/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapping.java +++ b/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapping.java @@ -38,18 +38,14 @@ class SpelMapping implements MappingConfiguration { private GenericConverter converter; + private boolean exclude; + public SpelMapping(Expression source, Expression target) { this.source = source; this.target = target; } - public String getSourceExpressionString() { - return this.source.getExpressionString(); - } - - public String getTargetExpressionString() { - return this.target.getExpressionString(); - } + // implementing MappingConfiguration public MappingConfiguration setConverter(Converter converter) { return setGenericConverter(new ConverterGenericConverter(converter)); @@ -64,8 +60,25 @@ class SpelMapping implements MappingConfiguration { return this; } + public void setExclude() { + this.exclude = true; + } + + // public methods + + public String getSourceExpressionString() { + return this.source.getExpressionString(); + } + + public String getTargetExpressionString() { + return this.target.getExpressionString(); + } + public void map(EvaluationContext sourceContext, EvaluationContext targetContext, Collection failures) { + if (exclude) { + return; + } try { Object value = this.source.getValue(sourceContext); if (this.converter != null) { diff --git a/org.springframework.context/src/test/java/org/springframework/mapping/support/SpelMapperTests.java b/org.springframework.context/src/test/java/org/springframework/mapping/support/SpelMapperTests.java index 320cc9466c8..4529196c05a 100644 --- a/org.springframework.context/src/test/java/org/springframework/mapping/support/SpelMapperTests.java +++ b/org.springframework.context/src/test/java/org/springframework/mapping/support/SpelMapperTests.java @@ -81,6 +81,23 @@ public class SpelMapperTests { assertEquals(31, target.age); } + @Test + public void mapAutomaticWithExclusions() { + Map source = new HashMap(); + source.put("name", "Keith"); + source.put("test", "3"); + source.put("favoriteSport", "FOOTBALL"); + + Person target = new Person(); + + mapper.addMapping("test").setExclude(); + mapper.map(source, target); + + assertEquals("Keith", target.name); + assertEquals(0, target.age); + assertEquals(Sport.FOOTBALL, target.favoriteSport); + } + @Test public void mapSameSourceFieldToMultipleTargets() { Map source = new HashMap(); @@ -270,7 +287,6 @@ public class SpelMapperTests { return names[0] + " P. " + names[1]; } }); - mapper.map(source, target); assertEquals("Keith P. Donald", target.name);