Package com.socrata.datasync

Source Code of com.socrata.datasync.VersionProvider

package com.socrata.datasync;

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.entity.ContentType;
import org.codehaus.jackson.map.ObjectMapper;

import java.net.URI;
import java.util.ResourceBundle;
import java.util.Scanner;
import java.util.regex.MatchResult;

public final class VersionProvider {

    private static final VersionProvider INSTANCE = new VersionProvider();
    private static final ObjectMapper mapper = new ObjectMapper();
    private static final HttpUtility http = new HttpUtility();
    private static final String datasyncReleases = "https://api.github.com/repos/socrata/datasync/releases";
    private String version;

    private VersionProvider() {
        ResourceBundle rb;
        rb = ResourceBundle.getBundle("datasync");
        version = rb.getString("version");
    }

    public enum VersionStatus {
        LATEST, NOT_LATEST, UNKNOWN
    }

    public static String getThisVersion() {
        return INSTANCE.version;
    }

    public static VersionStatus isLatestMajorVersion() {
        String latest = getLatestVersion();
        if (latest == null) {
            return VersionStatus.UNKNOWN;
        } else {
            if (getMajorVersion(INSTANCE.version) >= getMajorVersion(latest)) {
                return VersionStatus.LATEST;
            } else {
                return VersionStatus.NOT_LATEST;
            }
        }
    }

    public static int getMajorVersion(String versionString) {
        String[] versionSplit = versionString.split("\\.");
        return Integer.parseInt(versionSplit[0]);
    }

    public static String getLatestVersion() {
        try(CloseableHttpResponse response = http.get(new URI(datasyncReleases), ContentType.APPLICATION_JSON.getMimeType())) {
            DatasyncGithubRelease[] releases = mapper.readValue(response.getEntity().getContent(), DatasyncGithubRelease[].class);
            DatasyncGithubRelease currentRelease = releases[0];
            return stripVersion(currentRelease.name);
        } catch (Exception e) {   // no reason to fail jobs because of a version check
            return null;
        }
    }

    public static String getDownloadUrlForLatestVersion() {
        try(CloseableHttpResponse response = http.get(new URI(datasyncReleases), ContentType.APPLICATION_JSON.getMimeType())) {
            DatasyncGithubRelease[] releases = mapper.readValue(response.getEntity().getContent(), DatasyncGithubRelease[].class);
            DatasyncGithubRelease currentRelease = releases[0];
            return currentRelease.htmlUrl;
        } catch (Exception e) {  // no reason to fail jobs because of a version check
            return null;
        }
    }

    public static String stripVersion(String text) {
        Scanner scanner = new Scanner(text);
        String versionNums = scanner.findWithinHorizon("(\\d+)(\\.\\d+)(\\.\\d+)?", 0);
        String version = "";
        if (versionNums != null) {
            MatchResult groups = scanner.match();
            for (int i = 1; i <= groups.groupCount() && groups.group(i) != null; i++) // yes, truly 1-indexed
                version += groups.group(i);
        }
        return version;
    }

}
TOP

Related Classes of com.socrata.datasync.VersionProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.