package com.lightd.ideap.maven.navigation.actions;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.ide.actions.GotoActionBase;
import com.intellij.ide.util.gotoByName.ChooseByNamePopup;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.pom.Navigatable;
import com.lightd.ideap.maven.navigation.PomWrapper;
import org.jetbrains.idea.maven.utils.actions.MavenActionUtil;
public class GotoPomAction extends GotoActionBase {
@Override
protected void gotoActionPerformed(AnActionEvent e) {
FeatureUsageTracker.getInstance().triggerFeatureUsed("navigation.popup.file");
final Project project = e.getData(CommonDataKeys.PROJECT);
if (project != null) {
final GotoPomModel gotoPomModel = new GotoPomModel(project);
showNavigationPopup(e, gotoPomModel, new GotoPomActionCallback(project), null, false);
}
}
@Override
public void update(AnActionEvent e) {
super.update(e);
Presentation presentation = e.getPresentation();
presentation.setEnabled(MavenActionUtil.getMavenProject(e.getDataContext()) != null);
}
class GotoPomActionCallback extends GotoActionCallback<FileType> {
private final Project project;
GotoPomActionCallback(Project project) {
this.project = project;
}
@Override
public void elementChosen(final ChooseByNamePopup popup, final Object element) {
if (element == null) return;
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
if (!(element instanceof PomWrapper)) {
return;
}
PomWrapper wrapper = (PomWrapper) element;
if (wrapper.getVirtualFile() == null) return;
Navigatable n = new OpenFileDescriptor(project, wrapper.getVirtualFile(), popup.getLinePosition(),
popup.getColumnPosition()).setUseCurrentWindow(popup.isOpenInCurrentWindowRequested());
if (!n.canNavigate()) return;
n.navigate(true);
}
}, ModalityState.NON_MODAL);
}
}
}