From b259a3ac3d6aafabc95af79ff75ba061051cbbdb Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Wed, 10 Oct 2012 19:11:18 +0000 Subject: [PATCH] * stats.jsp: Sort groups by translated name --- .../net/i2p/router/web/StatsGenerator.java | 36 ++++++++++++------- core/java/src/net/i2p/stat/StatManager.java | 32 ++++++++++------- 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java index 3cc9850335..b323f6b78a 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java @@ -3,10 +3,14 @@ package net.i2p.router.web; import java.io.IOException; import java.io.Writer; import java.text.DecimalFormat; +import java.text.Collator; import java.util.Arrays; +import java.util.Comparator; import java.util.Iterator; import java.util.Map; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeMap; import net.i2p.data.DataHelper; import net.i2p.router.RouterContext; @@ -14,18 +18,15 @@ import net.i2p.stat.Frequency; import net.i2p.stat.FrequencyStat; import net.i2p.stat.Rate; import net.i2p.stat.RateStat; -import net.i2p.util.Log; /** * Dump the stats to the web admin interface */ public class StatsGenerator { - private Log _log; private RouterContext _context; public StatsGenerator(RouterContext context) { _context = context; - _log = context.logManager().getLog(StatsGenerator.class); } public void generateStatsPage(Writer out, boolean showAll) throws IOException { @@ -35,10 +36,10 @@ public class StatsGenerator { out.write(buf.toString()); buf.setLength(0); - Map groups = _context.statManager().getStatsByGroup(); - for (Iterator iter = groups.entrySet().iterator(); iter.hasNext(); ) { - Map.Entry entry = (Map.Entry)iter.next(); - String group = (String)entry.getKey(); + Map<String, SortedSet<String>> unsorted = _context.statManager().getStatsByGroup(); + Map<String, Set<String>> groups = new TreeMap(new AlphaComparator()); + groups.putAll(unsorted); + for (String group : groups.keySet()) { buf.append("<option value=\"#").append(group).append("\">"); buf.append(_(group)).append("</option>\n"); // let's just do the groups @@ -66,9 +67,9 @@ public class StatsGenerator { out.write(buf.toString()); buf.setLength(0); - for (Iterator iter = groups.keySet().iterator(); iter.hasNext(); ) { - String group = (String)iter.next(); - Set stats = (Set)groups.get(group); + for (Map.Entry<String, Set<String>> entry : groups.entrySet()) { + String group = entry.getKey(); + Set<String> stats = entry.getValue(); buf.append("<h3><a name=\""); buf.append(group); buf.append("\">"); @@ -77,8 +78,7 @@ public class StatsGenerator { buf.append("<ul>"); out.write(buf.toString()); buf.setLength(0); - for (Iterator statIter = stats.iterator(); statIter.hasNext(); ) { - String stat = (String)statIter.next(); + for (String stat : stats) { buf.append("<li><b><a name=\""); buf.append(stat); buf.append("\">"); @@ -250,6 +250,18 @@ public class StatsGenerator { private final static DecimalFormat _pct = new DecimalFormat("#0.00%"); private final static String pct(double num) { synchronized (_pct) { return _pct.format(num); } } + /** + * Translated sort + * @since 0.9.3 + */ + private class AlphaComparator implements Comparator<String> { + public int compare(String lhs, String rhs) { + String lname = _(lhs); + String rname = _(rhs); + return Collator.getInstance().compare(lname, rname); + } + } + /** translate a string */ private String _(String s) { return Messages.getString(s, _context); diff --git a/core/java/src/net/i2p/stat/StatManager.java b/core/java/src/net/i2p/stat/StatManager.java index ec83bd0e66..b63879c7ae 100644 --- a/core/java/src/net/i2p/stat/StatManager.java +++ b/core/java/src/net/i2p/stat/StatManager.java @@ -1,12 +1,11 @@ package net.i2p.stat; -import java.text.Collator; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.SortedSet; -import java.util.TreeMap; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; @@ -212,19 +211,28 @@ public class StatManager { return _frequencyStats.containsKey(statName); } - /** Group name (String) to a Set of stat names, ordered alphabetically */ + /** + * Group name (untranslated String) to a SortedSet of untranslated stat names. + * Map is unsorted. + */ public Map<String, SortedSet<String>> getStatsByGroup() { - Map<String, SortedSet<String>> groups = new TreeMap(Collator.getInstance()); - for (Iterator<FrequencyStat> iter = _frequencyStats.values().iterator(); iter.hasNext();) { - FrequencyStat stat = iter.next(); - if (!groups.containsKey(stat.getGroupName())) groups.put(stat.getGroupName(), new TreeSet()); - Set<String> names = groups.get(stat.getGroupName()); + Map<String, SortedSet<String>> groups = new HashMap(32); + for (FrequencyStat stat : _frequencyStats.values()) { + String gname = stat.getGroupName(); + SortedSet<String> names = groups.get(gname); + if (names == null) { + names = new TreeSet(); + groups.put(gname, names); + } names.add(stat.getName()); } - for (Iterator<RateStat> iter = _rateStats.values().iterator(); iter.hasNext();) { - RateStat stat = iter.next(); - if (!groups.containsKey(stat.getGroupName())) groups.put(stat.getGroupName(), new TreeSet()); - Set<String> names = groups.get(stat.getGroupName()); + for (RateStat stat : _rateStats.values()) { + String gname = stat.getGroupName(); + SortedSet<String> names = groups.get(gname); + if (names == null) { + names = new TreeSet(); + groups.put(gname, names); + } names.add(stat.getName()); } return groups; -- GitLab