Free cookie consent management tool by TermsFeed Policy Generator

source: branches/gp-crossover/HeuristicLab.PluginInfrastructure/3.3/Advanced/Util.cs @ 7317

Last change on this file since 7317 was 6413, checked in by gkronber, 14 years ago

#1536 implemented feature that checks for plugin updates on each application start and allows to install plugin updates easily. Removed more advanced plugin management features for all users except if it is manually reenabled in the HeuristicLab.config file.

File size: 3.1 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.Linq;
25using System.Windows.Forms;
26
27namespace HeuristicLab.PluginInfrastructure.Advanced {
28  internal static class Util {
29    internal static void ResizeColumn(ColumnHeader columnHeader) {
30      columnHeader.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
31      int headerSize = columnHeader.Width;
32      columnHeader.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
33      int contentSize = columnHeader.Width;
34      columnHeader.Width = Math.Max(headerSize, contentSize);
35    }
36
37    internal static void ResizeColumns(IEnumerable<ColumnHeader> columnHeaders) {
38      foreach (var columnHeader in columnHeaders)
39        ResizeColumn(columnHeader);
40    }
41
42    internal static IEnumerable<IPluginDescription> GetAllDependents(IPluginDescription plugin, IEnumerable<IPluginDescription> availablePlugins) {
43      return from p in availablePlugins
44             let matchingEntries = from dep in GetAllDependencies(p)
45                                   where dep.Name == plugin.Name
46                                   where dep.Version == plugin.Version
47                                   select dep
48             where matchingEntries.Any()
49             select p as IPluginDescription;
50    }
51
52    internal static IEnumerable<IPluginDescription> GetAllDependencies(IPluginDescription plugin) {
53      HashSet<IPluginDescription> yieldedPlugins = new HashSet<IPluginDescription>();
54      foreach (var dep in plugin.Dependencies) {
55        foreach (var recDep in GetAllDependencies(dep)) {
56          if (!yieldedPlugins.Contains(recDep)) {
57            yieldedPlugins.Add(recDep);
58            yield return recDep;
59          }
60        }
61        if (!yieldedPlugins.Contains(dep)) {
62          yieldedPlugins.Add(dep);
63          yield return dep;
64        }
65      }
66    }
67
68    // compares for two plugins with same major and minor version if plugin1 is newer than plugin2
69    internal static bool IsNewerThan(IPluginDescription plugin1, IPluginDescription plugin2) {
70      // newer: build version is higher, or if build version is the same revision is higher
71      return plugin1.Version.Build > plugin2.Version.Build ||
72        (plugin1.Version.Build == plugin2.Version.Build && plugin1.Version.Revision > plugin2.Version.Revision);
73    }
74  }
75}
Note: See TracBrowser for help on using the repository browser.