Skip to content

Commit 4190a17

Browse files
committed
1. Add Project Collection
1 parent 711a3d2 commit 4190a17

File tree

77 files changed

+2670
-2223
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+2670
-2223
lines changed

MonoDevelop.VersionControl.TFS.Tests/BaseTFSConnectTest.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using Microsoft.TeamFoundation.Client;
33
using System.Net;
4+
using System.Runtime.ConstrainedExecution;
45

56
namespace MonoDevelop.VersionControl.TFS.Tests
67
{
@@ -10,7 +11,7 @@ protected TeamFoundationServer GetServer()
1011
{
1112
var credentials = new NetworkCredential { Domain = "snd", UserName = "mono_tfs_plugin_cp", Password = "mono_tfs_plugin" };
1213
//Should Add sertificates: http://www.mono-project.com/FAQ:_Security
13-
return new TeamFoundationServer("https://tfs.codeplex.com/tfs/tfs19", credentials);
14+
return new TeamFoundationServer(new Uri("https://tfs.codeplex.com/tfs/"), "codeplex", credentials);
1415
}
1516
}
1617
}

MonoDevelop.VersionControl.TFS.Tests/ItemSetToHierarchItemConverterTests.cs

-34
This file was deleted.

MonoDevelop.VersionControl.TFS.Tests/LocationServiceChecker.cs

+29-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
using System.Runtime.InteropServices;
2929
using System.Xml.Linq;
3030
using System.Net;
31+
using Microsoft.TeamFoundation.Client;
3132

3233
namespace MonoDevelop.VersionControl.TFS.Tests
3334
{
@@ -52,6 +53,15 @@ public void GetLocationServises()
5253
}
5354
}
5455

56+
[Test]
57+
public void GetLocationServisesInvoker()
58+
{
59+
var credentials = new NetworkCredential { Domain = "snd", UserName = "mono_tfs_plugin_cp", Password = "mono_tfs_plugin" };
60+
var soapInvoker = new SoapInvoker("https://tfs.codeplex.com/tfs/", "/TeamFoundation/Administration/v3.0/LocationService.asmx", credentials);
61+
soapInvoker.CreateEnvelope("QueryServices", ns);
62+
Console.WriteLine(soapInvoker.Invoke());
63+
}
64+
5565
[Test]
5666
public void GetProjectLocationServises()
5767
{
@@ -134,13 +144,29 @@ public void QueryNodes()
134144
}
135145

