From 76d8d9110af8b4ebd71355746cf730349844b9af Mon Sep 17 00:00:00 2001 From: zzz <zzz@i2pmail.org> Date: Tue, 3 Jan 2023 10:10:35 -0500 Subject: [PATCH] Console: Add link to sort netdb country chart by count --- .../i2p/router/web/helpers/NetDbHelper.java | 10 ++++- .../i2p/router/web/helpers/NetDbRenderer.java | 45 ++++++++++++++++++- apps/routerconsole/jsp/netdb.jsp | 1 + 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java index 21e2288cd4..6536452513 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java @@ -25,7 +25,7 @@ public class NetDbHelper extends FormHandler { private String _routerPrefix; private String _version; private String _country; - private String _family, _caps, _ip, _sybil, _mtu, _ssucaps, _ipv6, _transport, _hostname; + private String _family, _caps, _ip, _sybil, _mtu, _ssucaps, _ipv6, _transport, _hostname, _sort; private int _full, _port, _cost, _page, _mode; private long _date; private int _limit = DEFAULT_LIMIT; @@ -217,6 +217,12 @@ public class NetDbHelper extends FormHandler { _page = 0; } catch (NumberFormatException nfe) {} } + + + /** @since 0.9.57 */ + public void setSort(String f) { + _sort = f; + } /** * call for non-text-mode browsers @@ -309,6 +315,8 @@ public class NetDbHelper extends FormHandler { } else if (_full == 4) { renderLookupForm(); } else { + if (_full == 0 && _sort != null) + _full = 3; renderer.renderStatusHTML(_out, _limit, _page, _full); } } catch (IOException ioe) { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java index 872b84c5eb..bdbdf1d838 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java @@ -847,6 +847,7 @@ class NetDbRenderer { /** * @param mode 0: charts only; 1: full routerinfos; 2: abbreviated routerinfos + * mode 3: Same as 0 but sort countries by count */ public void renderStatusHTML(Writer out, int pageSize, int page, int mode) throws IOException { if (!_context.netDb().isInitialized()) { @@ -1005,9 +1006,24 @@ class NetDbRenderer { // country table List<String> countryList = new ArrayList<String>(countries.objects()); if (!countryList.isEmpty()) { - Collections.sort(countryList, new CountryComparator()); + if (mode == 3) + Collections.sort(countryList, new CountryCountComparator(countries)); + else + Collections.sort(countryList, new CountryComparator()); buf.append("<table id=\"netdbcountrylist\">\n"); - buf.append("<tr><th align=\"left\">" + _t("Country") + "</th><th>" + _t("Count") + "</th></tr>\n"); + buf.append("<tr><th align=\"left\">"); + if (mode == 3) + buf.append("<a href=\"/netdb\" title=\"").append(_t("Sort by country")).append("\">"); + buf.append(_t("Country")); + if (mode == 3) + buf.append("</a>"); + buf.append("</th><th>"); + if (mode == 0) + buf.append("<a href=\"/netdb?s=1\" title=\"").append(_t("Sort by count")).append("\">"); + buf.append(_t("Count")); + if (mode == 0) + buf.append("</a>"); + buf.append("</th></tr>\n"); for (String country : countryList) { int num = countries.count(country); buf.append("<tr><td><a href=\"/netdb?c=").append(country).append("\">"); @@ -1073,6 +1089,31 @@ class NetDbRenderer { } } + /** + * Reverse sort by count, then forward by translated name. + * + * @since 0.9.57 + */ + private class CountryCountComparator implements Comparator<String> { + private static final long serialVersionUID = 1L; + private final ObjectCounter<String> counts; + private final Collator coll; + + public CountryCountComparator(ObjectCounter<String> counts) { + super(); + this.counts = counts; + coll = Collator.getInstance(new Locale(Messages.getLanguage(_context))); + } + + public int compare(String l, String r) { + int rv = counts.count(r) - counts.count(l); + if (rv != 0) + return rv; + return coll.compare(getTranslatedCountry(l), + getTranslatedCountry(r)); + } + } + /** * Sort by style, then host * @since 0.9.38 diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp index 38045056eb..95c5957df2 100644 --- a/apps/routerconsole/jsp/netdb.jsp +++ b/apps/routerconsole/jsp/netdb.jsp @@ -38,6 +38,7 @@ <jsp:setProperty name="formhandler" property="mode" value="<%=request.getParameter(\"m\")%>" /> <jsp:setProperty name="formhandler" property="date" value="<%=request.getParameter(\"date\")%>" /> <jsp:setProperty name="formhandler" property="leaseset" value="<%=request.getParameter(\"ls\")%>" /> + <jsp:setProperty name="formhandler" property="sort" value="<%=request.getParameter(\"s\")%>" /> <%@include file="formhandler.jsi" %> <jsp:getProperty name="formhandler" property="netDbSummary" /> </div></body></html> -- GitLab