1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.atlassian.theplugin.idea.config;
17
18 import com.atlassian.theplugin.ConnectionWrapper;
19 import com.atlassian.theplugin.commons.ServerType;
20 import com.atlassian.theplugin.commons.bamboo.BambooServerFacade;
21 import com.atlassian.theplugin.commons.crucible.CrucibleServerFacade;
22 import com.atlassian.theplugin.commons.fisheye.FishEyeServerFacade;
23 import com.atlassian.theplugin.commons.remoteapi.ProductServerFacade;
24 import com.atlassian.theplugin.commons.remoteapi.ServerData;
25 import com.atlassian.theplugin.commons.util.MiscUtil;
26 import com.atlassian.theplugin.idea.TestConnectionProcessor;
27 import com.atlassian.theplugin.idea.TestConnectionTask;
28 import com.atlassian.theplugin.idea.config.serverconfig.ProductConnector;
29 import com.atlassian.theplugin.idea.ui.DialogWithDetails;
30 import com.atlassian.theplugin.jira.JIRAServerFacade;
31 import com.atlassian.theplugin.util.PluginUtil;
32 import com.intellij.openapi.progress.ProgressManager;
33 import com.intellij.openapi.project.Project;
34 import com.intellij.openapi.ui.Messages;
35 import com.intellij.openapi.ui.popup.JBPopupFactory;
36 import com.intellij.openapi.ui.popup.ListPopup;
37 import com.intellij.openapi.ui.popup.PopupStep;
38 import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
39 import org.jetbrains.annotations.NotNull;
40
41 import javax.swing.*;
42 import java.util.ArrayList;
43 import java.util.Collection;
44 import java.util.HashMap;
45 import java.util.List;
46 import java.util.Map;
47
48
49
50
51 public class TestDefaultCredentials {
52
53 public static class ServerDataExt {
54 public ServerDataExt(final ServerData serverData, final ServerType serverType) {
55 this.serverData = serverData;
56 this.serverType = serverType;
57 }
58
59 private final ServerData serverData;
60 private final ServerType serverType;
61
62 public ServerData getServerData() {
63 return serverData;
64 }
65
66 public ServerType getServerType() {
67 return serverType;
68 }
69 }
70
71 private final Project project;
72 private final JComponent parentComponent;
73 private final JIRAServerFacade jiraServerFacade;
74 private final CrucibleServerFacade crucibleServerFacade;
75 private final FishEyeServerFacade fishEyeServerFacade;
76 private final BambooServerFacade bambooServerFacade;
77 private Map<ServerData, String> errors = new HashMap<ServerData, String>();
78
79 public TestDefaultCredentials(final Project project, final JComponent parentComponent,
80 JIRAServerFacade jiraServerFacade, final CrucibleServerFacade crucibleServerFacade,
81 final FishEyeServerFacade fishEyeServerFacade, final BambooServerFacade bambooServerFacade) {
82
83 this.project = project;
84 this.parentComponent = parentComponent;
85 this.jiraServerFacade = jiraServerFacade;
86 this.crucibleServerFacade = crucibleServerFacade;
87 this.fishEyeServerFacade = fishEyeServerFacade;
88 this.bambooServerFacade = bambooServerFacade;
89 }
90
91
92 public void run(Collection<ServerDataExt> servers) {
93
94 if (servers != null && servers.size() > 0) {
95 for (ServerDataExt server : servers) {
96 switch (server.getServerType()) {
97
98 case BAMBOO_SERVER:
99 testGenericConnection(server.getServerData(), bambooServerFacade);
100 break;
101 case CRUCIBLE_SERVER:
102 testGenericConnection(server.getServerData(), crucibleServerFacade);
103 break;
104 case FISHEYE_SERVER:
105 testGenericConnection(server.getServerData(), fishEyeServerFacade);
106 break;
107 case JIRA_SERVER:
108 testGenericConnection(server.getServerData(), jiraServerFacade);
109 break;
110 default:
111 PluginUtil.getLogger().warn("Unknown host type " + server);
112 }
113 }
114
115 final ArrayList<ServerData> serverDatas = MiscUtil.buildArrayList();
116 for (ServerDataExt server : servers) {
117 serverDatas.add(server.getServerData());
118 }
119
120 final DefaultCredentialsServerList list = new DefaultCredentialsServerList("Default credentials tests result",
121 serverDatas);
122 ListPopup popup = JBPopupFactory.getInstance().createListPopup(list);
123
124 popup.showInCenterOf(parentComponent);
125 } else {
126 Messages.showInfoMessage(project, "None of servers configuration use default credentials", "Default credentials");
127 }
128 }
129
130
131 private boolean testGenericConnection(final ServerData serverData, final ProductServerFacade productServerFacade) {
132 TestConnectionTask testConnectionTask = new TestConnectionTask(project, new ProductConnector(productServerFacade),
133 serverData, new TestConnectionProcessor() {
134
135 public void setConnectionResult(final ConnectionWrapper.ConnectionState result) {
136 }
137
138 public void onSuccess() {
139 }
140
141 public void onError(final String errorMessage) {
142 errors.put(serverData, errorMessage);
143 }
144
145
146 }, "Testing connection : " + serverData.getName(), true, false, false);
147
148 testConnectionTask.setCancelText("Stop");
149 ProgressManager.getInstance().run(testConnectionTask);
150 return true;
151 }
152
153
154 private class DefaultCredentialsServerList extends BaseListPopupStep<ServerData> {
155
156
157 public DefaultCredentialsServerList(final String title, final List<ServerData> servers) {
158 super(title, servers);
159 }
160
161 @Override
162 public boolean isSelectable(final ServerData serverCfg) {
163 return errors.containsKey(serverCfg);
164 }
165
166 @NotNull
167 @Override
168 public String getTextFor(final ServerData serverCfg) {
169 String message = "<html>" + serverCfg.getName();
170
171 if (errors.containsKey(serverCfg)) {
172 message += "<font color='red'> <i>failed</i></font> ";
173 } else {
174 message += "<font color='green'> <b>ok</b></font>";
175 }
176 return message + "</html>";
177 }
178
179 @Override
180 public PopupStep<ServerData> onChosen(final ServerData serverCfg, final boolean b) {
181 if (errors.containsKey(serverCfg)) {
182 SwingUtilities.invokeLater(new Runnable() {
183
184 public void run() {
185 DialogWithDetails.showExceptionDialog(project, "Connection to " + serverCfg.getName() + " failed",
186 errors.get(serverCfg));
187 }
188 });
189
190 }
191 return null;
192
193 }
194 }
195 }