package com.lightd.ideap.maven.actions; import com.intellij.ide.actions.QuickSwitchSchemeAction; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.utils.actions.MavenActionUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; public abstract class MvnQuickPopupAction extends QuickSwitchSchemeAction implements DumbAware { protected MvnQuickPopupAction() { super(); super.myActionPlace = "MavenBuildGroup"; } @Override protected boolean isEnabled() { return true; } @Override protected String getPopupTitle(AnActionEvent e) { return getPopupTitle(getModuleName(e.getDataContext())); } @Override protected void fillActions(Project project, @NotNull DefaultActionGroup toGroup, @NotNull DataContext context) { if (project == null || !MavenActionUtil.hasProject(context) || MvnModuleContextAction.getProject(context) == null) { return; } buildActions(toGroup, MvnModuleContextAction.getProject(context)); } @Override protected JBPopupFactory.ActionSelectionAid getAidMethod() { return JBPopupFactory.ActionSelectionAid.ALPHA_NUMBERING; } protected abstract String getPopupTitle(String moduleName); protected abstract void buildActions(final DefaultActionGroup toGroup, final MavenProject mavenProject); protected final void addActionGroup(final DefaultActionGroup toGroup, String groupName, AnAction... actions) { addActionGroup(toGroup, groupName, Arrays.asList(actions)); } protected final void addActionGroup(final DefaultActionGroup toGroup, String groupName, Collection<AnAction> actions) { addSeparator(toGroup, null); if (!StringUtil.isEmptyOrSpaces(groupName)) addSeparator(toGroup, groupName); toGroup.addAll(actions); } protected final AnAction addPopupGroup(String groupName, AnAction... actions) { DefaultActionGroup actionGroup = new DefaultActionGroup(groupName, true); actionGroup.addAll(actions); return actionGroup; } protected final void addActionGroup(final DefaultActionGroup toGroup, String groupName, String... actionIds) { List<AnAction> actions = new ArrayList<AnAction>(actionIds.length); for (String actionId : actionIds) { final AnAction action = ActionManager.getInstance().getAction(actionId); if (action != null) actions.add(action); } addActionGroup(toGroup, groupName, actions.toArray(new AnAction[actions.size()])); } protected void addSeparator(final DefaultActionGroup toGroup, final String title) { final Separator separator = title == null ? new Separator() : new Separator(title); toGroup.add(separator); } private String getModuleName(DataContext context) { MavenProject mavenProject = MvnModuleContextAction.getProject(context); String moduleName = ""; if (mavenProject != null) { moduleName = mavenProject.getMavenId().getArtifactId(); if (moduleName != null && moduleName.length() > 20) moduleName = moduleName.substring(0, 17) + "..."; } if (StringUtil.isEmptyOrSpaces(moduleName)) moduleName = "..."; return moduleName; } }