Showing posts with label Spring. Show all posts
Showing posts with label Spring. Show all posts

Friday, July 25, 2014

ModelMapper Generic Spring Integration

The Spring integration provided by ModelMapper (http://modelmapper.org/user-manual/spring-integration/) as of now could be enhanced as below in order to provide capability to pass in a delegate interface to use during setup:

package ...;

import org.modelmapper.Provider;
import org.modelmapper.Provider.ProvisionRequest;
import org.modelmapper.internal.util.Assert;
import org.springframework.beans.factory.BeanFactory;

public class EnhancedModelMapperSpringIntegration {
 private static class SpringProvider<S, D> implements
   Provider<D> {
  BeanFactory beanFactory;
  SourceBeanFactoryMapper<S, D> sourceBeanFactoryMapper;

  SpringProvider(BeanFactory beanFactory, SourceBeanFactoryMapper<S, D> sourceBeanFactoryMapper) {
   this.beanFactory = beanFactory;
   this.sourceBeanFactoryMapper = sourceBeanFactoryMapper;
  }

  @Override
  public D get(ProvisionRequest<D> request) {
   return sourceBeanFactoryMapper.map((S)request.getSource(), beanFactory);
  }
 }

 public static <S, D> Provider<?> fromSpring(BeanFactory beanFactory, SourceBeanFactoryMapper<S, D> sourceBeanFactoryMapper) {
  Assert.notNull(beanFactory);
  return new SpringProvider(beanFactory, sourceBeanFactoryMapper);
 }

}


package ...;

import org.springframework.beans.factory.BeanFactory;

public interface SourceBeanFactoryMapper<S, D> {

 D map(S s, BeanFactory beanFactory);

}