package ru.yandex.jenkins.plugins.debuilder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import jedi.functional.FunctionalPrimitives; /** * Encapsulates version information and helps with manipulation * * @author pupssman * */ public class VersionHelper { private final String separator; private final List<String> versionElements; private final int minorEntry; private final int revisionEntry; /** * As {@link VersionHelper#VersionHelper(String, char)} with "." separator * @param version */ public VersionHelper(String version) { this(version, '.'); } /** * As {@link VersionHelper#VersionHelper(String[], String)} with elements got by splitting string with given character. * @param version * @param separatorCharacter */ public VersionHelper(String version, char separatorCharacter) { this(version.split("\\" + separatorCharacter), "" + separatorCharacter); } /** * Constructs new helper with given version elements. * They are analyzed to know which are responsible for the minor version and for the revision. * @param versionElements */ public VersionHelper(String[] versionElements, String separator) { this.versionElements = new ArrayList<String>(Arrays.asList(versionElements)); this.separator = separator; this.minorEntry = getMinorEntry(); this.revisionEntry = getRevisionEntry(); } private int getMinorEntry() { int lastNumeric = -1; for (int i = versionElements.size() - 1; i >= 0; i--) { try { Integer.parseInt(versionElements.get(i)); lastNumeric = i; break; } catch (NumberFormatException e) { // pass } } return lastNumeric; } private int getRevisionEntry() { for (int i = 0; i < versionElements.size() ; i++) { if (versionElements.get(i).startsWith("r")) { return i; } } return -1; } public void setRevision(String revision) { String revisionElement = "r" + revision; if (revisionEntry >= 0) { versionElements.set(revisionEntry, revisionElement); } else { versionElements.add(revisionElement); } } /** * @return last revision imprinted in this version or <b>empty string</b> if no revision known */ public String getRevision() { if (revisionEntry >= 0) { return versionElements.get(revisionEntry).substring(1); } else { return ""; } } /** * @return last minor version imprinted in this version or <b>0</b> if no minor version known */ public int getMinorVersion() { if (minorEntry >= 0) { return Integer.parseInt(versionElements.get(minorEntry)); } else { return 0; } } /** * Replace the last numeric element. * If there is no numeric element, add the new version at the end. * @param newVersion * The new minor version */ public void setMinorVersion(int newVersion) { String versionElement = Integer.toString(newVersion); if (minorEntry >= 0) { versionElements.set(minorEntry, versionElement); } else { versionElements.add(versionElement); } } public String toString() { return FunctionalPrimitives.join(versionElements, separator); } }