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

jdplus.toolkit.desktop.plugin.util.Persistence Maven / Gradle / Ivy

package jdplus.toolkit.desktop.plugin.util;

import jdplus.toolkit.desktop.plugin.Config;
import jdplus.toolkit.desktop.plugin.beans.BeanHandler;
import jdplus.toolkit.base.tsp.util.PropertyHandler;

import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Function;

@lombok.Value
@lombok.Builder
public class Persistence {

    @lombok.NonNull
    String domain;

    @lombok.NonNull
    String name;

    @lombok.NonNull
    String version;

    @lombok.Singular
    List> getters;

    @lombok.Singular
    List> setters;

    public Config loadConfig(T target) {
        Config.Builder config = Config.builder(domain, name, version);
        getters.forEach(item -> item.accept(target, config));
        return config.build();
    }

    public void storeConfig(T target, Config config) {
        Config.checkDomain(config, domain);
        setters.forEach(item -> item.accept(target, config));
    }

    public static  Builder builderOf(Class type) {
        return new Builder().domain(type.getName());
    }

    public static final class Builder {

        public  Builder with(PropertyHandler p, Function getter, BiConsumer setter) {
            return with(p, BeanHandler.of(getter, setter));
        }

        public  Builder with(PropertyHandler p, BeanHandler handler) {
            Config.Converter converter = Config.Converter.of(p);
            getter((target, config) -> converter.set(config, handler.load(target)));
            setter((target, config) -> handler.store(target, converter.get(config)));
            return this;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy