* Console:

- Rewrite TrustedUpdate version comparator, use for netdb version table
        so 0.7.10 will be sorted correctly
      - Reduce netdb.jsp memory usage
      - More tagging fixups
      - configclients.jsp fixup for "Web console"
This commit is contained in:
zzz
2009-10-28 18:26:50 +00:00
parent e94b478317
commit aeb6635e71
11 changed files with 97 additions and 61 deletions

View File

@ -8,6 +8,7 @@ import java.io.IOException;
import java.io.SequenceInputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.StringTokenizer;
import net.i2p.CoreVersion;
@ -183,43 +184,51 @@ D8usM7Dxp5yrDrCYZ5AIijc=
* version, otherwise <code>false</code>.
*/
public static final boolean needsUpdate(String currentVersion, String newVersion) {
StringTokenizer newVersionTokens = new StringTokenizer(sanitize(newVersion), ".");
StringTokenizer currentVersionTokens = new StringTokenizer(sanitize(currentVersion), ".");
while (newVersionTokens.hasMoreTokens() && currentVersionTokens.hasMoreTokens()) {
String newNumber = newVersionTokens.nextToken();
String currentNumber = currentVersionTokens.nextToken();
switch (compare(newNumber, currentNumber)) {
case -1: // newNumber is smaller
return false;
case 0: // eq
break;
case 1: // newNumber is larger
return true;
}
}
if (newVersionTokens.hasMoreTokens() && !currentVersionTokens.hasMoreTokens())
return true;
return false;
return (new VersionComparator()).compare(currentVersion, newVersion) < 0;
}
private static final int compare(String lop, String rop) {
try {
int left = Integer.parseInt(lop);
int right = Integer.parseInt(rop);
if (left < right)
return -1;
else if (left == right)
/**
* Compares versions.
* Characters other than [0-9.] are ignored.
*/
public static class VersionComparator implements Comparator<String> {
/** l and r non-null */
public int compare(String l, String r) {
// try it the easy way first
if (l.equals(r))
return 0;
else
StringTokenizer lTokens = new StringTokenizer(sanitize(l), ".");
StringTokenizer rTokens = new StringTokenizer(sanitize(r), ".");
while (lTokens.hasMoreTokens() && rTokens.hasMoreTokens()) {
String lNumber = lTokens.nextToken();
String rNumber = rTokens.nextToken();
int diff = intCompare(lNumber, rNumber);
if (diff != 0)
return diff;
}
if (lTokens.hasMoreTokens() && !rTokens.hasMoreTokens())
return 1;
} catch (NumberFormatException nfe) {
if (rTokens.hasMoreTokens() && !lTokens.hasMoreTokens())
return -1;
return 0;
}
private static final int intCompare(String lop, String rop) {
int left, right;
try {
left = Integer.parseInt(lop);
} catch (NumberFormatException nfe) {
return -1;
}
try {
right = Integer.parseInt(rop);
} catch (NumberFormatException nfe) {
return 1;
}
return left - right;
}
}
private static final void genKeysCLI(String publicKeyFile, String privateKeyFile) {