All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sfm.jooq.SfmRecordMapperProvider Maven / Gradle / Ivy

There is a newer version: 9.0.2
Show newest version
package org.sfm.jooq;

import org.jooq.*;
import org.sfm.map.FieldKey;
import org.sfm.map.Mapper;
import org.sfm.map.MapperConfig;
import org.sfm.map.column.FieldMapperColumnDefinition;
import org.sfm.reflect.ReflectionService;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * Integration point with jooq.

* Provide a JooqRecordMapper backed by an Sfm {@link org.jooq.Record} {@link org.sfm.map.Mapper} */ public class SfmRecordMapperProvider implements RecordMapperProvider { private final ConcurrentMap> mapperCache = new ConcurrentHashMap>(); private final MapperConfig> mapperConfig; private final ReflectionService reflectionService; public SfmRecordMapperProvider() { this(MapperConfig.fieldMapperConfig(), ReflectionService.newInstance()); } public SfmRecordMapperProvider( MapperConfig> mapperConfig, ReflectionService reflectionService) { this.mapperConfig = mapperConfig; this.reflectionService = reflectionService; } @Override public RecordMapper provide(RecordType recordType, Class type) { TargetColumnsMapperKey key = getMapperKey(recordType, type); @SuppressWarnings("unchecked") Mapper mapper = (Mapper) mapperCache.get(key); if (mapper == null) { mapper = buildMapper(recordType, type); mapperCache.putIfAbsent(key, mapper); } return new JooqRecordMapperWrapper(mapper); } private Mapper buildMapper(RecordType recordType, Class type) { JooqMapperBuilder mapperBuilder = new JooqMapperBuilder( reflectionService.getClassMeta(type), new JooqMappingContextFactoryBuilder(), mapperConfig); int i = 0; for(Field field : recordType.fields()) { mapperBuilder.addField(new JooqFieldKey(field, i++)); } return mapperBuilder.mapper(); } private TargetColumnsMapperKey getMapperKey(RecordType recordType, Class type) { String[] columns = new String[recordType.size()]; int i = 0; for(Field field : recordType.fields()) { columns[i++] = field.getName(); } return new TargetColumnsMapperKey(type, columns); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy