Author: nicolas Date: Fri Mar 7 08:16:25 2008 New Revision: 634727 URL: http://svn.apache.org/viewvc?rev=634727&view=rev Log: fix sorting in Web UI broken by locale-dependent number formats
Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.css commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.js Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java?rev=634727&r1=634726&r2=634727&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java Fri Mar 7 08:16:25 2008 @@ -18,8 +18,6 @@ package org.apache.commons.monitoring.reporting; import java.io.PrintWriter; -import java.text.DecimalFormat; -import java.text.NumberFormat; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -189,7 +187,8 @@ l = l / unit.getScale(); } } - writer.append( NumberFormat.getInstance( options.getLocale() ).format( l ) ); + + writer.append( options.getNumberFormat().format( l ) ); } private void renderInternal( PrintWriter writer, StatValue value, String attribute, double d, Options options, @@ -208,6 +207,7 @@ d = d / unit.getScale(); } } - writer.append( DecimalFormat.getNumberInstance( options.getLocale() ).format( d ) ); + + writer.append( options.getDecimalFormat().format( d ) ); } } Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java?rev=634727&r1=634726&r2=634727&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java Fri Mar 7 08:16:25 2008 @@ -137,7 +137,7 @@ } } - private void writeColumnHead( PrintWriter writer, Options options, StatValue value, String attribute ) + protected void writeColumnHead( PrintWriter writer, Options options, StatValue value, String attribute ) { if ( options.render( value, attribute ) ) { Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java?rev=634727&r1=634726&r2=634727&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java Fri Mar 7 08:16:25 2008 @@ -17,7 +17,9 @@ package org.apache.commons.monitoring.reporting; -import java.util.Locale; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.NumberFormat; import org.apache.commons.monitoring.StatValue; import org.apache.commons.monitoring.Unit; @@ -40,13 +42,23 @@ return true; } - public Locale getLocale() - { - return Locale.US; - } public Unit unitFor( StatValue value ) { return value.getUnit(); } + + public NumberFormat getDecimalFormat() + { + // Force JS compatible format + DecimalFormatSymbols symbols = new DecimalFormatSymbols(); + symbols.setDecimalSeparator( '.' ); + return new DecimalFormat( "0.00", symbols ); + } + + public NumberFormat getNumberFormat() + { + return new DecimalFormat( "0" ); + } + } Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java?rev=634727&r1=634726&r2=634727&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java Fri Mar 7 08:16:25 2008 @@ -18,9 +18,9 @@ package org.apache.commons.monitoring.reporting; import java.io.PrintWriter; +import java.text.NumberFormat; import java.util.Arrays; import java.util.Collection; -import java.util.Locale; import org.apache.commons.monitoring.Monitor; import org.apache.commons.monitoring.StatValue; @@ -47,6 +47,8 @@ Unit unitFor( StatValue value ); - Locale getLocale(); + NumberFormat getNumberFormat(); + + NumberFormat getDecimalFormat(); } } Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java?rev=634727&r1=634726&r2=634727&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java Fri Mar 7 08:16:25 2008 @@ -23,7 +23,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.StringTokenizer; import java.util.concurrent.ConcurrentHashMap; @@ -136,74 +135,7 @@ */ protected Options getOptions( final HttpServletRequest request ) { - return new OptionsSupport() - { - private List<String> roles; - - private List<String> categories; - - private List<String> subsystems; - - private Locale locale; - - { - String[] values = request.getParameterValues( "role" ); - roles = values != null ? Arrays.asList( values ) : Collections.<String> emptyList(); - values = request.getParameterValues( "category" ); - categories = values != null ? Arrays.asList( values ) : Collections.<String> emptyList(); - values = request.getParameterValues( "subsystem" ); - subsystems = values != null ? Arrays.asList( values ) : Collections.<String> emptyList(); - locale = request.getLocale(); - } - - public Locale getLocale() - { - return locale; - } - - public boolean render( Object object ) - { - if ( object instanceof StatValue ) - { - return roles.isEmpty() || roles.contains( ( (StatValue) object ).getRole() ); - } - if ( object instanceof Monitor ) - { - Key key = ( (Monitor) object ).getKey(); - return ( categories.isEmpty() || categories.contains( key.getCategory() ) ) - && ( subsystems.isEmpty() || subsystems.contains( key.getSubsystem() ) ); - } - return true; - } - - public boolean render( StatValue value, String attribute ) - { - String hide = request.getParameter( value.getRole() + "." + attribute ); - if (hide != null) - { - return Boolean.parseBoolean( hide ); - } - return true; - } - - public Unit unitFor( StatValue value ) - { - String unitName = request.getParameter( value.getRole() + ".unit" ); - if ( unitName != null ) - { - if ( value.getUnit() != null ) - { - Unit unit = value.getUnit().getDerived( unitName ); - if ( unit != null ) - { - return unit; - } - } - } - return value.getUnit(); - } - - }; + return new HttpSerlvetRequestOptions( request ); } protected List<String> getAcceptedMimeTypes( HttpServletRequest request ) @@ -233,6 +165,74 @@ mimeTypes.add( 0, "text/html" ); } return mimeTypes; + } + + protected class HttpSerlvetRequestOptions + extends OptionsSupport + { + protected final HttpServletRequest request; + + protected List<String> roles; + + protected List<String> categories; + + protected List<String> subsystems; + + /** + * @param request + */ + public HttpSerlvetRequestOptions( HttpServletRequest request ) + { + this.request = request; + String[] values = request.getParameterValues( "role" ); + roles = values != null ? Arrays.asList( values ) : Collections.<String> emptyList(); + values = request.getParameterValues( "category" ); + categories = values != null ? Arrays.asList( values ) : Collections.<String> emptyList(); + values = request.getParameterValues( "subsystem" ); + subsystems = values != null ? Arrays.asList( values ) : Collections.<String> emptyList(); + } + + public boolean render( Object object ) + { + if ( object instanceof StatValue ) + { + return roles.isEmpty() || roles.contains( ( (StatValue) object ).getRole() ); + } + if ( object instanceof Monitor ) + { + Key key = ( (Monitor) object ).getKey(); + return ( categories.isEmpty() || categories.contains( key.getCategory() ) ) + && ( subsystems.isEmpty() || subsystems.contains( key.getSubsystem() ) ); + } + return true; + } + + public boolean render( StatValue value, String attribute ) + { + String hide = request.getParameter( value.getRole() + "." + attribute ); + if (hide != null) + { + return Boolean.parseBoolean( hide ); + } + return true; + } + + public Unit unitFor( StatValue value ) + { + String unitName = request.getParameter( value.getRole() + ".unit" ); + if ( unitName != null ) + { + if ( value.getUnit() != null ) + { + Unit unit = value.getUnit().getDerived( unitName ); + if ( unit != null ) + { + return unit; + } + } + } + return value.getUnit(); + } } } Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java?rev=634727&r1=634726&r2=634727&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java Fri Mar 7 08:16:25 2008 @@ -41,7 +41,8 @@ /** The JavaScripts to include to support user interaction */ private String[] scripts = - new String[] { "jquery-1.2.3.pack.js", "jquery.tablesorter.pack.js", "commons-monitoring.js" }; + new String[] { "jquery-1.2.3.pack.js", + "jquery.tablesorter.pack.js", "commons-monitoring.js" }; public NiceHtmlRenderer( String contextPath ) { Modified: commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.css URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.css?rev=634727&r1=634726&r2=634727&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.css (original) +++ commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.css Fri Mar 7 08:16:25 2008 @@ -75,4 +75,12 @@ cursor: pointer; border: solid 1px #8dbdd8; font-size: 0.8em; +} + +tbody tr td:first-child { + text-align: left; +} + +tbody tr td { + text-align: right; } Modified: commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.js URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.js?rev=634727&r1=634726&r2=634727&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.js (original) +++ commons/sandbox/monitoring/trunk/src/main/resources/commons-monitoring.js Fri Mar 7 08:16:25 2008 @@ -15,15 +15,13 @@ * limitations under the License. */ +var myTextExtraction = function(node) +{ + return node.childNodes[0].childNodes[0].innerHTML; +} + + $(document).ready(function() { - $("#monitoring").tablesorter( { widgets: ['zebra'] } ); - // TODO add a select unit feature, as ns are far too precise in many cases - /* $("#monitoring thead td .unit").each( function() - { - if ($(this).text() === "ns") - { - $(this).html( "<select><option>ns</option><option>µs</option><option>ms</option><option>s</option></select>" ); - } - } ); */ + $("#monitoring").tablesorter( { widgets: ['zebra'], sortForce: 1 } ); } );