Browse Source

Merge branch 'master' of github.com:icsharpcode/SharpDevelop

pull/21/merge
PeterForstmeier 14 years ago
parent
commit
1f4ac5dc79
  1. 2
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin
  2. 30
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  3. 27
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  4. 2
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml
  5. 29
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml.cs
  6. 199
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs
  7. 4
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceDialog.xaml
  8. 14
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceDialog.xaml.cs
  9. 169
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceViewModel.cs
  10. 29
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ClientOptions.cs
  11. 15
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ICodeDomProvider.cs
  12. 12
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IFileSystem.cs
  13. 19
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs
  14. 15
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceCodeDomBuilder.cs
  15. 11
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceFileGenerator.cs
  16. 12
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceMapGenerator.cs
  17. 15
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceProxyGenerator.cs
  18. 14
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataFile.cs
  19. 30
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataSource.cs
  20. 100
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
  21. 25
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomBuilder.cs
  22. 42
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomProvider.cs
  23. 44
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileGenerator.cs
  24. 52
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileName.cs
  25. 18
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileSystem.cs
  26. 71
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
  27. 71
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFile.cs
  28. 22
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileName.cs
  29. 26
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileProjectItem.cs
  30. 24
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapGenerator.cs
  31. 42
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs
  32. 50
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/WebServiceMetadataSet.cs
  33. 11
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebServicesView.cs
  34. 16
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs
  35. 4
      src/Main/Base/Project/Src/Project/CompilableProject.cs
  36. 1
      src/Main/Base/Project/Src/Project/Items/ItemType.cs
  37. 20
      src/Main/Base/Project/Src/Project/Items/ServiceReferenceProjectItem.cs
  38. 3
      src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
  39. 4
      src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs
  40. 10
      src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
  41. 14
      src/Main/Base/Test/ServiceReferences/MSBuildBasedProjectTests.cs
  42. 192
      src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
  43. 42
      src/Main/Base/Test/ServiceReferences/ServiceReferenceFileNameTests.cs
  44. 163
      src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
  45. 69
      src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileGeneratorTests.cs
  46. 57
      src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileTests.cs
  47. 52
      src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs
  48. 97
      src/Main/Base/Test/ServiceReferences/WebServiceMetadataSetTests.cs
  49. 25
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs

2
src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin

@ -22,7 +22,7 @@
id="ManagePackages" id="ManagePackages"
label="Manage Packages..." label="Manage Packages..."
insertafter="AddWebReference" insertafter="AddWebReference"
insertbefore="AddSeparator" insertbefore="ShowServiceInBrowser"
class="ICSharpCode.PackageManagement.ManagePackagesCommand"/> class="ICSharpCode.PackageManagement.ManagePackagesCommand"/>
</Condition> </Condition>
</Path> </Path>

30
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -305,21 +305,15 @@
<MenuItem id = "AddReference" <MenuItem id = "AddReference"
label = "${res:ProjectComponent.ContextMenu.AddReference}" label = "${res:ProjectComponent.ContextMenu.AddReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddReferenceToProject"/> class = "ICSharpCode.SharpDevelop.Project.Commands.AddReferenceToProject"/>
<MenuItem id = "AddServiceReference"
label = "Add Service Reference"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddServiceReferenceToProject"/>
<MenuItem id = "AddWebReference" <MenuItem id = "AddWebReference"
label = "${res:ProjectComponent.ContextMenu.AddWebReference}" label = "${res:ProjectComponent.ContextMenu.AddWebReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/> class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/>
<!--label = "${res:ProjectComponent.ContextMenu.AddWebReference}" --> <MenuItem id = "ShowServiceInBrowser"
<Condition name = "WriteableProject"> label = "Show Service in Browser"
<MenuItem id = "ShowServiceinBrowser" class = "ICSharpCode.SharpDevelop.Project.Commands.ShowServiceInBrowser"/>
label = "Show Service in Browser"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowServiceInBrowser"/>
</Condition>
<Condition name = "WriteableProject">
<MenuItem id = "AddServiceReference"
label = "Add Service Reference"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddServiceReferenceToProject"/>
</Condition>
<MenuItem id = "AddSeparator" type = "Separator"/> <MenuItem id = "AddSeparator" type = "Separator"/>
</Condition> </Condition>
@ -384,6 +378,9 @@
<MenuItem id = "AddReference" <MenuItem id = "AddReference"
label = "${res:ProjectComponent.ContextMenu.AddReference}" label = "${res:ProjectComponent.ContextMenu.AddReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddReferenceToProject"/> class = "ICSharpCode.SharpDevelop.Project.Commands.AddReferenceToProject"/>
<MenuItem id = "AddServiceReference"
label = "Add Service Reference"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddServiceReferenceToProject"/>
<MenuItem id = "AddWebReference" <MenuItem id = "AddWebReference"
label = "${res:ProjectComponent.ContextMenu.AddWebReference}" label = "${res:ProjectComponent.ContextMenu.AddWebReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/> class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/>
@ -710,6 +707,9 @@
</Path> </Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ServiceReferencesFolderNode"> <Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ServiceReferencesFolderNode">
<MenuItem id = "AddServiceReference"
label = "Add Service Reference"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddServiceReferenceToProject"/>
<Condition name = "Ownerstate" ownerstate = "Missing"> <Condition name = "Ownerstate" ownerstate = "Missing">
<MenuItem id = "RemoveMissing" <MenuItem id = "RemoveMissing"
label = "${res:Global.RemoveButtonText}" label = "${res:Global.RemoveButtonText}"
@ -721,12 +721,12 @@
<Not> <Not>
<Condition name = "Ownerstate" ownerstate = "Missing"/> <Condition name = "Ownerstate" ownerstate = "Missing"/>
</Not> </Not>
<MenuItem id = "Delete" <MenuItem id = "Delete"
label = "${res:XML.MainMenu.EditMenu.Delete}" label = "${res:XML.MainMenu.EditMenu.Delete}"
type = "Item" type = "Item"
icon = "Icons.16x16.DeleteIcon" icon = "Icons.16x16.DeleteIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/> class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/>
<MenuItem id = "Rename" <MenuItem id = "Rename"
label = "${res:ProjectComponent.ContextMenu.Rename}" label = "${res:ProjectComponent.ContextMenu.Rename}"
shortcut = "F2" shortcut = "F2"
class = "ICSharpCode.SharpDevelop.Project.Commands.RenameEntryEvent"/> class = "ICSharpCode.SharpDevelop.Project.Commands.RenameEntryEvent"/>

27
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -60,6 +60,9 @@
<Reference Include="System.Design" /> <Reference Include="System.Design" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.EnterpriseServices" /> <Reference Include="System.EnterpriseServices" />
<Reference Include="System.ServiceModel">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Web.Services" /> <Reference Include="System.Web.Services" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
@ -265,6 +268,29 @@
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\AdvancedServiceViewModel.cs" /> <Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\AdvancedServiceViewModel.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ClientOptions.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ICodeDomProvider.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IFileSystem.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IProjectWithServiceReferences.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IServiceReferenceCodeDomBuilder.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IServiceReferenceFileGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IServiceReferenceMapGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IServiceReferenceProxyGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\MetadataFile.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\MetadataSource.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ProjectWithServiceReferences.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceCodeDomBuilder.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceCodeDomProvider.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceFileGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceFileName.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceFileSystem.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceMapFile.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceMapFileName.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceMapFileProjectItem.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceMapGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceProxyGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\WebServiceMetadataSet.cs" />
<Compile Include="Src\Gui\Dialogs\ToolNotFoundDialog.cs" /> <Compile Include="Src\Gui\Dialogs\ToolNotFoundDialog.cs" />
<Compile Include="Src\Gui\Dialogs\ToolNotFoundDialog.Designer.cs"> <Compile Include="Src\Gui\Dialogs\ToolNotFoundDialog.Designer.cs">
<DependentUpon>ToolNotFoundDialog.cs</DependentUpon> <DependentUpon>ToolNotFoundDialog.cs</DependentUpon>
@ -322,6 +348,7 @@
<Compile Include="Src\Project\IBuildFeedbackSink.cs" /> <Compile Include="Src\Project\IBuildFeedbackSink.cs" />
<Compile Include="Src\Project\IProjectChangeWatcher.cs" /> <Compile Include="Src\Project\IProjectChangeWatcher.cs" />
<Compile Include="Src\Project\IProjectItemBackendStore.cs" /> <Compile Include="Src\Project\IProjectItemBackendStore.cs" />
<Compile Include="Src\Project\Items\ServiceReferenceProjectItem.cs" />
<Compile Include="Src\Project\Items\ServiceReferencesProjectItem.cs" /> <Compile Include="Src\Project\Items\ServiceReferencesProjectItem.cs" />
<Compile Include="Src\Project\MSBuildEngine\MSBuildAdditionalLogger.cs" /> <Compile Include="Src\Project\MSBuildEngine\MSBuildAdditionalLogger.cs" />
<Compile Include="Src\Project\MSBuildEngine\MSBuildLoggerFilter.cs" /> <Compile Include="Src\Project\MSBuildEngine\MSBuildLoggerFilter.cs" />

2
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml

@ -129,7 +129,7 @@
<TextBlock Text="{Binding ServiceDescriptionMessage}"></TextBlock> <TextBlock Text="{Binding ServiceDescriptionMessage}"></TextBlock>
</Border> </Border>
<TextBlock Grid.Row="6" Text="NameSpace:" Margin="4,0,4,0" VerticalAlignment="Bottom"></TextBlock> <TextBlock Grid.Row="6" Text="Namespace:" Margin="4,0,4,0" VerticalAlignment="Bottom"></TextBlock>
<TextBox Grid.Row="7" Grid.ColumnSpan="3" <TextBox Grid.Row="7" Grid.ColumnSpan="3"
Margin="4" Background="White" Margin="4" Background="White"
Text="{Binding DefaultNameSpace}"> Text="{Binding DefaultNameSpace}">

29
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml.cs

