Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3.2/sources/HeuristicLab.Hive.Client.Core/3.2/PluginCache.cs @ 4042

Last change on this file since 4042 was 4042, checked in by kgrading, 14 years ago

#828 added various improvements to the plugin cache manager, the execution engine, the transaction handling on the serverside and the server console

File size: 3.4 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using HeuristicLab.PluginInfrastructure;
6using HeuristicLab.Hive.Client.Communication;
7using HeuristicLab.Hive.Client.Common;
8using HeuristicLab.Hive.Contracts.BusinessObjects;
9using HeuristicLab.Tracing;
10using System.IO;
11
12namespace HeuristicLab.Hive.Client.Core {
13  public class PluginCache {
14
15    private static PluginCache instance = null;
16    public static PluginCache Instance {
17      get {
18        if (instance == null)
19          instance = new PluginCache();
20        return instance;
21      }
22    }
23   
24    private List<CachedHivePluginInfoDto> pluginCache;
25   
26
27    public PluginCache() {
28      pluginCache = new List<CachedHivePluginInfoDto>();
29    }
30   
31    public void AddPlugin(CachedHivePluginInfoDto plugin) {
32      pluginCache.Add(plugin);   
33    }
34
35    public List<CachedHivePluginInfoDto> GetPlugins(List<HivePluginInfoDto> requests) {
36      Logger.Debug("Fetching plugins for job");
37      List<CachedHivePluginInfoDto> neededPlugins = new List<CachedHivePluginInfoDto>();
38      List<HivePluginInfoDto> missingPlugins = new List<HivePluginInfoDto>();
39      bool found = false;
40           
41      foreach (HivePluginInfoDto info in requests) {
42        //we MAY run in problems here - if there is a plugin twice in requests, there may be added two different versions of the plugin
43        foreach (CachedHivePluginInfoDto cache in pluginCache) {
44          if (info.Name.Equals(cache.Name) && info.Version.Equals(cache.Version) && info.BuildDate <= cache.BuildDate) {
45            Logger.Debug("Found plugin " + info.Name + ", " + info.Version);
46            neededPlugins.Add(cache);
47            found = true;
48            break;
49          }
50        }
51        if (!found)
52          Logger.Debug("Found NOT found " + info.Name + ", " + info.Version);
53          missingPlugins.Add(info);
54        found = false;
55      }
56
57      Logger.Debug("Requesting missing plugins");
58      List<CachedHivePluginInfoDto> receivedPlugins = WcfService.Instance.RequestPlugins(missingPlugins);
59      Logger.Debug("Requested missing plugins");
60
61      if (receivedPlugins != null) {
62        neededPlugins.AddRange(receivedPlugins);
63        pluginCache.AddRange(receivedPlugins);
64      } else
65        Logger.Error("Fetching of the plugins failed!");
66
67      return neededPlugins;
68    }
69
70
71    internal void PreparePlugins(List<HivePluginInfoDto> requiredPlugins) {
72      List<HivePluginInfoDto> missingPlugins = new List<HivePluginInfoDto>();
73      foreach (HivePluginInfoDto requiredPlugin in requiredPlugins) {
74        if(ApplicationManager.Manager.Plugins.Count(ipd => ipd.Version.Major == requiredPlugin.Version.Major && ipd.Version.Minor >= requiredPlugin.Version.Minor) == 0) {
75          missingPlugins.Add(requiredPlugin);             
76        }
77      }
78
79      Logger.Debug("Requesting missing plugins");
80      List<CachedHivePluginInfoDto> receivedPlugins = WcfService.Instance.RequestPlugins(missingPlugins);
81      Logger.Debug("Requested missing plugins");
82
83      foreach (CachedHivePluginInfoDto receivedPlugin in receivedPlugins) {
84        foreach (HivePluginFile hpf in receivedPlugin.PluginFiles) {
85          Logger.Info("writing file " + hpf.Name);
86          File.WriteAllBytes("C:\\temp\\" + hpf.Name.Split('\\').Last(), hpf.BinaryFile);
87        }       
88      }
89
90    }
91  }
92}
Note: See TracBrowser for help on using the repository browser.