gradle: add CLI-style task execution action
[idea/community.git] / plugins / maven / src / main / java / org / jetbrains / idea / maven / utils / actions / MavenActionUtil.java
1 /*
2  * Copyright 2000-2010 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.jetbrains.idea.maven.utils.actions;
17
18 import com.intellij.openapi.actionSystem.CommonDataKeys;
19 import com.intellij.openapi.actionSystem.DataContext;
20 import com.intellij.openapi.externalSystem.action.ExternalSystemActionUtil;
21 import com.intellij.openapi.module.Module;
22 import com.intellij.openapi.project.Project;
23 import com.intellij.openapi.roots.ProjectFileIndex;
24 import com.intellij.openapi.roots.ProjectRootManager;
25 import com.intellij.openapi.vfs.VirtualFile;
26 import org.jetbrains.annotations.Nullable;
27 import org.jetbrains.idea.maven.model.MavenConstants;
28 import org.jetbrains.idea.maven.project.MavenProject;
29 import org.jetbrains.idea.maven.project.MavenProjectsManager;
30 import org.jetbrains.idea.maven.utils.MavenUtil;
31
32 import java.util.*;
33
34 public class MavenActionUtil {
35   private MavenActionUtil() {
36   }
37
38   public static boolean hasProject(DataContext context) {
39     return CommonDataKeys.PROJECT.getData(context) != null;
40   }
41
42   @Nullable
43   public static Project getProject(DataContext context) {
44     return CommonDataKeys.PROJECT.getData(context);
45   }
46
47   public static boolean isMavenizedProject(DataContext context) {
48     Project project = CommonDataKeys.PROJECT.getData(context);
49     return project != null && MavenProjectsManager.getInstance(project).isMavenizedProject();
50   }
51
52   @Nullable
53   public static MavenProject getMavenProject(DataContext context) {
54     MavenProject result;
55     final MavenProjectsManager manager = getProjectsManager(context);
56     if(manager == null) return null;
57
58     final VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(context);
59     if (file != null) {
60       result = manager.findProject(file);
61       if (result != null) return result;
62     }
63
64     Module module = ExternalSystemActionUtil.getModule(context);
65     if (module != null) {
66       result = manager.findProject(module);
67       if (result != null) return result;
68     }
69
70     return null;
71   }
72
73   @Nullable
74   public static MavenProjectsManager getProjectsManager(DataContext context) {
75     final Project project = getProject(context);
76     if(project == null) return null;
77     return MavenProjectsManager.getInstance(project);
78   }
79
80   public static boolean isMavenProjectFile(VirtualFile file) {
81     return file != null && !file.isDirectory()
82            && MavenConstants.POM_XML.equals(file.getName())
83            && file.isInLocalFileSystem();
84   }
85
86   public static List<MavenProject> getMavenProjects(DataContext context) {
87     Project project = CommonDataKeys.PROJECT.getData(context);
88     if (project == null) return Collections.emptyList();
89
90     VirtualFile[] virtualFiles = CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(context);
91     if (virtualFiles == null || virtualFiles.length == 0) return Collections.emptyList();
92
93     MavenProjectsManager projectsManager = MavenProjectsManager.getInstance(project);
94     if (!projectsManager.isMavenizedProject()) return Collections.emptyList();
95
96     Set<MavenProject> res = new LinkedHashSet<MavenProject>();
97
98     ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
99
100     for (VirtualFile file : virtualFiles) {
101       MavenProject mavenProject;
102
103       if (file.isDirectory()) {
104         VirtualFile contentRoot = fileIndex.getContentRootForFile(file);
105         if (!file.equals(contentRoot)) return Collections.emptyList();
106
107         Module module = fileIndex.getModuleForFile(file);
108         if (module == null || !projectsManager.isMavenizedModule(module)) return Collections.emptyList();
109
110         mavenProject = projectsManager.findProject(module);
111       }
112       else {
113         mavenProject = projectsManager.findProject(file);
114       }
115
116       if (mavenProject == null) return Collections.emptyList();
117
118       res.add(mavenProject);
119     }
120
121     return new ArrayList<MavenProject>(res);
122   }
123
124   public static List<VirtualFile> getMavenProjectsFiles(DataContext context) {
125     return MavenUtil.collectFiles(getMavenProjects(context));
126   }
127 }