package eu.doppel_helix.netbeans.mantisintegration.data; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public class Version implements Comparable<Version> { private final static Logger logger = Logger.getLogger(Version.class.getName()); List<Integer> levels = new ArrayList<>(); String versionString; public Version(String versionString) { this.versionString = versionString; String[] versionParts = versionString.split("\\D+"); for(String versionPart: versionParts) { try { Integer part = Integer.valueOf(versionPart); levels.add(part); } catch (NumberFormatException ex) { logger.log(Level.INFO, "Failed to parse part of version string: {1} ({0})", new Object[] {versionString, versionPart}); } } } public String getVersionString() { return versionString; } public List<Integer> getVersionParts() { return Collections.unmodifiableList(levels); } @Override public int compareTo(Version o) { for(int i = 0; i < Math.max(levels.size(), o.levels.size()); i++) { Integer i1 = levels.size() > i ? levels.get(i) : 0; Integer i2 = o.levels.size() > i ? o.levels.get(i) : 0; if(i1 == null) { i1 = 0; } if(i2 == null) { i2 = 0; } if( ! i1.equals(i2) ) { return i1.compareTo(i2); } } return 0; } @Override public String toString() { return levels.toString() + " (" + versionString + ")"; } }