diff --git a/src/main/java/fucoin/gui/SuperVisorHistogramGUI.java b/src/main/java/fucoin/gui/SuperVisorHistogramGUI.java index 53feb98fa68d1ceaba0c63effadd18e66293a1a1..4c0346af4093cec11c3351f6d621f69a992c2811 100644 --- a/src/main/java/fucoin/gui/SuperVisorHistogramGUI.java +++ b/src/main/java/fucoin/gui/SuperVisorHistogramGUI.java @@ -13,30 +13,27 @@ import org.jfree.ui.TextAnchor; import javax.swing.*; import javax.swing.border.EmptyBorder; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import java.awt.*; import java.time.LocalDateTime; -import java.util.HashSet; import java.util.Hashtable; -import java.util.Set; +import java.util.LinkedList; /** * */ public class SuperVisorHistogramGUI extends JFrame { - private final Set<Snapshot> snapshots; + private final SuperVisorGuiControlImpl superVisorGuiControl; private final LocalDateTime time; private static final int width = 1200; private static final int height = 800; - public SuperVisorHistogramGUI(Set<Snapshot> snapshots, LocalDateTime time) { + public SuperVisorHistogramGUI(SuperVisorGuiControlImpl superVisorGuiControl, LocalDateTime time) { super("Histogram of distributed granted commit (Snapshot " + time + ")"); + this.superVisorGuiControl = superVisorGuiControl; this.time = time; - this.snapshots = new HashSet<>(snapshots); setVisible(true); setSize(width, height); @@ -65,7 +62,7 @@ public class SuperVisorHistogramGUI extends JFrame { public void init() { QDigest qDigest = null; - for (Snapshot item : snapshots) { + for (Snapshot item : superVisorGuiControl.getSnapshots()) { if (qDigest == null) { qDigest = item.getqDigest(); } else { @@ -73,14 +70,52 @@ public class SuperVisorHistogramGUI extends JFrame { } } + final java.util.List<Integer> transactions = superVisorGuiControl.getSupervisorSnapshot(time). + getStatistics().getTransactionHistory(); + + long count = 0; + for (long[] item : qDigest.toAscRanges()) { + count += item[2]; + } // row keys... - final String series1 = "Transactions"; + final String series1 = "q-Digest (" + count + ")"; + final String series2 = "origin (" + transactions.size() + ")"; + java.util.List<long[]> buckets = qDigest.toAscRanges(); + + java.util.List<long[]> leafs = new LinkedList<>(); + java.util.List<long[]> nodes = new LinkedList<>(); + long last = Long.MAX_VALUE; + for (long[] item : buckets) { + if (item[0] < last) { + nodes.add(item); + } else { + leafs.add(item); + } + last = item[0]; + } + for (int i = 0; i < leafs.size(); i++) { + long[] el = leafs.get(i); + for (long[] item : nodes) { + if (el[0] >= item[0] && item[0] <= el[1]) { + el[2] += item[2]; + } + } + leafs.set(i, el); + } // create the dataset... final DefaultCategoryDataset dataset = new DefaultCategoryDataset(); + for (long[] item : leafs) { + String cat = item[0] + "-" + item[1]; + dataset.addValue(item[2], series1, cat); + int counter = 0; + for (Integer amount : transactions) { + if (item[0] >= amount && amount <= item[1]) { + counter++; + } + } + dataset.addValue(counter, series2, cat); - for (long[] item : qDigest.toAscRanges()) { - dataset.addValue(item[2], series1, item[0] + "-" + item[1]); } JFreeChart chart = createChart(dataset); @@ -93,10 +128,11 @@ public class SuperVisorHistogramGUI extends JFrame { final JSlider slider = new JSlider(0, 100); Hashtable<Integer, JComponent> labelTable = new Hashtable<>(); - labelTable.put(0, new JLabel("0.0") ); - labelTable.put(5, new JLabel("0.5") ); - labelTable.put(10, new JLabel("1.0") ); + labelTable.put(new Integer(0), new JLabel("0.0") ); + labelTable.put(new Integer(50), new JLabel("0.5") ); + labelTable.put(new Integer(100), new JLabel("1.0") ); slider.setLabelTable( labelTable ); + slider.setPaintLabels(true); slider.setValue(50); final JTextField quantileValueField = new JTextField(); @@ -115,8 +151,8 @@ public class SuperVisorHistogramGUI extends JFrame { quantilePanel.add(slider); quantilePanel.add(quantileValueField); quantilePanel.setBorder(new EmptyBorder(10, 10, 10, 10)); - - myPanel.add(quantilePanel, BorderLayout.PAGE_END); + quantilePanel.setSize(width, 100); + myPanel.add(quantilePanel, BorderLayout.SOUTH); setContentPane(myPanel); } diff --git a/src/main/java/fucoin/gui/WalletHistogramGUI.java b/src/main/java/fucoin/gui/WalletHistogramGUI.java index a45408f4a78d35a1be4f3f44ea3defa856038467..b9bd33527733039cc9d7e6e390aa6d0324a8a04d 100644 --- a/src/main/java/fucoin/gui/WalletHistogramGUI.java +++ b/src/main/java/fucoin/gui/WalletHistogramGUI.java @@ -92,9 +92,10 @@ public class WalletHistogramGUI extends JFrame { final JSlider slider = new JSlider(0, 100); Hashtable<Integer, JComponent> labelTable = new Hashtable<>(); labelTable.put(0, new JLabel("0.0") ); - labelTable.put(5, new JLabel("0.5") ); - labelTable.put(10, new JLabel("1.0") ); + labelTable.put(50, new JLabel("0.5") ); + labelTable.put(100, new JLabel("1.0") ); slider.setLabelTable( labelTable ); + slider.setPaintLabels(true); slider.setValue(50); final JTextField quantileValueField = new JTextField();