Maven: action names
[idea/community.git] / plugins / maven / src / main / java / org / jetbrains / idea / maven / dom / generate / GenerateDependencyUtil.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.dom.generate;
17
18 import com.intellij.codeInsight.generation.ClassMember;
19 import com.intellij.codeInsight.generation.MemberChooserObject;
20 import com.intellij.codeInsight.generation.MemberChooserObjectBase;
21 import com.intellij.codeInsight.generation.PsiElementMemberChooserObject;
22 import com.intellij.ide.util.MemberChooser;
23 import com.intellij.openapi.project.Project;
24 import com.intellij.openapi.util.text.StringUtil;
25 import com.intellij.psi.PsiFile;
26 import com.intellij.util.Function;
27 import com.intellij.util.containers.ContainerUtil;
28 import org.jetbrains.annotations.NotNull;
29 import org.jetbrains.annotations.Nullable;
30 import org.jetbrains.idea.maven.dom.MavenDomBundle;
31 import org.jetbrains.idea.maven.dom.model.MavenDomDependency;
32 import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel;
33 import org.jetbrains.idea.maven.utils.MavenIcons;
34
35 import java.util.ArrayList;
36 import java.util.Collection;
37 import java.util.List;
38
39 /**
40  * @author Serega.Vasiliev
41  */
42 public class GenerateDependencyUtil {
43   private GenerateDependencyUtil() {
44   }
45
46   @NotNull
47   public static List<MavenDomDependency> chooseDependencies(Collection<MavenDomDependency> candidates, final Project project) {
48     List<MavenDomDependency> dependencies = new ArrayList<MavenDomDependency>();
49
50     MavenDomProjectModelMember[] memberCandidates =
51       ContainerUtil.map2Array(candidates, MavenDomProjectModelMember.class, new Function<MavenDomDependency, MavenDomProjectModelMember>() {
52         public MavenDomProjectModelMember fun(MavenDomDependency dependency) {
53           return new MavenDomProjectModelMember(dependency);
54         }
55       });
56     MemberChooser<MavenDomProjectModelMember> chooser =
57       new MemberChooser<MavenDomProjectModelMember>(memberCandidates, true, true, project) {
58         protected ShowContainersAction getShowContainersAction() {
59           return new ShowContainersAction(MavenDomBundle.message("chooser.show.project.files"), MavenIcons.MAVEN_PROJECT_ICON);
60         }
61
62         protected String getAllContainersNodeName() {
63           return MavenDomBundle.message("all.dependencies");
64         }
65       };
66
67     chooser.setTitle(MavenDomBundle.message("dependencies.chooser.title"));
68     chooser.setCopyJavadocVisible(false);
69     chooser.show();
70
71     if (chooser.getExitCode() == MemberChooser.OK_EXIT_CODE) {
72       final MavenDomProjectModelMember[] members = chooser.getSelectedElements(new MavenDomProjectModelMember[0]);
73       if (members != null) {
74         dependencies.addAll(ContainerUtil.mapNotNull(members, new Function<MavenDomProjectModelMember, MavenDomDependency>() {
75           public MavenDomDependency fun(MavenDomProjectModelMember mavenDomProjectModelMember) {
76             return mavenDomProjectModelMember.getDependency();
77           }
78         }));
79       }
80     }
81
82     return dependencies;
83   }
84
85   private static class MavenDomProjectModelMember extends MemberChooserObjectBase implements ClassMember {
86     private final MavenDomDependency myDependency;
87
88     public MavenDomProjectModelMember(final MavenDomDependency dependency) {
89       super(dependency.toString(), MavenIcons.DEPENDENCY_ICON);
90       myDependency = dependency;
91     }
92
93     @Override
94     public String getText() {
95       StringBuffer sb = new StringBuffer();
96
97       append(sb, myDependency.getGroupId().getStringValue());
98       append(sb, myDependency.getArtifactId().getStringValue());
99       append(sb, myDependency.getVersion().getStringValue());
100
101       return sb.toString();
102     }
103
104     private static void append(StringBuffer sb, String str) {
105       if (!StringUtil.isEmptyOrSpaces(str)) {
106         if (sb.length() > 0) sb.append(": ");
107         sb.append(str);
108       }
109     }
110
111     public MemberChooserObject getParentNodeDelegate() {
112       MavenDomDependency dependency = getDependency();
113
114       return new MavenDomProjectModelFileMemberChooserObjectBase(dependency.getXmlTag().getContainingFile(),
115                                                                  getProjectName(dependency));
116     }
117
118     @Nullable
119     private static String getProjectName(@Nullable MavenDomDependency dependency) {
120       if (dependency != null) {
121         MavenDomProjectModel model = dependency.getParentOfType(MavenDomProjectModel.class, false);
122         if (model != null) {
123           return model.getName().getStringValue();
124         }
125       }
126       return null;
127     }
128
129     public MavenDomDependency getDependency() {
130       return myDependency;
131     }
132
133     private static class MavenDomProjectModelFileMemberChooserObjectBase extends PsiElementMemberChooserObject {
134
135       public MavenDomProjectModelFileMemberChooserObjectBase(@NotNull final PsiFile psiFile, @Nullable String projectName) {
136         super(psiFile, StringUtil.isEmptyOrSpaces(projectName) ? psiFile.getName() : projectName, MavenIcons.MAVEN_PROJECT_ICON);
137       }
138     }
139   }
140 }