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. 20
      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. 25
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml.cs
  6. 125
      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. 131
      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. 9
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebServicesView.cs
  34. 14
      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 @@ @@ -22,7 +22,7 @@
id="ManagePackages"
label="Manage Packages..."
insertafter="AddWebReference"
insertbefore="AddSeparator"
insertbefore="ShowServiceInBrowser"
class="ICSharpCode.PackageManagement.ManagePackagesCommand"/>
</Condition>
</Path>

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

@ -305,21 +305,15 @@ @@ -305,21 +305,15 @@
<MenuItem id = "AddReference"
label = "${res:ProjectComponent.ContextMenu.AddReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddReferenceToProject"/>
<MenuItem id = "AddServiceReference"
label = "Add Service Reference"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddServiceReferenceToProject"/>
<MenuItem id = "AddWebReference"
label = "${res:ProjectComponent.ContextMenu.AddWebReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/>
<!--label = "${res:ProjectComponent.ContextMenu.AddWebReference}" -->
<Condition name = "WriteableProject">
<MenuItem id = "ShowServiceinBrowser"
<MenuItem id = "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"/>
</Condition>
@ -384,6 +378,9 @@ @@ -384,6 +378,9 @@
<MenuItem id = "AddReference"
label = "${res:ProjectComponent.ContextMenu.AddReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddReferenceToProject"/>
<MenuItem id = "AddServiceReference"
label = "Add Service Reference"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddServiceReferenceToProject"/>
<MenuItem id = "AddWebReference"
label = "${res:ProjectComponent.ContextMenu.AddWebReference}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddWebReferenceToProject"/>
@ -710,6 +707,9 @@ @@ -710,6 +707,9 @@
</Path>
<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">
<MenuItem id = "RemoveMissing"
label = "${res:Global.RemoveButtonText}"

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

@ -60,6 +60,9 @@ @@ -60,6 +60,9 @@
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="System.ServiceModel">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Web.Services" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
@ -265,6 +268,29 @@ @@ -265,6 +268,29 @@
<SubType>Code</SubType>
</Compile>
<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.Designer.cs">
<DependentUpon>ToolNotFoundDialog.cs</DependentUpon>
@ -322,6 +348,7 @@ @@ -322,6 +348,7 @@
<Compile Include="Src\Project\IBuildFeedbackSink.cs" />
<Compile Include="Src\Project\IProjectChangeWatcher.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\MSBuildEngine\MSBuildAdditionalLogger.cs" />
<Compile Include="Src\Project\MSBuildEngine\MSBuildLoggerFilter.cs" />

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

@ -129,7 +129,7 @@ @@ -129,7 +129,7 @@
<TextBlock Text="{Binding ServiceDescriptionMessage}"></TextBlock>
</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"
Margin="4" Background="White"
Text="{Binding DefaultNameSpace}">

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

