Skip to content

Commit 261cb40

Browse files
author
Vitaliy Guliy
authored
CHE-4379 Cannot reduce process panel size (#4829)
* CHE-4379 Cannot reduce process panel size * CHE-4379 Cannot reduce process panel size * CHE-4379 Cannot reduce process panel size
1 parent b42ccbf commit 261cb40

File tree

7 files changed

+99
-17
lines changed

7 files changed

+99
-17
lines changed

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/ProjectExplorerStateComponent.java

-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ public JsonObject getState() {
8686

8787
@Override
8888
public void loadState(@NotNull JsonObject state) {
89-
9089
if (state.hasKey(SHOW_HIDDEN_FILES)) {
9190
projectExplorer.showHiddenFiles(state.getBoolean(SHOW_HIDDEN_FILES));
9291
}

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/WorkspacePresenter.java

+1
Original file line numberDiff line numberDiff line change
@@ -174,4 +174,5 @@ public void loadState(JsonObject state) {
174174
}
175175
}
176176
}
177+
177178
}

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspective.java

+55-14
Original file line numberDiff line numberDiff line change
@@ -321,13 +321,17 @@ public JsonObject getState() {
321321
private JsonObject getPartStackState(PartStack partStack, WorkBenchPartController partController) {
322322
JsonObject state = Json.createObject();
323323
state.put("SIZE", partController.getSize());
324+
state.put("STATE", partStack.getPartStackState().name());
325+
324326
if (partStack.getParts().isEmpty()) {
325327
state.put("HIDDEN", true);
326328
} else {
327329
if (partStack.getActivePart() != null) {
328330
state.put("ACTIVE_PART", partStack.getActivePart().getClass().getName());
329331
}
332+
330333
state.put("HIDDEN", partController.isHidden());
334+
331335
JsonArray parts = Json.createArray();
332336
state.put("PARTS", parts);
333337
int i = 0;
@@ -343,18 +347,22 @@ private JsonObject getPartStackState(PartStack partStack, WorkBenchPartControlle
343347
@Override
344348
public void loadState(@NotNull JsonObject state) {
345349
if (state.hasKey("PART_STACKS")) {
346-
JsonObject part_stacks = state.getObject("PART_STACKS");
347-
for (String partStackType : part_stacks.keys()) {
348-
JsonObject partStack = part_stacks.getObject(partStackType);
350+
JsonObject partStacksState = state.getObject("PART_STACKS");
351+
352+
// Don't restore part dimensions if perspective is maximized.
353+
boolean perspectiveMaximized = isPerspectiveMaximized(partStacksState);
354+
355+
for (String partStackType : partStacksState.keys()) {
356+
JsonObject partStackState = partStacksState.getObject(partStackType);
349357
switch (PartStackType.valueOf(partStackType)) {
350358
case INFORMATION:
351-
restorePartController(partStacks.get(INFORMATION), belowPartController, partStack);
359+
loadPartStackState(partStacks.get(INFORMATION), belowPartController, partStackState, perspectiveMaximized);
352360
break;
353361
case NAVIGATION:
354-
restorePartController(partStacks.get(NAVIGATION), leftPartController, partStack);
362+
loadPartStackState(partStacks.get(NAVIGATION), leftPartController, partStackState, perspectiveMaximized);
355363
break;
356364
case TOOLING:
357-
restorePartController(partStacks.get(TOOLING), rightPartController, partStack);
365+
loadPartStackState(partStacks.get(TOOLING), rightPartController, partStackState, perspectiveMaximized);
358366
break;
359367
}
360368
}
@@ -370,9 +378,38 @@ public void loadState(@NotNull JsonObject state) {
370378
}
371379
}
372380

373-
private void restorePartController(PartStack partStack, WorkBenchPartController controller, JsonObject partStackJSON) {
374-
if (partStackJSON.hasKey("PARTS")) {
375-
JsonArray parts = partStackJSON.get("PARTS");
381+
/**
382+
* Determines whether perspective is maximized.
383+
*
384+
* @param partStacksState part stack state
385+
* @return <b>true</b> is perspective has maximized part stack
386+
*/
387+
private boolean isPerspectiveMaximized(JsonObject partStacksState) {
388+
for (String partStackType : partStacksState.keys()) {
389+
JsonObject partStackState = partStacksState.getObject(partStackType);
390+
if (partStackState.hasKey("STATE") && PartStack.State.MAXIMIZED.name().equals(partStackState.getString("STATE"))) {
391+
return true;
392+
}
393+
}
394+
395+
return false;
396+
}
397+
398+
/**
399+
* Set part stack state.
400+
*
401+
* @param partStack
402+
* @param controller
403+
* @param partStackState
404+
* @param skipRestoreDimensions
405+
*/
406+
private void loadPartStackState(PartStack partStack,
407+
WorkBenchPartController controller,
408+
JsonObject partStackState,
409+
boolean skipRestoreDimensions) {
410+
if (partStackState.hasKey("PARTS")) {
411+
JsonArray parts = partStackState.get("PARTS");
412+
376413
for (int i = 0; i < parts.length(); i++) {
377414
JsonObject value = parts.get(i);
378415
if (value.hasKey("CLASS")) {
@@ -389,8 +426,8 @@ private void restorePartController(PartStack partStack, WorkBenchPartController
389426
}
390427

391428
// restore part stack's active part
392-
if (partStackJSON.hasKey("ACTIVE_PART")) {
393-
String activePart = partStackJSON.getString("ACTIVE_PART");
429+
if (partStackState.hasKey("ACTIVE_PART")) {
430+
String activePart = partStackState.getString("ACTIVE_PART");
394431
Provider<PartPresenter> provider = dynaProvider.getProvider(activePart);
395432
if (provider != null) {
396433
partStack.setActivePart(provider.get());
@@ -403,13 +440,17 @@ private void restorePartController(PartStack partStack, WorkBenchPartController
403440
return;
404441
}
405442

406-
if (partStackJSON.hasKey("HIDDEN") && partStackJSON.getBoolean("HIDDEN")) {
443+
if (skipRestoreDimensions) {
444+
return;
445+
}
446+
447+
if (partStackState.hasKey("HIDDEN") && partStackState.getBoolean("HIDDEN")) {
407448
partStack.minimize();
408449
return;
409450
}
410451

411-
if (partStackJSON.hasKey("SIZE")) {
412-
double size = partStackJSON.getNumber("SIZE");
452+
if (partStackState.hasKey("SIZE")) {
453+
double size = partStackState.getNumber("SIZE");
413454

414455
// Size of the part must not be less 100 pixels.
415456
if (size <= MIN_PART_SIZE) {

ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/statepersistance/AppStateManagerTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,5 @@ public void restoreShouldCallLoadState() throws Exception {
153153
assertThat(jsonObject.hasKey("key1")).isTrue();
154154
assertThat(jsonObject.getString("key1")).isEqualTo("value1");
155155
}
156+
156157
}

ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/workspace/perspectives/general/AbstractPerspectivePersistenceTest.java

+40
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.eclipse.che.ide.api.editor.AbstractEditorPresenter;
2727
import org.eclipse.che.ide.api.event.ActivePartChangedEvent;
2828
import org.eclipse.che.ide.api.parts.PartPresenter;
29+
import org.eclipse.che.ide.api.parts.PartStack;
2930
import org.eclipse.che.ide.api.parts.PartStackView;
3031
import org.eclipse.che.ide.part.PartStackPresenter;
3132
import org.eclipse.che.ide.workspace.PartStackPresenterFactory;
@@ -39,6 +40,7 @@
3940
import org.junit.runner.RunWith;
4041
import org.mockito.Matchers;
4142
import org.mockito.Mock;
43+
import static org.mockito.Mockito.never;
4244
import org.mockito.invocation.InvocationOnMock;
4345
import org.mockito.stubbing.Answer;
4446

@@ -110,6 +112,8 @@ public void setUp() throws Exception {
110112
when(view.getInformationPanel()).thenReturn(simpleLayoutPanel);
111113
when(view.getToolPanel()).thenReturn(simplePanel);
112114

115+
when(partStackPresenter.getPartStackState()).thenReturn(PartStack.State.NORMAL);
116+
113117
when(controllerFactory.createController(Matchers.<SplitLayoutPanel>anyObject(),
114118
Matchers.<SimplePanel>anyObject())).thenReturn(workBenchController);
115119

@@ -224,4 +228,40 @@ public void shouldRestoreOpenedParts() throws Exception {
224228
verify(partStackPresenter).addPart(partPresenter);
225229
}
226230

231+
@Test
232+
public void shouldRestoreMaximizedPartStack() throws Exception {
233+
JsonObject state = Json.createObject();
234+
235+
JsonObject parts = Json.createObject();
236+
state.put("PART_STACKS", parts);
237+
238+
JsonObject partStack = Json.createObject();
239+
parts.put("INFORMATION", partStack);
240+
241+
partStack.put("STATE", PartStack.State.MAXIMIZED.name());
242+
243+
JsonArray partsArray = Json.createArray();
244+
partStack.put("PARTS", partsArray);
245+
246+
JsonObject part = Json.createObject();
247+
partsArray.set(0, part);
248+
part.put("CLASS", "foo.Bar");
249+
250+
partStack.put("SIZE", 142);
251+
252+
// partStackPresenter.getParts() must return non empty list
253+
final List<PartPresenter> partPresenters = new ArrayList<>();
254+
partPresenters.add(partPresenter);
255+
when(partStackPresenter.getParts()).thenAnswer(new Answer<List<? extends PartPresenter>>() {
256+
@Override
257+
public List<? extends PartPresenter> answer(InvocationOnMock invocationOnMock) throws Throwable {
258+
return partPresenters;
259+
}
260+
});
261+
262+
perspective.loadState(state);
263+
264+
verify(workBenchController, never()).setSize(142d);
265+
}
266+
227267
}

ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/workspace/state/WorkspacePresenterPersistenceTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,5 @@ public void shouldRestoreStorePerspectives() throws Exception {
106106

107107
verify(perspective1).loadState(perspective1State);
108108
}
109+
109110
}

plugins/plugin-pullrequest-parent/che-plugin-pullrequest-ide/src/main/java/org/eclipse/che/plugin/pullrequest/client/ContributionMixinProvider.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public void onSelectionChanged(SelectionChangedEvent event) {
114114
});
115115
}
116116

117-
void processCurrentProject() {
117+
private void processCurrentProject() {
118118
final Project rootProject = appContext.getRootProject();
119119

120120
if (lastSelected != null && lastSelected.equals(rootProject)) {
@@ -124,7 +124,6 @@ void processCurrentProject() {
124124
final PartStack toolingPartStack = workspaceAgent.getPartStack(TOOLING);
125125

126126
if (rootProject == null) {
127-
128127
if (toolingPartStack.containsPart(contributePart)) {
129128
invalidateContext(lastSelected);
130129
hidePart();

0 commit comments

Comments
 (0)