cleanup: remove useless '@author nik' from javadoc comments
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / artifacts / ArtifactErrorPanel.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.roots.ui.configuration.artifacts;
3
4 import com.intellij.icons.AllIcons;
5 import com.intellij.ide.IdeBundle;
6 import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ConfigurationErrorQuickFix;
7 import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureProblemType;
8 import com.intellij.openapi.ui.popup.JBPopupFactory;
9 import com.intellij.openapi.ui.popup.PopupStep;
10 import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
11 import com.intellij.util.containers.ContainerUtil;
12 import com.intellij.util.ui.UIUtil;
13 import com.intellij.util.ui.update.Activatable;
14 import com.intellij.util.ui.update.UiNotifyConnector;
15 import org.jetbrains.annotations.NotNull;
16
17 import javax.swing.*;
18 import java.awt.*;
19 import java.awt.event.ActionEvent;
20 import java.awt.event.ActionListener;
21 import java.util.List;
22
23 public final class ArtifactErrorPanel {
24   private final JPanel myMainPanel;
25   private final JButton myFixButton;
26   private final JLabel myErrorLabel;
27   private List<? extends ConfigurationErrorQuickFix> myCurrentQuickFixes;
28   private String myErrorText;
29
30   public ArtifactErrorPanel(final ArtifactEditorImpl artifactEditor) {
31     myMainPanel = new JPanel(new BorderLayout());
32     myErrorLabel = new JLabel();
33     myMainPanel.add(myErrorLabel, BorderLayout.CENTER);
34     myFixButton = new JButton();
35     myMainPanel.add(myFixButton, BorderLayout.EAST);
36     new UiNotifyConnector(myMainPanel, new Activatable() {
37       @Override
38       public void showNotify() {
39         if (myErrorText != null) {
40           myErrorLabel.setText(myErrorText);
41           myErrorText = null;
42         }
43       }
44     });
45     myFixButton.addActionListener(new ActionListener() {
46       @Override
47       public void actionPerformed(ActionEvent e) {
48         if (!myCurrentQuickFixes.isEmpty()) {
49           if (myCurrentQuickFixes.size() == 1) {
50             performFix(ContainerUtil.getFirstItem(myCurrentQuickFixes, null), artifactEditor);
51           }
52           else {
53             JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep<ConfigurationErrorQuickFix>(null, myCurrentQuickFixes) {
54               @NotNull
55               @Override
56               public String getTextFor(ConfigurationErrorQuickFix value) {
57                 return value.getActionName();
58               }
59
60               @Override
61               public PopupStep onChosen(ConfigurationErrorQuickFix selectedValue, boolean finalChoice) {
62                 performFix(selectedValue, artifactEditor);
63                 return FINAL_CHOICE;
64               }
65             }).showUnderneathOf(myFixButton);
66           }
67         }
68       }
69     });
70     clearError();
71   }
72
73   private static void performFix(ConfigurationErrorQuickFix quickFix, ArtifactEditorImpl artifactEditor) {
74     quickFix.performFix();
75     artifactEditor.queueValidation();
76   }
77
78   public void showError(@NotNull String message, @NotNull ProjectStructureProblemType.Severity severity,
79                         @NotNull List<? extends ConfigurationErrorQuickFix> quickFixes) {
80     myErrorLabel.setVisible(true);
81     myErrorLabel.setIcon(severity == ProjectStructureProblemType.Severity.ERROR ? AllIcons.General.Error :
82                          severity == ProjectStructureProblemType.Severity.WARNING ? AllIcons.General.Warning : AllIcons.General.Information);
83     final String errorText = UIUtil.toHtml(message);
84     if (myErrorLabel.isShowing()) {
85       myErrorLabel.setText(errorText);
86     }
87     myErrorText = errorText;
88     myMainPanel.setVisible(true);
89     myCurrentQuickFixes = quickFixes;
90     myFixButton.setVisible(!quickFixes.isEmpty());
91     if (!quickFixes.isEmpty()) {
92       myFixButton.setText(quickFixes.size() == 1 ? ContainerUtil.getFirstItem(quickFixes, null).getActionName() : IdeBundle.message("button.fix"));
93     }
94   }
95
96   public void clearError() {
97     myErrorText = null;
98     myMainPanel.setVisible(false);
99     myErrorLabel.setVisible(false);
100     myFixButton.setVisible(false);
101   }
102
103   public JComponent getMainPanel() {
104     return myMainPanel;
105   }
106 }