in src/org/jetbrains/tfsIntegration/config/TfsServerConnectionHelper.java [142:271]
public static AddServerResult addServer(final JComponent parentComponent) {
TfsRequestManager.Request<Trinity<URI, ServerDescriptor, Credentials>> connectRequest =
new TfsRequestManager.Request<Trinity<URI, ServerDescriptor, Credentials>>(null) {
@Override
public Trinity<URI, ServerDescriptor, Credentials> execute(Credentials credentials,
URI serverUri,
@Nullable ProgressIndicator pi)
throws Exception {
ServerDescriptor serverDescriptor = connect(serverUri, credentials, false, pi);
serverUri = serverDescriptor.uri;
// check duplicate instance id for TFS 2005/2008, TFS 2010 will be checked later when project collection is selected
if (serverDescriptor instanceof Tfs200xServerDescriptor &&
TFSConfigurationManager.getInstance()
.serverKnown(((Tfs200xServerDescriptor)serverDescriptor).instanceId)) {
throw new TfsException(TFSBundle.message("duplicate.server"));
}
if (credentials.getType() != Credentials.Type.NtlmNative &&
!credentials.getUserName().equalsIgnoreCase(serverDescriptor.getUserName())) {
LOG.warn("authorized user mismatch: current=" + credentials.getQualifiedUsername() +
", authorized: " + serverDescriptor.authorizedCredentials);
throw new TfsException(TFSBundle.message("authorized.user.mismatch"));
}
if (serverDescriptor instanceof Tfs2010ServerDescriptor) {
Collection<TeamProjectCollectionDescriptor> teamProjectCollections =
((Tfs2010ServerDescriptor)serverDescriptor).teamProjectCollections;
if (teamProjectCollections.size() == 0) {
throw new TfsException(TFSBundle.message("no.team.project.collections"));
}
boolean newCollection = false;
for (TeamProjectCollectionDescriptor teamProjectCollection : teamProjectCollections) {
if (!TFSConfigurationManager.getInstance().serverKnown(teamProjectCollection.instanceId)) {
newCollection = true;
break;
}
}
if (!newCollection) {
throw new TfsException(TFSBundle.message("all.team.project.collections.duplicate"));
}
}
return Trinity.create(serverUri, serverDescriptor, credentials);
}
@NotNull
@Override
public String getProgressTitle(Credentials credentials, URI serverUri) {
return TFSBundle.message("connect.to", TfsUtil.getPresentableUri(serverUri));
}
@Override
public boolean retrieveAuthorizedCredentials() {
return false;
}
};
Trinity<URI, ServerDescriptor, Credentials> result;
try {
result = TfsRequestManager.getInstance(null).executeRequestInForeground(parentComponent, true, null, true, connectRequest);
}
catch (UserCancelledException e) {
return null;
}
catch (TfsException e) {
// should not float up through the dialog
LOG.error(e);
return null;
}
final ServerDescriptor serverDescriptor = result.second;
if (serverDescriptor instanceof Tfs200xServerDescriptor) {
Tfs200xServerDescriptor tfs200xServerDescriptor = (Tfs200xServerDescriptor)serverDescriptor;
return new AddServerResult(result.first, tfs200xServerDescriptor.instanceId, serverDescriptor.authorizedCredentials,
tfs200xServerDescriptor.workspaces, null, serverDescriptor.beans);
}
else {
Collection<TeamProjectCollectionDescriptor> teamProjectCollections =
((Tfs2010ServerDescriptor)serverDescriptor).teamProjectCollections;
TeamProjectCollectionDescriptor collection;
if (teamProjectCollections.size() == 1) {
collection = teamProjectCollections.iterator().next();
}
else {
ChooseTeamProjectCollectionDialog d2 =
new ChooseTeamProjectCollectionDialog(parentComponent, result.first.toString(), teamProjectCollections);
if (!d2.showAndGet()) {
return null;
}
collection = d2.getSelectedItem();
LOG.assertTrue(collection != null);
}
URI collectionUri = getCollectionUri(result.first, collection);
final TfsBeansHolder collectionBeans = new TfsBeansHolder(collectionUri);
TfsRequestManager.Request<Workspace[]> loadWorkspacesRequest = new TfsRequestManager.Request<Workspace[]>(null) {
@Override
public Workspace[] execute(Credentials credentials, URI serverUri, @Nullable ProgressIndicator pi) throws Exception {
return queryWorkspaces(serverDescriptor.authorizedCredentials, pi, collectionBeans);
}
@NotNull
@Override
public String getProgressTitle(Credentials credentials, URI serverUri) {
return TFSBundle.message("connect.to", TfsUtil.getPresentableUri(serverUri));
}
@Override
public boolean retrieveAuthorizedCredentials() {
return false;
}
};
Workspace[] workspaces = null;
String workspacesLoadError = null;
try {
workspaces = TfsRequestManager.getInstance(collectionUri)
.executeRequestInForeground(parentComponent, false, result.third, true, loadWorkspacesRequest);
}
catch (UserCancelledException e) {
return null;
}
catch (TfsException e) {
workspacesLoadError = e.getMessage();
}
return new AddServerResult(collectionUri, collection.instanceId, serverDescriptor.authorizedCredentials, workspaces,
workspacesLoadError, collectionBeans);
}
}