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

org.simpleflatmapper.map.mapper.JoinMapperEnumerable Maven / Gradle / Ivy

Go to download

Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.

The newest version!
package org.simpleflatmapper.map.mapper;

import org.simpleflatmapper.map.SourceFieldMapper;
import org.simpleflatmapper.map.MappingContext;
import org.simpleflatmapper.util.Enumerable;
import org.simpleflatmapper.util.ErrorHelper;

public class JoinMapperEnumerable implements Enumerable {

    private final SourceFieldMapper mapper;
    private final MappingContext mappingContext;


    private final Enumerable sourceEnumerable;
    private T currentValue;
    private T nextValue;

    private boolean exhausted = false;

    public JoinMapperEnumerable(SourceFieldMapper mapper,
                                MappingContext mappingContext,
                                Enumerable sourceEnumerable) {
        this.mapper = mapper;
        this.mappingContext = mappingContext;
        this.sourceEnumerable = sourceEnumerable;
    }

    @Override
    public boolean next() {
        if (exhausted) return false;
        try {
            currentValue = nextValue;
            nextValue = null;
            while (sourceEnumerable.next()) {

                S source = sourceEnumerable.currentValue();

                if (mappingContext.broke(source)) {
                    if (currentValue == null) {
                        currentValue = mapper.map(source, mappingContext);
                    } else {
                        nextValue = mapper.map(source, mappingContext);
                        return true;
                    }
                } else {
                    mapper.mapTo(source, currentValue, mappingContext);
                }
            }

            exhausted = true;

            return currentValue != null;
        } catch (Exception e) {
            ErrorHelper.rethrow(e);
            return false;
        }

    }

    @Override
    public T currentValue() {
        return currentValue;
    }

    @Override
    public String toString() {
        return "JoinJdbcMapper{" +
                "jdbcMapper=" + mapper +
                '}';
    }
}