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

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

package jdplus.toolkit.desktop.plugin.util;

import jdplus.toolkit.desktop.plugin.Config;
import java.util.Collections;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import nbbrd.design.MightBePromoted;
import nbbrd.io.function.IOFunction;
import nbbrd.io.text.Formatter;
import nbbrd.io.text.Parser;
import nbbrd.io.text.TextFormatter;
import nbbrd.io.text.TextParser;
import nbbrd.io.xml.bind.Jaxb;

/**
 *
 */
@Deprecated
@lombok.experimental.UtilityClass
public class XmlConfig {

    public static Formatter xmlFormatter(boolean formattedOutput) {
        return formattedOutput ? formattedOutputFormatter : defaultFormatter;
    }

    public static Parser xmlParser() {
        return defaultParser;
    }

    @XmlRootElement(name = "config")
    public static final class ConfigBean {

        @XmlAttribute(name = "domain")
        public String domain;
        @XmlAttribute(name = "name")
        public String name;
        @XmlAttribute(name = "version")
        public String version;
        @XmlElement(name = "param")
        public ParamBean[] params;

        Config toId() {
            return Config.builder(domain != null ? domain : "", name != null ? name : "", version != null ? version : "")
                    .parameters(ParamBean.toSortedMap(params))
                    .build();
        }

        static ConfigBean of(Config config) {
            ConfigBean bean = new ConfigBean();
            bean.domain = config.getDomain();
            bean.name = config.getName();
            bean.version = config.getVersion();
            bean.params = ParamBean.fromSortedMap(config.getParameters());
            return bean;
        }
    }

    public static final class ParamBean {

        @XmlAttribute(name = "key")
        public String key;
        @XmlAttribute(name = "value")
        public String value;

        String getKeyOrEmpty() {
            return nullToEmpty(key);
        }

        String getValueOrEmpty() {
            return nullToEmpty(value);
        }

        static ParamBean of(Map.Entry entry) {
            ParamBean item = new ParamBean();
            item.key = entry.getKey();
            item.value = entry.getValue();
            return item;
        }

        public static SortedMap toSortedMap(ParamBean[] params) {
            return params != null
                    ? Stream.of(params).collect(Collectors.toMap(ParamBean::getKeyOrEmpty, ParamBean::getValueOrEmpty, (l, r) -> l, TreeMap::new))
                    : Collections.emptySortedMap();
        }

        public static ParamBean[] fromSortedMap(SortedMap sortedMap) {
            return !sortedMap.isEmpty()
                    ? sortedMap.entrySet().stream().map(ParamBean::of).toArray(ParamBean[]::new)
                    : null;
        }
    }

    private static final Parser defaultParser;
    private static final Formatter defaultFormatter;
    private static final Formatter formattedOutputFormatter;

    static {
        defaultParser = asParser(Jaxb.Parser.of(ConfigBean.class).andThen(ConfigBean::toId));
        defaultFormatter = asFormatter(Jaxb.Formatter.of(ConfigBean.class).withFormatted(false).compose(ConfigBean::of));
        formattedOutputFormatter = asFormatter(Jaxb.Formatter.of(ConfigBean.class).withFormatted(true).compose(ConfigBean::of));
    }

    @MightBePromoted
    private static  Parser asParser(TextParser parser) {
        return Parser.of(IOFunction.unchecked(parser::parseChars)::apply);
    }

    @MightBePromoted
    private static  Formatter asFormatter(TextFormatter formatter) {
        return Formatter.of(IOFunction.unchecked(formatter::formatToString)::apply);
    }

    @MightBePromoted
    private static String nullToEmpty(String input) {
        return input != null ? input : "";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy