Browse Source

Support selecting individual assemblies to use when generate service references.

pull/6/merge
Matt Ward 14 years ago
parent
commit
97898e4c8e
  1. 42
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs
  2. 14
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceViewModel.cs
  3. 3
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs
  4. 6
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
  5. 26
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
  6. 11
      src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
  7. 74
      src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

42
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs

@ -43,6 +43,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -43,6 +43,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
string selectedService;
IProject project;
ServiceReferenceGenerator serviceGenerator;
List<CheckableAssemblyReference> assemblyReferences;
List<ServiceItem> items = new List <ServiceItem>();
ServiceItem myItem;
@ -60,6 +61,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -60,6 +61,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
this.project = project;
this.serviceGenerator = new ServiceReferenceGenerator(project);
this.assemblyReferences = serviceGenerator.GetCheckableAssemblyReferences().ToList();
HeadLine = header;
MruServices = ServiceReferenceHelper.AddMruList();
@ -104,10 +106,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -104,10 +106,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void ExecuteAdvancedDialogCommand()
{
var vm = new AdvancedServiceViewModel(serviceGenerator.Options.Clone());
vm.AssembliesToReference.AddRange(assemblyReferences);
var view = new AdvancedServiceDialog();
view.DataContext = vm;
if (view.ShowDialog() ?? false) {
serviceGenerator.Options = vm.Options;
serviceGenerator.UpdateAssemblyReferences(assemblyReferences);
}
}
@ -386,19 +390,43 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -386,19 +390,43 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public List<ServiceItem> SubItems { get; set; }
}
public class CheckableImageAndDescription : ImageAndDescription
public class CheckableAssemblyReference : ImageAndDescription
{
public CheckableImageAndDescription(BitmapSource bitmapSource, string description) : base(bitmapSource, description)
static BitmapSource ReferenceImage;
ReferenceProjectItem projectItem;
public CheckableAssemblyReference(ReferenceProjectItem projectItem)
: this(projectItem.AssemblyName.ShortName)
{
this.projectItem = projectItem;
}
bool itemChecked;
protected CheckableAssemblyReference(string description)
: base(GetReferenceImage(), description)
{
}
public bool ItemChecked {
get { return itemChecked; }
set { itemChecked = value; }
// base.RaisePropertyChanged(() =>IsChecked);}
static BitmapSource GetReferenceImage()
{
try {
if (ReferenceImage == null) {
ReferenceImage = PresentationResourceService.GetBitmapSource("Icons.16x16.Reference");
}
return ReferenceImage;
} catch (Exception) {
return null;
}
}
public bool ItemChecked { get; set; }
public string GetFileName()
{
if (projectItem != null) {
return projectItem.FileName;
}
return Description;
}
}
}

14
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceViewModel.cs

@ -69,17 +69,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -69,17 +69,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
this.options = options;
UpdateSettingsFromOptions();
Title = "Service Reference Settings";
BitmapSource image = PresentationResourceService.GetBitmapSource("Icons.16x16.Reference");
AssembliesToReference = new ObservableCollection<CheckableImageAndDescription>();
AssembliesToReference.Add(new CheckableImageAndDescription(image, "Microsoft.CSharp"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "mscorlib"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Core"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Data"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Data.DataSetExtensions"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Runtime.Serialization"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.ServiceModel"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Xml"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Xml.Linq"));
AssembliesToReference = new ObservableCollection<CheckableAssemblyReference>();
}
public ServiceReferenceGeneratorOptions Options {
@ -210,6 +200,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -210,6 +200,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
}
public ObservableCollection <CheckableImageAndDescription> AssembliesToReference { get; private set; }
public ObservableCollection <CheckableAssemblyReference> AssembliesToReference { get; private set; }
}
}

3
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
@ -20,6 +21,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -20,6 +21,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
bool HasAppConfigFile();
string GetAppConfigFileName();
void AddAppConfigFile();
IEnumerable<string> GetReferences();
IEnumerable<ReferenceProjectItem> GetReferences();
}
}

6
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs

@ -158,10 +158,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -158,10 +158,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
return Path.Combine(project.Directory, "app.config");
}
public IEnumerable<string> GetReferences()
public IEnumerable<ReferenceProjectItem> GetReferences()
{
foreach (ProjectItem item in project.GetItemsOfType(ItemType.Reference)) {
yield return item.FileName;
foreach (ReferenceProjectItem item in project.GetItemsOfType(ItemType.Reference)) {
yield return item;
}
}
}

26
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs

@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.ServiceModel.Description;
using ICSharpCode.SharpDevelop.Project;
@ -90,5 +92,29 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -90,5 +92,29 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
string folder = Path.GetDirectoryName(fileName);
fileSystem.CreateDirectoryIfMissing(folder);
}
public IEnumerable<CheckableAssemblyReference> GetCheckableAssemblyReferences()
{
return GetUnsortedCheckableAssemblyReferences()
.OrderBy(reference => reference.Description)
.ToArray();
}
IEnumerable<CheckableAssemblyReference> GetUnsortedCheckableAssemblyReferences()
{
foreach (ReferenceProjectItem item in project.GetReferences()) {
yield return new CheckableAssemblyReference(item);
}
}
public void UpdateAssemblyReferences(IEnumerable<CheckableAssemblyReference> references)
{
Options.Assemblies.Clear();
foreach (CheckableAssemblyReference reference in references) {
if (reference.ItemChecked) {
Options.Assemblies.Add(reference.GetFileName());
}
}
}
}
}

