package net.bitpot.railways.actions;
import com.intellij.ide.actions.GotoActionBase;
import com.intellij.ide.util.gotoByName.ChooseByNameFilter;
import com.intellij.ide.util.gotoByName.ChooseByNamePopup;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
import net.bitpot.railways.navigation.ChooseByRouteNameFilter;
import net.bitpot.railways.navigation.GotoRouteFilterConfiguration;
import net.bitpot.railways.navigation.GotoRouteMethodModel;
import net.bitpot.railways.models.requestMethods.RequestMethod;
import net.bitpot.railways.models.Route;
import net.bitpot.railways.utils.RailwaysUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Action opens popup with list of all routes.
*/
public class GotoRouteMethodAction extends GotoActionBase {
@SuppressWarnings("unused")
private static Logger log = Logger.getInstance(GotoRouteMethodAction.class.getName());
@Override
protected void gotoActionPerformed(AnActionEvent e) {
final Project project = e.getData(PlatformDataKeys.PROJECT);
if (project == null)
return;
final GotoRouteMethodModel model = new GotoRouteMethodModel(project);
PsiDocumentManager.getInstance(project).commitAllDocuments();
showNavigationPopup(e, model, new GotoActionCallback<RequestMethod>() {
@Nullable
@Override
protected ChooseByNameFilter<RequestMethod> createFilter(@NotNull ChooseByNamePopup popup) {
return new ChooseByRouteNameFilter(popup, model,
GotoRouteFilterConfiguration.getInstance(project), project);
}
@Override
public void elementChosen(ChooseByNamePopup popup, Object element) {
if (element instanceof Route)
((Route) element).navigate(true);
}
});
}
@Override
public void update(@NotNull AnActionEvent event) {
Project project = event.getProject();
if (project == null)
return;
event.getPresentation().setEnabled(RailwaysUtils.hasRailsModules(project));
}
}