Changeset 2816 for branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.DeploymentService.AdminClient/PluginListView.cs
- Timestamp:
- 02/16/10 18:44:45 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.DeploymentService.AdminClient/PluginListView.cs
r2804 r2816 9 9 using HeuristicLab.MainForm; 10 10 using HeuristicLab.PluginInfrastructure; 11 using PluginDeploymentService = HeuristicLab.PluginInfrastructure.Advanced.DeploymentService; 12 using HeuristicLab.PluginInfrastructure.Manager; 13 using System.ServiceModel; 14 using ICSharpCode.SharpZipLib.Zip; 15 using System.IO; 11 16 12 17 namespace HeuristicLab.DeploymentService.AdminClient { 13 18 public partial class PluginListView : HeuristicLab.MainForm.WindowsForms.View { 14 private List<ListViewItem> localPlugins; 15 private List<ListViewItem> serverPlugins; 19 private Dictionary<IPluginDescription, PluginDeploymentService.PluginDescription> localAndServerPlugins; 16 20 private BackgroundWorker pluginUploadWorker; 21 private BackgroundWorker updateServerPluginsWorker; 17 22 18 23 public PluginListView() { … … 20 25 Caption = "Plugins"; 21 26 22 localPlugins = new List<ListViewItem>(); 23 serverPlugins = new List<ListViewItem>(); 27 using (var client = new PluginDeploymentService.UpdateClient()) { 28 serverUrlTextBox.Text = client.Endpoint.Address.ToString(); 29 } 30 31 localAndServerPlugins = new Dictionary<IPluginDescription, PluginDeploymentService.PluginDescription>(); 24 32 25 33 pluginUploadWorker = new BackgroundWorker(); … … 27 35 pluginUploadWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(pluginUploadWorker_RunWorkerCompleted); 28 36 29 UpdateLocalPlugins(); 37 updateServerPluginsWorker = new BackgroundWorker(); 38 updateServerPluginsWorker.DoWork += new DoWorkEventHandler(updateServerPluginsWorker_DoWork); 39 updateServerPluginsWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(updateServerPluginsWorker_RunWorkerCompleted); 40 } 41 42 void updateServerPluginsWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { 43 if (!e.Cancelled && e.Result != null) { 44 UpdateLocalPlugins(); 45 var plugins = (PluginDeploymentService.PluginDescription[])e.Result; 46 foreach (var plugin in plugins) { 47 var matchingLocalPlugin = (from localPlugin in localAndServerPlugins.Keys 48 where localPlugin.Name == plugin.Name 49 where localPlugin.Version == localPlugin.Version 50 select localPlugin).SingleOrDefault(); 51 if (matchingLocalPlugin != null) { 52 localAndServerPlugins[matchingLocalPlugin] = plugin; 53 } 54 } 55 UpdatePluginList(); 56 OnConnected(); 57 } else { 58 OnDisconnected(); 59 } 60 Cursor = Cursors.Default; 61 } 62 63 private void UpdatePluginList() { 64 listView.Items.Clear(); 65 foreach (var pair in localAndServerPlugins) { 66 var item = MakeListViewItem(pair.Key); 67 listView.Items.Add(item); 68 } 69 } 70 71 void updateServerPluginsWorker_DoWork(object sender, DoWorkEventArgs e) { 72 try { 73 using (var client = new PluginDeploymentService.UpdateClient()) { 74 e.Result = client.GetPlugins(); 75 e.Cancel = false; 76 } 77 } 78 catch (EndpointNotFoundException ex) { 79 e.Result = null; 80 e.Cancel = true; 81 } 82 catch (FaultException ex) { 83 e.Result = null; 84 e.Cancel = true; 85 } 30 86 } 31 87 … … 36 92 void pluginUploadWorker_DoWork(object sender, DoWorkEventArgs e) { 37 93 var selectedPlugins = (IEnumerable<IPluginDescription>)e.Argument; 38 AdminService.AdminClient adminClient = new HeuristicLab.DeploymentService.AdminClient.AdminService.AdminClient(); 39 40 foreach (var plugin in IteratePlugins(selectedPlugins)) { 41 adminClient.DeployPlugin(MakePluginDescription(plugin), new byte[0]); 42 } 43 } 44 45 private HeuristicLab.PluginInfrastructure.PluginUpdateService.PluginDescription MakePluginDescription(IPluginDescription plugin) { 94 using (PluginDeploymentService.AdminClient adminClient = new PluginDeploymentService.AdminClient()) { 95 96 foreach (var plugin in IteratePlugins(selectedPlugins)) { 97 adminClient.DeployPlugin(MakePluginDescription(plugin), CreateZipPackage(plugin)); 98 } 99 } 100 } 101 102 private byte[] CreateZipPackage(IPluginDescription plugin) { 103 using (MemoryStream stream = new MemoryStream()) { 104 ZipFile zipFile = new ZipFile(stream); 105 zipFile.BeginUpdate(); 106 foreach (var file in plugin.Files) { 107 zipFile.Add(file.Name); 108 } 109 zipFile.CommitUpdate(); 110 stream.Seek(0, SeekOrigin.Begin); 111 return stream.GetBuffer(); 112 } 113 } 114 115 private PluginDeploymentService.PluginDescription MakePluginDescription(IPluginDescription plugin) { 46 116 var dependencies = from dep in plugin.Dependencies 47 117 select MakePluginDescription(dep); 48 return new HeuristicLab.PluginInfrastructure.PluginUpdateService.PluginDescription(plugin.Name, plugin.Version, dependencies); 118 if (string.IsNullOrEmpty(plugin.ContactName) || string.IsNullOrEmpty(plugin.ContactEmail)) { 119 return new PluginDeploymentService.PluginDescription(plugin.Name, plugin.Version, dependencies); 120 } else return new PluginDeploymentService.PluginDescription(plugin.Name, plugin.Version, dependencies, plugin.ContactName + ", " + plugin.ContactEmail, plugin.LicenseText); 49 121 } 50 122 … … 59 131 60 132 public void UpdateLocalPlugins() { 61 local Plugins.ForEach(x => listView.Items.Remove(x));62 localPlugins.Clear(); 133 localAndServerPlugins.Clear(); 134 63 135 foreach (var plugin in ApplicationManager.Manager.Plugins) { 64 var item = MakeListViewItem(plugin); 65 item.Group = listView.Groups["Local plugins"]; 66 listView.Items.Add(item); 67 localPlugins.Add(item); 68 } 69 } 70 71 public void UpdateServerPlugins() { 72 serverPlugins.ForEach(x => listView.Items.Remove(x)); 73 serverPlugins.Clear(); 74 var client = new HeuristicLab.PluginInfrastructure.PluginUpdateService.UpdateClient(); 75 foreach (var plugin in client.GetPlugins()) { 76 var item = MakeListViewItem(plugin); 77 item.Group = listView.Groups["Server plugins"]; 78 listView.Items.Add(item); 79 localPlugins.Add(item); 80 } 81 } 82 83 private static ListViewItem MakeListViewItem(HeuristicLab.PluginInfrastructure.PluginUpdateService.PluginDescription plugin) { 84 ListViewItem item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString() }); 136 localAndServerPlugins.Add(plugin, null); 137 } 138 } 139 140 141 private ListViewItem MakeListViewItem(IPluginDescription plugin) { 142 ListViewItem item; 143 if (localAndServerPlugins[plugin] != null) { 144 item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), localAndServerPlugins[plugin].Version.ToString() }); 145 } else { 146 item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), string.Empty }); 147 } 85 148 item.Tag = plugin; 86 149 return item; 87 150 } 88 151 89 private static ListViewItem MakeListViewItem(IPluginDescription plugin) {90 ListViewItem item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString() });91 item.Tag = plugin;92 return item;93 }94 95 152 private void listView_SelectedIndexChanged(object sender, EventArgs e) { 153 localPluginDetailsPanel.Controls.Clear(); 154 serverPluginDetailsGroupBox.Controls.Clear(); 155 96 156 if (listView.SelectedItems.Count > 0) { 97 if (listView.SelectedItems[0].Tag is IPluginDescription) { 98 var plugin = (IPluginDescription)listView.SelectedItems[0].Tag; 99 StringBuilder strBuilder = new StringBuilder(); 100 101 strBuilder.Append("Name: ").AppendLine(plugin.Name); 102 strBuilder.Append("Version: ").AppendLine(plugin.Version.ToString()); 103 strBuilder.AppendLine("Files:"); 104 foreach (var file in plugin.Files) { 105 strBuilder.Append(file.Name + " " + file.Type); 106 } 107 strBuilder.AppendLine("Dependencies:"); 108 foreach (var dep in plugin.Dependencies) { 109 strBuilder.Append(dep.Name + " " + dep.Version); 110 } 111 detailsTextBox.Text = strBuilder.ToString(); 112 } else if (listView.SelectedItems[0].Tag is HeuristicLab.PluginInfrastructure.PluginUpdateService.PluginDescription) { 113 var plugin = (HeuristicLab.PluginInfrastructure.PluginUpdateService.PluginDescription)listView.SelectedItems[0].Tag; 114 StringBuilder strBuilder = new StringBuilder(); 115 116 strBuilder.Append("Name: ").AppendLine(plugin.Name); 117 strBuilder.Append("Version: ").AppendLine(plugin.Version.ToString()); 118 strBuilder.AppendLine("Dependencies:"); 119 foreach (var dep in plugin.Dependencies) { 120 strBuilder.Append(dep.Name + " " + dep.Version); 121 } 122 detailsTextBox.Text = strBuilder.ToString(); 123 } 124 } else { 125 detailsTextBox.Text = string.Empty; 126 } 157 var plugin = (IPluginDescription)listView.SelectedItems[0].Tag; 158 ShowPluginDetails(plugin); 159 } 160 } 161 162 private void ShowPluginDetails(IPluginDescription plugin) { 163 var localView = new LocalPluginView(plugin); 164 var serverView = new ServerPluginView(localAndServerPlugins[plugin]); 165 localView.Dock = DockStyle.Fill; 166 serverView.Dock = DockStyle.Fill; 167 localPluginDetailsPanel.Controls.Add(localView); 168 serverPluginDetailsGroupBox.Controls.Add(serverView); 127 169 } 128 170 … … 136 178 } 137 179 } 180 181 private void connectButton_Click(object sender, EventArgs e) { 182 OnDisconnected(); 183 Cursor = Cursors.AppStarting; 184 updateServerPluginsWorker.RunWorkerAsync(); 185 } 186 187 private void OnConnected() { 188 connectButton.Enabled = false; 189 serverUrlTextBox.Enabled = false; 190 label1.Enabled = false; 191 192 listView.Enabled = true; 193 uploadButton.Enabled = true; 194 } 195 196 private void OnDisconnected() { 197 connectButton.Enabled = true; 198 serverUrlTextBox.Enabled = true; 199 label1.Enabled = true; 200 201 localAndServerPlugins.Clear(); 202 listView.Items.Clear(); 203 localPluginDetailsPanel.Controls.Clear(); 204 serverPluginDetailsGroupBox.Controls.Clear(); 205 listView.Enabled = false; 206 uploadButton.Enabled = false; 207 } 138 208 } 139 209 }
Note: See TracChangeset
for help on using the changeset viewer.