@ -1,28 +1,12 @@
/* // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
* Created by SharpDevelop. // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
* User: Peter Forstmeier
* Date: 12.10.2011
* Time: 19:24
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System; using System;
using System.Collections.Generic;
using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{ {
/// <summary>
/// Interaction logic for AddServiceReferenceDialog.xaml
/// </summary>
public partial class AddServiceReferenceDialog : Window public partial class AddServiceReferenceDialog : Window
{ {
public AddServiceReferenceDialog() public AddServiceReferenceDialog()
@ -30,7 +14,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
InitializeComponent(); InitializeComponent();
} }
void okButtonClick(object sender, RoutedEventArgs e) void okButtonClick(object sender, RoutedEventArgs e)
{ {
this.DialogResult = true; this.DialogResult = true;
@ -43,17 +26,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
Close(); Close();
} }
void Cbo_LostFocus(object sender, RoutedEventArgs e) void Cbo_LostFocus(object sender, RoutedEventArgs e)
{ {
var comboBox = (ComboBox) sender; var comboBox = (ComboBox)sender;
if(comboBox.SelectedItem != null) if (comboBox.SelectedItem != null)
return; return;
var newItem = comboBox.Text; var newItem = comboBox.Text;
comboBox.SelectedItem = newItem; comboBox.SelectedItem = newItem;
} }
void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{ {
if (e.NewValue != null) { if (e.NewValue != null) {

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

@ -1,11 +1,6 @@
/* // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
* Created by SharpDevelop. // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
* User: Peter Forstmeier
* Date: 12.10.2011
* Time: 20:05
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
@ -23,21 +18,18 @@ using System.Windows.Controls;
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Core.Presentation; using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Project.Commands;
using ICSharpCode.SharpDevelop.Widgets; using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.SharpDevelop.Widgets.Resources; using ICSharpCode.SharpDevelop.Widgets.Resources;
using Microsoft.Win32; using Microsoft.Win32;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{ {
/// <summary> public class AddServiceReferenceViewModel : ViewModelBase
/// Description of AddServiceReferenceViewModel.
/// </summary>
public class AddServiceReferenceViewModel:ViewModelBase
{ {
string header1 = "To see a list of available services on a specific server, "; string header1 = "To see a list of available services on a specific server, ";
string header2 = "enter a service URL and click Go. To browse for available services click Discover."; string header2 = "enter a service URL and click Go. To browse for available services click Discover.";
@ -48,11 +40,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
string serviceDescriptionMessage; string serviceDescriptionMessage;
string namespacePrefix = String.Empty; string namespacePrefix = String.Empty;
private ObservableCollection<ImageAndDescription> twoValues; ObservableCollection<ImageAndDescription> twoValues;
private List<string> mruServices = new List<string>(); List<string> mruServices = new List<string>();
private string selectedService; string selectedService;
private IProject project; IProject project;
List<ServiceItem> items = new List <ServiceItem>(); List<ServiceItem> items = new List <ServiceItem>();
ServiceItem myItem; ServiceItem myItem;
@ -61,77 +53,74 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
ServiceDescriptionCollection serviceDescriptionCollection = new ServiceDescriptionCollection(); ServiceDescriptionCollection serviceDescriptionCollection = new ServiceDescriptionCollection();
CredentialCache credentialCache = new CredentialCache(); CredentialCache credentialCache = new CredentialCache();
WebServiceDiscoveryClientProtocol discoveryClientProtocol; WebServiceDiscoveryClientProtocol discoveryClientProtocol;
WebServiceMetadataSet serviceMetadata;
delegate DiscoveryDocument DiscoverAnyAsync(string url); delegate DiscoveryDocument DiscoverAnyAsync(string url);
delegate void DiscoveredWebServicesHandler(DiscoveryClientProtocol protocol); delegate void DiscoveredWebServicesHandler(DiscoveryClientProtocol protocol);
delegate void AuthenticationHandler(Uri uri, string authenticationType); delegate void AuthenticationHandler(Uri uri, string authenticationType);
public AddServiceReferenceViewModel(IProject project) public AddServiceReferenceViewModel(IProject project)
{ {
this.project = project; this.project = project;
discoverButtonContend = "Disvover"; discoverButtonContent = "Discover";
HeadLine = header1 + header2; HeadLine = header1 + header2;
MruServices = ServiceReferenceHelper.AddMruList(); MruServices = ServiceReferenceHelper.AddMruList();
SelectedService = MruServices[0]; SelectedService = MruServices[0];
GoCommand = new RelayCommand(ExecuteGo,CanExecuteGo); GoCommand = new RelayCommand(ExecuteGo, CanExecuteGo);
DiscoverCommand = new RelayCommand(ExecuteDiscover,CanExecuteDiscover); DiscoverCommand = new RelayCommand(ExecuteDiscover, CanExecuteDiscover);
AdvancedDialogCommand = new RelayCommand(ExecuteAdvancedDialogCommand,CanExecuteAdvancedDialogCommand); AdvancedDialogCommand = new RelayCommand(ExecuteAdvancedDialogCommand, CanExecuteAdvancedDialogCommand);
TwoValues = new ObservableCollection<ImageAndDescription>(); TwoValues = new ObservableCollection<ImageAndDescription>();
} }
#region Go Command #region Go Command
public System.Windows.Input.ICommand GoCommand {get; private set;} public System.Windows.Input.ICommand GoCommand { get; private set; }
private void ExecuteGo () void ExecuteGo()
{ {
if (String.IsNullOrEmpty(SelectedService)) { if (String.IsNullOrEmpty(SelectedService)) {
MessageBox.Show (noUrl); MessageBox.Show(noUrl);
} }
ServiceDescriptionMessage = waitMessage; ServiceDescriptionMessage = waitMessage;
Uri uri = new Uri(SelectedService); Uri uri = new Uri(SelectedService);
StartDiscovery(uri, new DiscoveryNetworkCredential(CredentialCache.DefaultNetworkCredentials, DiscoveryNetworkCredential.DefaultAuthenticationType)); StartDiscovery(uri, new DiscoveryNetworkCredential(CredentialCache.DefaultNetworkCredentials, DiscoveryNetworkCredential.DefaultAuthenticationType));
} }
bool CanExecuteGo()
private bool CanExecuteGo()
{ {
return true; return true;
} }
#endregion #endregion
#region Discover Command #region Discover Command
public System.Windows.Input.ICommand DiscoverCommand {get;private set;} public System.Windows.Input.ICommand DiscoverCommand { get; private set; }
private bool CanExecuteDiscover () bool CanExecuteDiscover()
{ {
return true; return true;
} }
private void ExecuteDiscover () void ExecuteDiscover()
{ {
MessageBox.Show ("<Discover> is not implemented at the Moment"); MessageBox.Show("<Discover> is not implemented at the Moment");
} }
#endregion #endregion
#region AdvancedDialogCommand #region AdvancedDialogCommand
public System.Windows.Input.ICommand AdvancedDialogCommand {get;private set;} public System.Windows.Input.ICommand AdvancedDialogCommand { get; private set; }
private bool CanExecuteAdvancedDialogCommand () bool CanExecuteAdvancedDialogCommand()
{ {
return true; return true;
} }
private void ExecuteAdvancedDialogCommand () void ExecuteAdvancedDialogCommand()
{ {
var vm = new AdvancedServiceViewModel(); var vm = new AdvancedServiceViewModel();
var view = new AdvancedServiceDialog(); var view = new AdvancedServiceDialog();
@ -141,7 +130,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
#endregion #endregion
#region discover service Code from Matt #region discover service Code from Matt
void StartDiscovery(Uri uri, DiscoveryNetworkCredential credential) void StartDiscovery(Uri uri, DiscoveryNetworkCredential credential)
@ -162,7 +150,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
/// completed. /// completed.
/// </summary> /// </summary>
/// ///
void DiscoveryCompleted(IAsyncResult result) void DiscoveryCompleted(IAsyncResult result)
{ {
AsyncDiscoveryState state = (AsyncDiscoveryState)result.AsyncState; AsyncDiscoveryState state = (AsyncDiscoveryState)result.AsyncState;
@ -196,7 +183,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
} }
} }
/// <summary> /// <summary>
/// Stops any outstanding asynchronous discovery requests. /// Stops any outstanding asynchronous discovery requests.
/// </summary> /// </summary>
@ -218,7 +204,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
} }
} }
void AuthenticateUser(Uri uri, string authenticationType) void AuthenticateUser(Uri uri, string authenticationType)
{ {
DiscoveryNetworkCredential credential = (DiscoveryNetworkCredential)credentialCache.GetCredential(uri, authenticationType); DiscoveryNetworkCredential credential = (DiscoveryNetworkCredential)credentialCache.GetCredential(uri, authenticationType);
@ -233,7 +218,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
} }
} }
void AddCredential(Uri uri, DiscoveryNetworkCredential credential) void AddCredential(Uri uri, DiscoveryNetworkCredential credential)
{ {
NetworkCredential matchedCredential = credentialCache.GetCredential(uri, credential.AuthenticationType); NetworkCredential matchedCredential = credentialCache.GetCredential(uri, credential.AuthenticationType);
@ -243,18 +227,18 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
credentialCache.Add(uri, credential.AuthenticationType, credential); credentialCache.Add(uri, credential.AuthenticationType, credential);
} }
void DiscoveredWebServices(DiscoveryClientProtocol protocol) void DiscoveredWebServices(DiscoveryClientProtocol protocol)
{ {
if (protocol != null) { if (protocol != null) {
serviceDescriptionCollection = ServiceReferenceHelper.GetServiceDescriptions(protocol); serviceDescriptionCollection = ServiceReferenceHelper.GetServiceDescriptions(protocol);
serviceMetadata = new WebServiceMetadataSet(protocol);
ServiceDescriptionMessage = String.Format("{0} service(s) found at address {1}", ServiceDescriptionMessage = String.Format("{0} service(s) found at address {1}",
serviceDescriptionCollection.Count, serviceDescriptionCollection.Count,
discoveryUri); discoveryUri);
DefaultNameSpace = GetDefaultNamespace(); DefaultNameSpace = GetDefaultNamespace();
FillItems (serviceDescriptionCollection); FillItems(serviceDescriptionCollection);
var referenceName = ServiceReferenceHelper.GetReferenceName(discoveryUri); string referenceName = ServiceReferenceHelper.GetReferenceName(discoveryUri);
} }
} }
@ -275,84 +259,85 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public string Title public string Title
{ {
get {return title;} get { return title; }
set {title = value; set {
base.RaisePropertyChanged(() =>Title); title = value;
base.RaisePropertyChanged(() => Title);
} }
} }
public string HeadLine { get; set; }
public string HeadLine {get; set;}
private string discoverButtonContend; string discoverButtonContent;
public string DiscoverButtonContend { public string DiscoverButtonContent {
get { return discoverButtonContend; } get { return discoverButtonContent; }
set { discoverButtonContend = value; set {
base.RaisePropertyChanged(() =>DiscoverButtonContend);} discoverButtonContent = value;
base.RaisePropertyChanged(() => DiscoverButtonContent);
}
} }
public List<string> MruServices { public List<string> MruServices {
get { get { return mruServices; }
return mruServices; } set {
set { mruServices = value; mruServices = value;
base.RaisePropertyChanged(() =>MruServices); base.RaisePropertyChanged(() => MruServices);
} }
} }
public string SelectedService { public string SelectedService {
get { return selectedService; } get { return selectedService; }
set { selectedService = value; set {
base.RaisePropertyChanged(() =>SelectedService);} selectedService = value;
base.RaisePropertyChanged(() => SelectedService);
}
} }
public List <ServiceItem> ServiceItems { public List <ServiceItem> ServiceItems {
get {return items; } get { return items; }
set { set {
items = value; items = value;
base.RaisePropertyChanged(() =>ServiceItems); base.RaisePropertyChanged(() => ServiceItems);
} }
} }
public ServiceItem ServiceItem { public ServiceItem ServiceItem {
get { return myItem; } get { return myItem; }
set { myItem = value; set {
myItem = value;
UpdateListView(); UpdateListView();
base.RaisePropertyChanged(() =>ServiceItem); base.RaisePropertyChanged(() => ServiceItem);
} }
} }
public string ServiceDescriptionMessage { public string ServiceDescriptionMessage {
get { return serviceDescriptionMessage; } get { return serviceDescriptionMessage; }
set { serviceDescriptionMessage = value; set {
base.RaisePropertyChanged(() =>ServiceDescriptionMessage); serviceDescriptionMessage = value;
base.RaisePropertyChanged(() => ServiceDescriptionMessage);
} }
} }
public string DefaultNameSpace { public string DefaultNameSpace {
get { return defaultNameSpace; } get { return defaultNameSpace; }
set { defaultNameSpace = value; set {
base.RaisePropertyChanged(() =>DefaultNameSpace);} defaultNameSpace = value;
base.RaisePropertyChanged(() => DefaultNameSpace);
}
} }
public ObservableCollection<ImageAndDescription> TwoValues { public ObservableCollection<ImageAndDescription> TwoValues {
get { return twoValues; } get { return twoValues; }
set { set {
twoValues = value; twoValues = value;
base.RaisePropertyChanged(() =>TwoValues); base.RaisePropertyChanged(() => TwoValues);
} }
} }
//http://mikehadlow.blogspot.com/2006/06/simple-wsdl-object.html //http://mikehadlow.blogspot.com/2006/06/simple-wsdl-object.html
void UpdateListView () void UpdateListView()
{ {
ServiceDescription desc = null; ServiceDescription desc = null;
TwoValues.Clear(); TwoValues.Clear();
@ -361,86 +346,84 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
var tv = new ImageAndDescription(PresentationResourceService.GetBitmapSource("Icons.16x16.Interface"), var tv = new ImageAndDescription(PresentationResourceService.GetBitmapSource("Icons.16x16.Interface"),
desc.RetrievalUrl); desc.RetrievalUrl);
TwoValues.Add(tv); TwoValues.Add(tv);
} } else if(ServiceItem.Tag is PortType) {
else if(ServiceItem.Tag is PortType)
{
PortType portType = (PortType)ServiceItem.Tag; PortType portType = (PortType)ServiceItem.Tag;
foreach (Operation op in portType.Operations) foreach (Operation op in portType.Operations) {
{
TwoValues.Add(new ImageAndDescription(PresentationResourceService.GetBitmapSource("Icons.16x16.Method"), TwoValues.Add(new ImageAndDescription(PresentationResourceService.GetBitmapSource("Icons.16x16.Method"),
op.Name)); op.Name));
} }
} }
} }
void FillItems (ServiceDescriptionCollection descriptions) void FillItems(ServiceDescriptionCollection descriptions)
{ {
foreach (ServiceDescription element in descriptions) foreach(ServiceDescription element in descriptions) {
{ Add(element);
Add (element);
} }
} }
void Add(ServiceDescription description) void Add(ServiceDescription description)
{ {
List<ServiceItem> items = new List<ServiceItem>(); List<ServiceItem> items = new List<ServiceItem>();
var name = ServiceReferenceHelper.GetServiceName(description); var name = ServiceReferenceHelper.GetServiceName(description);
var rootNode = new ServiceItem(null,name); var rootNode = new ServiceItem(null, name);
rootNode.Tag = description; rootNode.Tag = description;
foreach(Service service in description.Services) { foreach(Service service in description.Services) {
var serviceNode = new ServiceItem(null,service.Name); var serviceNode = new ServiceItem(null, service.Name);
serviceNode.Tag = service; serviceNode.Tag = service;
items.Add(serviceNode); items.Add(serviceNode);
foreach (PortType portType in description.PortTypes) { foreach (PortType portType in description.PortTypes) {
var portNode = new ServiceItem(PresentationResourceService.GetBitmapSource("Icons.16x16.Interface"),portType.Name); var portNode = new ServiceItem(PresentationResourceService.GetBitmapSource("Icons.16x16.Interface"), portType.Name);
portNode.Tag = portType; portNode.Tag = portType;
serviceNode.SubItems.Add(portNode); serviceNode.SubItems.Add(portNode);
} }
} }
ServiceItems = items; ServiceItems = items;
} }
public void AddServiceReference()
{
var serviceGenerator = new ServiceReferenceGenerator(project);
serviceGenerator.Namespace = defaultNameSpace;
serviceGenerator.AddServiceReference(serviceMetadata);
new RefreshProjectBrowser().Run();
}
} }
public class ImageAndDescription public class ImageAndDescription
{ {
public ImageAndDescription(BitmapSource bitmapSource,string description) public ImageAndDescription(BitmapSource bitmapSource, string description)
{ {
Image = bitmapSource; Image = bitmapSource;
Description = description; Description = description;
} }
public BitmapSource Image {get;set;} public BitmapSource Image { get; set; }
public string Description {get;set;} public string Description { get; set; }
} }
public class ServiceItem : ImageAndDescription
public class ServiceItem:ImageAndDescription
{ {
public ServiceItem (BitmapSource bitmapSource,string description):base(bitmapSource,description) public ServiceItem(BitmapSource bitmapSource, string description) : base(bitmapSource, description)
{ {
SubItems = new List<ServiceItem>(); SubItems = new List<ServiceItem>();
} }
public object Tag {get;set;} public object Tag { get; set; }
public List<ServiceItem> SubItems {get;set;} public List<ServiceItem> SubItems { get; set; }
} }
public class CheckableImageAndDescription :ImageAndDescription public class CheckableImageAndDescription : ImageAndDescription
{ {
public CheckableImageAndDescription(BitmapSource bitmapSource,string description):base(bitmapSource,description) public CheckableImageAndDescription(BitmapSource bitmapSource, string description) : base(bitmapSource, description)
{ {
} }
private bool itemChecked; bool itemChecked;
public bool ItemChecked { public bool ItemChecked {
get { return itemChecked; } get { return itemChecked; }
set { itemChecked = value;} set { itemChecked = value; }
// base.RaisePropertyChanged(() =>IsChecked);} // base.RaisePropertyChanged(() =>IsChecked);}
} }

4
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceDialog.xaml

@ -43,7 +43,7 @@
Text="{Binding AccessLevel}"></TextBlock> Text="{Binding AccessLevel}"></TextBlock>
<ComboBox <ComboBox
Grid.Column="1 " Margin="4" Grid.Column="1 " Margin="4"
gui:EnumBinding.EnumType="{x:Type local:Modifyers}" SelectedValue="{Binding SelectedModifyer}"> gui:EnumBinding.EnumType="{x:Type local:Modifiers}" SelectedValue="{Binding SelectedModifier}">
</ComboBox> </ComboBox>
<CheckBox <CheckBox
@ -83,7 +83,7 @@
Margin="25,0,0,0" Margin="25,0,0,0"
VerticalAlignment="Center" VerticalAlignment="Center"
IsChecked="{Binding GenerateMessageContract}" IsChecked="{Binding GenerateMessageContract}"
Content="Allways generate message contracts"></CheckBox> Content="Always generate message contracts"></CheckBox>
<TextBlock <TextBlock
Margin="25,0,0,0" Margin="25,0,0,0"
Grid.Row="1" Grid.Row="1"

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

@ -1,11 +1,6 @@
/* // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
* Created by SharpDevelop. // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
* User: Peter Forstmeier
* Date: 02.11.2011
* Time: 19:49
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@ -18,9 +13,6 @@ using System.Windows.Media;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{ {
/// <summary>
/// Interaction logic for AdvancedServiceDialog.xaml
/// </summary>
public partial class AdvancedServiceDialog : Window public partial class AdvancedServiceDialog : Window
{ {
public AdvancedServiceDialog() public AdvancedServiceDialog()

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

@ -1,25 +1,17 @@
/* // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
* Created by SharpDevelop. // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
* User: Peter Forstmeier
* Date: 02.11.2011
* Time: 19:50
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System; using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.ComponentModel; using System.ComponentModel;
using System.Windows.Media.Imaging;
using ICSharpCode.Core.Presentation; using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop.Widgets; using ICSharpCode.SharpDevelop.Widgets;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{ {
/// <summary> public enum Modifiers
/// Description of AdvancedServiceViewModel.
/// </summary>
///
public enum Modifyers
{ {
//[Description("${res:Dialog.ProjectOptions.RunPostBuildEvent.Always}")] //[Description("${res:Dialog.ProjectOptions.RunPostBuildEvent.Always}")]
Public, Public,
@ -56,147 +48,134 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
HybridDictionary, HybridDictionary,
ListDictionary, ListDictionary,
OrderedDictionary OrderedDictionary
} }
internal class AdvancedServiceViewModel:ViewModelBase internal class AdvancedServiceViewModel : ViewModelBase
{ {
private string compatibilityText ="Add a web Reference instead of a Service Reference. "; string compatibilityText = "Add a Web Reference instead of a Service Reference. ";
private string c_2 ="thios will generate code base on .NET Framework 2.0 Web services technology"; string c_2 = "This will generate code based on .NET Framework 2.0 Web Services technology.";
private string accesslevel = "Access level for generated classes:"; string accesslevel = "Access level for generated classes:";
public AdvancedServiceViewModel() public AdvancedServiceViewModel()
{ {
Title ="Service Reference Settings"; Title ="Service Reference Settings";
UseReferencedAssemblies = true; UseReferencedAssemblies = true;
var image = PresentationResourceService.GetBitmapSource("Icons.16x16.Reference"); BitmapSource image = PresentationResourceService.GetBitmapSource("Icons.16x16.Reference");
AssembliesToReference = new ObservableCollection <CheckableImageAndDescription>(); AssembliesToReference = new ObservableCollection<CheckableImageAndDescription>();
AssembliesToReference.Add(new CheckableImageAndDescription(image,"Microsoft.CSharp")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "Microsoft.CSharp"));
AssembliesToReference.Add(new CheckableImageAndDescription(image,"mscorlib")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "mscorlib"));
AssembliesToReference.Add(new CheckableImageAndDescription(image,"System.Core")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Core"));
AssembliesToReference.Add(new CheckableImageAndDescription(image,"System.Data")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Data"));
AssembliesToReference.Add(new CheckableImageAndDescription(image,"System.Data.DataSetExtensions")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Data.DataSetExtensions"));
AssembliesToReference.Add(new CheckableImageAndDescription(image,"System.Runtime.Serialization")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Runtime.Serialization"));
AssembliesToReference.Add(new CheckableImageAndDescription(image,"System.ServiceModel")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.ServiceModel"));
AssembliesToReference.Add(new CheckableImageAndDescription(image,"System.Xml")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Xml"));
AssembliesToReference.Add(new CheckableImageAndDescription(image,"System.Xml.Linq")); AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Xml.Linq"));
} }
public string Title {get;set;} public string Title { get; set; }
public string AccessLevel { public string AccessLevel {
get {return accesslevel;} get { return accesslevel; }
} }
private Modifyers selectedModifyer; Modifiers selectedModifier;
public Modifyers SelectedModifyer { public Modifiers SelectedModifier {
get { return selectedModifyer; } get { return selectedModifier; }
set { selectedModifyer = value; set {
base.RaisePropertyChanged(() =>SelectedModifyer); } selectedModifier = value;
base.RaisePropertyChanged(() => SelectedModifier);
}
} }
bool generateAsyncOperations; bool generateAsyncOperations;
public bool GenerateAsyncOperations { public bool GenerateAsyncOperations {
get { return generateAsyncOperations; } get { return generateAsyncOperations; }
set { generateAsyncOperations = value; set {
base.RaisePropertyChanged(() =>GenerateAsyncOperations);} generateAsyncOperations = value;
base.RaisePropertyChanged(() => GenerateAsyncOperations);
}
} }
bool generateMessageContract; bool generateMessageContract;
public bool GenerateMessageContract { public bool GenerateMessageContract {
get { return generateMessageContract; } get { return generateMessageContract; }
set { generateMessageContract = value; set {
base.RaisePropertyChanged(() =>GenerateMessageContract);} generateMessageContract = value;
base.RaisePropertyChanged(() => GenerateMessageContract);
}
} }
CollectionTypes collectionType;
private CollectionTypes collectionType;
public CollectionTypes CollectionType { public CollectionTypes CollectionType {
get { return collectionType; } get { return collectionType; }
set { collectionType = value; set {
base.RaisePropertyChanged(() =>CollectionType);} collectionType = value;
base.RaisePropertyChanged(() => CollectionType);
}
} }
private DictionaryCollectionTypes dictionaryCollectionType; DictionaryCollectionTypes dictionaryCollectionType;
public DictionaryCollectionTypes DictionaryCollectionType { public DictionaryCollectionTypes DictionaryCollectionType {
get { return dictionaryCollectionType; } get { return dictionaryCollectionType; }
set { dictionaryCollectionType = value; set {
base.RaisePropertyChanged(() =>DictionaryCollectionType);} dictionaryCollectionType = value;
base.RaisePropertyChanged(() => DictionaryCollectionType);
}
} }
bool useReferencedAssemblies;
private bool useReferencedAssemblies;
public bool UseReferencedAssemblies { public bool UseReferencedAssemblies {
get { return useReferencedAssemblies; } get { return useReferencedAssemblies; }
set { useReferencedAssemblies = value; set {
if (useReferencedAssemblies) { useReferencedAssemblies = value;
ReuseTypes = true; ReuseTypes = useReferencedAssemblies;
} base.RaisePropertyChanged(() => UseReferencedAssemblies);
else { }
ReuseTypes = false;
}
base.RaisePropertyChanged(() =>UseReferencedAssemblies);}
} }
bool reuseTypes;
private bool reuseTypes;
public bool ReuseTypes { public bool ReuseTypes {
get { return reuseTypes; } get { return reuseTypes; }
set { reuseTypes = value; set {
if (reuseTypes) { reuseTypes = value;
base.RaisePropertyChanged(() => ReuseTypes);
} }
else
{
}
base.RaisePropertyChanged(() =>ReuseTypes);}
} }
bool reuseReferencedTypes;
private bool reuseReferencedTypes;
public bool ReuseReferencedTypes { public bool ReuseReferencedTypes {
get { return reuseReferencedTypes; } get { return reuseReferencedTypes; }
set { reuseReferencedTypes = value; set {
if (reuseReferencedTypes) reuseReferencedTypes = value;
{ ListViewEnable = value;
ListViewEnable = true; base.RaisePropertyChanged(() => ReuseReferencedTypes);
}
} else
{
ListViewEnable = false;
}
base.RaisePropertyChanged(() => ReuseReferencedTypes);}
} }
bool listViewEnable;
private bool listViewEnable;
public bool ListViewEnable { public bool ListViewEnable {
get { return listViewEnable; } get { return listViewEnable; }
set { listViewEnable = value; set {
base.RaisePropertyChanged(() => ListViewEnable);} listViewEnable = value;
base.RaisePropertyChanged(() => ListViewEnable);
}
} }
public ObservableCollection <CheckableImageAndDescription> AssembliesToReference { get; private set; }
public ObservableCollection <CheckableImageAndDescription> AssembliesToReference {get;private set;}
public string CompatibilityText public string CompatibilityText
{ {
get { get { return compatibilityText + c_2; }
return compatibilityText + c_2; }
}
}
} }
} }

29
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ClientOptions.cs

@ -0,0 +1,29 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ClientOptions
{
public ClientOptions()
{
EnableDataBinding = true;
GenerateSerializableTypes = true;
Serializer = "Auto";
UseSerializerForFaults = true;
ReferenceAllAssemblies = true;
}
public bool GenerateAsynchronousMethods { get; set; }
public bool EnableDataBinding { get; set; }
public bool ImportXmlTypes { get; set; }
public bool GenerateInternalTypes { get; set; }
public bool GenerateMessageContracts { get; set; }
public bool GenerateSerializableTypes { get; set; }
public string Serializer { get; set; }
public bool UseSerializerForFaults { get; set; }
public bool ReferenceAllAssemblies { get; set; }
}
}

15
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ICodeDomProvider.cs

@ -0,0 +1,15 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface ICodeDomProvider
{
string FileExtension { get; }
void GenerateCodeFromCompileUnit(CodeCompileUnit compileUnit, string fileName);
}
}

12
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IFileSystem.cs

@ -0,0 +1,12 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface IFileSystem
{
void CreateDirectoryIfMissing(string path);
}
}

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

@ -0,0 +1,19 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface IProjectWithServiceReferences
{
string ServiceReferencesFolder { get; }
ICodeDomProvider CodeDomProvider { get; }
ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName);
ServiceReferenceMapFileName GetServiceReferenceMapFileName(string serviceReferenceName);
void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName);
void AddServiceReferenceMapFile(ServiceReferenceMapFileName fileName);
void Save();
}
}

15
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceCodeDomBuilder.cs

@ -0,0 +1,15 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom;
using System.ServiceModel.Description;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface IServiceReferenceCodeDomBuilder
{
CodeCompileUnit GenerateCompileUnit(MetadataSet metadata);
}
}

11
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceFileGenerator.cs

@ -0,0 +1,11 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface IServiceReferenceFileGenerator : IServiceReferenceProxyGenerator, IServiceReferenceMapGenerator
{
}
}

12
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceMapGenerator.cs

@ -0,0 +1,12 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface IServiceReferenceMapGenerator
{
void GenerateServiceReferenceMapFile(ServiceReferenceMapFile mapFile);
}
}

15
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceProxyGenerator.cs

@ -0,0 +1,15 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ServiceModel.Description;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface IServiceReferenceProxyGenerator
{
string ServiceReferenceNamespace { get; set; }
void GenerateProxyFile(MetadataSet metadata, string proxyFileName);
}
}

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

@ -0,0 +1,14 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class MetadataFile
{
public MetadataFile()
{
}
}
}

30
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataSource.cs

@ -0,0 +1,30 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Xml.Serialization;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class MetadataSource
{
public MetadataSource()
{
}
public MetadataSource(string url)
{
Address = url;
Protocol = "http";
}
[XmlAttribute]
public string Address { get; set; }
[XmlAttribute]
public string Protocol { get; set; }
[XmlAttribute]
public string SourceId { get; set; }
}
}

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

@ -0,0 +1,100 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom.Compiler;
using System.IO;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ProjectWithServiceReferences : IProjectWithServiceReferences
{
IProject project;
string serviceReferencesFolder;
public static readonly string DefaultServiceReferencesFolderName = "Service References";
public ProjectWithServiceReferences(IProject project)
: this(project, new ServiceReferenceCodeDomProvider(project))
{
}
public ProjectWithServiceReferences(IProject project, ICodeDomProvider codeDomProvider)
{
this.project = project;
this.CodeDomProvider = codeDomProvider;
}
public string ServiceReferencesFolder {
get {
if (serviceReferencesFolder == null) {
GetServiceReferencesFolder();
}
return serviceReferencesFolder;
}
}
void GetServiceReferencesFolder()
{
serviceReferencesFolder = Path.Combine(project.Directory, DefaultServiceReferencesFolderName);
}
public ICodeDomProvider CodeDomProvider { get; private set; }
public ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName)
{
return new ServiceReferenceFileName(ServiceReferencesFolder, serviceReferenceName);
}
public ServiceReferenceMapFileName GetServiceReferenceMapFileName(string serviceReferenceName)
{
return new ServiceReferenceMapFileName(ServiceReferencesFolder, serviceReferenceName);
}
public void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName)
{
AddServiceReferenceFileToProject(fileName);
AddServiceReferencesItemToProject();
AddServiceReferenceItemToProject(fileName);
}
void AddServiceReferenceFileToProject(ServiceReferenceFileName fileName)
{
var projectItem = new FileProjectItem(project, ItemType.Compile);
projectItem.FileName = fileName.Path;
projectItem.DependentUpon = "Reference.svcmap";
AddProjectItemToProject(projectItem);
}
void AddProjectItemToProject(ProjectItem item)
{
ProjectService.AddProjectItem(project, item);
}
void AddServiceReferencesItemToProject()
{
var projectItem = new ServiceReferencesProjectItem(project);
projectItem.Include = "Service References";
AddProjectItemToProject(projectItem);
}
void AddServiceReferenceItemToProject(ServiceReferenceFileName fileName)
{
var projectItem = new ServiceReferenceProjectItem(project);
projectItem.Include = @"Service References\" + fileName.ServiceName;
AddProjectItemToProject(projectItem);
}
public void Save()
{
project.Save();
}
public void AddServiceReferenceMapFile(ServiceReferenceMapFileName fileName)
{
var projectItem = new ServiceReferenceMapFileProjectItem(project, fileName.Path);
AddProjectItemToProject(projectItem);
}
}
}

25
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomBuilder.cs

@ -0,0 +1,25 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom;
using System.ServiceModel.Description;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceCodeDomBuilder : IServiceReferenceCodeDomBuilder
{
public CodeCompileUnit GenerateCompileUnit(MetadataSet metadata)
{
var importer = new WsdlImporter(metadata);
var contractGenerator = new ServiceContractGenerator();
contractGenerator.Options = ServiceContractGenerationOptions.ClientClass;
foreach (ContractDescription contract in importer.ImportAllContracts()) {
contractGenerator.GenerateServiceContractType(contract);
}
return contractGenerator.TargetCompileUnit;
}
}
}

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

@ -0,0 +1,42 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.IO;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceCodeDomProvider : ICodeDomProvider
{
IProject project;
CodeDomProvider codeDomProvider;
public ServiceReferenceCodeDomProvider(IProject project)
{
this.project = project;
}
public string FileExtension {
get { return CodeDomProvider.FileExtension; }
}
CodeDomProvider CodeDomProvider {
get {
if (codeDomProvider == null) {
codeDomProvider = project.LanguageProperties.CodeDomProvider;
}
return codeDomProvider;
}
}
public void GenerateCodeFromCompileUnit(CodeCompileUnit compileUnit, string fileName)
{
using (var writer = new StreamWriter(fileName)) {
CodeDomProvider.GenerateCodeFromCompileUnit(compileUnit, writer, null);
}
}
}
}

44
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileGenerator.cs

@ -0,0 +1,44 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ServiceModel.Description;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceFileGenerator : IServiceReferenceFileGenerator
{
IServiceReferenceProxyGenerator proxyGenerator;
IServiceReferenceMapGenerator mapGenerator;
public ServiceReferenceFileGenerator(ICodeDomProvider codeDomProvider)
: this(
new ServiceReferenceProxyGenerator(codeDomProvider),
new ServiceReferenceMapGenerator())
{
}
public ServiceReferenceFileGenerator(
IServiceReferenceProxyGenerator proxyGenerator,
IServiceReferenceMapGenerator mapGenerator)
{
this.proxyGenerator = proxyGenerator;
this.mapGenerator = mapGenerator;
}
public string ServiceReferenceNamespace {
get { return proxyGenerator.ServiceReferenceNamespace; }
set { proxyGenerator.ServiceReferenceNamespace = value; }
}
public void GenerateProxyFile(MetadataSet metadata, string proxyFileName)
{
proxyGenerator.GenerateProxyFile(metadata, proxyFileName);
}
public void GenerateServiceReferenceMapFile(ServiceReferenceMapFile mapFile)
{
mapGenerator.GenerateServiceReferenceMapFile(mapFile);
}
}
}

52
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileName.cs

@ -0,0 +1,52 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using IO = System.IO;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceFileName
{
string serviceReferencesFolder;
string serviceName;
string path;
public ServiceReferenceFileName()
: this(String.Empty, String.Empty)
{
}
public ServiceReferenceFileName(
string serviceReferencesFolder,
string serviceName)
{
this.serviceReferencesFolder = serviceReferencesFolder;
this.serviceName = serviceName;
}
public string Path {
get {
if (path == null) {
GetPath();
}
return path;
}
}
void GetPath()
{
path = IO.Path.Combine(serviceReferencesFolder, serviceName, "Reference.cs");
}
public string ServiceName {
get { return serviceName; }
set { serviceName = value; }
}
public string ServiceReferencesFolder {
get { return serviceReferencesFolder; }
set { serviceReferencesFolder = value; }
}
}
}

18
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileSystem.cs

@ -0,0 +1,18 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.IO;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceFileSystem : IFileSystem
{
public void CreateDirectoryIfMissing(string path)
{
if (!Directory.Exists(path)) {
Directory.CreateDirectory(path);
}
}
}
}

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

@ -0,0 +1,71 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.IO;
using System.ServiceModel.Description;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceGenerator
{
IProjectWithServiceReferences project;
IServiceReferenceFileGenerator fileGenerator;
IFileSystem fileSystem;
public ServiceReferenceGenerator(IProject project)
: this(new ProjectWithServiceReferences(project))
{
}
public ServiceReferenceGenerator(IProjectWithServiceReferences project)
: this(
project,
new ServiceReferenceFileGenerator(project.CodeDomProvider),
new ServiceReferenceFileSystem())
{
}
public ServiceReferenceGenerator(
IProjectWithServiceReferences project,
IServiceReferenceFileGenerator fileGenerator,
IFileSystem fileSystem)
{
this.project = project;
this.fileGenerator = fileGenerator;
this.fileSystem = fileSystem;
}
public string Namespace { get; set; }
public void AddServiceReference(MetadataSet metadata)
{
GenerateServiceReferenceProxy(metadata);
}
void GenerateServiceReferenceProxy(MetadataSet metadata)
{
ServiceReferenceFileName referenceFileName = project.GetServiceReferenceFileName(Namespace);
CreateFolderForFileIfFolderMissing(referenceFileName.Path);
fileGenerator.GenerateProxyFile(metadata, referenceFileName.Path);
ServiceReferenceMapFileName mapFileName = project.GetServiceReferenceMapFileName(Namespace);
var mapFile = new ServiceReferenceMapFile(mapFileName);
fileGenerator.GenerateServiceReferenceMapFile(mapFile);
project.AddServiceReferenceProxyFile(referenceFileName);
project.AddServiceReferenceMapFile(mapFileName);
project.Save();
}
void CreateFolderForFileIfFolderMissing(string fileName)
{
string folder = Path.GetDirectoryName(fileName);
fileSystem.CreateDirectoryIfMissing(folder);
}
}
}

71
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFile.cs

@ -0,0 +1,71 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
[XmlRoot(ElementName = "ReferenceGroup", Namespace = "urn:schemas-microsoft-com:xml-wcfservicemap")]
public class ServiceReferenceMapFile
{
ClientOptions clientOptions = new ClientOptions();
List<MetadataSource> metadataSources = new List<MetadataSource>();
List<MetadataFile> metadata = new List<MetadataFile>();
public ServiceReferenceMapFile()
{
ID = Guid.NewGuid().ToString();
}
public ServiceReferenceMapFile(ServiceReferenceMapFileName fileName)
: this()
{
FileName = fileName.Path;
}
public override bool Equals(object obj)
{
var rhs = obj as ServiceReferenceMapFile;
return FileName == rhs.FileName;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public static ServiceReferenceMapFile CreateMapFileWithUrl(string url)
{
var mapFile = new ServiceReferenceMapFile();
mapFile.AddMetadataSourceForUrl(url);
return mapFile;
}
public void AddMetadataSourceForUrl(string url)
{
var metadataSource = new MetadataSource(url) { SourceId = "1" };
metadataSources.Add(metadataSource);
}
[XmlIgnoreAttribute]
public string FileName { get; set; }
[XmlAttribute]
public string ID { get; set; }
public ClientOptions ClientOptions {
get { return clientOptions; }
set { clientOptions = value; }
}
public List<MetadataSource> MetadataSources {
get { return metadataSources; }
}
public List<MetadataFile> Metadata {
get { return metadata; }
}
}
}

22
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileName.cs

@ -0,0 +1,22 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using IO = System.IO;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceMapFileName
{
string path;
public ServiceReferenceMapFileName(string serviceReferencesFolder, string serviceName)
{
path = IO.Path.Combine(serviceReferencesFolder, serviceName, "Reference.svcmap");
}
public string Path {
get { return path; }
}
}
}

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

@ -0,0 +1,26 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceMapFileProjectItem : FileProjectItem
{
public ServiceReferenceMapFileProjectItem(
IProject project,
string fileName)
: base(project, ItemType.None)
{
this.FileName = fileName;
AddMetadata();
}
void AddMetadata()
{
SetMetadata("LastGenOutput", "Reference.cs");
SetMetadata("Generator", "WCF Proxy Generator");
}
}
}

24
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapGenerator.cs

@ -0,0 +1,24 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.IO;
using System.Xml.Serialization;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceMapGenerator : IServiceReferenceMapGenerator
{
public void GenerateServiceReferenceMapFile(ServiceReferenceMapFile mapFile)
{
var writer = new StreamWriter(mapFile.FileName);
GenerateServiceReferenceMapFile(writer, mapFile);
}
public void GenerateServiceReferenceMapFile(TextWriter textWriter, ServiceReferenceMapFile mapFile)
{
var serializer = new XmlSerializer(typeof(ServiceReferenceMapFile));
serializer.Serialize(textWriter, mapFile);
}
}
}

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

@ -0,0 +1,42 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom;
using System.IO;
using System.ServiceModel.Description;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceProxyGenerator : IServiceReferenceProxyGenerator
{
IServiceReferenceCodeDomBuilder codeDomBuilder;
ICodeDomProvider codeDomProvider;
public ServiceReferenceProxyGenerator(ICodeDomProvider codeDomProvider)
: this(codeDomProvider, new ServiceReferenceCodeDomBuilder())
{
}
public ServiceReferenceProxyGenerator(
ICodeDomProvider codeDomProvider,
IServiceReferenceCodeDomBuilder codeDomBuilder)
{
this.codeDomProvider = codeDomProvider;
this.codeDomBuilder = codeDomBuilder;
}
public string ServiceReferenceNamespace { get; set; }
public void GenerateProxyFile(MetadataSet metadata, string proxyFileName)
{
CodeCompileUnit compileUnit = codeDomBuilder.GenerateCompileUnit(metadata);
GenerateProxy(compileUnit, proxyFileName);
}
void GenerateProxy(CodeCompileUnit compileUnit, string fileName)
{
codeDomProvider.GenerateCodeFromCompileUnit(compileUnit, fileName);
}
}
}

50
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/WebServiceMetadataSet.cs

@ -0,0 +1,50 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ServiceModel.Description;
using System.Xml.Schema;
using WSDescription = System.Web.Services.Description;
using WSDiscovery = System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class WebServiceMetadataSet : MetadataSet
{
public static readonly string EmptyMetadataIdentifier = String.Empty;
public WebServiceMetadataSet(WSDiscovery.DiscoveryClientProtocol discoveryClient)
{
AddToMetadata(discoveryClient.Documents);
}
void AddToMetadata(WSDiscovery.DiscoveryClientDocumentCollection documents)
{
foreach (object document in documents.Values) {
AddToMetadataIfNotNull(document as WSDescription.ServiceDescription);
AddToMetadataIfNotNull(document as XmlSchema);
}
}
void AddToMetadataIfNotNull(WSDescription.ServiceDescription serviceDescription)
{
if (serviceDescription != null) {
AddMetadataSection(MetadataSection.ServiceDescriptionDialect, serviceDescription);
}
}
void AddMetadataSection(string dialect, object metadata)
{
var metadataSection = new MetadataSection(dialect, EmptyMetadataIdentifier, metadata);
MetadataSections.Add(metadataSection);
}
void AddToMetadataIfNotNull(XmlSchema schema)
{
if (schema != null) {
AddMetadataSection(MetadataSection.XmlSchemaDialect, schema);
}
}
}
}

11
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebServicesView.cs

@ -139,21 +139,19 @@ namespace ICSharpCode.SharpDevelop.Gui
ListViewItem item; ListViewItem item;
webServicesListView.Items.Clear(); webServicesListView.Items.Clear();
if(e.Node.Tag is ServiceDescription) { if (e.Node.Tag is ServiceDescription) {
ServiceDescription desc = (ServiceDescription)e.Node.Tag; ServiceDescription desc = (ServiceDescription)e.Node.Tag;
item = new ListViewItem(); item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.RetrievalUriProperty}"); item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.RetrievalUriProperty}");
item.SubItems.Add(desc.RetrievalUrl); item.SubItems.Add(desc.RetrievalUrl);
webServicesListView.Items.Add(item); webServicesListView.Items.Add(item);
} } else if(e.Node.Tag is Service) {
else if(e.Node.Tag is Service) {
Service service = (Service)e.Node.Tag; Service service = (Service)e.Node.Tag;
item = new ListViewItem(); item = new ListViewItem();
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.DocumentationProperty}"); item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.DocumentationProperty}");
item.SubItems.Add(service.Documentation); item.SubItems.Add(service.Documentation);
webServicesListView.Items.Add(item); webServicesListView.Items.Add(item);
} } else if(e.Node.Tag is Port) {
else if(e.Node.Tag is Port) {
Port port = (Port)e.Node.Tag; Port port = (Port)e.Node.Tag;
item = new ListViewItem(); item = new ListViewItem();
@ -170,8 +168,7 @@ namespace ICSharpCode.SharpDevelop.Gui
item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.ServiceNameProperty}"); item.Text = StringParser.Parse("${res:ICSharpCode.SharpDevelop.Gui.Dialogs.AddWebReferenceDialog.ServiceNameProperty}");
item.SubItems.Add(port.Service.Name); item.SubItems.Add(port.Service.Name);
webServicesListView.Items.Add(item); webServicesListView.Items.Add(item);
} } else if(e.Node.Tag is Operation) {
else if(e.Node.Tag is Operation) {
Operation operation = (Operation)e.Node.Tag; Operation operation = (Operation)e.Node.Tag;
item = new ListViewItem(); item = new ListViewItem();

16
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs

@ -227,23 +227,23 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
} }
public class AddServiceReferenceToProject: AbstractMenuCommand public class AddServiceReferenceToProject : AbstractMenuCommand
{ {
// private static string NodePath = "//system.serviceModel//client//endpoint";
public override void Run() public override void Run()
{ {
AbstractProjectBrowserTreeNode node = Owner as AbstractProjectBrowserTreeNode; var node = Owner as AbstractProjectBrowserTreeNode;
IProject project = (node != null) ? node.Project : ProjectService.CurrentProject; IProject project = (node != null) ? node.Project : ProjectService.CurrentProject;
if (project == null) { if (project == null) {
return; return;
} }
var vm = new AddServiceReferenceViewModel(project); var vm = new AddServiceReferenceViewModel(project);
AddServiceReferenceDialog o = new AddServiceReferenceDialog(); var dialog = new AddServiceReferenceDialog();
o.DataContext = vm; dialog.DataContext = vm;
o.Owner = WorkbenchSingleton.MainWindow; dialog.Owner = WorkbenchSingleton.MainWindow;
var b = o.ShowDialog(); if (dialog.ShowDialog() ?? true) {
vm.AddServiceReference();
}
} }
} }

4
src/Main/Base/Project/Src/Project/CompilableProject.cs

@ -359,7 +359,7 @@ namespace ICSharpCode.SharpDevelop.Project
public bool IsSilverlightProject { public bool IsSilverlightProject {
get { get {
string guids = GetEvaluatedProperty("ProjectTypeGuids") ?? ""; string guids = GetEvaluatedProperty("ProjectTypeGuids") ?? "";
return guids.Contains("A1591282-1198-4647-A2B1-27E5FF5F6F3B"); return guids.ToUpperInvariant().Contains("A1591282-1198-4647-A2B1-27E5FF5F6F3B");
} }
} }
@ -367,7 +367,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override bool IsWebProject { public override bool IsWebProject {
get { get {
string guids = GetEvaluatedProperty("ProjectTypeGuids") ?? ""; string guids = GetEvaluatedProperty("ProjectTypeGuids") ?? "";
return guids.Contains("349c5851-65df-11da-9384-00065b846f21"); return guids.ToUpperInvariant().Contains("349C5851-65DF-11DA-9384-00065B846F21");
} }
} }

1
src/Main/Base/Project/Src/Project/Items/ItemType.cs

@ -52,6 +52,7 @@ namespace ICSharpCode.SharpDevelop.Project
public static readonly ItemType Folder = new ItemType("Folder"); public static readonly ItemType Folder = new ItemType("Folder");
public static readonly ItemType WebReferences = new ItemType("WebReferences"); public static readonly ItemType WebReferences = new ItemType("WebReferences");
public static readonly ItemType ServiceReferences = new ItemType("WCFMetadata"); public static readonly ItemType ServiceReferences = new ItemType("WCFMetadata");
public static readonly ItemType ServiceReference = new ItemType("WCFMetadataStorage");
/// <summary> /// <summary>
/// Gets a collection of item types that are known not to be used for files. /// Gets a collection of item types that are known not to be used for files.

20
src/Main/Base/Project/Src/Project/Items/ServiceReferenceProjectItem.cs

@ -0,0 +1,20 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Project
{
public class ServiceReferenceProjectItem : ProjectItem
{
public ServiceReferenceProjectItem(IProject project)
: base(project, ItemType.ServiceReference)
{
}
internal ServiceReferenceProjectItem(IProject project, IProjectItemBackendStore buildItem)
: base(project, buildItem)
{
}
}
}

3
src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs

@ -181,6 +181,9 @@ namespace ICSharpCode.SharpDevelop.Project
case "WCFMetadata": case "WCFMetadata":
return new ServiceReferencesProjectItem(this, item); return new ServiceReferencesProjectItem(this, item);
case "WCFMetadataStorage":
return new ServiceReferenceProjectItem(this, item);
default: default:
if (this.AvailableFileItemTypes.Contains(item.ItemType) if (this.AvailableFileItemTypes.Contains(item.ItemType)
|| SafeFileExists(this.Directory, item.EvaluatedInclude)) || SafeFileExists(this.Directory, item.EvaluatedInclude))

4
src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs

@ -104,7 +104,7 @@ namespace ICSharpCode.SharpDevelop
} }
foreach (IProjectContent referencedContent in referencedContents) { foreach (IProjectContent referencedContent in referencedContents) {
if (referencedContent is ReflectionProjectContent) { if (referencedContent is ReflectionProjectContent) {
((ReflectionProjectContent)referencedContent).InitializeReferences(); ((ReflectionProjectContent)referencedContent).InitializeReferences(referencedContents);
} }
} }
} }
@ -262,7 +262,7 @@ namespace ICSharpCode.SharpDevelop
foreach (IProjectContent referencedContent in referencedContents) { foreach (IProjectContent referencedContent in referencedContents) {
if (referencedContent is ReflectionProjectContent) { if (referencedContent is ReflectionProjectContent) {
((ReflectionProjectContent)referencedContent).InitializeReferences(); ((ReflectionProjectContent)referencedContent).InitializeReferences(referencedContents);
} }
} }

10
src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj

@ -47,6 +47,9 @@
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.ServiceModel">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="System.Web.Services" /> <Reference Include="System.Web.Services" />
@ -95,9 +98,16 @@
<Compile Include="ServiceReferences\DirectoryNodeFactoryTests.cs" /> <Compile Include="ServiceReferences\DirectoryNodeFactoryTests.cs" />
<Compile Include="ServiceReferences\ItemTypeTests.cs" /> <Compile Include="ServiceReferences\ItemTypeTests.cs" />
<Compile Include="ServiceReferences\MSBuildBasedProjectTests.cs" /> <Compile Include="ServiceReferences\MSBuildBasedProjectTests.cs" />
<Compile Include="ServiceReferences\ProjectWithServiceReferencesTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceFileNameTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceGeneratorTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceMapFileTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceMapFileGeneratorTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceNodeTests.cs" /> <Compile Include="ServiceReferences\ServiceReferenceNodeTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceProxyGeneratorTests.cs" />
<Compile Include="ServiceReferences\ServiceReferencesFolderNodeTests.cs" /> <Compile Include="ServiceReferences\ServiceReferencesFolderNodeTests.cs" />
<Compile Include="ServiceReferences\ServiceReferencesProjectItemTests.cs" /> <Compile Include="ServiceReferences\ServiceReferencesProjectItemTests.cs" />
<Compile Include="ServiceReferences\WebServiceMetadataSetTests.cs" />
<Compile Include="StringTagProvider\MockProjectForTagProvider.cs" /> <Compile Include="StringTagProvider\MockProjectForTagProvider.cs" />
<Compile Include="StringTagProvider\NullProjectStringTagProviderTestFixture.cs" /> <Compile Include="StringTagProvider\NullProjectStringTagProviderTestFixture.cs" />
<Compile Include="StringTagProvider\ProjectTagsTestFixture.cs" /> <Compile Include="StringTagProvider\ProjectTagsTestFixture.cs" />

14
src/Main/Base/Test/ServiceReferences/MSBuildBasedProjectTests.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
} }
[Test] [Test]
public void Create_ItemTypeIsWCFMetadata_ReturnsServiceReferenceProjectItem() public void CreateProjectItem_ItemTypeIsWCFMetadata_ReturnsServiceReferencesProjectItem()
{ {
CreateProject(); CreateProject();
CreateProjectItemBackendStore(); CreateProjectItemBackendStore();
@ -36,5 +36,17 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.IsNotNull(projectItem); Assert.IsNotNull(projectItem);
} }
[Test]
public void CreateProjectItem_ItemTypeIsWCFMetadataStorage_ReturnsServiceReferenceProjectItem()
{
CreateProject();
CreateProjectItemBackendStore();
backendStore.ItemType = new ItemType("WCFMetadataStorage");
var projectItem = project.CreateProjectItem(backendStore) as ServiceReferenceProjectItem;
Assert.IsNotNull(projectItem);
}
} }
} }

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

@ -0,0 +1,192 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Tests.WebReferences;
using Microsoft.CSharp;
using NUnit.Framework;
using Rhino.Mocks;
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
[TestFixture]
public class ProjectWithServiceReferencesTests
{
IProject fakeProject;
ProjectWithServiceReferences project;
List<ProjectItem> projectItemsAddedToProject;
MSBuildBasedProject msbuildProject;
void CreateProject()
{
projectItemsAddedToProject = new List<ProjectItem>();
fakeProject = MockRepository.GenerateStub<IProject>();
project = new ProjectWithServiceReferences(fakeProject);
}
void CreateProjectWithMSBuildProject()
{
msbuildProject = WebReferenceTestHelper.CreateTestProject("C#");
project = new ProjectWithServiceReferences(msbuildProject);
}
void SetProjectDirectory(string directory)
{
fakeProject.Stub(p => p.Directory).Return(directory);
}
void SetProjectCodeDomProvider(LanguageProperties languageProperties)
{
fakeProject.Stub(p => p.LanguageProperties).Return(languageProperties);
}
ProjectItem GetFirstServiceReferenceFileInMSBuildProject(ServiceReferenceFileName fileName)
{
return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName.Path);
}
ServiceReferencesProjectItem GetFirstWCFMetadataItemInMSBuildProject()
{
return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem;
}
ServiceReferenceProjectItem GetFirstWCFMetadataStorageItemInMSBuildProject()
{
return msbuildProject.GetItemsOfType(ItemType.ServiceReference).SingleOrDefault() as ServiceReferenceProjectItem;
}
FileProjectItem GetFileFromMSBuildProject(string fileName)
{
return msbuildProject.Items.Single(item => item.FileName == fileName) as FileProjectItem;
}
[Test]
public void ServiceReferencesFolder_ProjectHasNoServiceReferences_ReturnsServiceReferencesFolderAsProjectSubFolder()
{
CreateProject();
SetProjectDirectory(@"d:\projects\MyProject");
string folder = project.ServiceReferencesFolder;
string expectedFolder = @"d:\projects\MyProject\Service References";
Assert.AreEqual(expectedFolder, folder);
}
[Test]
public void CodeDomProvider_UnderlyingProjectUsesCSharpCodeDomProvider_ProjectUsesCSharpCodeDomProvider()
{
CreateProject();
SetProjectCodeDomProvider(LanguageProperties.CSharp);
ICodeDomProvider codeDomProvider = project.CodeDomProvider;
string fileExtension = codeDomProvider.FileExtension;
Assert.AreEqual("cs", fileExtension);
}
[Test]
public void GetServiceReferenceProxyFileName_ProjectHasNoServiceReferences_ReturnsFileNameInServiceReferencesFolderWithSubFolderNamedAfterServiceReference()
{
CreateProject();
SetProjectDirectory(@"d:\projects\MyProject");
ServiceReferenceFileName fileName = project.GetServiceReferenceFileName("Service1");
string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs";
Assert.AreEqual(expectedFileName, fileName.Path);
}
[Test]
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_ProxyFileAddedToProjectAsFileToCompile()
{
CreateProjectWithMSBuildProject();
var proxyFileName = new ServiceReferenceFileName() {
ServiceReferencesFolder = @"d:\projects\MyProject\Service References",
ServiceName = "Service1"
};
project.AddServiceReferenceProxyFile(proxyFileName);
ProjectItem item = GetFirstServiceReferenceFileInMSBuildProject(proxyFileName);
string dependentUpon = item.GetMetadata("DependentUpon");
Assert.AreEqual(ItemType.Compile, item.ItemType);
Assert.AreEqual("Reference.svcmap", dependentUpon);
}
[Test]
public void Save_SaveProjectChanges_UnderlyingProjectIsSaved()
{
CreateProject();
project.Save();
fakeProject.AssertWasCalled(p => p.Save());
}
[Test]
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataItemAddedToProjectForServiceReferencesFolder()
{
CreateProjectWithMSBuildProject();
var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" };
project.AddServiceReferenceProxyFile(proxyFileName);
ServiceReferencesProjectItem item = GetFirstWCFMetadataItemInMSBuildProject();
Assert.AreEqual("Service References", item.Include);
}
[Test]
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataStorageItemAddedToProjectForServiceReferencesFolder()
{
CreateProjectWithMSBuildProject();
var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" };
project.AddServiceReferenceProxyFile(proxyFileName);
ProjectItem item = GetFirstWCFMetadataStorageItemInMSBuildProject();
Assert.AreEqual(@"Service References\Service1", item.Include);
}
[Test]
public void GetServiceReferenceMapFileName_ProjectHasNoServiceReferences_ReturnsMapFileNameInServiceReferencesFolderWithSubFolderNamedAfterServiceReference()
{
CreateProject();
SetProjectDirectory(@"d:\projects\MyProject");
ServiceReferenceMapFileName fileName = project.GetServiceReferenceMapFileName("Service1");
string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.svcmap";
Assert.AreEqual(expectedFileName, fileName.Path);
}
[Test]
public void AddServiceReferenceMapFile_ProjectHasNoServiceReferences_ServiceReferenceMapAddedToProject()
{
CreateProjectWithMSBuildProject();
var mapFileName = new ServiceReferenceMapFileName(@"d:\projects\MyProject\Service References", "Service1");
project.AddServiceReferenceMapFile(mapFileName);
string fileName = @"d:\projects\MyProject\Service References\Service1\Reference.svcmap";
FileProjectItem item = GetFileFromMSBuildProject(fileName);
string lastGenOutput = item.GetMetadata("LastGenOutput");
string generator = item.GetMetadata("Generator");
Assert.AreEqual(ItemType.None, item.ItemType);
Assert.AreEqual("Reference.cs", lastGenOutput);
Assert.AreEqual("WCF Proxy Generator", generator);
}
}
}

42
src/Main/Base/Test/ServiceReferences/ServiceReferenceFileNameTests.cs

@ -0,0 +1,42 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
[TestFixture]
public class ServiceReferenceFileNameTests
{
ServiceReferenceFileName fileName;
void CreateServiceReferenceFileName(string serviceReferencesFolder, string serviceName)
{
fileName = new ServiceReferenceFileName(serviceReferencesFolder, serviceName);
}
[Test]
public void Path_NewInstanceCreated_ReturnsFullPathToFile()
{
CreateServiceReferenceFileName(@"d:\projects\MyProject\Service References", "MyService");
string path = fileName.Path;
string expectedPath = @"d:\projects\MyProject\Service References\MyService\Reference.cs";
Assert.AreEqual(expectedPath, path);
}
[Test]
public void ServiceName_NewInstanceCreated_ReturnsFullPathToFile()
{
CreateServiceReferenceFileName(@"d:\projects\MyProject\Service References", "MyService");
string serviceName = fileName.ServiceName;
Assert.AreEqual("MyService", serviceName);
}
}
}

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

@ -0,0 +1,163 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ServiceModel.Description;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using Rhino.Mocks;
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
[TestFixture]
public class ServiceReferenceGeneratorTests
{
IProjectWithServiceReferences fakeProject;
IServiceReferenceProxyGenerator fakeProxyGenerator;
IServiceReferenceMapGenerator fakeReferenceMapGenerator;
ServiceReferenceGenerator generator;
ServiceReferenceFileGenerator fileGenerator;
IFileSystem fakeFileSystem;
MetadataSet metadata;
void CreateGenerator()
{
metadata = new MetadataSet();
fakeProject = MockRepository.GenerateStub<IProjectWithServiceReferences>();
fakeProxyGenerator = MockRepository.GenerateStub<IServiceReferenceProxyGenerator>();
fakeReferenceMapGenerator = MockRepository.GenerateStub<IServiceReferenceMapGenerator>();
fileGenerator = new ServiceReferenceFileGenerator(fakeProxyGenerator, fakeReferenceMapGenerator);
fakeFileSystem = MockRepository.GenerateStub<IFileSystem>();
generator = new ServiceReferenceGenerator(fakeProject, fileGenerator, fakeFileSystem);
}
void SetServiceReferenceFileName(string serviceReferenceName, ServiceReferenceFileName fileName)
{
fakeProject.Stub(p => p.GetServiceReferenceFileName(serviceReferenceName)).Return(fileName);
}
ServiceReferenceFileName CreateProxyFileName(string serviceReferencesFolder, string serviceName)
{
return new ServiceReferenceFileName(serviceReferencesFolder, serviceName);
}
ServiceReferenceFileName AddProxyFileNameForServiceName(string serviceName)
{
return AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", serviceName);
}
ServiceReferenceFileName AddProxyFileNameForServiceName(string serviceReferencesFolder, string serviceName)
{
ServiceReferenceFileName proxyFileName = CreateProxyFileName(serviceReferencesFolder, serviceName);
SetServiceReferenceFileName(serviceName, proxyFileName);
return proxyFileName;
}
ServiceReferenceMapFileName AddMapFileNameForServiceName(string serviceName)
{
return AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", serviceName);
}
ServiceReferenceMapFileName AddMapFileNameForServiceName(string serviceReferencesFolder, string serviceName)
{
var fileName = new ServiceReferenceMapFileName(serviceReferencesFolder, serviceName);
SetServiceReferenceMapFileName(serviceName, fileName);
return fileName;
}
void SetServiceReferenceMapFileName(string serviceName, ServiceReferenceMapFileName fileName)
{
fakeProject.Stub(p => p.GetServiceReferenceMapFileName(serviceName)).Return(fileName);
}
[Test]
public void AddServiceReference_GeneratesServiceReference_MetadataPassedToProxyGenerator()
{
CreateGenerator();
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
AddMapFileNameForServiceName("MyServiceRef");
generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata);
string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs";
fakeProxyGenerator.AssertWasCalled(p => p.GenerateProxyFile(metadata, expectedProxyFileName));
}
[Test]
public void AddServiceReference_ServiceReferenceDoesNotExist_ServiceReferenceFolderCreated()
{
CreateGenerator();
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyService1");
AddMapFileNameForServiceName("MyService1");
generator.Namespace = "MyService1";
generator.AddServiceReference(metadata);
string expectedDirectory = @"d:\projects\MyProject\Service References\MyService1";
fakeFileSystem.AssertWasCalled(f => f.CreateDirectoryIfMissing(expectedDirectory));
}
[Test]
public void AddServiceReference_GeneratesServiceReference_ServiceReferenceProxyFileAddedToProject()
{
CreateGenerator();
ServiceReferenceFileName expectedProxyFileName =
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
AddMapFileNameForServiceName("MyServiceRef");
generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata);
fakeProject.AssertWasCalled(p => p.AddServiceReferenceProxyFile(expectedProxyFileName));
}
[Test]
public void AddServiceReference_GeneratesServiceReference_ProjectIsSaved()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyServiceRef");
AddMapFileNameForServiceName("MyServiceRef");
generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata);
fakeProject.AssertWasCalled(p => p.Save());
}
[Test]
public void AddServiceReference_GeneratesServiceReference_ReferenceServiceMapFileIsCreated()
{
CreateGenerator();
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata);
var expectedMapFile = new ServiceReferenceMapFile() {
FileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.svcmap"
};
fakeReferenceMapGenerator.AssertWasCalled(gen => gen.GenerateServiceReferenceMapFile(expectedMapFile));
}
[Test]
public void AddServiceReference_GeneratesServiceReference_ReferenceServiceMapFileIsAddedToProject()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyServiceRef");
ServiceReferenceMapFileName expectedMapFileName =
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata);
fakeProject.AssertWasCalled(p => p.AddServiceReferenceMapFile(expectedMapFileName));
}
}
}

69
src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileGeneratorTests.cs

@ -0,0 +1,69 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.IO;
using System.Text;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
[TestFixture]
public class ServiceReferenceMapFileGeneratorTests
{
ServiceReferenceMapGenerator generator;
void CreateFileGenerator()
{
generator = new ServiceReferenceMapGenerator();
}
string GenerateMapFile(ServiceReferenceMapFile mapFile)
{
var output = new StringBuilder();
var writer = new StringWriter(output);
generator.GenerateServiceReferenceMapFile(writer, mapFile);
return output.ToString();
}
ServiceReferenceMapFile CreateServiceReferenceMapFileWithUrl(string url)
{
return ServiceReferenceMapFile.CreateMapFileWithUrl(url);
}
[Test]
public void GenerateServiceReferenceMapFile_MapFileWrittenToStringWriter_SerialisesReferenceGroup()
{
CreateFileGenerator();
ServiceReferenceMapFile mapFile = CreateServiceReferenceMapFileWithUrl("http://localhost/MyService1.svc");
mapFile.ID = "a606bbd6-26e5-4025-a25e-b8c262422f2a";
string output = GenerateMapFile(mapFile);
string expectedOutput =
@"<?xml version=""1.0"" encoding=""utf-16""?>
<ReferenceGroup xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" ID=""a606bbd6-26e5-4025-a25e-b8c262422f2a"" xmlns=""urn:schemas-microsoft-com:xml-wcfservicemap"">
<ClientOptions>
<GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
<EnableDataBinding>true</EnableDataBinding>
<ImportXmlTypes>false</ImportXmlTypes>
<GenerateInternalTypes>false</GenerateInternalTypes>
<GenerateMessageContracts>false</GenerateMessageContracts>
<GenerateSerializableTypes>true</GenerateSerializableTypes>
<Serializer>Auto</Serializer>
<UseSerializerForFaults>true</UseSerializerForFaults>
<ReferenceAllAssemblies>true</ReferenceAllAssemblies>
</ClientOptions>
<MetadataSources>
<MetadataSource Address=""http://localhost/MyService1.svc"" Protocol=""http"" SourceId=""1"" />
</MetadataSources>
<Metadata />
</ReferenceGroup>";
Assert.AreEqual(expectedOutput, output);
}
}
}

57
src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileTests.cs

@ -0,0 +1,57 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
[TestFixture]
public class ServiceReferenceMapFileTests
{
ServiceReferenceMapFile lhs;
ServiceReferenceMapFile rhs;
void CreateMapFilesToCompare()
{
lhs = new ServiceReferenceMapFile();
rhs = new ServiceReferenceMapFile();
}
void AssertFilesAreEqual()
{
bool result = AreFilesEqual();
Assert.IsTrue(result);
}
bool AreFilesEqual()
{
return lhs.Equals(rhs);
}
void AssertFilesAreNotEqual()
{
bool result = AreFilesEqual();
Assert.IsFalse(result);
}
[Test]
public void Equals_FilesAreSame_ReturnsTrue()
{
CreateMapFilesToCompare();
AssertFilesAreEqual();
}
[Test]
public void Equals_FilesHaveDifferentFileNames_ReturnsFalse()
{
CreateMapFilesToCompare();
lhs.FileName = "a";
rhs.FileName = "b";
AssertFilesAreNotEqual();
}
}
}

52
src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs

@ -0,0 +1,52 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom;
using System.ServiceModel.Description;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using NUnit.Framework;
using Rhino.Mocks;
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
[TestFixture]
public class ServiceReferenceProxyGeneratorTests
{
ServiceReferenceProxyGenerator proxyGenerator;
IProjectWithServiceReferences fakeProject;
IServiceReferenceCodeDomBuilder fakeCodeDomBuilder;
ICodeDomProvider fakeCodeDomProvider;
MetadataSet metadata;
void CreateProxyGenerator()
{
metadata = new MetadataSet();
fakeCodeDomBuilder = MockRepository.GenerateStub<IServiceReferenceCodeDomBuilder>();
fakeProject = MockRepository.GenerateStub<IProjectWithServiceReferences>();
fakeCodeDomProvider = MockRepository.GenerateStub<ICodeDomProvider>();
proxyGenerator = new ServiceReferenceProxyGenerator(fakeCodeDomProvider, fakeCodeDomBuilder);
}
CodeCompileUnit CreateCompileUnitToReturnFromCodeDomBuilder(MetadataSet metadata)
{
var compileUnit = new CodeCompileUnit();
fakeCodeDomBuilder.Stub(c => c.GenerateCompileUnit(metadata)).Return(compileUnit);
return compileUnit;
}
[Test]
public void GenerateProxyFile_ProxyToBeGeneratedForMetadata_CodeGeneratedFromCodeDomForProxyFileInProjectSubFolder()
{
CreateProxyGenerator();
CodeCompileUnit compileUnit = CreateCompileUnitToReturnFromCodeDomBuilder(metadata);
proxyGenerator.ServiceReferenceNamespace = "Test";
string expectedProxyFileName = @"d:\projects\MyProject\Service References\Test\Service1\Reference.cs";
proxyGenerator.GenerateProxyFile(metadata, expectedProxyFileName);
fakeCodeDomProvider.AssertWasCalled(p => p.GenerateCodeFromCompileUnit(compileUnit, expectedProxyFileName));
}
}
}

97
src/Main/Base/Test/ServiceReferences/WebServiceMetadataSetTests.cs

@ -0,0 +1,97 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Linq;
using System.ServiceModel.Description;
using System.Web.Services.Discovery;
using System.Xml.Schema;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using NUnit.Framework;
using WSDescription = System.Web.Services.Description;
using WSDiscovery = System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
[TestFixture]
public class WebServiceMetadataSetTests
{
DiscoveryClientProtocol discoveryProtocol;
WebServiceMetadataSet metadata;
void CreateDiscoveryProtocol()
{
discoveryProtocol = new DiscoveryClientProtocol();
}
WSDescription.ServiceDescription AddServiceDescriptionToDiscoveryProtocol()
{
var serviceDescription = new WSDescription.ServiceDescription();
discoveryProtocol.Documents.Add("http://ServiceDescription", serviceDescription);
return serviceDescription;
}
void CreateMetadata()
{
metadata = new WebServiceMetadataSet(discoveryProtocol);
}
XmlSchema AddXmlSchemaToDiscoveryProtocol()
{
var schema = new XmlSchema();
discoveryProtocol.Documents.Add("http://XmlSchema", schema);
return schema;
}
[Test]
public void Constructor_DiscoveryProtocolHasOneServiceDescription_ServiceDescriptionAddedToMetadata()
{
CreateDiscoveryProtocol();
WSDescription.ServiceDescription serviceDescription =
AddServiceDescriptionToDiscoveryProtocol();
CreateMetadata();
MetadataSection section = metadata.MetadataSections.First();
Assert.AreEqual(serviceDescription, section.Metadata);
}
[Test]
public void Constructor_DiscoveryProtocolHasOneServiceDescription_ServiceDescriptionMetadataHasServiceDescriptionDialect()
{
CreateDiscoveryProtocol();
WSDescription.ServiceDescription serviceDescription =
AddServiceDescriptionToDiscoveryProtocol();
CreateMetadata();
MetadataSection section = metadata.MetadataSections.First();
Assert.AreEqual(MetadataSection.ServiceDescriptionDialect, section.Dialect);
}
[Test]
public void Constructor_DiscoveryProtocolHasOneXmlSchema_XmlSchemaAddedToMetadata()
{
CreateDiscoveryProtocol();
XmlSchema schema = AddXmlSchemaToDiscoveryProtocol();
CreateMetadata();
MetadataSection section = metadata.MetadataSections.First();
Assert.AreEqual(schema, section.Metadata);
}
[Test]
public void Constructor_DiscoveryProtocolHasOneXmlSchema_XmlSchemaAddedToMetadataHasXmlSchemaDialect()
{
CreateDiscoveryProtocol();
XmlSchema schema = AddXmlSchemaToDiscoveryProtocol();
CreateMetadata();
MetadataSection section = metadata.MetadataSections.First();
Assert.AreEqual(MetadataSection.XmlSchemaDialect, section.Dialect);
}
}
}

25
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs

@ -4,8 +4,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Reflection; using System.Reflection;
using ICSharpCode.SharpDevelop.Dom.ReflectionLayer; using ICSharpCode.SharpDevelop.Dom.ReflectionLayer;
namespace ICSharpCode.SharpDevelop.Dom namespace ICSharpCode.SharpDevelop.Dom
@ -162,12 +162,17 @@ namespace ICSharpCode.SharpDevelop.Dom
List<DomAssemblyName> missingNames; List<DomAssemblyName> missingNames;
public void InitializeReferences() public void InitializeReferences()
{
InitializeReferences(new IProjectContent[0]);
}
public void InitializeReferences(IProjectContent[] existingContents)
{ {
bool changed = false; bool changed = false;
if (initialized) { if (initialized) {
if (missingNames != null) { if (missingNames != null) {
for (int i = 0; i < missingNames.Count; i++) { for (int i = 0; i < missingNames.Count; i++) {
IProjectContent content = registry.GetExistingProjectContent(missingNames[i]); IProjectContent content = GetExistingProjectContent(existingContents, missingNames[i]);
if (content != null) { if (content != null) {
changed = true; changed = true;
lock (ReferencedContents) { lock (ReferencedContents) {
@ -200,6 +205,22 @@ namespace ICSharpCode.SharpDevelop.Dom
OnReferencedContentsChanged(EventArgs.Empty); OnReferencedContentsChanged(EventArgs.Empty);
} }
IProjectContent GetExistingProjectContent(IProjectContent[] existingProjectContents, DomAssemblyName fullAssemblyName)
{
IProjectContent content = registry.GetExistingProjectContent(fullAssemblyName);
if (content != null) {
return content;
} else if (existingProjectContents.Any()) {
return GetExistingProjectContentForShortName(existingProjectContents, fullAssemblyName.ShortName);
}
return null;
}
IProjectContent GetExistingProjectContentForShortName(IProjectContent[] existingProjectContents, string shortName)
{
return existingProjectContents.FirstOrDefault(pc => pc.AssemblyName == shortName);
}
public override string ToString() public override string ToString()
{ {
return string.Format("[{0}: {1}]", GetType().Name, assemblyFullName); return string.Format("[{0}: {1}]", GetType().Name, assemblyFullName);

Loading…
Cancel
Save