Mercurial > hg > release > thermostat-1.0
changeset 394:963d557a7d00
Fix for crash during panel selection
review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-June/001900.html
reviewed-by: omajid
author | Mario Torre <neugens.limasoftware@gmail.com> |
---|---|
date | Tue, 19 Jun 2012 20:58:05 +0200 |
parents | cb22cde2bd47 |
children | 053bc97253ad |
files | client/core/src/main/java/com/redhat/thermostat/client/internal/MainWindowControllerImpl.java client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationController.java client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationPanel.java client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationView.java client/core/src/test/java/com/redhat/thermostat/client/internal/MainWindowControllerImplTest.java |
diffstat | 5 files changed, 88 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/client/core/src/main/java/com/redhat/thermostat/client/internal/MainWindowControllerImpl.java Tue Jun 19 19:50:27 2012 +0200 +++ b/client/core/src/main/java/com/redhat/thermostat/client/internal/MainWindowControllerImpl.java Tue Jun 19 20:58:05 2012 +0200 @@ -40,6 +40,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; import java.util.logging.Level; @@ -466,15 +468,23 @@ private class VmInformationControllerProvider { private VmInformationController lastSelectedVM; - + private Map<VmRef, Integer> selectedForVM = new ConcurrentHashMap<>(); + VmInformationController getVmInfoController(VmRef vmRef) { int id = 0; if (lastSelectedVM != null) { id = lastSelectedVM.getSelectedChildID(); } + lastSelectedVM = facadeFactory.getVmController(vmRef); - lastSelectedVM.selectChildID(id); + if (!lastSelectedVM.selectChildID(id)) { + Integer _id = selectedForVM.get(vmRef); + id = _id != null? _id : 0; + lastSelectedVM.selectChildID(id); + } + selectedForVM.put(vmRef, id); + return lastSelectedVM; } }
--- a/client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationController.java Tue Jun 19 19:50:27 2012 +0200 +++ b/client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationController.java Tue Jun 19 20:58:05 2012 +0200 @@ -86,8 +86,8 @@ return view.getSelectedChildID(); } - public void selectChildID(int id) { - view.selectChildID(id); + public boolean selectChildID(int id) { + return view.selectChildID(id); } public int getNumChildren() {
--- a/client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationPanel.java Tue Jun 19 19:50:27 2012 +0200 +++ b/client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationPanel.java Tue Jun 19 20:58:05 2012 +0200 @@ -72,8 +72,12 @@ } @Override - public void selectChildID(int id) { - tabPane.setSelectedIndex(id); + public boolean selectChildID(int id) { + if (tabPane.getComponentCount() > id) { + tabPane.setSelectedIndex(id); + return true; + } + return false; } @Override
--- a/client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationView.java Tue Jun 19 19:50:27 2012 +0200 +++ b/client/core/src/main/java/com/redhat/thermostat/client/ui/VmInformationView.java Tue Jun 19 20:58:05 2012 +0200 @@ -50,7 +50,7 @@ Component getUiComponent(); int getNumChildren(); - void selectChildID(int id); + boolean selectChildID(int id); int getSelectedChildID(); }
--- a/client/core/src/test/java/com/redhat/thermostat/client/internal/MainWindowControllerImplTest.java Tue Jun 19 19:50:27 2012 +0200 +++ b/client/core/src/test/java/com/redhat/thermostat/client/internal/MainWindowControllerImplTest.java Tue Jun 19 20:58:05 2012 +0200 @@ -40,6 +40,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; @@ -397,6 +398,7 @@ VmInformationController vmInformationController = mock(VmInformationController.class); when(vmInformationController.getSelectedChildID()).thenReturn(3); when(uiFacadeFactory.getVmController(any(VmRef.class))).thenReturn(vmInformationController); + when(vmInformationController.selectChildID(anyInt())).thenReturn(true); l.actionPerformed(new ActionEvent<MainView.Action>(view, MainView.Action.HOST_VM_SELECTION_CHANGED)); @@ -417,7 +419,72 @@ assertEquals(3, id); } + + @Test + public void verifyOpenSameHostVMTab2() { + VmRef vmRef1 = mock(VmRef.class); + VmRef vmRef2 = mock(VmRef.class); + when(view.getSelectedHostOrVm()).thenReturn(vmRef1).thenReturn(vmRef1).thenReturn(vmRef2).thenReturn(vmRef1); + + VmInformationController vmInformationController1 = mock(VmInformationController.class); + VmInformationController vmInformationController2 = mock(VmInformationController.class); + + when(vmInformationController1.getSelectedChildID()).thenReturn(2).thenReturn(2); + when(vmInformationController2.getSelectedChildID()).thenReturn(3); + + when(vmInformationController1.selectChildID(0)).thenReturn(true); + when(vmInformationController1.selectChildID(2)).thenReturn(true); + when(vmInformationController1.selectChildID(3)).thenReturn(false); + + when(vmInformationController2.selectChildID(0)).thenReturn(true); + when(vmInformationController2.selectChildID(2)).thenReturn(true); + when(vmInformationController2.selectChildID(3)).thenReturn(true); + + when(uiFacadeFactory.getVmController(any(VmRef.class))). + thenReturn(vmInformationController1). + thenReturn(vmInformationController2). + thenReturn(vmInformationController2). + thenReturn(vmInformationController1); + + l.actionPerformed(new ActionEvent<MainView.Action>(view, MainView.Action.HOST_VM_SELECTION_CHANGED)); + + ArgumentCaptor<Integer> arg = ArgumentCaptor.forClass(Integer.class); + verify(vmInformationController1).selectChildID(arg.capture()); + verify(vmInformationController1, times(0)).getSelectedChildID(); + + int id = arg.getValue(); + + assertEquals(0, id); + + l.actionPerformed(new ActionEvent<MainView.Action>(view, MainView.Action.HOST_VM_SELECTION_CHANGED)); + + arg = ArgumentCaptor.forClass(Integer.class); + verify(vmInformationController1).getSelectedChildID(); + verify(vmInformationController2, times(1)).selectChildID(arg.capture()); + id = arg.getValue(); + + assertEquals(2, id); + + l.actionPerformed(new ActionEvent<MainView.Action>(view, MainView.Action.HOST_VM_SELECTION_CHANGED)); + + arg = ArgumentCaptor.forClass(Integer.class); + verify(vmInformationController2, times(1)).getSelectedChildID(); + verify(vmInformationController2, times(2)).selectChildID(arg.capture()); + id = arg.getValue(); + + assertEquals(3, id); + + l.actionPerformed(new ActionEvent<MainView.Action>(view, MainView.Action.HOST_VM_SELECTION_CHANGED)); + + arg = ArgumentCaptor.forClass(Integer.class); + verify(vmInformationController2, times(2)).getSelectedChildID(); + verify(vmInformationController1, times(3)).selectChildID(arg.capture()); + id = arg.getValue(); + + assertEquals(2, id); + } + @Test public void verityVMActionsAreShown() { VmInfo vmInfo = new VmInfo(0, 1, 2, null, null, null, null, null, null, null, null, null, null, null);