2 * Copyright 2000-2010 JetBrains s.r.o.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.jetbrains.idea.maven.dom.generate;
18 import com.intellij.openapi.editor.Editor;
19 import com.intellij.openapi.util.text.StringUtil;
20 import com.intellij.util.Processor;
21 import com.intellij.util.containers.hash.HashSet;
22 import com.intellij.util.xml.ui.actions.generate.GenerateDomElementAction;
23 import org.jetbrains.annotations.NotNull;
24 import org.jetbrains.idea.maven.dom.MavenDomBundle;
25 import org.jetbrains.idea.maven.dom.MavenDomProjectProcessorUtils;
26 import org.jetbrains.idea.maven.dom.model.MavenDomDependencies;
27 import org.jetbrains.idea.maven.dom.model.MavenDomDependency;
28 import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel;
29 import org.jetbrains.idea.maven.project.MavenId;
30 import org.jetbrains.idea.maven.project.MavenProjectsManager;
31 import org.jetbrains.idea.maven.utils.MavenIcons;
33 import java.util.List;
36 public class GenerateAddManagedDependencyAction extends GenerateDomElementAction {
37 public GenerateAddManagedDependencyAction() {
38 super(new MavenOverridingDependencyGenerateProvider(), MavenIcons.DEPENDENCY_ICON);
42 protected boolean startInWriteAction() {
46 private static class MavenOverridingDependencyGenerateProvider extends MavenGenerateProvider<MavenDomDependency> {
47 public MavenOverridingDependencyGenerateProvider() {
48 super(MavenDomBundle.message("generate.managed.dependency"), MavenDomDependency.class);
52 protected MavenDomDependency doGenerate(MavenDomProjectModel mavenModel, Editor editor) {
53 Set<MavenDomDependency> managingDependencies = collectManagingDependencies(mavenModel);
55 List<MavenDomDependency> dependenciesToOverride = GenerateDependencyUtil.chooseDependencies(managingDependencies, mavenModel.getManager().getProject());
57 for (MavenDomDependency parentDependency : dependenciesToOverride) {
58 String groupId = parentDependency.getGroupId().getStringValue();
59 String artifactId = parentDependency.getArtifactId().getStringValue();
61 if (!StringUtil.isEmptyOrSpaces(groupId) && !StringUtil.isEmptyOrSpaces(artifactId)) {
62 MavenId id = new MavenId(groupId, artifactId, parentDependency.getVersion().getStringValue());
64 MavenProjectsManager manager = MavenProjectsManager.getInstance(editor.getProject());
66 MavenDomDependency dependency = manager.addOverridenDependency(manager.findProject(mavenModel.getModule()), id);
68 dependency.getVersion().undefine();
78 public static Set<MavenDomDependency> collectManagingDependencies(@NotNull MavenDomProjectModel model) {
79 final Set<MavenDomDependency> dependencies = new HashSet<MavenDomDependency>();
81 final List<MavenDomDependency> existingDependencies = model.getDependencies().getDependencies();
83 Processor<MavenDomDependencies> collectProcessor = new Processor<MavenDomDependencies>() {
84 public boolean process(MavenDomDependencies mavenDomDependencies) {
85 for (MavenDomDependency dependency : mavenDomDependencies.getDependencies()) {
86 String groupId = dependency.getGroupId().getStringValue();
87 String artifactId = dependency.getArtifactId().getStringValue();
88 if (StringUtil.isEmptyOrSpaces(groupId) || StringUtil.isEmptyOrSpaces(artifactId)) continue;
90 if (!isDependencyExist(groupId, artifactId, existingDependencies)) {
91 dependencies.add(dependency);
98 MavenDomProjectProcessorUtils.processDependenciesInDependencyManagement(model, collectProcessor, model.getManager().getProject());
103 private static boolean isDependencyExist(String groupId, String artifactId, List<MavenDomDependency> existingDependencies) {
104 for (MavenDomDependency existingDependency : existingDependencies) {
105 if(groupId.equals(existingDependency.getGroupId().getStringValue()) || artifactId.equals(existingDependency.getArtifactId().getStringValue())) {