Skip to content

Commit 4accc92

Browse files
author
Vitaliy Guliy
authored
CHE-4347 Error when adding a perspective (eclipse-che#4348)
* CHE-4347 Error when adding a perspective * CHE-4347 Error when adding a perspective
1 parent 36a793c commit 4accc92

6 files changed

Lines changed: 79 additions & 42 deletions

File tree

ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/action/DefaultActionGroup.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import org.eclipse.che.ide.api.constraints.Anchor;
1414
import org.eclipse.che.ide.api.constraints.Constraints;
15+
import org.eclipse.che.ide.util.loging.Log;
1516

1617
import java.util.ArrayList;
1718
import java.util.Collection;
@@ -137,11 +138,13 @@ public final void addAction(Action action, Constraints constraint, ActionManager
137138
if (action == this) {
138139
throw new IllegalArgumentException("Cannot add a group to itself");
139140
}
141+
140142
// Check that action isn't already registered
141143
if (!(action instanceof Separator)) {
142144
for (Action actionInList : actionList) {
143145
if (action.equals(actionInList)) {
144-
throw new IllegalArgumentException("cannot add an action twice: " + action);
146+
Log.error(getClass(), "Can not add an action twice: " + action);
147+
return;
145148
}
146149
}
147150
}

ide/che-core-ide-api/src/test/java/org/eclipse/che/ide/api/action/DefaultActionGroupTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,14 @@ public void setup() {
6262
defaultActionGroup = new DefaultActionGroup(actionManager);
6363
}
6464

65-
@Test(expected = IllegalArgumentException.class)
65+
@Test
6666
public void shouldNotAddSameActionTwice() {
6767
Action action = mock(Action.class);
6868

6969
defaultActionGroup.add(action, new Constraints(AFTER, "someAction"));
7070
defaultActionGroup.add(action, new Constraints(BEFORE, "someAction"));
71+
72+
assertThat(defaultActionGroup.getChildrenCount()).isEqualTo(1);
7173
}
7274

7375
@Test

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/client/BootstrapController.java

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public BootstrapController(Provider<WorkspacePresenter> workspaceProvider,
9797

9898
@Inject
9999
private void startComponents(Map<String, Provider<Component>> components) {
100-
startComponents(components.values().iterator());
100+
startComponents(components.entrySet().iterator());
101101
}
102102

103103
@Inject
@@ -132,23 +132,37 @@ public void apply(PromiseError err) throws OperationException {
132132
});
133133
}
134134

135-
private void startComponents(final Iterator<Provider<Component>> componentProviderIterator) {
136-
if (componentProviderIterator.hasNext()) {
137-
Provider<Component> componentProvider = componentProviderIterator.next();
135+
private void startComponents(final Iterator<Map.Entry<String, Provider<Component>>> componentIterator) {
136+
if (componentIterator.hasNext()) {
137+
Map.Entry<String, Provider<Component>> entry = componentIterator.next();
138+
final String componentName = entry.getKey();
138139

139-
final Component component = componentProvider.get();
140-
component.start(new Callback<Component, Exception>() {
141-
@Override
142-
public void onSuccess(Component result) {
143-
startComponents(componentProviderIterator);
144-
}
140+
try {
141+
Provider<Component> componentProvider = entry.getValue();
142+
143+
final Component component = componentProvider.get();
144+
component.start(new Callback<Component, Exception>() {
145+
@Override
146+
public void onSuccess(Component result) {
147+
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
148+
@Override
149+
public void execute() {
150+
startComponents(componentIterator);
151+
}
152+
});
153+
}
154+
155+
@Override
156+
public void onFailure(Exception reason) {
157+
Log.error(getClass(), "Unable to start " + componentName, reason);
158+
initializationFailed(reason.getMessage());
159+
}
160+
});
161+
} catch (Exception e) {
162+
Log.error(getClass(), "Unable to start " + componentName, e);
163+
initializationFailed(e.getMessage());
164+
}
145165

146-
@Override
147-
public void onFailure(Exception reason) {
148-
Log.error(component.getClass(), reason);
149-
initializationFailed(reason.getMessage());
150-
}
151-
});
152166
} else {
153167
startExtensionsAndDisplayUI();
154168
}

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
package org.eclipse.che.ide.part.explorer.project;
1212

1313
import com.google.common.collect.Sets;
14+
import com.google.gwt.core.client.Scheduler;
1415
import com.google.gwt.user.client.ui.AcceptsOneWidget;
1516
import com.google.inject.Inject;
17+
import com.google.inject.Provider;
1618
import com.google.inject.Singleton;
1719
import com.google.web.bindery.event.shared.EventBus;
1820

@@ -108,13 +110,15 @@ public class ProjectExplorerPresenter extends BasePresenter implements ActionDel
108110

109111
@Inject
110112
public ProjectExplorerPresenter(final ProjectExplorerView view,
111-
EventBus eventBus,
112-
CoreLocalizationConstant locale,
113-
Resources resources,
113+
final EventBus eventBus,
114+
final CoreLocalizationConstant locale,
115+
final Resources resources,
114116
final ResourceNode.NodeFactory nodeFactory,
115117
final SettingsProvider settingsProvider,
116118
final AppContext appContext,
117-
final WorkspaceAgent workspaceAgent, RequestTransmitter requestTransmitter, DtoFactory dtoFactory) {
119+
final Provider<WorkspaceAgent> workspaceAgentProvider,
120+
final RequestTransmitter requestTransmitter,
121+
final DtoFactory dtoFactory) {
118122
this.view = view;
119123
this.eventBus = eventBus;
120124
this.nodeFactory = nodeFactory;
@@ -170,18 +174,23 @@ public void onPostLoad(PostLoadEvent event) {
170174

171175
registerNative();
172176

173-
final PartStack partStack = checkNotNull(workspaceAgent.getPartStack(PartStackType.NAVIGATION),
174-
"Navigation part stack should not be a null");
175-
partStack.addPart(this);
176-
partStack.setActivePart(this);
177-
178177
// when ide has already initialized, then we force set focus to the current part
179178
eventBus.addHandler(ExtensionsInitializedEvent.getType(), new ExtensionsInitializedHandler() {
180179
@Override
181180
public void onExtensionsInitialized(ExtensionsInitializedEvent event) {
182181
partStack.setActivePart(ProjectExplorerPresenter.this);
183182
}
184183
});
184+
185+
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
186+
@Override
187+
public void execute() {
188+
final PartStack partStack = checkNotNull(workspaceAgentProvider.get().getPartStack(PartStackType.NAVIGATION),
189+
"Navigation part stack should not be a null");
190+
partStack.addPart(ProjectExplorerPresenter.this);
191+
partStack.setActivePart(ProjectExplorerPresenter.this);
192+
}
193+
});
185194
}
186195

187196
@Inject

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

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*******************************************************************************/
1111
package org.eclipse.che.ide.workspace;
1212

13+
import com.google.inject.Provider;
1314
import elemental.json.Json;
1415
import elemental.json.JsonObject;
1516

@@ -49,18 +50,18 @@
4950
public class WorkspacePresenter implements Presenter, WorkspaceView.ActionDelegate, WorkspaceAgent, PerspectiveTypeListener,
5051
StateComponent {
5152

52-
private final WorkspaceView view;
53-
private final String defaultPerspectiveId;
54-
private final MainMenuPresenter mainMenu;
55-
private final StatusPanelGroupPresenter bottomMenu;
56-
private final ToolbarPresenter toolbarPresenter;
57-
private final PerspectiveManager perspectiveManager;
53+
private final WorkspaceView view;
54+
private final String defaultPerspectiveId;
55+
private final MainMenuPresenter mainMenu;
56+
private final StatusPanelGroupPresenter bottomMenu;
57+
private final ToolbarPresenter toolbarPresenter;
58+
private final Provider<PerspectiveManager> perspectiveManagerProvider;
5859

59-
private Perspective activePerspective;
60+
private Perspective activePerspective;
6061

6162
@Inject
6263
public WorkspacePresenter(WorkspaceView view,
63-
PerspectiveManager perspectiveManager,
64+
Provider<PerspectiveManager> perspectiveManagerProvider,
6465
MainMenuPresenter mainMenu,
6566
StatusPanelGroupPresenter bottomMenu,
6667
@MainToolbar ToolbarPresenter toolbarPresenter,
@@ -73,8 +74,8 @@ public WorkspacePresenter(WorkspaceView view,
7374
this.mainMenu = mainMenu;
7475
this.bottomMenu = bottomMenu;
7576

76-
this.perspectiveManager = perspectiveManager;
77-
this.perspectiveManager.addListener(this);
77+
this.perspectiveManagerProvider = perspectiveManagerProvider;
78+
perspectiveManagerProvider.get().addListener(this);
7879

7980
onPerspectiveChanged();
8081
}
@@ -92,10 +93,10 @@ public void go(AcceptsOneWidget container) {
9293
/** {@inheritDoc} */
9394
@Override
9495
public void onPerspectiveChanged() {
95-
activePerspective = perspectiveManager.getActivePerspective();
96+
activePerspective = perspectiveManagerProvider.get().getActivePerspective();
9697

9798
if (activePerspective == null) {
98-
throw new IllegalStateException("Current perspective isn't defined " + perspectiveManager.getPerspectiveId());
99+
throw new IllegalStateException("Current perspective isn't defined " + perspectiveManagerProvider.get().getPerspectiveId());
99100
}
100101

101102
activePerspective.go(view.getPerspectivePanel());
@@ -151,7 +152,7 @@ public JsonObject getState() {
151152
JsonObject state = Json.createObject();
152153
JsonObject perspectivesJs = Json.createObject();
153154
state.put("perspectives", perspectivesJs);
154-
Map<String, Perspective> perspectives = perspectiveManager.getPerspectives();
155+
Map<String, Perspective> perspectives = perspectiveManagerProvider.get().getPerspectives();
155156
for (Map.Entry<String, Perspective> entry : perspectives.entrySet()) {
156157
//store only default perspective
157158
if (entry.getKey().equals(defaultPerspectiveId)) {
@@ -165,7 +166,7 @@ public JsonObject getState() {
165166
public void loadState(JsonObject state) {
166167
if (state.hasKey("perspectives")) {
167168
JsonObject perspectives = state.getObject("perspectives");
168-
Map<String, Perspective> perspectiveMap = perspectiveManager.getPerspectives();
169+
Map<String, Perspective> perspectiveMap = perspectiveManagerProvider.get().getPerspectives();
169170
for (String key : perspectives.keys()) {
170171
if (perspectiveMap.containsKey(key)) {
171172
perspectiveMap.get(key).loadState(perspectives.getObject(key));

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*******************************************************************************/
1111
package org.eclipse.che.ide.workspace.state;
1212

13+
import com.google.inject.Provider;
1314
import elemental.json.Json;
1415
import elemental.json.JsonObject;
1516

@@ -57,6 +58,10 @@ public class WorkspacePresenterPersistenceTest {
5758
private PartPresenter part1;
5859

5960
private WorkspacePresenter presenter;
61+
62+
@Mock
63+
private Provider<PerspectiveManager> perspectiveManagerProvider;
64+
6065
private PerspectiveManager perspectiveManager;
6166

6267
@Before
@@ -65,8 +70,11 @@ public void setUp() throws Exception {
6570
map.put("perspective1", perspective1);
6671
map.put("perspective2", perspective2);
6772
perspectiveManager = new PerspectiveManager(map, "perspective1");
73+
74+
when(perspectiveManagerProvider.get()).thenReturn(perspectiveManager);
75+
6876
presenter = new WorkspacePresenter(workspaceView,
69-
perspectiveManager,
77+
perspectiveManagerProvider,
7078
mainMenuPresenter,
7179
statusPanelGroupPresenter,
7280
toolbarPresenter,

0 commit comments

Comments
 (0)