Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Hive.Client.Core/3.2/PluginCache.cs @ 3578

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

Removed References to HiveLogging and updated the default logging mechanism (#991)

File size: 2.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;
10
11namespace HeuristicLab.Hive.Client.Core {
12  public class PluginCache {
13
14    private static PluginCache instance = null;
15    public static PluginCache Instance {
16      get {
17        if (instance == null)
18          instance = new PluginCache();
19        return instance;
20      }
21    }
22   
23    private List<CachedHivePluginInfoDto> pluginCache;
24   
25
26    public PluginCache() {
27      pluginCache = new List<CachedHivePluginInfoDto>();
28    }
29   
30    public void AddPlugin(CachedHivePluginInfoDto plugin) {
31      pluginCache.Add(plugin);   
32    }
33
34    public List<CachedHivePluginInfoDto> GetPlugins(List<HivePluginInfoDto> requests) {
35      Logger.Debug("Fetching plugins for job");
36      List<CachedHivePluginInfoDto> neededPlugins = new List<CachedHivePluginInfoDto>();
37      List<HivePluginInfoDto> missingPlugins = new List<HivePluginInfoDto>();
38      bool found = false;
39           
40      foreach (HivePluginInfoDto info in requests) {
41        //we MAY run in problems here - if there is a plugin twice in requests, there may be added two different versions of the plugin
42        foreach (CachedHivePluginInfoDto cache in pluginCache) {
43          if (info.Name.Equals(cache.Name) && info.Version.Equals(cache.Version) && info.BuildDate <= cache.BuildDate) {
44            Logger.Debug("Found plugin " + info.Name + ", " + info.Version);
45            neededPlugins.Add(cache);
46            found = true;
47            break;
48          }
49        }
50        if (!found)
51          Logger.Debug("Found NOT found " + info.Name + ", " + info.Version);
52          missingPlugins.Add(info);
53        found = false;
54      }
55
56      Logger.Debug("Requesting missing plugins");
57      List<CachedHivePluginInfoDto> receivedPlugins = WcfService.Instance.RequestPlugins(missingPlugins);
58      Logger.Debug("Requested missing plugins");
59
60      if (receivedPlugins != null) {
61        neededPlugins.AddRange(receivedPlugins);
62        pluginCache.AddRange(receivedPlugins);
63      } else
64        Logger.Error("Fetching of the plugins failed!");
65
66      return neededPlugins;
67    }
68
69  }
70}
Note: See TracBrowser for help on using the repository browser.