Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JBPM-8903 : Stunner - Properties panel is not opened after clicking on "Minimize panel" button #3127

Merged
merged 1 commit into from
Feb 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ public void checkDestructionReleasesResources() {

@Test
public void checkOnScreenMaximisedDiagramEditor() {
final ScreenMaximizedEvent event = new ScreenMaximizedEvent(true);
final ScreenMaximizedEvent event = new ScreenMaximizedEvent(true );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
final ScreenMaximizedEvent event = new ScreenMaximizedEvent(true );
final ScreenMaximizedEvent event = new ScreenMaximizedEvent(true);

palette.onScreenMaximized(event);

verify(view).showEmptyView(false);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright 2020 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.kie.workbench.common.stunner.core.client.event.screen;

public class ScreenPreMaximizedStateEvent extends ScreenResizeEvent {

private final boolean isExplorerScreen;

public ScreenPreMaximizedStateEvent(final boolean isExplorerScreen ) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
public ScreenPreMaximizedStateEvent(final boolean isExplorerScreen ) {
public ScreenPreMaximizedStateEvent(final boolean isExplorerScreen) {

super(true);
this.isExplorerScreen = isExplorerScreen;
}

public boolean isExplorerScreen() {
return isExplorerScreen;
}

@Override
public int hashCode() {
return super.hashCode();
}

@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionDiagramPreview;
import org.kie.workbench.common.stunner.client.widgets.presenters.session.SessionViewer;
import org.kie.workbench.common.stunner.core.client.api.SessionManager;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenPreMaximizedStateEvent;
import org.kie.workbench.common.stunner.core.client.service.ClientRuntimeError;
import org.kie.workbench.common.stunner.core.client.session.ClientSession;
import org.kie.workbench.common.stunner.core.client.session.event.SessionDestroyedEvent;
Expand All @@ -44,6 +45,7 @@
import org.uberfire.client.annotations.WorkbenchPartView;
import org.uberfire.client.annotations.WorkbenchScreen;
import org.uberfire.client.workbench.events.ChangeTitleWidgetEvent;
import org.uberfire.client.workbench.events.PlaceMaximizedEvent;
import org.uberfire.client.workbench.widgets.common.ErrorPopupPresenter;
import org.uberfire.lifecycle.OnClose;
import org.uberfire.lifecycle.OnOpen;
Expand Down Expand Up @@ -73,6 +75,7 @@ public class DiagramEditorExplorerScreen {
private final ManagedInstance<SessionDiagramPreview<AbstractSession>> sessionPreviews;
private final Event<ChangeTitleWidgetEvent> changeTitleNotificationEvent;
private final ErrorPopupPresenter errorPopupPresenter;
private final Event<ScreenPreMaximizedStateEvent> screenStateEvent;
private final View view;

private PlaceRequest placeRequest;
Expand All @@ -86,6 +89,7 @@ protected DiagramEditorExplorerScreen() {
null,
null,
null,
null,
null);
}

Expand All @@ -95,13 +99,15 @@ public DiagramEditorExplorerScreen(final SessionManager clientSessionManager,
final Event<ChangeTitleWidgetEvent> changeTitleNotificationEvent,
final @Any @Default ManagedInstance<SessionDiagramPreview<AbstractSession>> sessionPreviews,
final ErrorPopupPresenter errorPopupPresenter,
final View view) {
final View view,
final Event<ScreenPreMaximizedStateEvent> screenStateEvent) {
this.clientSessionManager = clientSessionManager;
this.treeExplorers = treeExplorers;
this.changeTitleNotificationEvent = changeTitleNotificationEvent;
this.sessionPreviews = sessionPreviews;
this.errorPopupPresenter = errorPopupPresenter;
this.view = view;
this.screenStateEvent = screenStateEvent;
}

@OnStartup
Expand Down Expand Up @@ -196,6 +202,10 @@ private void showExplorer(final ClientSession session) {
view.setExplorerWidget(explorerWidget);
}

protected void onPlaceMaximizedEvent(@Observes PlaceMaximizedEvent event) {
screenStateEvent.fire(new ScreenPreMaximizedStateEvent(true));
}

private void showPreview(final ClientSession session) {
if (null != session && session instanceof AbstractSession) {
if (null != previewWidget) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.google.gwt.user.client.ui.IsWidget;
import org.jboss.errai.common.client.ui.ElementWrapperWidget;
import org.kie.workbench.common.stunner.core.client.api.SessionManager;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenPreMaximizedStateEvent;
import org.kie.workbench.common.stunner.core.client.session.ClientSession;
import org.kie.workbench.common.stunner.core.client.session.event.SessionDiagramOpenedEvent;
import org.kie.workbench.common.stunner.forms.client.event.FormPropertiesOpened;
Expand All @@ -38,6 +39,7 @@
import org.uberfire.client.annotations.WorkbenchPartView;
import org.uberfire.client.annotations.WorkbenchScreen;
import org.uberfire.client.workbench.events.ChangeTitleWidgetEvent;
import org.uberfire.client.workbench.events.PlaceMaximizedEvent;
import org.uberfire.lifecycle.OnClose;
import org.uberfire.lifecycle.OnOpen;
import org.uberfire.lifecycle.OnStartup;
Expand All @@ -59,6 +61,7 @@ public class DiagramEditorPropertiesScreen {
private final SessionManager clientSessionManager;
private final Event<ChangeTitleWidgetEvent> changeTitleNotificationEvent;
private final DiagramEditorScreenView view;
private final Event<ScreenPreMaximizedStateEvent> screenStateEvent;

private PlaceRequest placeRequest;
private ClientSession session;
Expand All @@ -67,6 +70,7 @@ public class DiagramEditorPropertiesScreen {

protected DiagramEditorPropertiesScreen() {
this(null,
null,
null,
null,
null);
Expand All @@ -76,11 +80,13 @@ protected DiagramEditorPropertiesScreen() {
public DiagramEditorPropertiesScreen(final FormPropertiesWidget formPropertiesWidget,
final SessionManager clientSessionManager,
final Event<ChangeTitleWidgetEvent> changeTitleNotification,
final DiagramEditorScreenView view) {
final DiagramEditorScreenView view,
final Event<ScreenPreMaximizedStateEvent> screenStateEvent) {
this.formPropertiesWidget = formPropertiesWidget;
this.clientSessionManager = clientSessionManager;
this.changeTitleNotificationEvent = changeTitleNotification;
this.view = view;
this.screenStateEvent = screenStateEvent;
}

@PostConstruct
Expand Down Expand Up @@ -110,6 +116,10 @@ public void onClose() {
destroy();
}

protected void onPlaceMaximizedEvent(@Observes PlaceMaximizedEvent event) {
screenStateEvent.fire(new ScreenPreMaximizedStateEvent(false));
}

@SuppressWarnings("unchecked")
private void handleSession(final ClientSession session) {
boolean done = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.kie.workbench.common.stunner.core.client.ManagedInstanceStub;
import org.kie.workbench.common.stunner.core.client.api.SessionManager;
import org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenPreMaximizedStateEvent;
import org.kie.workbench.common.stunner.core.client.session.impl.AbstractSession;
import org.kie.workbench.common.stunner.core.diagram.Diagram;
import org.kie.workbench.common.stunner.core.diagram.Metadata;
Expand Down Expand Up @@ -62,6 +63,9 @@ public class DiagramEditorExplorerScreenTest {
@Mock
private EventSourceMock<ChangeTitleWidgetEvent> changeTitleNotificationEvent;

@Mock
private EventSourceMock<ScreenPreMaximizedStateEvent> screenStateEvent;

@Mock
private Widget treeExplorerWidget;

Expand Down Expand Up @@ -106,7 +110,8 @@ public void setup() throws Exception {
changeTitleNotificationEvent,
sessionPreviews,
errorPopupPresenter,
view);
view,
screenStateEvent);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import javax.enterprise.context.Dependent;
import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.inject.Inject;

import com.google.gwt.user.client.ui.IsWidget;
Expand All @@ -32,13 +33,17 @@
import org.kie.workbench.common.stunner.client.widgets.presenters.session.impl.SessionViewerPresenter;
import org.kie.workbench.common.stunner.core.client.annotation.DiagramEditor;
import org.kie.workbench.common.stunner.core.client.error.DiagramClientErrorHandler;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenMaximizedEvent;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenMinimizedEvent;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenPreMaximizedStateEvent;
import org.kie.workbench.common.stunner.core.client.i18n.ClientTranslationService;
import org.kie.workbench.common.stunner.core.client.service.ClientRuntimeError;
import org.kie.workbench.common.stunner.core.client.session.impl.EditorSession;
import org.kie.workbench.common.stunner.core.client.session.impl.ViewerSession;
import org.kie.workbench.common.stunner.core.documentation.DocumentationView;
import org.kie.workbench.common.stunner.kogito.client.editor.event.OnDiagramFocusEvent;
import org.kie.workbench.common.stunner.kogito.client.editor.event.OnDiagramLoseFocusEvent;
import org.kie.workbench.common.stunner.kogito.client.screens.DiagramEditorExplorerScreen;
import org.kie.workbench.common.stunner.kogito.client.screens.DiagramEditorPropertiesScreen;
import org.kie.workbench.common.stunner.project.client.docks.StunnerDocksHandler;
import org.kie.workbench.common.stunner.project.client.editor.AbstractProjectDiagramEditor;
Expand Down Expand Up @@ -77,6 +82,8 @@ public class BPMNDiagramEditor extends AbstractProjectDiagramEditor<BPMNDiagramR

private Consumer<Boolean> saveCallback;
private boolean isMigrating = false;
private boolean isPropertiesOpenedBeforeMaximize = false;
private boolean isExplorerOpenedBeforeMaximize = false;

@Inject
public BPMNDiagramEditor(final View view,
Expand Down Expand Up @@ -131,12 +138,53 @@ public String getEditorIdentifier() {

@OnOpen
public void onOpen() {
openPropertiesDocks();
super.doOpen();
}

private void performDockOperation(final String id, final Consumer<? super UberfireDock> action) {
String currentPerspectiveIdentifier = perspectiveManager.getCurrentPerspective().getIdentifier();
Collection<UberfireDock> stunnerDocks = stunnerDocksHandler.provideDocks(currentPerspectiveIdentifier);

stunnerDocks.stream()
.filter(dock -> dock.getPlaceRequest().getIdentifier().compareTo(DiagramEditorPropertiesScreen.SCREEN_ID) == 0)
.forEach(uberfireDocks::open);
super.doOpen();
.filter(dock -> dock.getPlaceRequest().getIdentifier().compareTo(id) == 0)
.forEach(action);

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

}

public void openPropertiesDocks() {
performDockOperation(DiagramEditorPropertiesScreen.SCREEN_ID, uberfireDocks::open);
}

public void closePropertiesDocks() {
performDockOperation(DiagramEditorPropertiesScreen.SCREEN_ID, uberfireDocks::close);
}

public void openExplorerDocks() {
performDockOperation(DiagramEditorExplorerScreen.SCREEN_ID, uberfireDocks::open);
}

public void closeExplorerDocks() {
performDockOperation(DiagramEditorExplorerScreen.SCREEN_ID, uberfireDocks::close);
}

public void onScreenMaximizedEvent(@Observes ScreenMaximizedEvent event) {
isPropertiesOpenedBeforeMaximize = false;
isExplorerOpenedBeforeMaximize = false;
}

public void onScreenPreMaximizedStateEvent(final @Observes ScreenPreMaximizedStateEvent event) {
// If Event Fired, it means the properties panel is active, hence it was open before maximized
isPropertiesOpenedBeforeMaximize = !event.isExplorerScreen();
isExplorerOpenedBeforeMaximize = event.isExplorerScreen();
}

public void onScreenMinimizedEvent(@Observes ScreenMinimizedEvent event) {
if (isPropertiesOpenedBeforeMaximize) {
openPropertiesDocks();
} else if (isExplorerOpenedBeforeMaximize) {
openExplorerDocks();
}
}

@OnClose
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@
import org.kie.workbench.common.stunner.client.widgets.presenters.session.impl.SessionViewerPresenter;
import org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler;
import org.kie.workbench.common.stunner.core.client.error.DiagramClientErrorHandler;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenMaximizedEvent;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenMinimizedEvent;
import org.kie.workbench.common.stunner.core.client.event.screen.ScreenPreMaximizedStateEvent;
import org.kie.workbench.common.stunner.core.client.i18n.ClientTranslationService;
import org.kie.workbench.common.stunner.core.client.session.impl.EditorSession;
import org.kie.workbench.common.stunner.core.client.session.impl.ViewerSession;
Expand Down Expand Up @@ -98,6 +101,15 @@ public class BPMNDiagramEditorTest extends AbstractProjectDiagramEditorTest {
@Mock
private PerspectiveActivity currentPerspective;

@Mock
private ScreenMaximizedEvent maximizedEvent;

@Mock
private ScreenMinimizedEvent minimizedEvent;

@Mock
private ScreenPreMaximizedStateEvent preMaximizedStateEvent;

private BPMNDiagramEditor diagramEditor;

@Before
Expand Down Expand Up @@ -237,4 +249,69 @@ public void testAddDocumentationPage() {
assertEquals(documentationPage.getDocumentationView(), documentationView);
assertEquals(documentationPage.getLabel(), DOC_LABEL);
}

@Test
public void testMaximizedState() {
Collection<UberfireDock> stunnerDocks = new ArrayList<>();
stunnerDocks.add(propertiesDock);
stunnerDocks.add(explorerDock);

String perspectiveIdentifier = "Test Perspective ID";

when(perspectiveManagerMock.getCurrentPerspective()).thenReturn(currentPerspective);
when(currentPerspective.getIdentifier()).thenReturn(perspectiveIdentifier);

when(stunnerDocksHandler.provideDocks(perspectiveIdentifier)).thenReturn(stunnerDocks);

when(propertiesDock.getPlaceRequest()).thenReturn(propertiesPlace);
when(propertiesPlace.getIdentifier()).thenReturn(DiagramEditorPropertiesScreen.SCREEN_ID);

when(explorerDock.getPlaceRequest()).thenReturn(explorerPlace);
when(explorerPlace.getIdentifier()).thenReturn(DiagramEditorExplorerScreen.SCREEN_ID);

diagramEditor.onOpen();
verify(uberfireDocks, times(1)).open(propertiesDock);

diagramEditor.closePropertiesDocks();
verify(uberfireDocks, times(1)).close(propertiesDock);

diagramEditor.onScreenMaximizedEvent(maximizedEvent);
diagramEditor.onScreenMinimizedEvent(minimizedEvent);

// properties should not be opened since it was closed before maximized
verify(uberfireDocks, times(1)).open(propertiesDock);

diagramEditor.openPropertiesDocks();
verify(uberfireDocks, times(2)).open(propertiesDock);

diagramEditor.onScreenMaximizedEvent(maximizedEvent);
diagramEditor.onScreenPreMaximizedStateEvent(preMaximizedStateEvent);
diagramEditor.onScreenMinimizedEvent(minimizedEvent);

// properties should be opened since it was opened before maximized
verify(uberfireDocks, times(3)).open(propertiesDock);

diagramEditor.onOpen();
verify(uberfireDocks, times(4)).open(propertiesDock);

diagramEditor.closeExplorerDocks();
verify(uberfireDocks, times(1)).close(explorerDock);

diagramEditor.onScreenMaximizedEvent(maximizedEvent);
diagramEditor.onScreenMinimizedEvent(minimizedEvent);

// explore should not be opened since it was closed before maximized
verify(uberfireDocks, times(0)).open(explorerDock);

diagramEditor.openExplorerDocks();
verify(uberfireDocks, times(1)).open(explorerDock);

diagramEditor.onScreenMaximizedEvent(maximizedEvent);
when(preMaximizedStateEvent.isExplorerScreen()).thenReturn(true);
diagramEditor.onScreenPreMaximizedStateEvent(preMaximizedStateEvent);
diagramEditor.onScreenMinimizedEvent(minimizedEvent);

// explore should be opened since it was opened before maximized
verify(uberfireDocks, times(2)).open(explorerDock);
}
}