Files
LeafWeb/Core/Entities/LeafInput.cs
T
2016-04-19 07:32:13 -04:00

66 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.IO.Compression;
using System.Linq;
namespace LeafWeb.Core.Entities
{
public class LeafInput
{
public int Id { get; set; }
public virtual ICollection<LeafInputFile> InputFiles { get; set; }
public virtual ICollection<LeafOutputFile> OutputFiles { get; set; }
public LeafOutputFile OutputErrorMessage => OutputFiles?.FirstOrDefault(f => f.IsErrorMessage);
public LeafOutputFile OutputWarningMessage => OutputFiles?.FirstOrDefault(f => f.IsWarningMessage);
public LeafInputStatusType CurrentStatus { get; set; }
public virtual ICollection<LeafInputStatus> StatusHistory { get; set; }
[Required(ErrorMessage = "Name required")]
public string Name { get; set; }
[Required(ErrorMessage = "An email address is required")]
public string Email { get; set; }
[Required(ErrorMessage = "A unique identifier is required")]
public string Identifier { get; set; }
[Required(ErrorMessage = "Site Id required")]
public string SiteId { get; set; }
// [Required(ErrorMessage = "PhotosynthesisType required")]
// http://stackoverflow.com/questions/6038541/ef-validation-failing-on-update-when-using-lazy-loaded-required-properties
public virtual PhotosynthesisType PhotosynthesisType { get; set; }
[DataType(DataType.Date)]
[Required]
public DateTime Added { get; set; }
public override string ToString()
{
return $"{Id}_{Identifier}";
}
/// <summary>
/// Contains all output files in a zip
/// </summary>
public byte[] GetOutputFileZip()
{
using (var compressedFileStream = new MemoryStream())
using (var archive = new ZipArchive(compressedFileStream, ZipArchiveMode.Create, true))
{
foreach (var outputFile in OutputFiles)
{
var entry = archive.CreateEntry(outputFile.Filename);
using (var originalFileStream = new MemoryStream(outputFile.Contents))
using (var entryStream = entry.Open())
originalFileStream.CopyTo(entryStream);
}
return compressedFileStream.ToArray();
}
}
}
}