35dc36354d77c489ce0000fb6e794f1e86cb6a97
[idea/community.git] / platform / platform-api / src / com / intellij / util / net / IOExceptionDialog.java
1 /*
2  * Copyright 2000-2016 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.util.net;
17
18 import com.intellij.CommonBundle;
19 import com.intellij.openapi.diagnostic.Logger;
20 import com.intellij.openapi.project.Project;
21 import com.intellij.openapi.ui.DialogWrapper;
22 import com.intellij.openapi.util.Ref;
23 import com.intellij.ui.GuiUtils;
24 import com.intellij.util.ObjectUtils;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27
28 import javax.swing.*;
29 import java.awt.event.ActionEvent;
30 import java.lang.reflect.InvocationTargetException;
31
32 public class IOExceptionDialog extends DialogWrapper {
33   private static final Logger LOG = Logger.getInstance(IOExceptionDialog.class);
34   private final JTextArea myErrorLabel;
35
36   public IOExceptionDialog(String title, String errorText)  {
37     super((Project)null, true);
38     setTitle(title);
39     setOKButtonText(CommonBundle.message("dialog.ioexception.tryagain"));
40
41     myErrorLabel = new JTextArea();
42     myErrorLabel.setEditable(false);
43     myErrorLabel.setText(errorText);
44     myErrorLabel.setLineWrap(true);
45     myErrorLabel.setWrapStyleWord(true);
46     myErrorLabel.setFont(UIManager.getFont("Label.font"));
47     myErrorLabel.setBackground(UIManager.getColor("Label.background"));
48     myErrorLabel.setForeground(UIManager.getColor("Label.foreground"));
49
50     init();
51   }
52
53   @Nullable
54   @Override
55   protected JComponent createCenterPanel() {
56     return myErrorLabel;
57   }
58
59   @NotNull
60   @Override
61   protected Action[] createLeftSideActions() {
62     return new Action[] {
63       new AbstractAction(CommonBundle.message("dialog.ioexception.proxy")) {
64         @Override
65         public void actionPerformed(@NotNull ActionEvent e) {
66           HttpConfigurable.editConfigurable(ObjectUtils.tryCast(e.getSource(), JComponent.class));
67         }
68       }
69     };
70   }
71
72   /**
73    * Show the dialog
74    * @return <code>true</code> if "Try Again" button pressed and <code>false</code> if "Cancel" button pressed
75    */
76   public static boolean showErrorDialog(final String title, final String text) {
77     final Ref<Boolean> ok = Ref.create(false);
78     try {
79       GuiUtils.runOrInvokeAndWait(() -> {
80         IOExceptionDialog dialog = new IOExceptionDialog(title, text);
81         dialog.show();
82         ok.set(dialog.isOK());
83       });
84     }
85     catch (InterruptedException | InvocationTargetException e) {
86       LOG.info(e);
87     }
88
89     return ok.get();
90   }
91 }