#3136
[heuristiclab.git] / HeuristicLab.PluginInfrastructure / 3.3 / Advanced / Util.cs
blob4275fdf3dc202070538a98e5810675b31ffee0ac
1 #region License Information
2 /* HeuristicLab
3 * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
5 * This file is part of HeuristicLab.
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.
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.
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/>.
20 #endregion
22 using System;
23 using System.Collections.Generic;
24 using System.Linq;
25 using System.Windows.Forms;
27 namespace 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);
37 internal static void ResizeColumns(IEnumerable<ColumnHeader> columnHeaders) {
38 foreach (var columnHeader in columnHeaders)
39 ResizeColumn(columnHeader);
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;
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;
61 if (!yieldedPlugins.Contains(dep)) {
62 yieldedPlugins.Add(dep);
63 yield return dep;
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);