136146
[Test]
137-
public void QueryResources()
147+
public void QueryResourceTypes()
148+
{
149+
var service = new ServiceChecker();
150+
var request = service.CreateRequest("/TeamFoundation/Administration/v3.0/CatalogService.asmx");
151+
XElement message;
152+
var requestDoc = service.CreateEnvelope("QueryResourceTypes", ns, out message);
153+
requestDoc.Save(request.GetRequestStream());
154+
Console.WriteLine(requestDoc);
155+
using (var response = service.GetResponse(request))
156+
{
157+
var responseDoc = XDocument.Load(response.GetResponseStream());
158+
Console.WriteLine(responseDoc);
159+
}
160+
}
161+
162+
[Test]
163+
public void QueryResourcesByType()
138164
{
139165
var service = new ServiceChecker();
140166
var request = service.CreateRequest("/TeamFoundation/Administration/v3.0/CatalogService.asmx");
141167
XElement message;
142-
var requestDoc = service.CreateEnvelope("QueryResources", ns, out message);
143-
message.Add(new XElement(ns + "resourceIdentifiers", new XElement(ns + "guid", "37308e9d-ab76-48fb-8b0d-99fc395a6d69")));
168+
var requestDoc = service.CreateEnvelope("QueryResourcesByType", ns, out message);
169+
message.Add(new XElement(ns + "resourceTypes", new XElement(ns + "guid", "26338d9e-d437-44aa-91f2-55880a328b54")));
144170
requestDoc.Save(request.GetRequestStream());
145171
Console.WriteLine(requestDoc);
146172
using (var response = service.GetResponse(request))

MonoDevelop.VersionControl.TFS.Tests/MonoDevelop.VersionControl.TFS.Tests.csproj

-2
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@
4545
</ItemGroup>
4646
<ItemGroup>
4747
<Compile Include="TFSRepositoryTests.cs" />
48-
<Compile Include="ItemSetToHierarchItemConverterTests.cs" />
4948
<Compile Include="BaseTFSConnectTest.cs" />
50-
<Compile Include="OpenTF\WorkspaceTests.cs" />
5149
<Compile Include="OpenTF\MessageTests.cs" />
5250
<Compile Include="ServiceChecker.cs" />
5351
<Compile Include="LocationServiceChecker.cs" />

MonoDevelop.VersionControl.TFS.Tests/OpenTF/WorkspaceTests.cs

-23
This file was deleted.

MonoDevelop.VersionControl.TFS.Tests/ServiceChecker.cs

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,11 @@
3131

3232
namespace MonoDevelop.VersionControl.TFS.Tests
3333
{
34-
[System.Web.Services.WebServiceBinding(Name = "LocationServiceSoap", Namespace = "http://microsoft.com/webservices/")]
35-
public class ServiceChecker : SoapHttpClientProtocol
34+
public class ServiceChecker
3635
{
3736
public HttpWebRequest CreateRequest(string serviceUrl)
3837
{
39-
var request = (HttpWebRequest)GetWebRequest(new Uri("https://tfs.codeplex.com/tfs" + serviceUrl));
38+
var request = (HttpWebRequest)WebRequest.Create(new Uri("https://tfs.codeplex.com/tfs" + serviceUrl));
4039
request.Credentials = new NetworkCredential { Domain = "snd", UserName = "mono_tfs_plugin_cp", Password = "mono_tfs_plugin" };
4140
request.AllowWriteStreamBuffering = true;
4241
request.Method = "POST";
@@ -64,7 +63,7 @@ public XDocument CreateEnvelope(string methodName, XNamespace messageNamespace,
6463

6564
public HttpWebResponse GetResponse(HttpWebRequest request)
6665
{
67-
return (HttpWebResponse)GetWebResponse(request);
66+
return (HttpWebResponse)request.GetResponse();
6867
}
6968
}
7069
}

MonoDevelop.VersionControl.TFS.mdw

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<WorkspaceItem ctype="Workspace">
2+
<Items>
3+
<Item>MonoDevelop.VersionControl.TFS.sln</Item>
4+
<Item>External/monodevelop/main/Main.sln</Item>
5+
</Items>
6+
</WorkspaceItem>

MonoDevelop.VersionControl.TFS/GUI/ConnectToServerDialog.cs

+129-3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@
3030
using System.Net;
3131
using MonoDevelop.VersionControl.TFS.Helpers;
3232
using MonoDevelop.Ide;
33+
using Microsoft.TeamFoundation.Client;
34+
using System.Linq;
35+
using GLib;
36+
using System.Collections.Generic;
37+
using MonoDevelop.Ide.Gui;
38+
using MonoDevelop.Projects;
3339

3440
namespace MonoDevelop.VersionControl.TFS.GUI
3541
{
@@ -107,8 +113,22 @@ void OnAddServer(object sender, EventArgs e)
107113
MessageService.ShowWarning("No keyring service found!\nPassword has been saved as plain text in server URL");
108114
}
109115
uriBuilder.Password = credentialsDialog.Credentials.Password;
110-
TFSVersionControlService.Instance.AddServer(dialog.Name, uriBuilder.Uri);
111-
UpdateServersList();
116+
TeamFoundationServer server = new TeamFoundationServer(uriBuilder.Uri, dialog.Name, credentialsDialog.Credentials);
117+
using (var projectCollectionDialog = new ChooseProjectsDialog(server))
118+
{
119+
if (projectCollectionDialog.Run(this) == Command.Ok && projectCollectionDialog.SelectedProjects.Any())
120+
{
121+
var newServer = new TeamFoundationServer(uriBuilder.Uri, dialog.Name, credentialsDialog.Credentials);
122+
newServer.LoadProjectConnections(projectCollectionDialog.SelectedProjects.Select(x => x.Collection.Id).ToList());
123+
foreach (var c in newServer.ProjectCollections)
124+
{
125+
var c1 = c;
126+
c.LoadProjects(projectCollectionDialog.SelectedProjects.Where(p => string.Equals(c1.Name, p.Collection.Name)).Select(x => x.Name).ToList());
127+
}
128+
TFSVersionControlService.Instance.AddServer(newServer);
129+
UpdateServersList();
130+
}
131+
}
112132
}
113133
}
114134
}
@@ -132,7 +152,7 @@ private void UpdateServersList()
132152
{
133153
var row = _store.AddRow();
134154
_store.SetValue(row, _name, server.Name);
135-
_store.SetValue(row, _url, server.Url.ToString());
155+
_store.SetValue(row, _url, server.Uri.ToString());
136156
}
137157
}
138158
}
@@ -308,5 +328,111 @@ public NetworkCredential Credentials
308328
}
309329
}
310330
}
331+
332+
public class ChooseProjectsDialog : Dialog
333+
{
334+
readonly ListStore collectionStore;
335+
readonly ListBox collectionsList = new ListBox();
336+
readonly DataField<string> collectionName = new DataField<string>();
337+
readonly DataField<ProjectCollection> collectionItem = new DataField<ProjectCollection>();
338+
readonly TreeStore projectsStore;
339+
readonly TreeView projectsList = new TreeView();
340+
readonly DataField<bool> isProjectSelected = new DataField<bool>();
341+
readonly DataField<string> projectName = new DataField<string>();
342+
readonly DataField<ProjectInfo> projectItem = new DataField<ProjectInfo>();
343+
344+
public List<ProjectInfo> SelectedProjects { get; set; }
345+
346+
public ChooseProjectsDialog(TeamFoundationServer server)
347+
{
348+
collectionStore = new ListStore(collectionName, collectionItem);
349+
projectsStore = new TreeStore(isProjectSelected, projectName, projectItem);
350+
BuildGui();
351+
LoadData(server);
352+
SelectedProjects = new List<ProjectInfo>();
353+
}
354+
355+
void BuildGui()
356+
{
357+
this.Title = "Select Projects";
358+
this.Resizable = false;
359+
var vBox = new VBox();
360+
var hbox = new HBox();
361+
collectionsList.DataSource = collectionStore;
362+
collectionsList.Views.Add(new TextCellView(collectionName));
363+
collectionsList.MinWidth = 200;
364+
collectionsList.MinHeight = 300;
365+
hbox.PackStart(collectionsList);
366+
367+
projectsList.DataSource = projectsStore;
368+
projectsList.MinWidth = 200;
369+
projectsList.MinHeight = 300;
370+
var checkView = new CheckBoxCellView(isProjectSelected) { Editable = true };
371+
checkView.Toggled += (sender, e) =>
372+
{
373+
var row = projectsList.CurrentEventRow;
374+
var node = projectsStore.GetNavigatorAt(row);
375+
var isSelected = !node.GetValue(isProjectSelected); //Xwt gives previous value
376+
var project = node.GetValue(projectItem);
377+
if (isSelected && !SelectedProjects.Any(p => string.Equals(p.Name, project.Name)))
378+
{
379+
SelectedProjects.Add(project);
380+
}
381+
if (!isSelected && SelectedProjects.Any(p => string.Equals(p.Name, project.Name)))
382+
{
383+
SelectedProjects.RemoveAll(p => string.Equals(p.Name, project.Name));
384+
}
385+
};
386+
projectsList.Columns.Add(new ListViewColumn("", checkView));
387+
projectsList.Columns.Add(new ListViewColumn("Name", new TextCellView(projectName)));
388+
hbox.PackEnd(projectsList);
389+
390+
vBox.PackStart(hbox);
391+
392+
Button ok = new Button(GettextCatalog.GetString("OK"));
393+
ok.Clicked += (sender, e) => Respond(Command.Ok);
394+
395+
Button cancel = new Button(GettextCatalog.GetString("Cancel"));
396+
cancel.Clicked += (sender, e) => Respond(Command.Cancel);
397+
398+
ok.MinWidth = cancel.MinWidth = Constants.ButtonWidth;
399+
400+
var buttonBox = new HBox();
401+
buttonBox.PackEnd(ok);
402+
buttonBox.PackEnd(cancel);
403+
vBox.PackStart(buttonBox);
404+
405+
this.Content = vBox;
406+
}
407+
408+
void LoadData(TeamFoundationServer server)
409+
{
410+
server.LoadProjectConnections();
411+
server.ProjectCollections.ForEach(c => c.LoadProjects());
412+
foreach (var col in server.ProjectCollections)
413+
{
414+
var row = collectionStore.AddRow();
415+
collectionStore.SetValue(row, collectionName, col.Name);
416+
collectionStore.SetValue(row, collectionItem, col);
417+
}
418+
collectionsList.SelectionChanged += (sender, e) =>
419+
{
420+
if (collectionsList.SelectedRow > -1)
421+
{
422+
var collection = collectionStore.GetValue(collectionsList.SelectedRow, collectionItem);
423+
projectsStore.Clear();
424+
foreach (var project in collection.Projects)
425+
{
426+
var node = projectsStore.AddNode();
427+
node.SetValue(isProjectSelected, false);
428+
node.SetValue(projectName, project.Name);
429+
node.SetValue(projectItem, project);
430+
}
431+
}
432+
};
433+
if (server.ProjectCollections.Any())
434+
collectionsList.SelectRow(0);
435+
}
436+
}
311437
}
312438

0 commit comments

Comments
 (0)