Mercurial > hg > release > thermostat-1.6
changeset 1973:4e64d7dccbcc
Unify processAndDrawTreeMap and redrawTreeMap
PR3059
Reviewed-by: jkang
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-June/019844.html
Original-thread: http://icedtea.classpath.org/pipermail/thermostat/2015-September/016378.html
author | James Aziz <jaziz@redhat.com> |
---|---|
date | Wed, 29 Jun 2016 12:22:58 -0400 |
parents | 4bd90c506cf2 |
children | 77eefdc8a901 |
files | client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapComponent.java client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapComponentTest.java vm-heap-analysis/client-swing/src/main/java/com/redhat/thermostat/vm/heap/analysis/client/swing/internal/SwingHeapTreeMapView.java |
diffstat | 3 files changed, 62 insertions(+), 64 deletions(-) [+] |
line wrap: on
line diff
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapComponent.java Wed Jun 29 12:22:58 2016 -0400 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapComponent.java Wed Jun 29 12:22:58 2016 -0400 @@ -200,23 +200,10 @@ if (tree != null) { this.zoomStack.push(this.tree); - processAndDrawTreeMap(); + processAndDrawTreeMap(this.tree); } - } - - public void processAndDrawTreeMap() { - Objects.requireNonNull(this.dimension); - Objects.requireNonNull(this.tree); - // assign a rectangle to the tree's root in order to process the tree. - Rectangle2D.Double area = new Rectangle2D.Double(0, 0, this.dimension.width, this.dimension.height); - - // calculate rectangles of tree's subtrees - TreeProcessor.processTreeMap(tree, area); - - drawTreeMap(tree); addResizeListener(this); - repaint(); } /** @@ -362,7 +349,7 @@ Dimension newDim = container.getSize(); if (isChangedSize(newDim)) { - redrawTreeMap(Objects.requireNonNull(tree)); + processAndDrawTreeMap(Objects.requireNonNull(tree)); } } } @@ -403,15 +390,8 @@ return null; } - - /** - * This method recalculates and redraws the TreeMap in according to the size - * of this component and the actual {@link TreeMapNode} object. - * - * Package-private for testing only. - */ - void redrawTreeMap(TreeMapNode newRoot) { - tree = Objects.requireNonNull(newRoot); + public void processAndDrawTreeMap(TreeMapNode root) { + tree = Objects.requireNonNull(root); Rectangle2D.Double newArea = tree.getRectangle(); // give to the root node the size of this object so it can be recalculated newArea.width = getSize().width; @@ -421,7 +401,7 @@ TreeProcessor.processTreeMap(tree, newArea); removeAll(); - drawTreeMap(tree); + drawTreeMap(tree); } boolean isZoomInEnabled(TreeMapNode node) { @@ -433,7 +413,7 @@ public void zoomIn(TreeMapNode node) { if (isZoomInEnabled(node)) { fillZoomStack(node.getAncestors()); - redrawTreeMap(node); + processAndDrawTreeMap(node); notifyZoomInToObservers(zoomStack.peek()); } } @@ -449,7 +429,7 @@ // if the actual root element is not the tree's original root if (zoomStack.size() > 1) { zoomStack.pop(); - redrawTreeMap(zoomStack.peek()); + processAndDrawTreeMap(zoomStack.peek()); notifyZoomOutToObservers(); } } @@ -460,7 +440,7 @@ public void zoomFull() { if (zoomStack.size() > 1) { clearZoomCallsStack(); - redrawTreeMap(zoomStack.peek()); + processAndDrawTreeMap(zoomStack.peek()); notifyZoomFullToObservers(); } }
--- a/client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapComponentTest.java Wed Jun 29 12:22:58 2016 -0400 +++ b/client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/TreeMapComponentTest.java Wed Jun 29 12:22:58 2016 -0400 @@ -43,9 +43,13 @@ import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.lang.reflect.InvocationTargetException; +import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; @@ -129,32 +133,6 @@ } @Test - public final void testProcessAndDrawTreeMap() throws InvocationTargetException, InterruptedException { - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - try { - treeMap = new TreeMapComponent(); - treeMap.setModel(tree); - treeMap.setToolTipRenderer(new TreeMapComponent.WeightAsSizeRenderer()); - treeMap.processAndDrawTreeMap(); - } catch (NullPointerException e) { - Assert.fail("Didn't expect exception."); - } - - boolean caught = false; - try { - treeMap = new TreeMapComponent(); - treeMap.processAndDrawTreeMap(); - } catch (NullPointerException e) { - caught = true; - } - assertTrue(caught); - } - }); - } - - @Test public final void testGetRoot() throws InvocationTargetException, InterruptedException { SwingUtilities.invokeAndWait(new Runnable() { @@ -187,14 +165,15 @@ } @Test - public final void testRedrawTreeMap() throws InvocationTargetException, InterruptedException { + public final void testProcessAndDrawTreeMap() throws InvocationTargetException, + InterruptedException { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { try { treeMap = new TreeMapComponent(dim); treeMap.setToolTipRenderer(new TreeMapComponent.WeightAsSizeRenderer()); - treeMap.redrawTreeMap(node1); + treeMap.processAndDrawTreeMap(node1); } catch (NullPointerException e) { Assert.fail("Didn't expect exception."); } @@ -203,7 +182,7 @@ try { treeMap = new TreeMapComponent(dim); treeMap.setToolTipRenderer(new TreeMapComponent.WeightAsSizeRenderer()); - treeMap.redrawTreeMap(null); + treeMap.processAndDrawTreeMap(null); } catch (NullPointerException e) { caught = true; } @@ -438,20 +417,57 @@ JFrame mainWindow = new JFrame(); mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - TreeMapNode node = new TreeMapNode("test1", 1.0); + final TreeMapNode modelA = new TreeMapNode("A", 1.0); + modelA.addChild(new TreeMapNode("AA", 2.0)); + modelA.addChild(new TreeMapNode("AB", 3.0)); + + final TreeMapNode modelB = new TreeMapNode("B", 5.0); + modelB.addChild(new TreeMapNode("BA", 10.0)); + modelB.addChild(new TreeMapNode("BB", 10.0)); // FIXME this hack should not be needed UIManager.put("thermostat-default-font", Font.decode(Font.MONOSPACED)); - TreeMapComponent treeMap = new TreeMapComponent(); + final TreeMapComponent treeMap = new TreeMapComponent(); // FIXME the default renderer should not be null treeMap.setToolTipRenderer(new TreeMapComponent.WeightAsSizeRenderer()); - treeMap.setModel(node); + treeMap.setModel(modelA); // FIXME no other swing component needs the following: - treeMap.processAndDrawTreeMap(); + treeMap.processAndDrawTreeMap(modelA); + + JPanel container = new JPanel(new BorderLayout()); + + JPanel buttonPanel = new JPanel(); + JButton changeModelButton = new JButton("Change model"); + changeModelButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + TreeMapNode newModel = treeMap.getTreeMapRoot() == modelA ? modelB : modelA; + treeMap.setModel(newModel); + treeMap.processAndDrawTreeMap(newModel); + } + }); + buttonPanel.add(changeModelButton); - mainWindow.add(treeMap, BorderLayout.CENTER); + //FIXME The following button does not actually work, adding new nodes is broken + JButton addNewNodeButton = new JButton("Add new node"); + addNewNodeButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + TreeMapNode currentModel = treeMap.getTreeMapRoot(); + currentModel.addChild(new TreeMapNode("new", 10.0)); + + treeMap.setModel(currentModel); + treeMap.processAndDrawTreeMap(currentModel); + } + }); + buttonPanel.add(addNewNodeButton); + + container.add(buttonPanel, BorderLayout.PAGE_START); + container.add(treeMap, BorderLayout.CENTER); + + mainWindow.add(container, BorderLayout.CENTER); mainWindow.setSize(400, 200); mainWindow.setVisible(true);
--- a/vm-heap-analysis/client-swing/src/main/java/com/redhat/thermostat/vm/heap/analysis/client/swing/internal/SwingHeapTreeMapView.java Wed Jun 29 12:22:58 2016 -0400 +++ b/vm-heap-analysis/client-swing/src/main/java/com/redhat/thermostat/vm/heap/analysis/client/swing/internal/SwingHeapTreeMapView.java Wed Jun 29 12:22:58 2016 -0400 @@ -43,6 +43,7 @@ import com.redhat.thermostat.client.swing.SwingComponent; import com.redhat.thermostat.client.swing.components.experimental.TreeMapComponent; +import com.redhat.thermostat.client.swing.components.experimental.TreeMapNode; import com.redhat.thermostat.client.swing.components.experimental.TreeMapToolbar; import com.redhat.thermostat.vm.heap.analysis.client.core.HeapTreeMapView; import com.redhat.thermostat.vm.heap.analysis.common.ObjectHistogram; @@ -62,8 +63,9 @@ @Override public void display(ObjectHistogram histogram) { - treeMap.setModel(HistogramConverter.convertToTreeMap(histogram)); - treeMap.processAndDrawTreeMap(); + TreeMapNode model = HistogramConverter.convertToTreeMap(histogram); + treeMap.setModel(model); + treeMap.processAndDrawTreeMap(model); panel.add(treeMap, BorderLayout.CENTER); panel.add(new TreeMapToolbar(treeMap), BorderLayout.NORTH); }