Skip to content

Commit

Permalink
Fix and improve some actions (#6287)
Browse files Browse the repository at this point in the history
CHE-6287: Fix and improve some actions
  • Loading branch information
AndrienkoAleksandr authored and tolusha committed Sep 15, 2017
1 parent c9af56c commit 20d5966
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,17 @@
*/
package org.eclipse.che.ide.actions;

import static java.lang.Integer.parseInt;
import static org.eclipse.che.api.promises.client.callback.CallbackPromiseHelper.createFromCallback;
import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.FLOAT_MODE;
import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL;

import com.google.common.base.Optional;
import com.google.gwt.core.client.Callback;
import com.google.gwt.user.client.Timer;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
import com.google.web.bindery.event.shared.HandlerRegistration;
import org.eclipse.che.api.promises.client.Operation;
import org.eclipse.che.api.promises.client.OperationException;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.api.promises.client.callback.CallbackPromiseHelper.Call;
import org.eclipse.che.api.promises.client.js.JsPromiseError;
Expand All @@ -36,15 +35,11 @@
import org.eclipse.che.ide.api.editor.text.TextPosition;
import org.eclipse.che.ide.api.editor.texteditor.TextEditor;
import org.eclipse.che.ide.api.event.ActivePartChangedEvent;
import org.eclipse.che.ide.api.event.ActivePartChangedHandler;
import org.eclipse.che.ide.api.notification.NotificationManager;
import org.eclipse.che.ide.api.resources.File;
import org.eclipse.che.ide.resource.Path;
import org.eclipse.che.ide.util.loging.Log;

/**
* TODO maybe rename it to factory open file?
*
* @author Sergii Leschenko
* @author Vlad Zhukovskyi
*/
Expand Down Expand Up @@ -95,53 +90,58 @@ public void actionPerformed(ActionEvent event) {
.getWorkspaceRoot()
.getFile(pathToOpen)
.then(
new Operation<Optional<File>>() {
@Override
public void apply(Optional<File> optionalFile) throws OperationException {
if (optionalFile.isPresent()) {
if (actionCompletedCallback != null) {
actionCompletedCallback.onSuccess(null);
}

editorAgent.openEditor(
optionalFile.get(),
new EditorAgent.OpenEditorCallback() {
@Override
public void onEditorOpened(EditorPartPresenter editor) {
if (!(editor instanceof TextEditor)) {
return;
}

try {
int lineNumber =
Integer.parseInt(event.getParameters().get(LINE_PARAM_ID)) - 1;
((TextEditor) editor)
.getDocument()
.setCursorPosition(new TextPosition(lineNumber, 0));
} catch (NumberFormatException e) {
Log.error(getClass(), localization.fileToOpenLineIsNotANumber());
}
}
optionalFile -> {
if (optionalFile.isPresent()) {
if (actionCompletedCallback != null) {
actionCompletedCallback.onSuccess(null);
}

@Override
public void onInitializationFailed() {}
editorAgent.openEditor(
optionalFile.get(),
new EditorAgent.OpenEditorCallback() {
@Override
public void onEditorOpened(EditorPartPresenter editor) {
scrollToLine(editor, event.getParameters().get(LINE_PARAM_ID));
}

@Override
public void onEditorActivated(EditorPartPresenter editor) {}
});
@Override
public void onInitializationFailed() {}

} else {
if (actionCompletedCallback != null) {
actionCompletedCallback.onFailure(null);
}
@Override
public void onEditorActivated(EditorPartPresenter editor) {
scrollToLine(editor, event.getParameters().get(LINE_PARAM_ID));
}
});

notificationManager.notify(
localization.unableOpenResource(pathToOpen), FAIL, FLOAT_MODE);
} else {
if (actionCompletedCallback != null) {
actionCompletedCallback.onFailure(null);
}

notificationManager.notify(
localization.unableOpenResource(pathToOpen), FAIL, FLOAT_MODE);
}
});
}

private void scrollToLine(EditorPartPresenter editor, String lineParam) {
if (!(editor instanceof TextEditor)) {
return;
}
new Timer() {
@Override
public void run() {
try {
int lineNumber = parseInt(lineParam);
TextEditor textEditor = (TextEditor) editor;
textEditor.getDocument().setCursorPosition(new TextPosition(lineNumber - 1, 0));
} catch (NumberFormatException e) {
Log.error(getClass(), localization.fileToOpenLineIsNotANumber());
}
}
}.schedule(300);
}

@Override
public Promise<Void> promise(final ActionEvent actionEvent) {
if (actionEvent.getParameters() == null) {
Expand All @@ -163,16 +163,13 @@ public void makeCall(final Callback<Void, Throwable> callback) {
handlerRegistration =
eventBus.addHandler(
ActivePartChangedEvent.TYPE,
new ActivePartChangedHandler() {
@Override
public void onActivePartChanged(ActivePartChangedEvent event) {
if (event.getActivePart() instanceof EditorPartPresenter) {
EditorPartPresenter editor = (EditorPartPresenter) event.getActivePart();
handlerRegistration.removeHandler();
if (Path.valueOf(pathToOpen)
.equals(editor.getEditorInput().getFile().getLocation())) {
callback.onSuccess(null);
}
event -> {
if (event.getActivePart() instanceof EditorPartPresenter) {
EditorPartPresenter editor = (EditorPartPresenter) event.getActivePart();
handlerRegistration.removeHandler();
if (Path.valueOf(pathToOpen)
.equals(editor.getEditorInput().getFile().getLocation())) {
callback.onSuccess(null);
}
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import com.google.common.collect.Sets;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.inject.Inject;
import com.google.inject.Provider;
Expand Down Expand Up @@ -172,6 +173,10 @@ public ProjectExplorerPresenter(
});
}

public void addSelectionHandler(SelectionHandler<Node> handler) {
getTree().getSelectionModel().addSelectionHandler(handler);
}

@Inject
public void initFileWatchers() {
final String endpointId = "ws-agent";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,20 @@

import static com.google.common.base.Preconditions.checkState;
import static java.util.Collections.singletonList;
import static org.eclipse.che.ide.resource.Path.valueOf;
import static org.eclipse.che.ide.workspace.perspectives.project.ProjectPerspective.PROJECT_PERSPECTIVE_ID;

import com.google.common.annotations.Beta;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
import java.util.Map;
import javax.validation.constraints.NotNull;
import org.eclipse.che.ide.api.action.AbstractPerspectiveAction;
import org.eclipse.che.ide.api.action.ActionEvent;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.resources.Resource;
import org.eclipse.che.ide.resource.Path;
import org.eclipse.che.ide.resources.reveal.RevealResourceEvent;

/**
Expand All @@ -35,6 +38,8 @@
@Singleton
public class RevealResourceAction extends AbstractPerspectiveAction {

private static final String PATH = "path";

private final AppContext appContext;
private final EventBus eventBus;

Expand All @@ -57,10 +62,21 @@ public void updateInPerspective(@NotNull ActionEvent event) {
/** {@inheritDoc} */
@Override
public void actionPerformed(ActionEvent e) {
final Resource[] resources = appContext.getResources();
Map<String, String> params = e.getParameters();
String pathToReveal = params.get(PATH);

if (pathToReveal != null) {
Path path = valueOf(pathToReveal);

checkState(!path.isEmpty());

eventBus.fireEvent(new RevealResourceEvent(path));
} else {
final Resource[] resources = appContext.getResources();

checkState(resources != null && resources.length == 1);
checkState(resources != null && resources.length == 1);

eventBus.fireEvent(new RevealResourceEvent(resources[0]));
eventBus.fireEvent(new RevealResourceEvent(resources[0]));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,11 @@ public void onLoadChange(NodeDescriptor node, boolean loading) {
}

Element rootContainer = getNodeContainer(node);

if (rootContainer == null) {
return;
}

if (loading) {
rootContainer.addClassName(tree.getTreeStyles().styles().loading());
} else {
Expand Down

0 comments on commit 20d5966

Please sign in to comment.