package com.lightd.ideap.maven.actions;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.project.MavenProject;
import org.jetbrains.idea.maven.utils.MavenDataKeys;
import java.util.Arrays;
import java.util.Collection;
public class MvnDependencyAction extends MvnDiagramAction {
private static final String MavenExtPluginId = "org.jetbrains.idea.maven.ext";
private static final Collection<String> moduleKeys = Arrays.asList(
CommonDataKeys.PROJECT.getName(),
LangDataKeys.MODULE_CONTEXT.getName());
private static final Collection<String> pomKeys = Arrays.asList(
PlatformDataKeys.CONTEXT_COMPONENT.getName(),
CommonDataKeys.PROJECT.getName(),
MavenDataKeys.MAVEN_PROJECTS_TREE.getName(),
LangDataKeys.FILE_EDITOR.getName(),
CommonDataKeys.VIRTUAL_FILE.getName(),
CommonDataKeys.PSI_FILE.getName());
@Override
protected void wrap(@NotNull Project project, MockElement mockElement, AnActionEvent e) {
MavenProject mavenProject = MvnModuleContextAction.getProject(e.getDataContext());
if (!initPomElement(project, e.getDataContext(), mockElement)) {
Object module = ModuleUtilCore.findModuleForFile(mavenProject.getFile(), project);
mockElement.mock(LangDataKeys.MODULE_CONTEXT.getName(), module, moduleKeys);
}
}
private boolean initPomElement(Project project, DataContext context, MockElement mockElement) {
if (!checkMavenExtPlugin()) return false;
if (MavenDataKeys.MAVEN_PROJECTS_TREE.getData(context) == null) {
PsiFile psiFile = DataKeys.PSI_FILE.getData(context);
if (psiFile == null || !("pom.xml".equalsIgnoreCase(psiFile.getName()))) return false;
Object editor = DataKeys.FILE_EDITOR.getData(context);
if (editor == null) {
FileEditorManager editorManager = FileEditorManager.getInstance(project);
if (editorManager.getSelectedEditors().length > 0) {
editor = editorManager.getSelectedEditors()[0];
} else if (editorManager.getSelectedEditors().length > 0)
editor = editorManager.getAllEditors()[0];
}
mockElement.mock(LangDataKeys.FILE_EDITOR.getName(), editor, pomKeys);
} else
mockElement.mock(LangDataKeys.FILE_EDITOR.getName(), null, pomKeys);
return true;
}
private boolean checkMavenExtPlugin() {
IdeaPluginDescriptor descriptor = PluginManager.getPlugin(PluginId.getId(MavenExtPluginId));
return descriptor != null && descriptor.isEnabled();
}
}