@ -1,28 +1,12 @@ @@ -1,28 +1,12 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 12.10.2011
* Time: 19:24
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
// 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.Text;
using System.Windows;
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
{
/// <summary>
/// Interaction logic for AddServiceReferenceDialog.xaml
/// </summary>
public partial class AddServiceReferenceDialog : Window
{
public AddServiceReferenceDialog()
@ -30,7 +14,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -30,7 +14,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
InitializeComponent();
}
void okButtonClick(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
@ -43,7 +26,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -43,7 +26,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
Close();
}
void Cbo_LostFocus(object sender, RoutedEventArgs e)
{
var comboBox = (ComboBox)sender;
@ -53,7 +35,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -53,7 +35,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
comboBox.SelectedItem = newItem;
}
void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (e.NewValue != null) {

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

@ -1,11 +1,6 @@ @@ -1,11 +1,6 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 12.10.2011
* Time: 20:05
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
// 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;
using System.Collections.Generic;
@ -23,20 +18,17 @@ using System.Windows.Controls; @@ -23,20 +18,17 @@ using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Project.Commands;
using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.SharpDevelop.Widgets.Resources;
using Microsoft.Win32;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
/// <summary>
/// Description of AddServiceReferenceViewModel.
/// </summary>
public class AddServiceReferenceViewModel : ViewModelBase
{
string header1 = "To see a list of available services on a specific server, ";
@ -48,11 +40,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -48,11 +40,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
string serviceDescriptionMessage;
string namespacePrefix = String.Empty;
private ObservableCollection<ImageAndDescription> twoValues;
ObservableCollection<ImageAndDescription> twoValues;
private List<string> mruServices = new List<string>();
private string selectedService;
private IProject project;
List<string> mruServices = new List<string>();
string selectedService;
IProject project;
List<ServiceItem> items = new List <ServiceItem>();
ServiceItem myItem;
@ -61,16 +53,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -61,16 +53,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
ServiceDescriptionCollection serviceDescriptionCollection = new ServiceDescriptionCollection();
CredentialCache credentialCache = new CredentialCache();
WebServiceDiscoveryClientProtocol discoveryClientProtocol;
WebServiceMetadataSet serviceMetadata;
delegate DiscoveryDocument DiscoverAnyAsync(string url);
delegate void DiscoveredWebServicesHandler(DiscoveryClientProtocol protocol);
delegate void AuthenticationHandler(Uri uri, string authenticationType);
public AddServiceReferenceViewModel(IProject project)
{
this.project = project;
discoverButtonContend = "Disvover";
discoverButtonContent = "Discover";
HeadLine = header1 + header2;
MruServices = ServiceReferenceHelper.AddMruList();
@ -82,12 +74,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -82,12 +74,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
TwoValues = new ObservableCollection<ImageAndDescription>();
}
#region Go Command
public System.Windows.Input.ICommand GoCommand { get; private set; }
private void ExecuteGo ()
void ExecuteGo()
{
if (String.IsNullOrEmpty(SelectedService)) {
MessageBox.Show(noUrl);
@ -97,25 +88,23 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -97,25 +88,23 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
StartDiscovery(uri, new DiscoveryNetworkCredential(CredentialCache.DefaultNetworkCredentials, DiscoveryNetworkCredential.DefaultAuthenticationType));
}
private bool CanExecuteGo()
bool CanExecuteGo()
{
return true;
}
#endregion
#region Discover Command
public System.Windows.Input.ICommand DiscoverCommand { get; private set; }
private bool CanExecuteDiscover ()
bool CanExecuteDiscover()
{
return true;
}
private void ExecuteDiscover ()
void ExecuteDiscover()
{
MessageBox.Show("<Discover> is not implemented at the Moment");
}
@ -126,12 +115,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -126,12 +115,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public System.Windows.Input.ICommand AdvancedDialogCommand { get; private set; }
private bool CanExecuteAdvancedDialogCommand ()
bool CanExecuteAdvancedDialogCommand()
{
return true;
}
private void ExecuteAdvancedDialogCommand ()
void ExecuteAdvancedDialogCommand()
{
var vm = new AdvancedServiceViewModel();
var view = new AdvancedServiceDialog();
@ -141,7 +130,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -141,7 +130,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
#endregion
#region discover service Code from Matt
void StartDiscovery(Uri uri, DiscoveryNetworkCredential credential)
@ -162,7 +150,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -162,7 +150,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
/// completed.
/// </summary>
///
void DiscoveryCompleted(IAsyncResult result)
{
AsyncDiscoveryState state = (AsyncDiscoveryState)result.AsyncState;
@ -196,7 +183,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -196,7 +183,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
}
/// <summary>
/// Stops any outstanding asynchronous discovery requests.
/// </summary>
@ -218,7 +204,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -218,7 +204,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
}
void AuthenticateUser(Uri uri, string authenticationType)
{
DiscoveryNetworkCredential credential = (DiscoveryNetworkCredential)credentialCache.GetCredential(uri, authenticationType);
@ -233,7 +218,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -233,7 +218,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
}
void AddCredential(Uri uri, DiscoveryNetworkCredential credential)
{
NetworkCredential matchedCredential = credentialCache.GetCredential(uri, credential.AuthenticationType);
@ -243,18 +227,18 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -243,18 +227,18 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
credentialCache.Add(uri, credential.AuthenticationType, credential);
}
void DiscoveredWebServices(DiscoveryClientProtocol protocol)
{
if (protocol != null) {
serviceDescriptionCollection = ServiceReferenceHelper.GetServiceDescriptions(protocol);
serviceMetadata = new WebServiceMetadataSet(protocol);
ServiceDescriptionMessage = String.Format("{0} service(s) found at address {1}",
serviceDescriptionCollection.Count,
discoveryUri);
DefaultNameSpace = GetDefaultNamespace();
FillItems(serviceDescriptionCollection);
var referenceName = ServiceReferenceHelper.GetReferenceName(discoveryUri);
string referenceName = ServiceReferenceHelper.GetReferenceName(discoveryUri);
}
}
@ -276,38 +260,39 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -276,38 +260,39 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public string Title
{
get { return title; }
set {title = value;
set {
title = value;
base.RaisePropertyChanged(() => Title);
}
}
public string HeadLine { get; set; }
private string discoverButtonContend;
string discoverButtonContent;
public string DiscoverButtonContend {
get { return discoverButtonContend; }
set { discoverButtonContend = value;
base.RaisePropertyChanged(() =>DiscoverButtonContend);}
public string DiscoverButtonContent {
get { return discoverButtonContent; }
set {
discoverButtonContent = value;
base.RaisePropertyChanged(() => DiscoverButtonContent);
}
}
public List<string> MruServices {
get {
return mruServices; }
set { mruServices = value;
get { return mruServices; }
set {
mruServices = value;
base.RaisePropertyChanged(() => MruServices);
}
}
public string SelectedService {
get { return selectedService; }
set { selectedService = value;
base.RaisePropertyChanged(() =>SelectedService);}
set {
selectedService = value;
base.RaisePropertyChanged(() => SelectedService);
}
}
public List <ServiceItem> ServiceItems {
get { return items; }
@ -317,30 +302,30 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -317,30 +302,30 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
}
public ServiceItem ServiceItem {
get { return myItem; }
set { myItem = value;
set {
myItem = value;
UpdateListView();
base.RaisePropertyChanged(() => ServiceItem);
}
}
public string ServiceDescriptionMessage {
get { return serviceDescriptionMessage; }
set { serviceDescriptionMessage = value;
set {
serviceDescriptionMessage = value;
base.RaisePropertyChanged(() => ServiceDescriptionMessage);
}
}
public string DefaultNameSpace {
get { return defaultNameSpace; }
set { defaultNameSpace = value;
base.RaisePropertyChanged(() =>DefaultNameSpace);}
set {
defaultNameSpace = value;
base.RaisePropertyChanged(() => DefaultNameSpace);
}
}
public ObservableCollection<ImageAndDescription> TwoValues {
get { return twoValues; }
@ -361,28 +346,22 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -361,28 +346,22 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
var tv = new ImageAndDescription(PresentationResourceService.GetBitmapSource("Icons.16x16.Interface"),
desc.RetrievalUrl);
TwoValues.Add(tv);
}
else if(ServiceItem.Tag is PortType)
{
} else if(ServiceItem.Tag is PortType) {
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"),
op.Name));
}
}
}
void FillItems(ServiceDescriptionCollection descriptions)
{
foreach (ServiceDescription element in descriptions)
{
foreach(ServiceDescription element in descriptions) {
Add(element);
}
}
void Add(ServiceDescription description)
{
List<ServiceItem> items = new List<ServiceItem>();
@ -402,8 +381,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -402,8 +381,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
ServiceItems = items;
}
}
public void AddServiceReference()
{
var serviceGenerator = new ServiceReferenceGenerator(project);
serviceGenerator.Namespace = defaultNameSpace;
serviceGenerator.AddServiceReference(serviceMetadata);
new RefreshProjectBrowser().Run();
}
}
public class ImageAndDescription
{
@ -417,8 +403,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -417,8 +403,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public string Description { get; set; }
}
public class ServiceItem : ImageAndDescription
{
public ServiceItem(BitmapSource bitmapSource, string description) : base(bitmapSource, description)
@ -433,10 +417,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -433,10 +417,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public CheckableImageAndDescription(BitmapSource bitmapSource, string description) : base(bitmapSource, description)
{
}
private bool itemChecked;
bool itemChecked;
public bool ItemChecked {
get { return itemChecked; }

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

@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
Text="{Binding AccessLevel}"></TextBlock>
<ComboBox
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>
<CheckBox
@ -83,7 +83,7 @@ @@ -83,7 +83,7 @@
Margin="25,0,0,0"
VerticalAlignment="Center"
IsChecked="{Binding GenerateMessageContract}"
Content="Allways generate message contracts"></CheckBox>
Content="Always generate message contracts"></CheckBox>
<TextBlock
Margin="25,0,0,0"
Grid.Row="1"

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

@ -1,11 +1,6 @@ @@ -1,11 +1,6 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 02.11.2011
* Time: 19:49
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
// 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.Text;
@ -18,9 +13,6 @@ using System.Windows.Media; @@ -18,9 +13,6 @@ using System.Windows.Media;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
/// <summary>
/// Interaction logic for AdvancedServiceDialog.xaml
/// </summary>
public partial class AdvancedServiceDialog : Window
{
public AdvancedServiceDialog()

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

@ -1,25 +1,17 @@ @@ -1,25 +1,17 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 02.11.2011
* Time: 19:50
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
// 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.ObjectModel;
using System.ComponentModel;
using System.Windows.Media.Imaging;
using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop.Widgets;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
/// <summary>
/// Description of AdvancedServiceViewModel.
/// </summary>
///
public enum Modifyers
public enum Modifiers
{
//[Description("${res:Dialog.ProjectOptions.RunPostBuildEvent.Always}")]
Public,
@ -58,17 +50,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -58,17 +50,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
OrderedDictionary
}
internal class AdvancedServiceViewModel : ViewModelBase
{
private 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";
private string accesslevel = "Access level for generated classes:";
string compatibilityText = "Add a Web Reference instead of a Service Reference. ";
string c_2 = "This will generate code based on .NET Framework 2.0 Web Services technology.";
string accesslevel = "Access level for generated classes:";
public AdvancedServiceViewModel()
{
Title ="Service Reference Settings";
UseReferencedAssemblies = true;
var image = PresentationResourceService.GetBitmapSource("Icons.16x16.Reference");
BitmapSource image = PresentationResourceService.GetBitmapSource("Icons.16x16.Reference");
AssembliesToReference = new ObservableCollection<CheckableImageAndDescription>();
AssembliesToReference.Add(new CheckableImageAndDescription(image, "Microsoft.CSharp"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "mscorlib"));
@ -87,116 +79,103 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -87,116 +79,103 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
get { return accesslevel; }
}
private Modifyers selectedModifyer;
Modifiers selectedModifier;
public Modifyers SelectedModifyer {
get { return selectedModifyer; }
set { selectedModifyer = value;
base.RaisePropertyChanged(() =>SelectedModifyer); }
public Modifiers SelectedModifier {
get { return selectedModifier; }
set {
selectedModifier = value;
base.RaisePropertyChanged(() => SelectedModifier);
}
}
bool generateAsyncOperations;
public bool GenerateAsyncOperations {
get { return generateAsyncOperations; }
set { generateAsyncOperations = value;
base.RaisePropertyChanged(() =>GenerateAsyncOperations);}
set {
generateAsyncOperations = value;
base.RaisePropertyChanged(() => GenerateAsyncOperations);
}
}
bool generateMessageContract;
public bool GenerateMessageContract {
get { return generateMessageContract; }
set { generateMessageContract = value;
base.RaisePropertyChanged(() =>GenerateMessageContract);}
set {
generateMessageContract = value;
base.RaisePropertyChanged(() => GenerateMessageContract);
}
}
private CollectionTypes collectionType;
CollectionTypes collectionType;
public CollectionTypes CollectionType {
get { return collectionType; }
set { collectionType = value;
base.RaisePropertyChanged(() =>CollectionType);}
set {
collectionType = value;
base.RaisePropertyChanged(() => CollectionType);
}
}
private DictionaryCollectionTypes dictionaryCollectionType;
DictionaryCollectionTypes dictionaryCollectionType;
public DictionaryCollectionTypes DictionaryCollectionType {
get { return dictionaryCollectionType; }
set { dictionaryCollectionType = value;
base.RaisePropertyChanged(() =>DictionaryCollectionType);}
set {
dictionaryCollectionType = value;
base.RaisePropertyChanged(() => DictionaryCollectionType);
}
}
private bool useReferencedAssemblies;
bool useReferencedAssemblies;
public bool UseReferencedAssemblies {
get { return useReferencedAssemblies; }
set { useReferencedAssemblies = value;
if (useReferencedAssemblies) {
ReuseTypes = true;
set {
useReferencedAssemblies = value;
ReuseTypes = useReferencedAssemblies;
base.RaisePropertyChanged(() => UseReferencedAssemblies);
}
else {
ReuseTypes = false;
}
base.RaisePropertyChanged(() =>UseReferencedAssemblies);}
}
private bool reuseTypes;
bool reuseTypes;
public bool ReuseTypes {
get { return reuseTypes; }
set { reuseTypes = value;
if (reuseTypes) {
set {
reuseTypes = value;
base.RaisePropertyChanged(() => ReuseTypes);
}
else
{
}
base.RaisePropertyChanged(() =>ReuseTypes);}
}
private bool reuseReferencedTypes;
bool reuseReferencedTypes;
public bool ReuseReferencedTypes {
get { return reuseReferencedTypes; }
set { reuseReferencedTypes = value;
if (reuseReferencedTypes)
{
ListViewEnable = true;
} else
{
ListViewEnable = false;
set {
reuseReferencedTypes = value;
ListViewEnable = value;
base.RaisePropertyChanged(() => ReuseReferencedTypes);
}
base.RaisePropertyChanged(() => ReuseReferencedTypes);}
}
private bool listViewEnable;
bool listViewEnable;
public bool ListViewEnable {
get { return listViewEnable; }
set { listViewEnable = value;
base.RaisePropertyChanged(() => ListViewEnable);}
set {
listViewEnable = value;
base.RaisePropertyChanged(() => ListViewEnable);
}
}
public ObservableCollection <CheckableImageAndDescription> AssembliesToReference { get; private set; }
public string CompatibilityText
{
get {
return compatibilityText + c_2;
}
get { return compatibilityText + c_2; }
}
}
}

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

@ -0,0 +1,29 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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);
}
}
}
}

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

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

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

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

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

@ -359,7 +359,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -359,7 +359,7 @@ namespace ICSharpCode.SharpDevelop.Project
public bool IsSilverlightProject {
get {
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 @@ -367,7 +367,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override bool IsWebProject {
get {
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 @@ -52,6 +52,7 @@ namespace ICSharpCode.SharpDevelop.Project
public static readonly ItemType Folder = new ItemType("Folder");
public static readonly ItemType WebReferences = new ItemType("WebReferences");
public static readonly ItemType ServiceReferences = new ItemType("WCFMetadata");
public static readonly ItemType ServiceReference = new ItemType("WCFMetadataStorage");
/// <summary>
/// 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 @@ @@ -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 @@ -181,6 +181,9 @@ namespace ICSharpCode.SharpDevelop.Project
case "WCFMetadata":
return new ServiceReferencesProjectItem(this, item);
case "WCFMetadataStorage":
return new ServiceReferenceProjectItem(this, item);
default:
if (this.AvailableFileItemTypes.Contains(item.ItemType)
|| SafeFileExists(this.Directory, item.EvaluatedInclude))

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

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

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

@ -47,6 +47,9 @@ @@ -47,6 +47,9 @@
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.ServiceModel">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Web.Services" />
@ -95,9 +98,16 @@ @@ -95,9 +98,16 @@
<Compile Include="ServiceReferences\DirectoryNodeFactoryTests.cs" />
<Compile Include="ServiceReferences\ItemTypeTests.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\ServiceReferenceProxyGeneratorTests.cs" />
<Compile Include="ServiceReferences\ServiceReferencesFolderNodeTests.cs" />
<Compile Include="ServiceReferences\ServiceReferencesProjectItemTests.cs" />
<Compile Include="ServiceReferences\WebServiceMetadataSetTests.cs" />
<Compile Include="StringTagProvider\MockProjectForTagProvider.cs" />
<Compile Include="StringTagProvider\NullProjectStringTagProviderTestFixture.cs" />
<Compile Include="StringTagProvider\ProjectTagsTestFixture.cs" />

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

@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
}
[Test]
public void Create_ItemTypeIsWCFMetadata_ReturnsServiceReferenceProjectItem()
public void CreateProjectItem_ItemTypeIsWCFMetadata_ReturnsServiceReferencesProjectItem()
{
CreateProject();
CreateProjectItemBackendStore();
@ -36,5 +36,17 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -36,5 +36,17 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -4,8 +4,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using ICSharpCode.SharpDevelop.Dom.ReflectionLayer;
namespace ICSharpCode.SharpDevelop.Dom
@ -162,12 +162,17 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -162,12 +162,17 @@ namespace ICSharpCode.SharpDevelop.Dom
List<DomAssemblyName> missingNames;
public void InitializeReferences()
{
InitializeReferences(new IProjectContent[0]);
}
public void InitializeReferences(IProjectContent[] existingContents)
{
bool changed = false;
if (initialized) {
if (missingNames != null) {
for (int i = 0; i < missingNames.Count; i++) {
IProjectContent content = registry.GetExistingProjectContent(missingNames[i]);
IProjectContent content = GetExistingProjectContent(existingContents, missingNames[i]);
if (content != null) {
changed = true;
lock (ReferencedContents) {
@ -200,6 +205,22 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -200,6 +205,22 @@ namespace ICSharpCode.SharpDevelop.Dom
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()
{
return string.Format("[{0}: {1}]", GetType().Name, assemblyFullName);

Loading…
Cancel
Save