package greenfoot.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import bluej.Config;


| Represents a version number. A version is a sequence of numbers separated by | full stops and an optional string at the end. | | @author Poul Henriksen | public class Version {
| A change in this number indicates a breaking change that will be likely | to break some scenarios. | private int breakingNumber;
| A change in this number indicates a visible (to the user) change that | should not break anything in most cases. | private int nonBreakingNumber;
| A change in this number indicates an internal change only. | private int internalNumber;
| The version number was bad or non-existent | private boolean badVersion = false;
| Create a new Version from the string. | | @param versionString A string in the format X.Y.Z. If the string is null | or invalid, it will be flagged and can be determined by | calling {}link #isBad()}. | public Version(String versionString) { if (versionString == null) { badVersion = true; return; } String[] split = versionString.split("\\."); List<Integer> numbers = new ArrayList<Integer>(); String lastString = null; for (String s : split) { try { numbers.add(Integer.valueOf(Integer.parseInt(s))); } catch (NumberFormatException nfe) { lastString = s; break; }; } if (numbers.size() < 3 && lastString != null) { String[] endSplit = lastString.split("[^0-9]+"); if (endSplit.length > 0) { String candidate = endSplit[0]; if (lastString.startsWith(candidate)) { numbers.add(Integer.valueOf(Integer.parseInt(candidate))); } } } if (numbers.size() == 3) { breakingNumber = numbers.get(0); nonBreakingNumber = numbers.get(1); internalNumber = numbers.get(2); } else { badVersion = true; } }
| True if this version number is older than the other version number in a | way that will be likely to break some scenarios. Or if any of the | versions is a bad version number. | public boolean isOlderAndBreaking(Version other) { return this.breakingNumber < other.breakingNumber || this.badVersion || other.badVersion; }
| True if this version number is older than the other version number and | if our version is before 3.0.0 while the given version is later. | public boolean crosses300Boundary(Version other) { return this.breakingNumber < other.breakingNumber && this.breakingNumber < 3 && other.breakingNumber >= 3; }
| True if this version number is different than the other version number in | a way that will be unlikely to break scenarios. Or if any of the versions | is a bad version number. | public boolean isNonBreaking(Version other) { return this.nonBreakingNumber != other.nonBreakingNumber || this.badVersion || other.badVersion; }
| True if this version number is different than the other version number | but will only contain in internal changes and will not break scenarios. | Or if any of the versions is a bad version number. | public boolean isInternal(Version other) { return this.internalNumber != other.internalNumber || this.badVersion || other.badVersion; }
| True if the version number was not correctly formated. | public boolean isBad() { return badVersion; }
| Returns the version in the format X.Y.Z. | public String toString() { return breakingNumber + "." + nonBreakingNumber + "." + internalNumber; }
| Return a message that shows the changes introduced in apiVersion compared to this version. | | @param apiVersion The API version that for which the changes should be shown. | @return | public String getChangesMessage(Version apiVersion) { StringBuffer message = new StringBuffer(Config.getString("project.version.older.part1") + this + Config.getString("project.version.older.part2") + apiVersion + Config.getString("project.version.older.part3") + "\n\n"); int changeNumber = 1; String changesString = Config.getString("project.version.changes." + changeNumber, "EMPTY").trim(); while (!changesString.equals("EMPTY")) { int spaceIndex = changesString.indexOf(' '); if (spaceIndex < 5) { return ""; } String versionString = changesString.substring(0,spaceIndex); Version changeVersion = new Version(versionString); if (this.isOlderAndBreaking(changeVersion)) { String text = changesString.substring(spaceIndex + 1); message.append(text + "\n"); } changeNumber++; changesString = Config.getString("project.version.changes." + changeNumber, "EMPTY"); } return message.toString(); }
| This will return a message about the version being VERY old (before we | introduced version numbers). This is very unlikely to ever be used. | public String getBadMessage() { return Config.getString("project.version.none"); }
| Return a message that says that this project is a newer version. | public String getNewerMessage() { return Config.getString("project.version.newer.part1") + this + Config.getString("project.version.newer.part2"); }
| Get message if this is not a Greenfoot version number. | public String getNotGreenfootMessage(File projectDir) { return Config.getString("project.version.notGreenfoot") + projectDir; } }
top, use, map, class Version

.   Version
.   isOlderAndBreaking
.   crosses300Boundary
.   isNonBreaking
.   isInternal
.   isBad
.   toString
.   getChangesMessage
.   getBadMessage
.   getNewerMessage
.   getNotGreenfootMessage




198 neLoCode + 33 LoComm