View Javadoc

1   /**
2    * Copyright (C) 2008 Atlassian
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.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   * User: pmaruszak
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 //		popup.showCenteredInCurrentWindow(project); that can cause NPE inside IDEA OpenAPI
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'>&nbsp<i>failed</i></font> ";
173 			} else {
174 				message += "<font color='green'>&nbsp<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 }