private void closePlace(final PlaceRequest place, final boolean force) { closePlace(place, force, null); }
@Override public void closePlace(final PlaceRequest placeToClose, final Command doAfterClose) { if (placeToClose == null) { return; } closePlace(placeToClose, false, doAfterClose); }
@Override public void forceClosePlace(final PlaceRequest placeToClose) { if (placeToClose == null) { return; } closePlace(placeToClose, true); }
private void closeAllPlaces(final boolean force) { final List<PlaceRequest> placesToClose = new ArrayList<PlaceRequest>(visibleWorkbenchParts.keySet()); for (PlaceRequest placeToClose : placesToClose) { closePlace(placeToClose, force); } }
@JsMethod @Override public void closePlace(final PlaceRequest placeToClose) { if (placeToClose == null) { return; } closePlace(placeToClose, false); }
private void closeOpenPlacesAt(Predicate<CustomPanelDefinition> filterPanels) { new HashSet<>(customPanels.values()).stream() .filter(filterPanels) .flatMap(p -> p.getParts().stream()) .forEach(part -> closePlace(part.getPlace())); }
@JsMethod @Override public void closePlace(final String id) { closePlace(new DefaultPlaceRequest(id)); }
@Test public void testPopupCancelsClose() throws Exception { final PlaceRequest popupPlace = new DefaultPlaceRequest("Somewhere"); final AbstractPopupActivity popupActivity = mock(AbstractPopupActivity.class); when(popupActivity.onMayClose()).thenReturn(false); when(popupActivity.isType(ActivityResourceType.POPUP.name())).thenReturn(true); when(activityManager.getActivities(popupPlace)).thenReturn(singleton((Activity) popupActivity)); placeManager.goTo(popupPlace); placeManager.closePlace(popupPlace); verify(popupActivity, never()).onClose(); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(popupPlace)); }
@Test public void testPopupCancelsClose() throws Exception { final PlaceRequest popupPlace = new DefaultPlaceRequest("Somewhere"); final AbstractPopupActivity popupActivity = mock(AbstractPopupActivity.class); when(popupActivity.onMayClose()).thenReturn(false); when(popupActivity.isType(ActivityResourceType.POPUP.name())).thenReturn(true); when(activityManager.getActivities(popupPlace)).thenReturn(singleton((Activity) popupActivity)); placeManager.goTo(popupPlace); placeManager.closePlace(popupPlace); verify(popupActivity, never()).onClose(); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(popupPlace)); }
@Test public void testClosingActivityInCustomPanel() throws Exception { HasWidgets any = any(HasWidgets.class); CustomPanelDefinitionImpl customPanelDef = new CustomPanelDefinitionImpl( UnanchoredStaticWorkbenchPanelPresenter.class.getName(), any); when(panelManager.addCustomPanel(any, eq(UnanchoredStaticWorkbenchPanelPresenter.class.getName()))) .thenReturn(customPanelDef); PlaceRequest emeraldCityPlace = new DefaultPlaceRequest("emerald_city"); createWorkbenchScreenActivity(emeraldCityPlace); HasWidgets customContainer = mock(HasWidgets.class); placeManager.goTo(emeraldCityPlace, customContainer); placeManager.closePlace(emeraldCityPlace); assertTrue(customPanelDef.getParts().isEmpty()); verify(panelManager).removeWorkbenchPanel(customPanelDef); }
@Test public void testProperSplashScreenShutdownOnPartClose() throws Exception { PlaceRequest oz = new DefaultPlaceRequest("oz"); WorkbenchScreenActivity ozActivity = mock(WorkbenchScreenActivity.class); when(activityManager.getActivities(oz)).thenReturn(singleton((Activity) ozActivity)); final SplashScreenActivity lollipopGuildActivity = mock(SplashScreenActivity.class); when(lollipopGuildActivity.isType(ActivityResourceType.SPLASH.name())).thenReturn(true); when(activityManager.getSplashScreenInterceptor(oz)).thenReturn(lollipopGuildActivity); when(ozActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.goTo(oz, (PanelDefinition) null); placeManager.closePlace(oz); assertTrue(placeManager.getActiveSplashScreens().isEmpty()); verify(lollipopGuildActivity).closeIfOpen(); // splash screens are Application Scoped, but we still "destroy" them (activity manager will call their onShutdown) verify(activityManager).destroyActivity(lollipopGuildActivity); }
@Test public void testClosingActivityInCustomPanelInsideHTMLElement() throws Exception { HTMLElement any = any(HTMLElement.class); CustomPanelDefinitionImpl customPanelDef = new CustomPanelDefinitionImpl( UnanchoredStaticWorkbenchPanelPresenter.class.getName(), any); when(panelManager.addCustomPanel(any, eq(UnanchoredStaticWorkbenchPanelPresenter.class.getName()))) .thenReturn(customPanelDef); PlaceRequest emeraldCityPlace = new DefaultPlaceRequest("emerald_city"); createWorkbenchScreenActivity(emeraldCityPlace); HTMLElement customContainer = mock(HTMLElement.class); placeManager.goTo(emeraldCityPlace, customContainer); placeManager.closePlace(emeraldCityPlace); assertTrue(customPanelDef.getParts().isEmpty()); verify(panelManager).removeWorkbenchPanel(customPanelDef); }
@Test public void testReLaunchingClosedPopup() throws Exception { final PlaceRequest popupPlace = new DefaultPlaceRequest("Somewhere"); final AbstractPopupActivity popupActivity = mock(AbstractPopupActivity.class); when(popupActivity.onMayClose()).thenReturn(true); when(popupActivity.isType(ActivityResourceType.POPUP.name())).thenReturn(true); when(activityManager.getActivities(popupPlace)).thenReturn(singleton((Activity) popupActivity)); placeManager.goTo(popupPlace); placeManager.closePlace(popupPlace); placeManager.goTo(popupPlace); verify(popupActivity, times(2)).onOpen(); verify(popupActivity, times(1)).onClose(); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(popupPlace)); }
@Test public void testClosingActivityInCustomPanel() throws Exception { HasWidgets any = any(HasWidgets.class); CustomPanelDefinitionImpl customPanelDef = new CustomPanelDefinitionImpl( UnanchoredStaticWorkbenchPanelPresenter.class.getName(), any); when(panelManager.addCustomPanel(any, eq(UnanchoredStaticWorkbenchPanelPresenter.class.getName()))) .thenReturn(customPanelDef); PlaceRequest emeraldCityPlace = new DefaultPlaceRequest("emerald_city"); createWorkbenchScreenActivity(emeraldCityPlace); HasWidgets customContainer = mock(HasWidgets.class); placeManager.goTo(emeraldCityPlace, customContainer); placeManager.closePlace(emeraldCityPlace); assertTrue(customPanelDef.getParts().isEmpty()); verify(panelManager).removeWorkbenchPanel(customPanelDef); }
@Test public void testProperSplashScreenShutdownOnPartClose() throws Exception { PlaceRequest oz = new DefaultPlaceRequest("oz"); WorkbenchScreenActivity ozActivity = mock(WorkbenchScreenActivity.class); when(activityManager.getActivities(oz)).thenReturn(singleton((Activity) ozActivity)); final SplashScreenActivity lollipopGuildActivity = mock(SplashScreenActivity.class); when(lollipopGuildActivity.isType(ActivityResourceType.SPLASH.name())).thenReturn(true); when(activityManager.getSplashScreenInterceptor(oz)).thenReturn(lollipopGuildActivity); when(ozActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.goTo(oz, (PanelDefinition) null); placeManager.closePlace(oz); assertTrue(placeManager.getActiveSplashScreens().isEmpty()); verify(lollipopGuildActivity).closeIfOpen(); // splash screens are Application Scoped, but we still "destroy" them (activity manager will call their onShutdown) verify(activityManager).destroyActivity(lollipopGuildActivity); }
@Test public void testClosingActivityInCustomPanelInsideHTMLElement() throws Exception { HTMLElement any = any(HTMLElement.class); CustomPanelDefinitionImpl customPanelDef = new CustomPanelDefinitionImpl( UnanchoredStaticWorkbenchPanelPresenter.class.getName(), any); when(panelManager.addCustomPanel(any, eq(UnanchoredStaticWorkbenchPanelPresenter.class.getName()))) .thenReturn(customPanelDef); PlaceRequest emeraldCityPlace = new DefaultPlaceRequest("emerald_city"); createWorkbenchScreenActivity(emeraldCityPlace); HTMLElement customContainer = mock(HTMLElement.class); placeManager.goTo(emeraldCityPlace, customContainer); placeManager.closePlace(emeraldCityPlace); assertTrue(customPanelDef.getParts().isEmpty()); verify(panelManager).removeWorkbenchPanel(customPanelDef); }
@Test public void testReLaunchingClosedPopup() throws Exception { final PlaceRequest popupPlace = new DefaultPlaceRequest("Somewhere"); final AbstractPopupActivity popupActivity = mock(AbstractPopupActivity.class); when(popupActivity.onMayClose()).thenReturn(true); when(popupActivity.isType(ActivityResourceType.POPUP.name())).thenReturn(true); when(activityManager.getActivities(popupPlace)).thenReturn(singleton((Activity) popupActivity)); placeManager.goTo(popupPlace); placeManager.closePlace(popupPlace); placeManager.goTo(popupPlace); verify(popupActivity, times(2)).onOpen(); verify(popupActivity, times(1)).onClose(); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(popupPlace)); }
@Test public void testCanceledCloseExistingScreenActivity() throws Exception { when(kansasActivity.onMayClose()).thenReturn(false); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, false, true))); verify(workbenchPartCloseEvent, never()).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity).onMayClose(); verify(kansasActivity, never()).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager, never()).destroyActivity(kansasActivity); verify(panelManager, never()).removePartForPlace(kansas); assertEquals(PlaceStatus.OPEN, placeManager.getStatus(kansas)); assertSame(kansasActivity, placeManager.getActivity(kansas)); assertTrue(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testNormalCloseExistingScreenActivity() throws Exception { when(kansasActivity.onMayClose()).thenReturn(true); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, false, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity).onMayClose(); verify(kansasActivity).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager).destroyActivity(kansasActivity); verify(panelManager).removePartForPlace(kansas); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(kansas)); assertNull(placeManager.getActivity(kansas)); assertFalse(placeManager.getActivePlaceRequests().contains(kansas)); }
@Test public void testNormalCloseExistingScreenActivity() throws Exception { when(kansasActivity.onMayClose()).thenReturn(true); when(kansasActivity.isType(ActivityResourceType.SCREEN.name())).thenReturn(true); placeManager.closePlace(kansas); verify(workbenchPartBeforeCloseEvent).fire(refEq(new BeforeClosePlaceEvent(kansas, false, true))); verify(workbenchPartCloseEvent).fire(refEq(new ClosePlaceEvent(kansas))); verify(kansasActivity).onMayClose(); verify(kansasActivity).onClose(); verify(kansasActivity, never()).onShutdown(); verify(activityManager).destroyActivity(kansasActivity); verify(panelManager).removePartForPlace(kansas); assertEquals(PlaceStatus.CLOSE, placeManager.getStatus(kansas)); assertNull(placeManager.getActivity(kansas)); assertFalse(placeManager.getActivePlaceRequests().contains(kansas)); }