polish
This commit is contained in:
@@ -45,6 +45,10 @@ final class FieldToFieldMapping implements SpelMapping {
|
||||
return this.targetField.getExpressionString();
|
||||
}
|
||||
|
||||
public boolean mapsField(String field) {
|
||||
return getSourceField().equals(field);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void map(SpelMappingContext context) {
|
||||
try {
|
||||
|
||||
@@ -38,6 +38,10 @@ final class FieldToMultiFieldMapping implements SpelMapping {
|
||||
return this.sourceField.getExpressionString();
|
||||
}
|
||||
|
||||
public boolean mapsField(String field) {
|
||||
return getSourceField().equals(field);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void map(SpelMappingContext context) {
|
||||
try {
|
||||
|
||||
@@ -101,10 +101,11 @@ public interface MapperBuilder<S, T> {
|
||||
* Register a mapping between multiple source fields and a single target field.
|
||||
* For example, calling <code>addMapping(dateAndTimeFieldsToDateTimeFieldMapper)</code> might register a mapping that maps the <code>date</code> and <code>time</code> fields on the source to the <code>dateTime</code> field on the target.
|
||||
* The provided {@link Mapper} will be passed the source object S for its source and the target object T for its target.
|
||||
* @param fields the source field mapping expressions
|
||||
* @param mapper the fields to field mapper
|
||||
* @return this, for configuring additional field mapping options fluently
|
||||
*/
|
||||
MapperBuilder<S, T> addMapping(Mapper<S, T> mapper);
|
||||
MapperBuilder<S, T> addMapping(String[] fields, Mapper<S, T> mapper);
|
||||
|
||||
/**
|
||||
* Register a Mapper that will be used to map between nested source and target fields of a specific sourceType/targetType pair.
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.springframework.mapping.support;
|
||||
|
||||
import org.springframework.core.style.StylerUtils;
|
||||
import org.springframework.mapping.Mapper;
|
||||
|
||||
/**
|
||||
@@ -23,13 +24,29 @@ import org.springframework.mapping.Mapper;
|
||||
*/
|
||||
final class MultiFieldToFieldMapping implements SpelMapping {
|
||||
|
||||
private String[] fields;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private final Mapper multiFieldMapper;
|
||||
|
||||
public MultiFieldToFieldMapping(Mapper<?, ?> multiFieldMapper) {
|
||||
public MultiFieldToFieldMapping(String[] fields, Mapper<?, ?> multiFieldMapper) {
|
||||
this.fields = fields;
|
||||
this.multiFieldMapper = multiFieldMapper;
|
||||
}
|
||||
|
||||
public String[] getSourceFields() {
|
||||
return fields;
|
||||
}
|
||||
|
||||
public boolean mapsField(String field) {
|
||||
for (String f : this.fields) {
|
||||
if (f.equals(field)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void map(SpelMappingContext context) {
|
||||
try {
|
||||
@@ -52,7 +69,7 @@ final class MultiFieldToFieldMapping implements SpelMapping {
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "[MultiFieldToFieldMapping<" + this.multiFieldMapper + ">]";
|
||||
return "[MultiFieldToFieldMapping<" + StylerUtils.style(this.fields) + " -> " + this.multiFieldMapper + ">]";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -78,12 +78,12 @@ final class SpelMapper implements Mapper<Object, Object> {
|
||||
this.mappings.add(mapping);
|
||||
}
|
||||
|
||||
public void addMapping(String field, Mapper mapper) {
|
||||
public void addMapping(String field, Mapper<?, ?> mapper) {
|
||||
this.mappings.add(new FieldToMultiFieldMapping(parseSourceField(field), mapper));
|
||||
}
|
||||
|
||||
public void addMapping(Mapper mapper) {
|
||||
this.mappings.add(new MultiFieldToFieldMapping(mapper));
|
||||
public void addMapping(String[] fields, Mapper<?, ?> mapper) {
|
||||
this.mappings.add(new MultiFieldToFieldMapping(fields, mapper));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -240,8 +240,7 @@ final class SpelMapper implements Mapper<Object, Object> {
|
||||
|
||||
private boolean explicitlyMapped(String field) {
|
||||
for (SpelMapping mapping : this.mappings) {
|
||||
if (mapping instanceof FieldToFieldMapping
|
||||
&& ((FieldToFieldMapping) mapping).getSourceField().startsWith(field)) {
|
||||
if (mapping.mapsField(field)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,8 +64,8 @@ final class SpelMapperBuilder<S, T> implements MapperBuilder<S, T> {
|
||||
return this;
|
||||
}
|
||||
|
||||
public MapperBuilder<S, T> addMapping(Mapper<S, T> mapper) {
|
||||
this.mapper.addMapping(mapper);
|
||||
public MapperBuilder<S, T> addMapping(String[] fields, Mapper<S, T> mapper) {
|
||||
this.mapper.addMapping(fields, mapper);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,11 @@ package org.springframework.mapping.support;
|
||||
*/
|
||||
interface SpelMapping {
|
||||
|
||||
/**
|
||||
* Return true if this maps the source field.
|
||||
*/
|
||||
boolean mapsField(String field);
|
||||
|
||||
/**
|
||||
* Execute this mapping.
|
||||
* @param context the mapping context
|
||||
|
||||
@@ -291,18 +291,19 @@ public class MappingTests {
|
||||
}
|
||||
})
|
||||
// multiple fields to field
|
||||
.addMapping(new Mapper<CreateAccountDto, Account>() {
|
||||
public Account map(CreateAccountDto source, Account target) {
|
||||
DateTime dateTime = ISODateTimeFormat.dateTime().parseDateTime(
|
||||
source.getActivationDate() + "T" + source.getActivationTime());
|
||||
target.setActivationDateTime(dateTime);
|
||||
return target;
|
||||
}
|
||||
}).getMapper();
|
||||
.addMapping(new String[] { "activationDay", "activationTime " },
|
||||
new Mapper<CreateAccountDto, Account>() {
|
||||
public Account map(CreateAccountDto source, Account target) {
|
||||
DateTime dateTime = ISODateTimeFormat.dateTime().parseDateTime(
|
||||
source.getActivationDay() + "T" + source.getActivationTime());
|
||||
target.setActivationDateTime(dateTime);
|
||||
return target;
|
||||
}
|
||||
}).getMapper();
|
||||
CreateAccountDto dto = new CreateAccountDto();
|
||||
dto.setAccountNumber("123456789");
|
||||
dto.setName("Keith Donald");
|
||||
dto.setActivationDate("2009-10-12");
|
||||
dto.setActivationDay("2009-10-12");
|
||||
dto.setActivationTime("12:00:00.000Z");
|
||||
dto.setAddress("2009BelAireEstates PalmBay FL 35452");
|
||||
Account account = mapper.map(dto, new Account());
|
||||
@@ -500,7 +501,7 @@ public class MappingTests {
|
||||
|
||||
private String address;
|
||||
|
||||
private String activationDate;
|
||||
private String activationDay;
|
||||
|
||||
private String activationTime;
|
||||
|
||||
@@ -528,12 +529,12 @@ public class MappingTests {
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
public String getActivationDate() {
|
||||
return activationDate;
|
||||
public String getActivationDay() {
|
||||
return activationDay;
|
||||
}
|
||||
|
||||
public void setActivationDate(String activationDate) {
|
||||
this.activationDate = activationDate;
|
||||
public void setActivationDay(String activationDay) {
|
||||
this.activationDay = activationDay;
|
||||
}
|
||||
|
||||
public String getActivationTime() {
|
||||
|
||||
Reference in New Issue
Block a user