com.adguard.commons.utils.ProductVersion.java Source code

Java tutorial

Introduction

Here is the source code for com.adguard.commons.utils.ProductVersion.java

Source

/**
 This file is part of Adguard Content Blocker (https://github.com/AdguardTeam/ContentBlocker).
 Copyright  2016 Performix LLC. All rights reserved.
    
 Adguard Content Blocker is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by the
 Free Software Foundation, either version 3 of the License, or (at your option)
 any later version.
    
 Adguard Content Blocker is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
    
 You should have received a copy of the GNU General Public License along with
 Adguard Content Blocker.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.adguard.commons.utils;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;

@SuppressWarnings("UnusedDeclaration")
public class ProductVersion implements Comparable<ProductVersion> {

    private final static int MAX_VERSION = 100;
    private int major;
    private int minor;
    private int revision;
    private int build;

    public ProductVersion() {
    }

    public ProductVersion(int major, int minor, int revision, int build) {
        this.major = major;
        this.minor = minor;
        this.revision = revision;
        this.build = build;
    }

    public ProductVersion(String version) {
        if (StringUtils.isEmpty(version)) {
            return;
        }

        String[] parts = StringUtils.split(version, ".");

        if (parts.length >= 4) {
            build = parseVersionPart(parts[3]);
        }
        if (parts.length >= 3) {
            revision = parseVersionPart(parts[2]);
        }
        if (parts.length >= 2) {
            minor = parseVersionPart(parts[1]);
        }
        if (parts.length >= 1) {
            major = parseVersionPart(parts[0]);
        }
    }

    private static int parseVersionPart(String part) {
        int versionPart = NumberUtils.toInt(part, 0);
        if (versionPart < 0) {
            versionPart = 0;
        }
        return versionPart;
    }

    /**
     * Increments product version
     */
    public void increment() {
        setBuild(getBuild() + 1);
        if (getBuild() >= MAX_VERSION) {
            setRevision(getRevision() + 1);
            setBuild(0);
            if (getRevision() >= MAX_VERSION) {
                setMinor(getMinor() + 1);
                setRevision(0);
                if (getMinor() >= MAX_VERSION) {
                    setMajor(getMajor() + 1);
                    setMinor(0);
                }
            }
        }
    }

    public int getMajor() {
        return major;
    }

    public void setMajor(int major) {
        this.major = major;
    }

    public int getMinor() {
        return minor;
    }

    public void setMinor(int minor) {
        this.minor = minor;
    }

    public int getRevision() {
        return revision;
    }

    public void setRevision(int revision) {
        this.revision = revision;
    }

    public int getBuild() {
        return build;
    }

    public void setBuild(int build) {
        this.build = build;
    }

    public String getShortVersionString() {
        return major + "." + minor;
    }

    public String getShortWithRevisionString() {
        return major + "." + minor + "." + revision;
    }

    public String getLongVersionString() {
        return major + "." + minor + "." + revision + "." + build;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(major);
        sb.append(".");
        sb.append(minor);
        if (revision > 0 || build > 0) {
            sb.append(".");
            sb.append(revision);
        }
        if (build > 0) {
            sb.append(".");
            sb.append(build);
        }
        return sb.toString();
    }

    @Override
    public int compareTo(ProductVersion o) {
        if (getMajor() > o.getMajor()) {
            return 1;
        } else if (getMajor() < o.getMajor()) {
            return -1;
        }

        if (getMinor() > o.getMinor()) {
            return 1;
        } else if (getMinor() < o.getMinor()) {
            return -1;
        }

        if (getRevision() > o.getRevision()) {
            return 1;
        } else if (getRevision() < o.getRevision()) {
            return -1;
        }

        if (getBuild() > o.getBuild()) {
            return 1;
        } else if (getBuild() < o.getBuild()) {
            return -1;
        }

        return 0;
    }
}