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

org.simpleflatmapper.csv.impl.cellreader.DefaultValueDelayedCellSetter Maven / Gradle / Ivy

package org.simpleflatmapper.csv.impl.cellreader;

import org.simpleflatmapper.csv.ParsingContext;
import org.simpleflatmapper.csv.mapper.DelayedCellSetter;
import org.simpleflatmapper.map.property.DefaultValueProperty;
import org.simpleflatmapper.reflect.Setter;

public class DefaultValueDelayedCellSetter
        implements DelayedCellSetter {
    private final DelayedCellSetter delegate;
    private final DefaultValueProperty defaultValueProperty;
    private final Setter setter;

    private boolean isSet = false;

    public DefaultValueDelayedCellSetter(DelayedCellSetter delegate,
                                         DefaultValueProperty defaultValueProperty,
                                         Setter setter) {
        this.delegate = delegate;
        this.defaultValueProperty = defaultValueProperty;
        this.setter = setter;
    }

    @Override
    public void set(char[] chars, int offset, int length, ParsingContext parsingContext) throws Exception {
        isSet = true;
        delegate.set(chars, offset, length, parsingContext);
    }

    @Override
    public P consumeValue() {
        P p;
        if (isSet) {
            p = delegate.consumeValue();
            isSet = false;
        } else {
            p = defaultValue();
        }
        return p;
    }

    @SuppressWarnings("unchecked")
    private P defaultValue() {
        return (P) defaultValueProperty.getValue();
    }

    @Override
    public P peekValue() {
        return isSet ? delegate.peekValue() : defaultValue();
    }

    @Override
    public void set(T t) throws Exception {
        P val = consumeValue();
        setter.set(t, val);
    }

    @Override
    public boolean isSettable() {
        return delegate.isSettable();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy