changeset 407:47fec5c94cef

Fix sorting and formatting of histogram table. Reviewed-by: neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-June/001932.html PR 944
author Roman Kennke <rkennke@redhat.com>
date Thu, 21 Jun 2012 12:26:40 +0200
parents 941f350c71e3
children 9fb6f2c51ec0
files client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/HeapDumpController.java client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/Histogram.java client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/swing/HistogramPanel.java
diffstat 3 files changed, 42 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/HeapDumpController.java	Wed Jun 20 17:06:38 2012 +0200
+++ b/client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/HeapDumpController.java	Thu Jun 21 12:26:40 2012 +0200
@@ -160,15 +160,13 @@
         HeapInfo info = dump.getInfo();
         InputStream stream = heapDAO.getHistogram(info);
         
-        List<String[]> instances = new ArrayList<>();
+        List<Object[]> instances = new ArrayList<>();
         
         if (stream != null) {
             BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
             String line = null;
             try {
                 
-                DecimalFormat formatter = new DecimalFormat("###,###.###");
-                
                 boolean startParsing = false;
                 while ((line = reader.readLine()) != null) {
                     if (line.startsWith("-")) {
@@ -181,19 +179,17 @@
                     
                     if (startParsing) {
                         
-                        String[] data = new String[3];
+                        Object[] data = new Object[3];
                         
                         StringTokenizer tokenizer = new StringTokenizer(line);
                         tokenizer.nextToken();
-                        long number = Long.parseLong(tokenizer.nextToken());
-                        String token = formatter.format(number);
-                        data[1] = token;
+                        Long number = Long.valueOf(Long.parseLong(tokenizer.nextToken()));
+                        data[1] = number;
                         
-                        number = Long.parseLong(tokenizer.nextToken());
-                        token = formatter.format(number);
-                        data[2] = token;
+                        number = Long.valueOf(Long.parseLong(tokenizer.nextToken()));
+                        data[2] = number;
                         
-                        token = DescriptorConverter.toJavaType(tokenizer.nextToken());
+                        String token = DescriptorConverter.toJavaType(tokenizer.nextToken());
                         data[0] = token;
                         
                         instances.add(data);
--- a/client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/Histogram.java	Wed Jun 20 17:06:38 2012 +0200
+++ b/client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/Histogram.java	Thu Jun 21 12:26:40 2012 +0200
@@ -42,7 +42,7 @@
 
     private String[] header;
     
-    private List<String[]> data;
+    private List<Object[]> data;
     
     Histogram(String[] header) {
         this.header = header;
@@ -52,11 +52,11 @@
         return header;
     }
 
-    void setData(List<String[]> data) {
+    void setData(List<Object[]> data) {
         this.data = data;
     }
 
-   public List<String[]> getData() {
+   public List<Object[]> getData() {
     return data;
    }
 }
--- a/client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/swing/HistogramPanel.java	Wed Jun 20 17:06:38 2012 +0200
+++ b/client/heapdumper/src/main/java/com/redhat/thermostat/client/heap/swing/HistogramPanel.java	Thu Jun 21 12:26:40 2012 +0200
@@ -36,12 +36,16 @@
 
 package com.redhat.thermostat.client.heap.swing;
 
+import java.text.DecimalFormat;
+
+import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.BoxLayout;
 import javax.swing.JScrollPane;
 
 import com.redhat.thermostat.client.heap.Histogram;
 import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.DefaultTableModel;
 
 public class HistogramPanel extends JPanel {
@@ -59,11 +63,27 @@
         JTable table = new JTable(new HistogramTableModel(histogram));
         table.setFillsViewportHeight(true);
         table.setAutoCreateRowSorter(true);
-        
+        table.setDefaultRenderer(Long.class, new NiceNumberFormatter());
         JScrollPane scrollPane = new JScrollPane(table);
         headerPanel.setContent(scrollPane);
     }
 
+    @SuppressWarnings("serial")
+    private final class NiceNumberFormatter extends DefaultTableCellRenderer {
+
+        private final DecimalFormat formatter = new DecimalFormat("###,###.###");
+
+        private NiceNumberFormatter() {
+            setHorizontalAlignment(JLabel.RIGHT);
+        }
+
+        @Override
+        protected void setValue(Object v) {
+            String formatted = formatter.format(v);
+            setText(formatted);
+        }
+    }
+
     private class HistogramTableModel extends DefaultTableModel {
         
         private Histogram histogram;
@@ -78,10 +98,19 @@
             }
             return "";
         }
-        
+
+        @Override
+        public Class<?> getColumnClass(int column) {
+            if (column == 0) {
+                return String.class;
+            } else {
+                return Long.class;
+            }
+        }
+
         @Override
         public Object getValueAt(int row, int column) {
-            String result = null;
+            Object result = null;
             if (histogram != null) {
                 result = histogram.getData().get(row)[column];
             }