Changeset 17000


Ignore:
Timestamp:
05/31/19 13:56:47 (4 weeks ago)
Author:
gkronber
Message:

#2925: merged r16992:16997 from trunk to branch

Location:
branches/2925_AutoDiffForDynamicalModels
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • branches/2925_AutoDiffForDynamicalModels

  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Common/3.3/Content/ContentManager.cs

    r16662 r17000  
    2121
    2222using System;
     23using System.Collections.Generic;
     24using System.Linq;
    2325using System.Threading;
     26using System.Threading.Tasks;
     27using HEAL.Attic;
    2428
    2529namespace HeuristicLab.Common {
    2630  public abstract class ContentManager {
     31    public class Info {
     32      public Info() { }
     33
     34      public Info(string filename, TimeSpan duration) {
     35        Filename = filename;
     36        Duration = duration;
     37      }
     38
     39      public Info(string filename, SerializationInfo serInfo) {
     40        Filename = filename;
     41        Duration = serInfo.Duration;
     42        UnknownTypeGuids = serInfo.UnknownTypeGuids;
     43        NumberOfSerializedObjects = serInfo.NumberOfSerializedObjects;
     44        SerializedTypes = serInfo.SerializedTypes;       
     45      }
     46
     47      public TimeSpan Duration { get; internal set; }
     48      public IEnumerable<Guid> UnknownTypeGuids { get; internal set; } = Enumerable.Empty<Guid>();
     49      public int NumberOfSerializedObjects { get; internal set; }
     50      public IEnumerable<Type> SerializedTypes { get; internal set; } = Enumerable.Empty<Type>();
     51      public string Filename { get; internal set; } = string.Empty;
     52    }
     53
    2754    private static ContentManager instance;
    2855
     
    3663
    3764    public static IStorableContent Load(string filename) {
     65      return Load(filename, out var _);
     66    }
     67
     68    public static IStorableContent Load(string filename, out Info serializationInfo) {
    3869      if (instance == null) throw new InvalidOperationException("ContentManager is not initialized.");
    39       IStorableContent content = instance.LoadContent(filename);
    40       content.Filename = filename;
     70      IStorableContent content = instance.LoadContent(filename, out serializationInfo);
     71     
     72      if (content != null) content.Filename = filename;
    4173      return content;
    4274    }
    43     public static void LoadAsync(string filename, Action<IStorableContent, Exception> loadingCompletedCallback) {
     75
     76
     77    public static Task LoadAsync(string filename, Action<IStorableContent, Exception> loadingCompletedCallback) {
     78      return LoadAsync(filename, (content, error, info) => loadingCompletedCallback(content, error)); // drop info
     79    }
     80
     81    public static async Task LoadAsync(string filename, Action<IStorableContent, Exception, Info> loadingCompletedCallback) {
    4482      if (instance == null) throw new InvalidOperationException("ContentManager is not initialized.");
    45       var func = new Func<string, IStorableContent>(instance.LoadContent);
    46       func.BeginInvoke(filename, delegate (IAsyncResult result) {
    47         Exception error = null;
    48         IStorableContent content = null;
    49         try {
    50           content = func.EndInvoke(result);
    51           content.Filename = filename;
    52         } catch (Exception ex) {
    53           error = ex;
    54         }
    55         loadingCompletedCallback(content, error);
    56       }, null);
     83
     84      Exception error = null;
     85      IStorableContent result = null;
     86      Info serializationInfo = null;
     87      try {
     88        result = await Task.Run(() => {
     89          var content = instance.LoadContent(filename, out serializationInfo);
     90          if(content!=null) content.Filename = filename;
     91          return content;
     92        });
     93      } catch(Exception ex) {
     94        error = ex;
     95      }
     96      loadingCompletedCallback(result, error, serializationInfo);
    5797    }
    58     protected abstract IStorableContent LoadContent(string filename);
     98
     99    protected abstract IStorableContent LoadContent(string filename, out Info serializationInfo);
    59100
    60101    public static void Save(IStorableContent content, string filename, bool compressed, CancellationToken cancellationToken = default(CancellationToken)) {
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core

  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views

  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/Clipboard.cs

    r16662 r17000  
    2424using System.Collections.Generic;
    2525using System.IO;
    26 using System.IO.Compression;
    2726using System.Linq;
    2827using System.Threading;
     
    3130using HeuristicLab.Common;
    3231using HeuristicLab.MainForm;
    33 using HeuristicLab.Persistence.Default.Xml;
    3432using HeuristicLab.PluginInfrastructure;
    3533
     
    157155      foreach (string filename in items) {
    158156        try {
    159           var ser = new ProtoBufSerializer();
    160           T item = (T)ser.Deserialize(filename);
     157          T item = (T)ContentManager.Load(filename);
    161158          OnItemLoaded(item, progressBar.Maximum / items.Length);
    162         } catch (Exception) {
    163           try {
    164             // try old format if protobuf deserialization fails
    165             T item = XmlParser.Deserialize<T>(filename);
    166             OnItemLoaded(item, progressBar.Maximum / items.Length);
    167           } catch (Exception) { }
     159        } catch(Exception) {
     160          // ignore if loading a clipboad item fails.
    168161        }
    169162      }
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj

    r16662 r17000  
    375375      <Private>False</Private>
    376376    </ProjectReference>
    377     <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
    378       <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
    379       <Name>HeuristicLab.Persistence-3.3</Name>
    380       <Private>False</Private>
    381     </ProjectReference>
    382377    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
    383378      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core.Views/3.3/Plugin.cs.frame

    r16662 r17000  
    3535  [PluginDependency("HeuristicLab.MainForm", "3.3")]
    3636  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
    37   [PluginDependency("HeuristicLab.Persistence", "3.3")]
    3837  public class HeuristicLabCoreViewsPlugin : PluginBase {
    3938  }
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Core/3.3/PersistenceContentManager.cs

    r16988 r17000  
    2525using HEAL.Attic;
    2626using System;
     27using System.Diagnostics;
    2728
    2829namespace HeuristicLab.Core {
     
    3031    public PersistenceContentManager() : base() { }
    3132
    32     protected override IStorableContent LoadContent(string filename) {
     33    protected override IStorableContent LoadContent(string filename, out Info info) {
    3334      bool useOldPersistence = XmlParser.CanOpen(filename);
    34       if (useOldPersistence) return XmlParser.Deserialize<IStorableContent>(filename);
     35      IStorableContent content = null;
     36      if (useOldPersistence) {
     37        var sw = new Stopwatch();
     38        sw.Start();
     39        content = XmlParser.Deserialize<IStorableContent>(filename);
     40        sw.Stop();
     41        info = new Info(filename, sw.Elapsed);
     42      } else {
     43        var ser = new ProtoBufSerializer();
     44        content = (IStorableContent)ser.Deserialize(filename, out SerializationInfo serInfo);
     45        info = new Info(filename, serInfo);
     46      }
     47      if (content == null) throw new PersistenceException($"Cannot deserialize root element of {filename}");
     48      return content;
     49    }
    3550
    36       var ser = new ProtoBufSerializer();
    37       return (IStorableContent)ser.Deserialize(filename, out SerializationInfo info);
    38     }
    3951
    4052    protected override void SaveContent(IStorableContent content, string filename, bool compressed, CancellationToken cancellationToken) {
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer

  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/FileManager.cs

    r16662 r17000  
    2323using System.Collections.Generic;
    2424using System.IO;
     25using System.Linq;
    2526using System.Threading;
    2627using System.Windows.Forms;
     
    7374    }
    7475
    75     private static void LoadingCompleted(IStorableContent content, Exception error) {
     76    private static void LoadingCompleted(IStorableContent content, Exception error, ContentManager.Info info) {
    7677      try {
    7778        if (error != null) throw error;
     79        if (info!=null && info.UnknownTypeGuids.Any()) {
     80          var message = "Unknown type guids: " + string.Join(Environment.NewLine, info.UnknownTypeGuids);
     81          MessageBox.Show((Control)MainFormManager.MainForm, message, $"File {info.Filename} not restored completely", MessageBoxButtons.OK, MessageBoxIcon.Information);
     82        }
    7883        IView view = MainFormManager.MainForm.ShowContent(content);
    7984        if (view == null)
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj

    r16662 r17000  
    312312      <Private>False</Private>
    313313    </ProjectReference>
    314     <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
    315       <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
    316       <Name>HeuristicLab.Persistence-3.3</Name>
    317       <Private>False</Private>
    318     </ProjectReference>
    319314    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
    320315      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/Plugin.cs.frame

    r16662 r17000  
    4343  [PluginDependency("HeuristicLab.Optimization", "3.3")]
    4444  [PluginDependency("HeuristicLab.Parameters", "3.3")]
    45   [PluginDependency("HeuristicLab.Persistence", "3.3")]
    4645  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
    4746  public class HeuristicLabOptimizerPlugin : PluginBase {
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Optimizer/3.3/StartPage.cs

    r16662 r17000  
    3030using HeuristicLab.Core;
    3131using HeuristicLab.MainForm;
    32 using HeuristicLab.Persistence.Default.Xml;
    3332
    3433namespace HeuristicLab.Optimizer {
     
    121120        using (var stream = assembly.GetManifestResourceStream(name)) {
    122121          WriteStreamToTempFile(stream, path); // create a file in a temporary folder (persistence cannot load these files directly from the stream)
    123           var item = XmlParser.Deserialize<INamedItem>(path);
     122          var item = (INamedItem)ContentManager.Load(path);
    124123          OnSampleLoaded(item, group, 1.0 / count);
    125124        }
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Tests

  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Tests/HeuristicLab.Persistence.Attic/PersistenceConsistencyChecks.cs

    r16988 r17000  
    1818      var dict = new Dictionary<Guid, string>();
    1919      var duplicates = new Dictionary<string, string>();
    20       //get all non-generic and instantiable classes which implement IContentView
    2120      foreach (Type type in ApplicationManager.Manager.GetTypes(typeof(object))) {
    2221        var attr = StorableTypeAttribute.GetStorableTypeAttribute(type);
Note: See TracChangeset for help on using the changeset viewer.