1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
6
using System.Web.Services.Discovery;
7
using System.Windows.Forms;
9
using ICSharpCode.Core;
10
using ICSharpCode.SharpDevelop.Gui;
12
namespace ICSharpCode.SharpDevelop.Project.Commands
14
public class AddReferenceToProject : AbstractMenuCommand
16
public override void Run()
18
AbstractProjectBrowserTreeNode node = Owner as AbstractProjectBrowserTreeNode;
19
IProject project = (node != null) ? node.Project : ProjectService.CurrentProject;
20
if (project == null) {
23
LoggingService.Info("Show add reference dialog for " + project.FileName);
24
using (SelectReferenceDialog selDialog = new SelectReferenceDialog(project)) {
25
if (selDialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
26
foreach (ReferenceProjectItem reference in selDialog.ReferenceInformations) {
27
ProjectService.AddProjectItem(project, reference);
35
public class RefreshWebReference : AbstractMenuCommand
37
public override void Run()
39
WebReferenceNode node = Owner as WebReferenceNode;
40
if (node != null && node.Project != null && node.ProjectItem != null) {
41
WebReferenceUrl url = (WebReferenceUrl)node.ProjectItem;
43
// Discover web services at url.
44
DiscoveryClientProtocol protocol = DiscoverWebServices(url.UpdateFromURL);
45
if (protocol != null) {
47
WebReference webReference = new WebReference(url.Project, url.UpdateFromURL, node.Text, url.Namespace, protocol);
51
WebReferenceChanges changes = webReference.GetChanges(url.Project);
52
if (changes.Changed) {
53
foreach (ProjectItem itemRemoved in changes.ItemsRemoved) {
54
ProjectService.RemoveProjectItem(url.Project, itemRemoved);
55
FileService.RemoveFile(itemRemoved.FileName, false);
57
foreach (ProjectItem newItem in changes.NewItems) {
58
ProjectService.AddProjectItem(url.Project, newItem);
59
FileNode fileNode = new FileNode(newItem.FileName, FileNodeStatus.InProject);
60
fileNode.InsertSorted(node);
62
ProjectBrowserPad.Instance.ProjectBrowserControl.TreeView.Sort();
66
// Update code completion.
67
ParserService.ParseFile(webReference.WebProxyFileName);
69
} catch (WebException ex) {
70
MessageService.ShowException(ex, String.Format(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.ProjectBrowser.RefreshWebReference.ReadServiceDescriptionError}"), url.UpdateFromURL));
75
DiscoveryClientProtocol DiscoverWebServices(string url)
77
WebServiceDiscoveryClientProtocol protocol = new WebServiceDiscoveryClientProtocol();
78
NetworkCredential credential = CredentialCache.DefaultNetworkCredentials;
82
protocol.Credentials = credential;
83
protocol.DiscoverAny(url);
84
protocol.ResolveOneLevel();
86
} catch (WebException ex) {
87
if (protocol.IsAuthenticationRequired) {
88
using (UserCredentialsDialog dialog = new UserCredentialsDialog(url, protocol.GetAuthenticationHeader().AuthenticationType)) {
89
if (dialog.ShowDialog(WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
90
credential = dialog.Credential;
104
public class AddWebReferenceToProject : AbstractMenuCommand
106
public override void Run()
108
AbstractProjectBrowserTreeNode node = ProjectBrowserPad.Instance.SelectedNode;
109
if (node != null && node.Project != null) {
110
using (AddWebReferenceDialog refDialog = new AddWebReferenceDialog(node.Project)) {
111
refDialog.NamespacePrefix = node.Project.RootNamespace;
112
if (refDialog.ShowDialog(WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
113
// Do not overwrite existing web references.
114
refDialog.WebReference.Name = WebReference.GetReferenceName(refDialog.WebReference.WebReferencesDirectory, refDialog.WebReference.Name);
115
refDialog.WebReference.Save();
117
foreach (ProjectItem item in refDialog.WebReference.Items) {
118
ProjectService.AddProjectItem(node.Project, item);
121
AddWebReferenceToProjectBrowser(node, refDialog.WebReference);
123
// Add proxy to code completion.
124
ParserService.ParseFile(refDialog.WebReference.WebProxyFileName);
132
void AddWebReferenceToProjectBrowser(AbstractProjectBrowserTreeNode node, WebReference webReference)
134
TreeNode webReferencesNode = null;
135
if (node is ProjectNode) {
136
webReferencesNode = AddWebReferenceToProjectNode((ProjectNode)node, webReference);
137
} else if (node is WebReferencesFolderNode) {
138
webReferencesNode = node;
139
WebReferenceNodeBuilder.AddWebReference((WebReferencesFolderNode)webReferencesNode, webReference);
140
} else if (node is ReferenceFolder && node.Parent != null && node.Parent is ProjectNode) {
141
webReferencesNode = AddWebReferenceToProjectNode((ProjectNode)node.Parent, webReference);
143
LoggingService.Warn("AddWebReferenceToProjectBrowser: Selected node type is not handled.");
144
AddWebReferenceToProjectBrowser(node.Parent as AbstractProjectBrowserTreeNode, webReference);
147
if (webReferencesNode != null) {
148
ProjectBrowserPad.Instance.ProjectBrowserControl.TreeView.Sort();
149
webReferencesNode.Expand();
150
webReferencesNode.EnsureVisible();
154
TreeNode GetWebReferencesFolderNode(ProjectNode projectNode)
156
foreach (TreeNode node in projectNode.Nodes) {
157
WebReferencesFolderNode webReferencesNode = node as WebReferencesFolderNode;
158
if (webReferencesNode != null) {
159
return webReferencesNode;
165
TreeNode AddWebReferenceToProjectNode(ProjectNode node, WebReference webReference)
167
TreeNode webReferencesNode = WebReferenceNodeBuilder.AddWebReferencesFolderNode(node, webReference);
168
if (webReferencesNode == null) {
169
webReferencesNode = GetWebReferencesFolderNode((ProjectNode)node);
170
if (webReferencesNode != null) {
171
WebReferenceNodeBuilder.AddWebReference((WebReferencesFolderNode)webReferencesNode, webReference);
174
return webReferencesNode;
178
public class RefreshReference : AbstractMenuCommand
180
public override void Run()
182
ReferenceNode node = Owner as ReferenceNode;
185
ReferenceProjectItem item = node.ReferenceProjectItem;
187
AssemblyParserService.RefreshProjectContentForReference(item);