
org.sfm.map.impl.FieldMapperColumnDefinition Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of simpleFlatMapper Show documentation
Show all versions of simpleFlatMapper Show documentation
Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.
The newest version!
package org.sfm.map.impl;
import org.sfm.map.ColumnDefinition;
import org.sfm.map.FieldKey;
import org.sfm.reflect.Getter;
import org.sfm.reflect.TypeHelper;
import java.lang.reflect.Type;
import java.sql.ResultSet;
public abstract class FieldMapperColumnDefinition, S> extends ColumnDefinition {
public abstract FieldMapper, ?> getCustomFieldMapper();
public abstract Getter getCustomGetter();
public static , S> FieldMapperColumnDefinition identity() {
return new IdentityColumnDefinition();
}
public static , S> FieldMapperColumnDefinition compose(final FieldMapperColumnDefinition def1, final FieldMapperColumnDefinition def2) {
if (def1.getClass().equals(IdentityColumnDefinition.class)) {
return def2;
}
if (def2.getClass().equals(IdentityColumnDefinition.class)) {
return def1;
}
return new ComposeColumnDefinition(def1, def2);
}
public static , S> FieldMapperColumnDefinition customFieldMapperDefinition(final FieldMapper mapper) {
return new IdentityColumnDefinition() {
@Override
public FieldMapper, ?> getCustomFieldMapper() {
return mapper;
}
};
}
public static , S> FieldMapperColumnDefinition customGetter(final Getter getter) {
return new IdentityColumnDefinition() {
@Override
public Getter getCustomGetter() {
return getter;
}
@Override
public boolean hasCustomSource() {
return true;
}
@Override
public Type getCustomSourceReturnType() {
Type[] paramTypesForInterface = TypeHelper.getParamTypesForInterface(getter.getClass(), Getter.class);
return paramTypesForInterface != null ? paramTypesForInterface[1] : null;
}
};
}
public static , S> FieldMapperColumnDefinition renameDefinition(final String name) {
return new IdentityColumnDefinition() {
@Override
public K rename(K key) {
return key.alias(name);
}
};
}
static class IdentityColumnDefinition, S> extends FieldMapperColumnDefinition {
@Override
public K rename(K key) {
return key;
}
@Override
public boolean hasCustomSource() {
return false;
}
@Override
public Type getCustomSourceReturnType() {
throw new IllegalStateException();
}
@Override
public FieldMapper, ?> getCustomFieldMapper() {
return null;
}
@Override
public Getter getCustomGetter() {
return null;
}
}
static final class ComposeColumnDefinition, S> extends FieldMapperColumnDefinition {
private final FieldMapperColumnDefinition def1;
private final FieldMapperColumnDefinition def2;
public ComposeColumnDefinition(FieldMapperColumnDefinition def1, FieldMapperColumnDefinition def2) {
this.def1 = def1;
this.def2 = def2;
}
@Override
public K rename(K key) {
return def2.rename(def1.rename(key));
}
@Override
public FieldMapper, ?> getCustomFieldMapper() {
FieldMapper, ?> fm = def1.getCustomFieldMapper();
if (fm == null) {
fm = def2.getCustomFieldMapper();
}
return fm;
}
@Override
public Getter getCustomGetter() {
Getter fm = def1.getCustomGetter();
if (fm == null) {
fm = def2.getCustomGetter();
}
return fm;
}
@Override
public boolean hasCustomSource() {
return def1.hasCustomSource() || def2.hasCustomSource();
}
@Override
public Type getCustomSourceReturnType() {
if (def1.hasCustomSource()) {
return def1.getCustomSourceReturnType();
} else if (def2.hasCustomSource()){
return def2.getCustomSourceReturnType();
} else {
throw new IllegalStateException();
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy