Class SemVer

java.lang.Object
org.nuiton.version.SemVer
All Implemented Interfaces:
Comparable<SemVer>

public class SemVer extends Object implements Comparable<SemVer>
Implantation de Semantic Versioning.

Cet objet est immutable, Il faut utiliser getCreator() pour modifier un de ses elements

Quelques changements par rapport au site :

  • le numero de version peut avoir entre 1 et N element, et non pas 3 obligatoirement
  • on peut avoir un -SNAPSHOT ajoute en toute fin de la version
Un SemVer est en plusieurs éléments dont chaque élément peut avoir plusieurs composants. Les composants utilisent le même séparateur '.'.
  • version: 1 à N composant numérique, les 3 premiers sont nommés
    • major
    • minor
    • patch
  • prerelease: 0 à N composant alphanumérique, le prefix est '-'
  • build: 0 à N composant alphanumérique, le prefix est '+'
  • SNAPSHOT: 0 ou 1 composant dont le nom est fixe le prefix est '-'
Le mieux pour construire ou modifier un SemVer est d'utilise une methode creator:
  • SemVer.creator(1,2,3).done() → "1.2.3"
  • SemVer.creator("1.2.3","rc2").done() → "1.2.3-rc2"
  • SemVer.creator().setVersion(2.3.4).setBuild("r223").done() → "2.3.4+r223"
  • SemVer.creator().setVersion(2.3.4).setSnapshot(true).done() → "2.3.4-SNAPSHOT"
  • SemVer.creator(new SemVer("1.2.3")).incMajor().done() → "2.2.2"
  • new SemVer("1.2.3").getCreator().incMinor().setPrerelease(beta).done() → "1.3.3-beta"
Since:
1.0
Author:
Benjamin Poussin - poussin@codelutin.com
  • Field Details

    • SERIES_SEPARATOR

      public static final String SERIES_SEPARATOR
      Séparateur utilisé entre chaque element d'une partie
      See Also:
    • PRERELEASE_SEPARATOR

      public static final String PRERELEASE_SEPARATOR
      Séparateur entre la version et l'élément prerelease
      See Also:
    • BUILD_SEPARATOR

      public static final String BUILD_SEPARATOR
      Séparateur utiliser devant l'élément build
      See Also:
    • PATTERN_VERSION

      public static final String PATTERN_VERSION
      Pattern pour une partie de l'élément version
      See Also:
    • PATTERN_PRERELEASE

      public static final String PATTERN_PRERELEASE
      Pattern pour une partie de l'élément prerelease
      See Also:
    • PATTERN_BUILD

      public static final String PATTERN_BUILD
      Pattern pour une partie de l'élément build
      See Also:
    • SNAPSHOT_SEPARATOR

      public static final String SNAPSHOT_SEPARATOR
      Séparateur de SNAPSHOT
      See Also:
    • SNAPSHOT

      public static final String SNAPSHOT
      La chaine de caractère représentant le SNAPSHOT
      See Also:
    • version

      protected String version
    • prerelease

      protected String prerelease
    • build

      protected String build
    • snapshot

      protected String snapshot
  • Constructor Details

    • SemVer

      public SemVer(String versionString)
      Create new Version object, strip is done on argument to remove extra space
      Parameters:
      versionString - FIXME
      Throws:
      IllegalArgumentException - if argument isn't valid version string
  • Method Details

    • before

      public boolean before(SemVer o)
      Parameters:
      o - the other version to test
      Returns:
      true if current version is before the given one
    • after

      public boolean after(SemVer o)
      Parameters:
      o - the other version to test
      Returns:
      true if current version is after the given one
    • compareTo

      public int compareTo(SemVer other)
      Specified by:
      compareTo in interface Comparable<SemVer>
    • compare

      protected int compare(String a, String b, boolean nullIsHigh)
      Compare deux elements de meme semantique (version, prerelease, build, snapshot) sinon le comportement est non predictible
      Parameters:
      a - FIXME
      b - FIXME
      nullIsHigh - indique si un des elements est null, s'il est plus grand ou plus petit que l'autre
      Returns:
      négatif si a < b, 0 si a == b, positif si a > b
    • nullIsHigh

      protected int nullIsHigh(String a, String b)
      Ne compare pas la chaine, seulement la nullité, si un des arguments est null, alors il est plus grand que l'autre.

      1.0 est plus grand que 1.0-Beta

      Parameters:
      a - FIXME
      b - FIXME
      Returns:
      FIXME
    • nullIsLow

      protected int nullIsLow(String a, String b)
      Ne compare pas la chaine, seulement la nullite, si un des arguments est null, alors il est plus petit que l'autre.

      1.0+r123 est plus grand que 1.0

      Parameters:
      a - FIXME
      b - FIXME
      Returns:
      FIXME
    • getComposantCount

      protected int getComposantCount(String element)
      Donne le nombre de composantes de l'élément
      • 1.2.3 retourne 3
      • 99.100 retourne 2
      Parameters:
      element - FIXME
      Returns:
      FIXME
    • getComposant

      protected String getComposant(String element, int i)
      Retourne un des composants de l'élément version
      Parameters:
      element - FIXME
      i - FIXME
      Returns:
      FIXME
    • getVersion

      public String getVersion()
    • getVersionCount

      public int getVersionCount()
      Donne le nombre de composantes de la version
      • 1.2.3 retourne 3
      • 99.100 retourne 2
      Returns:
      FIXME
    • getVersion

      public String getVersion(int i)
      Retourne un des composants de l'élément version
      Parameters:
      i - FIXME
      Returns:
      FIXME
    • getMajor

      public String getMajor()
    • getMinor

      public String getMinor()
    • getPatch

      public String getPatch()
    • getPrerelease

      public String getPrerelease()
    • getPrereleaseCount

      public int getPrereleaseCount()
      Donne le nombre de composantes de la Prerelease
      • 1.2.3 retourne 3
      • 99.100 retourne 2
      Returns:
      FIXME
    • getPrerelease

      public String getPrerelease(int i)
      Retourne un des composants de l'élément version
      Parameters:
      i - FIXME
      Returns:
      FIXME
    • getBuild

      public String getBuild()
    • getBuildCount

      public int getBuildCount()
      Donne le nombre de composantes de la Prerelease
      • 1.2.3 retourne 3
      • 99.100 retourne 2
      Returns:
      FIXME
    • getBuild

      public String getBuild(int i)
      Retourne un des composants de l'élément version
      Parameters:
      i - FIXME
      Returns:
      FIXME
    • getSnapshot

      public String getSnapshot()
    • isSnapshot

      public boolean isSnapshot()
    • ifNotNull

      protected static String ifNotNull(String prefix, String s)
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toJavaIdentifier

      public String toJavaIdentifier()
      Convertit la representation textuelle de la version en identifiant java valide : - en java : "-" "." "+" interdit
      Returns:
      la valeur ou les caractères interdits sont remplacés par '_'
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getCreator

      public SemVer.SemVerCreator getCreator()
      Retourne un objet creator initialise avec les donnees de ce SemVer ce qui permet de créer un nouveau SemVer en modifiant un des elements
      Returns:
      FIXME
    • isSemVer

      public static boolean isSemVer(String version)
      Indique si la chaine represente bien une version au format SemVer
      Parameters:
      version - FIXME
      Returns:
      FIXME
    • creator

      public static SemVer.SemVerCreator creator(String... v)
      Permet de creer un objet version. Si des arguments sont passés en paramètre, ils sont pris dans l'ordre pour : la version, la prerelease, le build, le snapshot
      SemVer v = SemVer.creator().setVersion("1.2").setPrerelease("beta.1").setBuild("r123").done();
      SemVer v = SemVer.creator("1.2", "beta.1","r123", SemVer.SNAPSHOT).done();
      
      Parameters:
      v - FIXME
      Returns:
      FIXME
    • creator

      public static SemVer.SemVerCreator creator(int... v)
      Créateur qui permet de passer en paramètre les différentes composantes de l'élément version
      Parameters:
      v - FIXME
      Returns:
      FIXME
    • creator

      public static SemVer.SemVerCreator creator(SemVer v)
      Create creator initialized with SemVer value, you can change some Element by putting null value.

      SemVer n = SemVer.creator(v).setBuild("r123").setSnapshot(false).done();

      Parameters:
      v - FIXME
      Returns:
      FIXME
    • creator

      public static SemVer.SemVerCreator creator()
      Retourne un Créateur sans aucune information. Cette methode permet aussi de désambiguïser les deux autres methode creator qui si elles n'ont pas de paramètre sont semblables
      Returns:
      FIXME