11
src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs

@ -97,10 +97,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -97,10 +97,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
ProjectService.AddProjectItem(msbuildProject, fileItem);
}
void AddGacReferenceToProject(string name)
ReferenceProjectItem AddGacReferenceToProject(string name)
{
var referenceItem = new ReferenceProjectItem(msbuildProject, name);
ProjectService.AddProjectItem(msbuildProject, referenceItem);
return referenceItem;
}
int CountAssemblyReferencesInMSBuildProject()
@ -380,11 +381,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -380,11 +381,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void GetReferences_ProjectHasGacReference_ReturnsGacReference()
{
CreateProjectWithMSBuildProject();
AddGacReferenceToProject("System.Xml");
IEnumerable<string> references = project.GetReferences();
ReferenceProjectItem refItem = AddGacReferenceToProject("System.Xml");
IEnumerable<ReferenceProjectItem> references = project.GetReferences();
string[] expectedReferences = new string[] {
"System.Xml"
var expectedReferences = new ReferenceProjectItem[] {
refItem
};
CollectionAssert.AreEqual(expectedReferences, references);
}

74
src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.Description;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using ICSharpCode.SharpDevelop.Project;
@ -21,13 +22,13 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -21,13 +22,13 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
ServiceReferenceFileGenerator fileGenerator;
IFileSystem fakeFileSystem;
ServiceReferenceGeneratorOptions options;
List<string> projectReferences;
List<ReferenceProjectItem> projectReferences;
void CreateGenerator()
{
options = new ServiceReferenceGeneratorOptions();
fakeProject = MockRepository.GenerateStub<IProjectWithServiceReferences>();
projectReferences = new List<string>();
projectReferences = new List<ReferenceProjectItem>();
fakeProject.Stub(p => p.GetReferences()).Return(projectReferences);
fakeProxyGenerator = MockRepository.GenerateStub<IServiceReferenceProxyGenerator>();
fakeProxyGenerator.Options = options;
@ -112,9 +113,20 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -112,9 +113,20 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
fakeProject.Stub(p => p.HasAppConfigFile()).Return(hasAppConfigFile);
}
void AddReferenceToProject(string reference)
ReferenceProjectItem AddReferenceToProject(string reference)
{
projectReferences.Add(reference);
return AddReferenceToProject(reference, reference);
}
ReferenceProjectItem AddReferenceToProject(string reference, string fileName)
{
IProject dummyProject = MockRepository.GenerateStub<IProject>();
dummyProject.Stub(p => p.SyncRoot).Return(new object());
var projectItem = new ReferenceProjectItem(dummyProject, reference);
Console.WriteLine(projectItem.Include);
projectItem.FileName = fileName;
projectReferences.Add(projectItem);
return projectItem;
}
[Test]
@ -366,5 +378,59 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -366,5 +378,59 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual(0, fakeProxyGenerator.Options.Assemblies.Count);
}
[Test]
public void GetCheckableAssemblyReferences_ProjectHasOneAssemblyReference_ReturnsOneAssemblyReference()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
AddReferenceToProject("System.Xml");
List<CheckableAssemblyReference> references =
generator.GetCheckableAssemblyReferences().ToList();
Assert.AreEqual("System.Xml", references[0].Description);
}
[Test]
public void GetCheckableAssemblyReferences_ProjectHasReferencesInNonAlphabeticalOrder_ReturnsAssemblyReferencesInAlphabeticalOrder()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
AddReferenceToProject("Aardvark");
AddReferenceToProject("System.Xml");
AddReferenceToProject("System.ComponentModel");
List<CheckableAssemblyReference> references =
generator.GetCheckableAssemblyReferences().ToList();
Assert.AreEqual("Aardvark", references[0].Description);
Assert.AreEqual("System.ComponentModel", references[1].Description);
Assert.AreEqual("System.Xml", references[2].Description);
}
[Test]
public void UpdateAssemblyReferences_TwoAssemblyReferencesButOnlyOneChecked_OneAssemblyReferenced()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
ReferenceProjectItem checkedReference = AddReferenceToProject("Checked", @"d:\projects\MyProject\Checked.dll");
ReferenceProjectItem uncheckedReference = AddReferenceToProject("Unchecked");
var references = new List<CheckableAssemblyReference>();
references.Add(new CheckableAssemblyReference(checkedReference) { ItemChecked = true });
references.Add(new CheckableAssemblyReference(uncheckedReference) { ItemChecked = false });
generator.UpdateAssemblyReferences(references);
string[] expectedAssemblies = new string[] {
@"d:\projects\MyProject\Checked.dll"
};
CollectionAssert.AreEqual(expectedAssemblies, generator.Options.Assemblies);
}
}
}

Loading…
Cancel
Save