[platform-api] NlsMessages: better JavaDoc; formatNarrowAndList
[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.Nls;
29 import org.jetbrains.annotations.NotNull;
30 import org.jetbrains.annotations.Nullable;
31
32 import java.util.List;
33
34 public class ArtifactProblemsHolderImpl extends ArtifactProblemsHolderBase {
35   private final ArtifactsStructureConfigurableContext myContext;
36   private final Artifact myOriginalArtifact;
37   private final ProjectStructureProblemsHolder myProblemsHolder;
38
39   public ArtifactProblemsHolderImpl(ArtifactsStructureConfigurableContext context,
40                                     Artifact originalArtifact,
41                                     ProjectStructureProblemsHolder problemsHolder) {
42     super(context);
43     myContext = context;
44     myOriginalArtifact = originalArtifact;
45     myProblemsHolder = problemsHolder;
46   }
47
48   @Override
49   public void registerError(@NotNull @Nls(capitalization = Nls.Capitalization.Sentence) String message,
50                             @NotNull String problemTypeId,
51                             @Nullable List<PackagingElement<?>> pathToPlace,
52                             ArtifactProblemQuickFix @NotNull ... quickFixes) {
53     registerProblem(message, pathToPlace, ProjectStructureProblemType.error(problemTypeId), quickFixes);
54   }
55
56   @Override
57   public void registerWarning(@NotNull @Nls(capitalization = Nls.Capitalization.Sentence) String message,
58                               @NotNull String problemTypeId, @Nullable List<PackagingElement<?>> pathToPlace,
59                               ArtifactProblemQuickFix @NotNull ... quickFixes) {
60     registerProblem(message, pathToPlace, ProjectStructureProblemType.warning(problemTypeId), quickFixes);
61   }
62
63   private void registerProblem(@NotNull @Nls(capitalization = Nls.Capitalization.Sentence) String message, @Nullable List<PackagingElement<?>> pathToPlace,
64                                final ProjectStructureProblemType problemType, ArtifactProblemQuickFix @NotNull ... quickFixes) {
65     String parentPath;
66     PackagingElement<?> element;
67     if (pathToPlace != null && !pathToPlace.isEmpty()) {
68       parentPath = PackagingElementPath.createPath(pathToPlace.subList(1, pathToPlace.size()-1)).getPathString();
69       element = pathToPlace.get(pathToPlace.size() - 1);
70     }
71     else {
72       parentPath = null;
73       element = null;
74     }
75     final Artifact artifact = myContext.getArtifactModel().getArtifactByOriginal(myOriginalArtifact);
76     final PlaceInArtifact place = new PlaceInArtifact(artifact, myContext, parentPath, element);
77     myProblemsHolder.registerProblem(new ArtifactProblemDescription(message, problemType, pathToPlace, place, convertQuickFixes(quickFixes)));
78   }
79
80   private List<ConfigurationErrorQuickFix> convertQuickFixes(ArtifactProblemQuickFix[] quickFixes) {
81     final List<ConfigurationErrorQuickFix> result = new SmartList<>();
82     for (final ArtifactProblemQuickFix fix : quickFixes) {
83       result.add(new ConfigurationErrorQuickFix(fix.getActionName()) {
84         @Override
85         public void performFix() {
86           final ArtifactEditor editor = myContext.getOrCreateEditor(myOriginalArtifact);
87           fix.performFix(((ArtifactEditorEx)editor).getContext());
88         }
89       });
90     }
91     return result;
92   }
93 }