![JAR search and dependency download from the Maven repository](/logo.png)
org.simpleflatmapper.map.getter.ComposedContextualGetterFactory Maven / Gradle / Ivy
Show all versions of sfm-map Show documentation
package org.simpleflatmapper.map.getter;
import org.simpleflatmapper.map.context.MappingContextFactoryBuilder;
import java.lang.reflect.Type;
public class ComposedContextualGetterFactory implements ContextualGetterFactory {
private final ContextualGetterFactory super T, K>[] factories;
private ComposedContextualGetterFactory(ContextualGetterFactory super T, K>[] factories) {
this.factories = factories;
}
@Override
public ContextualGetter newGetter(Type target, K key, MappingContextFactoryBuilder, K> mappingContextFactoryBuilder, Object... properties) {
ContextualGetterFactory[] factories = this.factories;
for(int i = 0; i < factories.length; i++) {
ContextualGetterFactory factory = factories[i];
ContextualGetter getter = factory.newGetter(target, key, mappingContextFactoryBuilder, properties);
if (getter != null) return getter;
}
return null;
}
public static ComposedContextualGetterFactory composed(ContextualGetterFactory super T, K> cfg1, ContextualGetterFactory super T, K> cfg2) {
int size = getSize(cfg1) + getSize(cfg2);
ContextualGetterFactory super T, K>[] factories = new ContextualGetterFactory[size];
int index = 0;
index = append(factories, 0, cfg1);
index = append(factories, index, cfg2);
return new ComposedContextualGetterFactory(factories);
}
private static int append(ContextualGetterFactory super T, K>[] factories, int from, ContextualGetterFactory super T, K> cfg) {
if (cfg instanceof ComposedContextualGetterFactory) {
ContextualGetterFactory super T, K>[] fs = ((ComposedContextualGetterFactory)cfg).factories;
System.arraycopy(fs, 0, factories, from, fs.length);
return from + fs.length;
} else {
factories[from] = cfg;
return from + 1;
}
}
private static int getSize(ContextualGetterFactory, ?> cfg) {
if (cfg instanceof ComposedContextualGetterFactory) {
return ((ComposedContextualGetterFactory)cfg).factories.length;
}
return 1;
}
}