Changeset 16723 for branches/2521_ProblemRefactoring/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs
- Timestamp:
- 03/28/19 16:54:20 (6 years ago)
- Location:
- branches/2521_ProblemRefactoring
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring
- Property svn:mergeinfo changed
-
branches/2521_ProblemRefactoring/HeuristicLab.Persistence
- Property svn:mergeinfo changed
-
branches/2521_ProblemRefactoring/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs
r16692 r16723 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 8Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 26 26 using System.Linq; 27 27 using System.Text; 28 using System.Threading; 29 using HEAL.Attic; 28 30 using HeuristicLab.Persistence.Core; 29 31 using HeuristicLab.Persistence.Core.Tokens; … … 61 63 } 62 64 63 protected enum NodeType { Start, End, Inline } 65 protected enum NodeType { Start, End, Inline }; 64 66 65 67 protected static void AddXmlTagContent(StringBuilder sb, string name, Dictionary<string, string> attributes) { … … 256 258 {"typeName", lastTypeToken.TypeName }, 257 259 {"serializer", lastTypeToken.Serializer }}); 258 } 259 finally { 260 } finally { 260 261 lastTypeToken = null; 261 262 } … … 284 285 /// <param name="o">The object.</param> 285 286 /// <param name="filename">The filename.</param> 286 public static void Serialize(object o, string filename ) {287 Serialize(o, filename, ConfigurationService.Instance.GetConfiguration(new XmlFormat()), false, CompressionLevel.Optimal );287 public static void Serialize(object o, string filename, CancellationToken cancellationToken = default(CancellationToken)) { 288 Serialize(o, filename, ConfigurationService.Instance.GetConfiguration(new XmlFormat()), false, CompressionLevel.Optimal, cancellationToken); 288 289 } 289 290 … … 296 297 /// <param name="filename">The filename.</param> 297 298 /// <param name="compression">ZIP file compression level</param> 298 public static void Serialize(object o, string filename, CompressionLevel compression ) {299 Serialize(o, filename, ConfigurationService.Instance.GetConfiguration(new XmlFormat()), false, compression );299 public static void Serialize(object o, string filename, CompressionLevel compression, CancellationToken cancellationToken = default(CancellationToken)) { 300 Serialize(o, filename, ConfigurationService.Instance.GetConfiguration(new XmlFormat()), false, compression, cancellationToken); 300 301 } 301 302 … … 307 308 /// <param name="filename">The filename.</param> 308 309 /// <param name="config">The configuration.</param> 309 public static void Serialize(object obj, string filename, Configuration config) { 310 Serialize(obj, filename, config, false, CompressionLevel.Optimal); 311 } 312 313 private static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies 314 , CompressionLevel compression) { 315 Serializer serializer = new Serializer(obj, config); 316 Serialize(stream, includeAssemblies, compression, serializer); 317 } 318 319 private static void Serialize(Stream stream, bool includeAssemblies, CompressionLevel compression, Serializer serializer) { 310 public static void Serialize(object obj, string filename, Configuration config, CancellationToken cancellationToken = default(CancellationToken)) { 311 Serialize(obj, filename, config, false, CompressionLevel.Optimal, cancellationToken); 312 } 313 314 private static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies, CompressionLevel compression, CancellationToken cancellationToken = default(CancellationToken)) { 315 Core.Serializer serializer = new Core.Serializer(obj, config); 316 Serialize(stream, includeAssemblies, compression, serializer, cancellationToken); 317 } 318 319 private static void Serialize(Stream stream, bool includeAssemblies, CompressionLevel compression, Core.Serializer serializer, CancellationToken cancellationToken = default(CancellationToken)) { 320 320 try { 321 cancellationToken.ThrowIfCancellationRequested(); 321 322 DateTime start = DateTime.Now; 322 323 serializer.InterleaveTypeInformation = false; … … 326 327 using (StreamWriter writer = new StreamWriter(entry.Open())) { 327 328 foreach (ISerializationToken token in serializer) { 329 cancellationToken.ThrowIfCancellationRequested(); 328 330 string line = generator.Format(token); 329 331 writer.Write(line); … … 338 340 if (includeAssemblies) { 339 341 foreach (string name in serializer.RequiredFiles) { 342 cancellationToken.ThrowIfCancellationRequested(); 340 343 Uri uri = new Uri(name); 341 344 if (!uri.IsFile) { … … 348 351 byte[] buffer = new byte[1024 * 1024]; 349 352 while (true) { 353 cancellationToken.ThrowIfCancellationRequested(); 350 354 int bytesRead = reader.Read(buffer, 0, 1024 * 1024); 351 355 if (bytesRead == 0) … … 360 364 Logger.Info(String.Format("serialization took {0} seconds with compression level {1}", 361 365 (DateTime.Now - start).TotalSeconds, compression)); 362 } 363 catch (Exception) { 366 } catch (Exception) { 364 367 Logger.Warn("Exception caught, no data has been serialized."); 365 368 throw; … … 375 378 /// <param name="includeAssemblies">if set to <c>true</c> include needed assemblies.</param> 376 379 /// <param name="compression">The ZIP compression level.</param> 377 public static void Serialize(object obj, string filename, Configuration config, bool includeAssemblies, CompressionLevel compression) { 380 public static void Serialize(object obj, string filename, Configuration config, bool includeAssemblies, CompressionLevel compression, CancellationToken cancellationToken = default(CancellationToken)) { 381 string tempfile = null; 378 382 try { 379 stringtempfile = Path.GetTempFileName();383 tempfile = Path.GetTempFileName(); 380 384 381 385 using (FileStream stream = File.Create(tempfile)) { 382 Serialize(obj, stream, config, includeAssemblies, compression );383 } 384 386 Serialize(obj, stream, config, includeAssemblies, compression, cancellationToken); 387 } 388 // copy only if needed 385 389 File.Copy(tempfile, filename, true); 386 File.Delete(tempfile); 387 } 388 catch (Exception) { 390 } catch (Exception) { 389 391 Logger.Warn("Exception caught, no data has been written."); 390 392 throw; 393 } finally { 394 if (tempfile != null && File.Exists(tempfile)) 395 File.Delete(tempfile); 391 396 } 392 397 } … … 399 404 /// <param name="stream">The stream.</param> 400 405 /// <param name="compressionType">Type of compression, default is GZip.</param> 401 public static void Serialize(object obj, Stream stream, CompressionType compressionType = CompressionType.GZip ) {402 Serialize(obj, stream, ConfigurationService.Instance.GetConfiguration(new XmlFormat()), compressionType );406 public static void Serialize(object obj, Stream stream, CompressionType compressionType = CompressionType.GZip, CancellationToken cancellationToken = default(CancellationToken)) { 407 Serialize(obj, stream, ConfigurationService.Instance.GetConfiguration(new XmlFormat()), compressionType, cancellationToken); 403 408 } 404 409 … … 411 416 /// <param name="config">The configuration.</param> 412 417 /// <param name="compressionType">Type of compression, default is GZip.</param> 413 public static void Serialize(object obj, Stream stream, Configuration config, CompressionType compressionType = CompressionType.GZip ) {414 Serialize(obj, stream, config, false, compressionType );418 public static void Serialize(object obj, Stream stream, Configuration config, CompressionType compressionType = CompressionType.GZip, CancellationToken cancellationToken = default(CancellationToken)) { 419 Serialize(obj, stream, config, false, compressionType, cancellationToken); 415 420 } 416 421 … … 423 428 /// <param name="includeAssemblies">if set to <c>true</c> include need assemblies.</param> 424 429 /// <param name="compressionType">Type of compression, default is GZip.</param> 425 public static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies, 426 CompressionType compressionType = CompressionType.GZip) { 430 public static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies, CompressionType compressionType = CompressionType.GZip, CancellationToken cancellationToken = default(CancellationToken)) { 427 431 try { 428 Serializer serializer = newSerializer(obj, config);432 Core.Serializer serializer = new Core.Serializer(obj, config); 429 433 if (compressionType == CompressionType.Zip) { 430 Serialize(obj, stream, config, includeAssemblies, CompressionLevel.Optimal );434 Serialize(obj, stream, config, includeAssemblies, CompressionLevel.Optimal, cancellationToken); 431 435 } else { 432 Serialize(stream, serializer); 433 } 434 } 435 catch (PersistenceException) { 436 Serialize(stream, serializer, cancellationToken); 437 } 438 } catch (PersistenceException) { 436 439 throw; 437 } 438 catch (Exception e) { 440 } catch (Exception e) { 439 441 throw new PersistenceException("Unexpected exception during Serialization.", e); 440 442 } … … 451 453 /// <param name="compressionType">Type of compression, default is GZip.</param> 452 454 public static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies, out IEnumerable<Type> types, 453 CompressionType compressionType = CompressionType.GZip ) {455 CompressionType compressionType = CompressionType.GZip, CancellationToken cancellationToken = default(CancellationToken)) { 454 456 try { 455 Serializer serializer = newSerializer(obj, config);457 Core.Serializer serializer = new Core.Serializer(obj, config); 456 458 if (compressionType == CompressionType.Zip) { 457 Serialize(stream, includeAssemblies, CompressionLevel.Optimal, serializer );459 Serialize(stream, includeAssemblies, CompressionLevel.Optimal, serializer, cancellationToken); 458 460 } else { 459 Serialize(stream, serializer );461 Serialize(stream, serializer, cancellationToken); 460 462 } 461 463 types = serializer.SerializedTypes; 462 } 463 catch (PersistenceException) { 464 } catch (PersistenceException) { 464 465 throw; 465 } 466 catch (Exception e) { 466 } catch (Exception e) { 467 467 throw new PersistenceException("Unexpected exception during Serialization.", e); 468 468 } 469 469 } 470 470 471 private static void Serialize(Stream stream, Serializer serializer) { 471 private static void Serialize(Stream stream, Core.Serializer serializer, CancellationToken cancellationToken = default(CancellationToken)) { 472 cancellationToken.ThrowIfCancellationRequested(); 472 473 using (StreamWriter writer = new StreamWriter(new GZipStream(stream, CompressionMode.Compress))) { 473 474 serializer.InterleaveTypeInformation = true; 474 475 XmlGenerator generator = new XmlGenerator(); 475 476 foreach (ISerializationToken token in serializer) { 477 cancellationToken.ThrowIfCancellationRequested(); 476 478 string line = generator.Format(token); 477 479 writer.Write(line);
Note: See TracChangeset
for help on using the changeset viewer.