migrated to artifacts
[fedora-idea.git] / plugins / maven / src / main / java / org / jetbrains / idea / maven / importing / ArtifactExternalDependenciesImporter.java
blob82a88f0f0632eba040849e07bb5cf584f0f44543
1 package org.jetbrains.idea.maven.importing;
3 import com.intellij.openapi.roots.ui.configuration.artifacts.ManifestFilesInfo;
4 import com.intellij.openapi.util.Pair;
5 import com.intellij.packaging.artifacts.Artifact;
6 import com.intellij.packaging.artifacts.ModifiableArtifactModel;
7 import com.intellij.packaging.elements.CompositePackagingElement;
8 import com.intellij.packaging.elements.PackagingElement;
9 import com.intellij.packaging.elements.PackagingElementResolvingContext;
10 import com.intellij.packaging.impl.artifacts.ArtifactUtil;
11 import com.intellij.packaging.impl.artifacts.PackagingElementProcessor;
12 import com.intellij.packaging.impl.elements.ArtifactElementType;
13 import com.intellij.packaging.impl.elements.ArtifactPackagingElement;
14 import com.intellij.packaging.ui.ManifestFileConfiguration;
15 import org.jetbrains.annotations.NotNull;
17 import java.util.ArrayList;
18 import java.util.HashMap;
19 import java.util.List;
20 import java.util.Map;
22 /**
23 * @author nik
25 public class ArtifactExternalDependenciesImporter {
26 private ManifestFilesInfo myManifestFiles = new ManifestFilesInfo();
27 private Map<Artifact, List<PackagingElement<?>>> myExternalDependencies = new HashMap<Artifact, List<PackagingElement<?>>>();
29 public ManifestFileConfiguration getManifestFile(@NotNull Artifact artifact,
30 @NotNull PackagingElementResolvingContext context) {
31 return myManifestFiles.getManifestFile(artifact.getRootElement(), artifact.getArtifactType(), context);
34 public List<PackagingElement<?>> getExternalDependenciesList(@NotNull Artifact artifact) {
35 List<PackagingElement<?>> elements = myExternalDependencies.get(artifact);
36 if (elements == null) {
37 elements = new ArrayList<PackagingElement<?>>();
38 myExternalDependencies.put(artifact, elements);
40 return elements;
43 public void applyChanges(ModifiableArtifactModel artifactModel, final PackagingElementResolvingContext context) {
44 myManifestFiles.saveManifestFiles();
45 final List<Pair<? extends CompositePackagingElement<?>, List<PackagingElement<?>>>> elementsToInclude = new ArrayList<Pair<? extends CompositePackagingElement<?>, List<PackagingElement<?>>>>();
46 for (Artifact artifact : artifactModel.getArtifacts()) {
47 ArtifactUtil.processPackagingElements(artifact, ArtifactElementType.ARTIFACT_ELEMENT_TYPE, new PackagingElementProcessor<ArtifactPackagingElement>() {
48 @Override
49 public boolean process(@NotNull List<CompositePackagingElement<?>> parents,
50 @NotNull ArtifactPackagingElement artifactPackagingElement) {
51 final Artifact included = artifactPackagingElement.findArtifact(context);
52 if (!parents.isEmpty() && included != null) {
53 final CompositePackagingElement<?> parent = parents.get(0);
54 final List<PackagingElement<?>> elements = myExternalDependencies.get(included);
55 if (elements != null) {
56 elementsToInclude.add(Pair.create(parent, elements));
59 return true;
61 }, context, false);
64 for (Pair<? extends CompositePackagingElement<?>, List<PackagingElement<?>>> pair : elementsToInclude) {
65 pair.getFirst().addOrFindChildren(pair.getSecond());