8aa962aec68f9e148d6efd2d32c0503f91585a3b
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / artifacts / ArtifactProblemsHolderImpl.java
1 /*
2  * Copyright 2000-2009 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 com.intellij.openapi.roots.ui.configuration.artifacts;
17
18 import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ConfigurationErrorQuickFix;
19 import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureProblemType;
20 import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureProblemsHolder;
21 import com.intellij.packaging.artifacts.Artifact;
22 import com.intellij.packaging.elements.PackagingElement;
23 import com.intellij.packaging.impl.artifacts.PackagingElementPath;
24 import com.intellij.packaging.impl.ui.ArtifactProblemsHolderBase;
25 import com.intellij.packaging.ui.ArtifactEditor;
26 import com.intellij.packaging.ui.ArtifactProblemQuickFix;
27 import com.intellij.util.SmartList;
28 import org.jetbrains.annotations.NotNull;
29 import org.jetbrains.annotations.Nullable;
30
31 import java.util.List;
32
33 public class ArtifactProblemsHolderImpl extends ArtifactProblemsHolderBase {
34   private final ArtifactsStructureConfigurableContext myContext;
35   private final Artifact myOriginalArtifact;
36   private final ProjectStructureProblemsHolder myProblemsHolder;
37
38   public ArtifactProblemsHolderImpl(ArtifactsStructureConfigurableContext context,
39                                     Artifact originalArtifact,
40                                     ProjectStructureProblemsHolder problemsHolder) {
41     super(context);
42     myContext = context;
43     myOriginalArtifact = originalArtifact;
44     myProblemsHolder = problemsHolder;
45   }
46
47   @Override
48   public void registerError(@NotNull String message,
49                             @NotNull String problemTypeId,
50                             @Nullable List<PackagingElement<?>> pathToPlace,
51                             ArtifactProblemQuickFix @NotNull ... quickFixes) {
52     registerProblem(message, pathToPlace, ProjectStructureProblemType.error(problemTypeId), quickFixes);
53   }
54
55   @Override
56   public void registerWarning(@NotNull String message,
57                               @NotNull String problemTypeId, @Nullable List<PackagingElement<?>> pathToPlace,
58                               ArtifactProblemQuickFix @NotNull ... quickFixes) {
59     registerProblem(message, pathToPlace, ProjectStructureProblemType.warning(problemTypeId), quickFixes);
60   }
61
62   private void registerProblem(@NotNull String message, @Nullable List<PackagingElement<?>> pathToPlace,
63                                final ProjectStructureProblemType problemType, ArtifactProblemQuickFix @NotNull ... quickFixes) {
64     String parentPath;
65     PackagingElement<?> element;
66     if (pathToPlace != null && !pathToPlace.isEmpty()) {
67       parentPath = PackagingElementPath.createPath(pathToPlace.subList(1, pathToPlace.size()-1)).getPathString();
68       element = pathToPlace.get(pathToPlace.size() - 1);
69     }
70     else {
71       parentPath = null;
72       element = null;
73     }
74     final Artifact artifact = myContext.getArtifactModel().getArtifactByOriginal(myOriginalArtifact);
75     final PlaceInArtifact place = new PlaceInArtifact(artifact, myContext, parentPath, element);
76     myProblemsHolder.registerProblem(new ArtifactProblemDescription(message, problemType, pathToPlace, place, convertQuickFixes(quickFixes)));
77   }
78
79   private List<ConfigurationErrorQuickFix> convertQuickFixes(ArtifactProblemQuickFix[] quickFixes) {
80     final List<ConfigurationErrorQuickFix> result = new SmartList<>();
81     for (final ArtifactProblemQuickFix fix : quickFixes) {
82       result.add(new ConfigurationErrorQuickFix(fix.getActionName()) {
83         @Override
84         public void performFix() {
85           final ArtifactEditor editor = myContext.getOrCreateEditor(myOriginalArtifact);
86           fix.performFix(((ArtifactEditorEx)editor).getContext());
87         }
88       });
89     }
90     return result;
91   }
92 }