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

com.exasol.versionnumberprovider.ExasolVersionNumberProvider Maven / Gradle / Ivy

package com.exasol.versionnumberprovider;

import java.util.Comparator;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import com.exasol.versionnumberprovider.dockerhub.Tag;

/**
 * This class gives you access to the available Exasol docker-db version numbers.
 */
public class ExasolVersionNumberProvider {
    private final List allReleases;
    private static final Pattern PRE_RELEASE_PATTERN = Pattern.compile(".{0,40}(?:prerelease|alpha|beta|rc).{0,40}");

    /**
     * Create a new instance of {@link ExasolVersionNumberProvider}.
     *
     * 

* Package-private since it is built by the {@link ExasolVersionNumberProviderFactory} *

* * @param allTags all tag descriptions from docker-hub API */ ExasolVersionNumberProvider(final List allTags) { this.allReleases = extractVersions(allTags); } private static List extractVersions(final List allTags) { return allTags.stream() // .map(Tag::getName) // .filter(ExasolVersionNumberProvider::isIncludedTag) // .map(ExasolVersionNumber::new) // .sorted() // .collect(Collectors.toList()); } private static boolean isIncludedTag(final String tag) { return !(tag.startsWith("latest") || PRE_RELEASE_PATTERN.matcher(tag).matches()); } /** * Get the latest release of the docker-db. * *

* Instead of using latest, this ensures that your computer will actively fetch the latest version and not use the * latest installed one. *

* * @return latest release number */ public String getLatestReleaseNumber() { return this.allReleases.get(this.allReleases.size() - 1).toString(); } /** * Get the latest release in the given major branch. * * @param majorReleaseNumber Integer major release number, eg. (6) or (7) * @return Latest version with that major * @throws java.util.NoSuchElementException if the major does not match anything */ public String getLatestReleaseForMajor(final int majorReleaseNumber) { return this.allReleases.stream().filter(version -> version.getMajorVersion() == majorReleaseNumber) .max(Comparator.naturalOrder()).orElseThrow().toString(); } /** * Get the latest release in the given major.minor branch. * * @param majorReleaseNumber Integer major release number, eg. (6) or (7) * @param minorReleaseNumber Integer minor release number, eg (0), (1), (2), ... * @return Latest version with that major.minor * @throws java.util.NoSuchElementException if the major.minor does not match anything */ public String getLatestReleaseForMinor(final int majorReleaseNumber, final int minorReleaseNumber) { return this.allReleases.stream() .filter(version -> version.getMajorVersion() == majorReleaseNumber && version.getMinorVersion() == minorReleaseNumber) .max(Comparator.naturalOrder()).orElseThrow().toString(); } /** * Get a list of all available releases. * * @return list of all available releases */ public List getAllReleaseNumbers() { return this.allReleases.stream().map(ExasolVersionNumber::toString).collect(Collectors.toList()); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy