From 5f8b22447aeac701f8401c8b2f5435b2d8b95124 Mon Sep 17 00:00:00 2001 From: Vitaliy Guliy Date: Fri, 16 Dec 2016 17:20:17 +0200 Subject: [PATCH 1/3] CHE-3369 Git history panel is not opened --- .../che/ide/part/PartStackPresenter.java | 37 +++++++++----- .../general/AbstractPerspective.java | 49 +++++++------------ .../git/client/history/HistoryPresenter.java | 5 +- 3 files changed, 46 insertions(+), 45 deletions(-) diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/PartStackPresenter.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/PartStackPresenter.java index 56d7d47f456..7679d1dd260 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/PartStackPresenter.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/PartStackPresenter.java @@ -145,14 +145,8 @@ public void addPart(@NotNull PartPresenter part) { @Override public void addPart(@NotNull PartPresenter part, @Nullable Constraints constraint) { if (containsPart(part)) { - workBenchPartController.setHidden(true); - - TabItem selectedItem = getTabByPart(part); - - if (selectedItem != null) { - selectedItem.unSelect(); - } - + TabItem tab = getTabByPart(part); + onTabClicked(tab); return; } @@ -203,13 +197,33 @@ public PartPresenter getActivePart() { @Override public void setActivePart(@NotNull PartPresenter part) { TabItem tab = getTabByPart(part); - if (tab == null) { return; } activePart = part; activeTab = tab; + + if (state == State.MINIMIZED) { + state = State.NORMAL; + workBenchPartController.setSize(currentSize); + workBenchPartController.setHidden(false); + + // Notify the part stack state has been changed. + Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { + @Override + public void execute() { + eventBus.fireEvent(new PartStackStateChangedEvent(PartStackPresenter.this)); + } + }); + } else if (state == State.COLLAPSED) { + // Collapsed state means the other part stack is maximized. + // Ask the delegate to restore part stacks. + if (delegate != null) { + delegate.onRestore(this); + } + } + selectActiveTab(tab); } @@ -241,7 +255,6 @@ public void openPreviousActivePart() { } TabItem selectedTab = getTabByPart(activePart); - if (selectedTab != null) { selectActiveTab(selectedTab); } @@ -321,6 +334,7 @@ public void collapse() { // Collapse and update the state. currentSize = workBenchPartController.getSize(); workBenchPartController.setSize(0); + workBenchPartController.setHidden(true); state = State.COLLAPSED; // Deselect the active tab. @@ -358,6 +372,7 @@ public void minimize() { if (state == State.NORMAL) { currentSize = workBenchPartController.getSize(); workBenchPartController.setSize(0); + workBenchPartController.setHidden(true); state = State.MINIMIZED; } @@ -389,6 +404,7 @@ public void restore() { State prevState = state; state = State.NORMAL; workBenchPartController.setSize(currentSize); + workBenchPartController.setHidden(false); // Ask the delegate to restore part stacks if this part stack was maximized. if (prevState == State.MAXIMIZED) { @@ -458,7 +474,6 @@ private void selectActiveTab(@NotNull TabItem selectedTab) { workBenchPartController.setHidden(false); PartPresenter selectedPart = parts.get(selectedTab); - view.selectTab(selectedPart); } diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java index 3ebc44664d3..94db3c4ec8d 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java @@ -279,15 +279,10 @@ public void addPart(@NotNull PartPresenter part, @NotNull PartStackType type, @N PartStack destPartStack = partStacks.get(type); List rules = part.getRules(); - - if (rules.isEmpty() && !destPartStack.containsPart(part)) { + if (rules.isEmpty() || rules.contains(perspectiveId)) { destPartStack.addPart(part, constraint); return; } - - if (rules.contains(perspectiveId)) { - destPartStack.addPart(part, constraint); - } } @Override @@ -344,24 +339,20 @@ private JsonObject getPartStackState(PartStack partStack, WorkBenchPartControlle public void loadState(@NotNull JsonObject state) { if (state.hasKey("PART_STACKS")) { JsonObject part_stacks = state.getObject("PART_STACKS"); - List activeParts = new ArrayList<>(); for (String partStackType : part_stacks.keys()) { JsonObject partStack = part_stacks.getObject(partStackType); switch (PartStackType.valueOf(partStackType)) { case INFORMATION: - restorePartController(partStacks.get(INFORMATION), belowPartController, partStack, activeParts); + restorePartController(partStacks.get(INFORMATION), belowPartController, partStack); break; case NAVIGATION: - restorePartController(partStacks.get(NAVIGATION), leftPartController, partStack, activeParts); + restorePartController(partStacks.get(NAVIGATION), leftPartController, partStack); break; case TOOLING: - restorePartController(partStacks.get(TOOLING), rightPartController, partStack, activeParts); + restorePartController(partStacks.get(TOOLING), rightPartController, partStack); break; } } - for (PartPresenter part : activeParts) { - setActivePart(part); - } } if (state.hasKey("ACTIVE_PART")) { @@ -373,18 +364,7 @@ public void loadState(@NotNull JsonObject state) { } } - private void restorePartController(PartStack stack, WorkBenchPartController controller, JsonObject partStack, - List activeParts) { - double size = 0; - if (partStack.hasKey("SIZE")) { - size = partStack.getNumber("SIZE"); - controller.setSize(size); - } - - if (partStack.hasKey("HIDDEN")) { - controller.setHidden(partStack.getBoolean("HIDDEN")); - } - + private void restorePartController(PartStack stack, WorkBenchPartController controller, JsonObject partStack) { if (partStack.hasKey("PARTS")) { JsonArray parts = partStack.get("PARTS"); for (int i = 0; i < parts.length(); i++) { @@ -405,14 +385,23 @@ private void restorePartController(PartStack stack, WorkBenchPartController cont //hide part stack if we cannot restore opened parts if (stack.getParts().isEmpty()) { controller.setHidden(true); + return; } - if (partStack.hasKey("ACTIVE_PART")) { - String className = partStack.getString("ACTIVE_PART"); - Provider provider = dynaProvider.getProvider(className); - if (provider != null) { - activeParts.add(provider.get()); + if (partStack.hasKey("HIDDEN") && partStack.getBoolean("HIDDEN")) { + stack.minimize(); + return; + } + + if (partStack.hasKey("SIZE")) { + double size = partStack.getNumber("SIZE"); + + // Size of the part must not be less 100 pixels. + if (size == 0) { + size = 100; } + + controller.setSize(size); } } diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java index d19655d6304..73619e93ca5 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/history/HistoryPresenter.java @@ -132,10 +132,7 @@ public void showDialog(Project project) { if (isViewClosed) { workspaceAgent.openPart(this, PartStackType.TOOLING); isViewClosed = false; - } - - PartPresenter activePart = partStack.getActivePart(); - if (activePart == null || !activePart.equals(this)) { + } else { partStack.setActivePart(this); } } From 95d1b5878f853fb827f80e51bbcf9674378d32c3 Mon Sep 17 00:00:00 2001 From: Vitaliy Guliy Date: Fri, 16 Dec 2016 18:31:17 +0200 Subject: [PATCH 2/3] CHE-3369 Git history panel is not opened --- .../general/AbstractPerspective.java | 22 ++++---- .../che/ide/part/PartStackPresenterTest.java | 11 +--- .../AbstractPerspectivePersistenceTest.java | 56 +++++++++++-------- 3 files changed, 47 insertions(+), 42 deletions(-) diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java index 94db3c4ec8d..fee17a42360 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java @@ -364,9 +364,9 @@ public void loadState(@NotNull JsonObject state) { } } - private void restorePartController(PartStack stack, WorkBenchPartController controller, JsonObject partStack) { - if (partStack.hasKey("PARTS")) { - JsonArray parts = partStack.get("PARTS"); + private void restorePartController(PartStack partStack, WorkBenchPartController controller, JsonObject partStackJSON) { + if (partStackJSON.hasKey("PARTS")) { + JsonArray parts = partStackJSON.get("PARTS"); for (int i = 0; i < parts.length(); i++) { JsonObject value = parts.get(i); if (value.hasKey("CLASS")) { @@ -374,27 +374,27 @@ private void restorePartController(PartStack stack, WorkBenchPartController cont Provider provider = dynaProvider.getProvider(className); if (provider != null) { PartPresenter partPresenter = provider.get(); - if (!stack.containsPart(partPresenter)) { - stack.addPart(partPresenter); + if (!partStack.containsPart(partPresenter)) { + partStack.addPart(partPresenter); } } } } } - //hide part stack if we cannot restore opened parts - if (stack.getParts().isEmpty()) { + //hide part stack if it has no parts + if (partStack.getParts().isEmpty()) { controller.setHidden(true); return; } - if (partStack.hasKey("HIDDEN") && partStack.getBoolean("HIDDEN")) { - stack.minimize(); + if (partStackJSON.hasKey("HIDDEN") && partStackJSON.getBoolean("HIDDEN")) { + partStack.minimize(); return; } - if (partStack.hasKey("SIZE")) { - double size = partStack.getNumber("SIZE"); + if (partStackJSON.hasKey("SIZE")) { + double size = partStackJSON.getNumber("SIZE"); // Size of the part must not be less 100 pixels. if (size == 0) { diff --git a/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/part/PartStackPresenterTest.java b/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/part/PartStackPresenterTest.java index eca809febde..f795d876be9 100644 --- a/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/part/PartStackPresenterTest.java +++ b/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/part/PartStackPresenterTest.java @@ -32,7 +32,6 @@ import org.mockito.Captor; import org.mockito.Matchers; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; import org.vectomatic.dom.svg.ui.SVGResource; import java.util.List; @@ -41,8 +40,6 @@ import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertThat; -import static org.mockito.Matchers.anyDouble; -import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; @@ -157,17 +154,13 @@ public void partShouldBeAddedWithoutConstraints() { } @Test - public void partShouldNotBeAddedWhenItAlreadyExist() { + public void partShouldBeSelectedIfItIsAddedTwice() { presenter.addPart(partPresenter); reset(view); presenter.addPart(partPresenter); - verify(workBenchPartController).setHidden(true); - - verify(partButton).unSelect(); - - verify(view, never()).addTab(partButton, partPresenter); + verify(view).selectTab(partPresenter); } @Test diff --git a/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspectivePersistenceTest.java b/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspectivePersistenceTest.java index 43f4b42cb22..8bce4249aba 100644 --- a/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspectivePersistenceTest.java +++ b/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspectivePersistenceTest.java @@ -47,7 +47,6 @@ import static org.fest.assertions.Assertions.assertThat; import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -56,6 +55,7 @@ */ @RunWith(GwtMockitoTestRunner.class) public class AbstractPerspectivePersistenceTest { + //constructor mocks @Mock private PerspectiveViewImpl view; @@ -96,7 +96,6 @@ public class AbstractPerspectivePersistenceTest { @Mock private Provider partProvider; - private AbstractPerspective perspective; @Before @@ -152,38 +151,51 @@ public void shouldNotStoreEditorPartStack() throws Exception { @Test public void shouldRestorePartStackSize() throws Exception { JsonObject state = Json.createObject(); - JsonObject parts = Json.createObject(); - state.put("PART_STACKS", parts); - JsonObject partStack = Json.createObject(); - parts.put("INFORMATION", partStack); - partStack.put("SIZE", 42); + + JsonObject parts = Json.createObject(); + state.put("PART_STACKS", parts); + + JsonObject partStack = Json.createObject(); + parts.put("INFORMATION", partStack); + + JsonArray partsArray = Json.createArray(); + partStack.put("PARTS", partsArray); + + JsonObject part = Json.createObject(); + partsArray.set(0, part); + part.put("CLASS", "foo.Bar"); + + partStack.put("SIZE", 42); + + // partStackPresenter.getParts() must return non empty list + final List partPresenters = new ArrayList<>(); + partPresenters.add(partPresenter); + when(partStackPresenter.getParts()).thenAnswer(new Answer>() { + @Override + public List answer(InvocationOnMock invocationOnMock) throws Throwable { + return partPresenters; + } + }); perspective.loadState(state); verify(workBenchController).setSize(42d); - } @Test public void shouldRestoreHiddenPartStackState() throws Exception { JsonObject state = Json.createObject(); - JsonObject parts = Json.createObject(); - state.put("PART_STACKS", parts); - JsonObject partStack = Json.createObject(); - parts.put("INFORMATION", partStack); - partStack.put("HIDDEN", true); - //PartStackPresenter should not be empty otherwise setHidden() will call twice - final List partPresenters = new ArrayList<>(); - partPresenters.add(mock(PartPresenter.class)); - when(partStackPresenter.getParts()).thenAnswer(new Answer>() { - public List answer(InvocationOnMock invocation) throws Throwable { - return partPresenters; - } + JsonObject parts = Json.createObject(); + state.put("PART_STACKS", parts); - }); + JsonObject partStack = Json.createObject(); + parts.put("INFORMATION", partStack); + + partStack.put("HIDDEN", true); perspective.loadState(state); + verify(workBenchController).setHidden(true); } @@ -210,6 +222,6 @@ public void shouldRestoreOpenedParts() throws Exception { verify(partProvider).get(); verify(partStackPresenter).addPart(partPresenter); - } + } From b83276f68a256bae5c451eabc5d37142d39777a6 Mon Sep 17 00:00:00 2001 From: Vitaliy Guliy Date: Mon, 19 Dec 2016 09:59:55 +0200 Subject: [PATCH 3/3] CHE-3369 Git history panel is not opened --- .../ide/workspace/perspectives/general/AbstractPerspective.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java index fee17a42360..1ce7350c4d2 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java @@ -397,7 +397,7 @@ private void restorePartController(PartStack partStack, WorkBenchPartController double size = partStackJSON.getNumber("SIZE"); // Size of the part must not be less 100 pixels. - if (size == 0) { + if (size < 100) { size = 100; }