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

org.bidib.jbidibc.decoder.version.VersionMatcher Maven / Gradle / Ivy

package org.bidib.jbidibc.decoder.version;

import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class VersionMatcher {
    private static final Logger LOGGER = LoggerFactory.getLogger(VersionMatcher.class);

    public static final String PATTERN_A = "^([0-9]{1,4})$";

    public static final String PATTERN_B = "^([0-9]\\.?){1,3}$";

    public static final String PATTERN_C = "^V([0-9]\\.?){1,2}(R[0-9]+)$";

    // V{0:M0x07}.{0:M0x78}R{1}

    public static class VersionCheck {
        private final String versionString;

        private final String pattern;

        public VersionCheck(String pattern, String versionString) {
            this.pattern = pattern;
            this.versionString = versionString;
        }

        public String check(Function fun) {
            return fun.apply(this);
        }
    }

    public static Function versionMatcher = versionCheck -> {
        Matcher m = Pattern.compile(versionCheck.pattern).matcher(versionCheck.versionString);
        if (m.matches()) {
            LOGGER.info("The pattern matches!");

            return m.group();
        }
        return null;
    };

    /**
     * Detect the concrete version based on the provided version pattern.
     * 
     * @param versionString
     *            the version string
     * @return the decoder version parser
     */
    public DecoderVersion detectVersion(String versionString) {

        VersionCheck versionCheck = new VersionCheck(VersionMatcher.PATTERN_A, versionString);
        String result = versionCheck.check(VersionMatcher.versionMatcher);

        if (result != null) {
            LOGGER.info("Found version of pattern A: {}", result);
            DecoderVersion version = new PatternAVersion(versionString);
            version.parse(result);
            return version;
        }

        versionCheck = new VersionCheck(VersionMatcher.PATTERN_B, versionString);
        result = versionCheck.check(VersionMatcher.versionMatcher);

        if (result != null) {
            LOGGER.info("Found version of pattern B: {}", result);
            DecoderVersion version = new PatternBVersion(versionString);
            version.parse(result);
            return version;
        }

        versionCheck = new VersionCheck(VersionMatcher.PATTERN_C, versionString);
        result = versionCheck.check(VersionMatcher.versionMatcher);

        if (result != null) {
            LOGGER.info("Found version of pattern C: {}", result);
            DecoderVersion version = new PatternCVersion(versionString);
            version.parse(result);
            return version;
        }
        return null;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy