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

org.opentripplanner.model.projectinfo.MavenProjectVersion Maven / Gradle / Ivy

package org.opentripplanner.model.projectinfo;

import java.io.Serializable;
import java.util.Objects;


/**
 * This class encapsulate a simplified version of  Mave version number. It has logic to parse
 * any version string that follow the Maven standard.
 */
public class MavenProjectVersion implements Serializable {

    private static final long serialVersionUID = 1L;

    /** The maven version string "as is" */
    public final String version;

    public final int major;

    public final int minor;

    public final int patch;

    /**
     * The qualifier, snapshot or build number part of the version. This is what is after the first
     * '-'. Maven distinguish between qualifier, snapshots or build-number to be able to sort
     * versions in the correct order, but we do not need to 'sort', hence the simplification
     * treating all 3 of these as a 'qualifier'.
     */
    public final String qualifier;

    private MavenProjectVersion(String version, int major, int minor, int patch, String qualifier) {
      this.version = version;
      this.major = major;
      this.minor = minor;
      this.patch = patch;
      this.qualifier = qualifier;
    }

    static MavenProjectVersion parse(String version) {
      Objects.requireNonNull(version);
      int major = 0;
      int minor = 0;
      int patch = 0;
      String qualifier = "";
      String [] numFields;

      int pos = version.indexOf('-');

      if(pos > 0) {
        if(pos < version.length()) {
          qualifier = version.substring(pos + 1);
        }
        numFields = splitInotNumFields(version.substring(0, pos));
      }
      else {
        numFields = splitInotNumFields(version);
      }

      if (numFields.length > 0) { major = parseNumField(numFields[0]); }
      if (numFields.length > 1) { minor = parseNumField(numFields[1]); }
      if (numFields.length > 2) { patch = parseNumField(numFields[2]); }

      return new MavenProjectVersion(version, major, minor, patch, qualifier);
    }

  /** @return "major.minor.patch". The SNAPSHOT `qualifier` is removed. */
  public String unqualifiedVersion() {
    return String.format("%d.%d.%d", major, minor, patch);
  }

  /**
   * Compare version and check if they are the same. Note the version might be two different
   * SNAPSHOTs of the same version - here considered equals.
   */
  public boolean sameVersion(MavenProjectVersion other) {
    return version.equals(other.version);
  }

  @Override
  public String toString() {
    return version;
  }

  private static String[] splitInotNumFields(String v) {
    return v.split("\\.");
  }

  /** Parse numeric field, if not numeric return 0 */
  private static int parseNumField(String field) {
    try {
      return Integer.parseInt(field);
    }
    catch (NumberFormatException ignore) {
      return 0;
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy