Skip to content

Instantly share code, notes, and snippets.

@medvednic
Last active July 19, 2017 18:37
Show Gist options
  • Save medvednic/93e83899a14c4a590b5217bd4a999cce to your computer and use it in GitHub Desktop.
Save medvednic/93e83899a14c4a590b5217bd4a999cce to your computer and use it in GitHub Desktop.
Custom ClassMapBuilder for deep copying using Orika mapper
import ma.glasnost.orika.DefaultFieldMapper;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.metadata.ClassMapBuilder;
import ma.glasnost.orika.metadata.ClassMapBuilderFactory;
import ma.glasnost.orika.metadata.Type;
import ma.glasnost.orika.property.PropertyResolverStrategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.persistence.Id;
import java.lang.reflect.Field;
public class IdExclusionClassMapBuilder<A, B> extends ClassMapBuilder{
protected Logger logger = LoggerFactory.getLogger(this.getClass());
protected IdExclusionClassMapBuilder(Type type, Type type2, MapperFactory mapperFactory,
PropertyResolverStrategy propertyResolver,
DefaultFieldMapper... defaults) {
super(type, type2, mapperFactory, propertyResolver, defaults);
}
@Override
public ClassMapBuilder byDefault(DefaultFieldMapper... withDefaults) {
Type<?> type = getAType();
for (Field field: type.getRawType().getDeclaredFields()){
Id hasId = field.getAnnotation(Id.class);
if (null != hasId) {
fieldMap(field.getName()).exclude().add();
break;
}
}
super.byDefault(withDefaults);
return this;
}
public static class Factory extends ClassMapBuilderFactory {
@Override
protected <A, B> ClassMapBuilder<A, B> newClassMapBuilder(Type<A> type, Type<B> type1,
MapperFactory mapperFactory,
PropertyResolverStrategy propertyResolverStrategy,
DefaultFieldMapper[] defaultFieldMappers) {
return new IdExclusionClassMapBuilder<A, B>(type, type1, mapperFactory, propertyResolverStrategy, defaultFieldMappers);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment