Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/16/10 18:44:45 (14 years ago)
Author:
gkronber
Message:

Worked on plugin deployment GUI.
Added contact info and license text to DB schema.
#860

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.DeploymentService.AdminClient/PluginListView.cs

    r2804 r2816  
    99using HeuristicLab.MainForm;
    1010using HeuristicLab.PluginInfrastructure;
     11using PluginDeploymentService = HeuristicLab.PluginInfrastructure.Advanced.DeploymentService;
     12using HeuristicLab.PluginInfrastructure.Manager;
     13using System.ServiceModel;
     14using ICSharpCode.SharpZipLib.Zip;
     15using System.IO;
    1116
    1217namespace HeuristicLab.DeploymentService.AdminClient {
    1318  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;
    1620    private BackgroundWorker pluginUploadWorker;
     21    private BackgroundWorker updateServerPluginsWorker;
    1722
    1823    public PluginListView() {
     
    2025      Caption = "Plugins";
    2126
    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>();
    2432
    2533      pluginUploadWorker = new BackgroundWorker();
     
    2735      pluginUploadWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(pluginUploadWorker_RunWorkerCompleted);
    2836
    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      }
    3086    }
    3187
     
    3692    void pluginUploadWorker_DoWork(object sender, DoWorkEventArgs e) {
    3793      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) {
    46116      var dependencies = from dep in plugin.Dependencies
    47117                         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);
    49121    }
    50122
     
    59131
    60132    public void UpdateLocalPlugins() {
    61       localPlugins.ForEach(x => listView.Items.Remove(x));
    62       localPlugins.Clear();
     133      localAndServerPlugins.Clear();
     134
    63135      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      }
    85148      item.Tag = plugin;
    86149      return item;
    87150    }
    88151
    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 
    95152    private void listView_SelectedIndexChanged(object sender, EventArgs e) {
     153      localPluginDetailsPanel.Controls.Clear();
     154      serverPluginDetailsGroupBox.Controls.Clear();
     155
    96156      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);
    127169    }
    128170
     
    136178      }
    137179    }
     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    }
    138208  }
    139209}
Note: See TracChangeset for help on using the changeset viewer.