package com.intellij.tasks.jira; import com.intellij.util.text.VersionComparatorUtil; import org.jetbrains.annotations.NotNull; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Mikhail Golubev */ public class JiraVersion implements Comparable<JiraVersion> { // Fix for IDEA-113944 private static final Pattern VERSION_PATTERN = Pattern.compile("(\\d+)(?:[^\\d]+(\\d+))?(?:[^\\d]+(\\d+))?.*"); private final int myMajorNumber, myMinorNumber, myMicroNumber; public JiraVersion(int majorNumber) { this(majorNumber, 0, 0); } public JiraVersion(int majorNumber, int minorNumber) { this(majorNumber, minorNumber, 0); } public JiraVersion(int majorNumber, int minorNumber, int microNumber) { myMajorNumber = majorNumber; myMinorNumber = minorNumber; myMicroNumber = microNumber; } public JiraVersion(@NotNull String version) { Matcher m = VERSION_PATTERN.matcher(version); if (!m.matches()) { throw new IllegalArgumentException("Illegal JIRA version number: " + version); } myMajorNumber = m.group(1) == null ? 0 : Integer.parseInt(m.group(1)); myMinorNumber = m.group(2) == null ? 0 : Integer.parseInt(m.group(2)); myMicroNumber = m.group(3) == null ? 0 : Integer.parseInt(m.group(3)); } public int getMajorNumber() { return myMajorNumber; } public int getMinorNumber() { return myMinorNumber; } public int getMicroNumber() { return myMicroNumber; } @Override public String toString() { return String.format("%d.%d.%d", myMajorNumber, myMinorNumber, myMicroNumber); } @Override public int compareTo(@NotNull JiraVersion o) { return VersionComparatorUtil.compare(toString(), o.toString()); } }