using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using LeafWeb.Core.Entities; using MlkPwgen; namespace LeafWeb.Core.DAL { public class DataService : IDisposable { public static void RegisterInitializer() { Database.SetInitializer(new LeafWebInitializer()); new LeafWebContext().Database.Initialize(true); } private readonly LeafWebContext _db = new LeafWebContext(); public void Dispose() { _db.Dispose(); } #region Fluxnet Sites public IQueryable GetFluxnetSites() { return _db.FluxnetSites; } public IQueryable GetFluxnetSitesAutocomplete(string term) { return from fs in GetFluxnetSites() where fs.FluxnetId.StartsWith(term) || fs.SiteName.Contains(term) select fs; } #endregion #region LeafInput public IQueryable GetLeafInputs() { return _db.LeafInputs; } public LeafInput GetLeafInput(int id) { return _db.LeafInputs.FirstOrDefault(li => li.Id == id); } public LeafOutputFile GetLeafOutput_ChartFile(int leafInputId) { return GetLeafOutput_FilenameLike(leafInputId, LeafOutputFile.Filename_LeafChart); } private LeafOutputFile GetLeafOutput_FilenameLike(int leafInputId, string filename) { var leafOutputChartFile = from leafInput in _db.LeafInputs where leafInput.Id == leafInputId from leafOutput in leafInput.OutputFiles where leafOutput.Filename.Contains(filename) select leafOutput; return leafOutputChartFile.FirstOrDefault(); } public LeafInput GetLeafInput(string uniqueToken) { return _db.LeafInputs.FirstOrDefault(li => li.UniqueToken == uniqueToken); } public IQueryable GetLeafInputs(params LeafInputStatusType[] statuses) { return from file in _db.LeafInputs where statuses.Contains(file.CurrentStatus) select file; } public void AddLeafInput(LeafInput leafInput) { leafInput.Added = DateTime.Now; leafInput.UniqueToken = PasswordGenerator.Generate(12); _db.LeafInputs.Add(leafInput); SetLeafInputStatusNoUpdate(leafInput, LeafInputStatusType.Pending); _db.SaveChanges(); } private void SetLeafInputStatusNoUpdate(LeafInput leafInputFile, LeafInputStatusType status, string description = null, string details = null) { leafInputFile.CurrentStatus = status; var leafInputFileStatus = new LeafInputStatus { Status = status, DateTime = DateTime.Now, Description = description, Details = details, LeafInput = leafInputFile }; if (leafInputFile.StatusHistory == null) leafInputFile.StatusHistory = new List(); leafInputFile.StatusHistory.Add(leafInputFileStatus); } public void SetLeafInputStatus(LeafInput leafInput, LeafInputStatusType status, string description = null, string details = null) { SetLeafInputStatusNoUpdate(leafInput, status, description, details); UpdateLeafInput(leafInput); } public void UpdateLeafInput(LeafInput leafInput) { _db.Entry(leafInput).State = EntityState.Modified; _db.SaveChanges(); } #endregion #region LeafInputFile public IQueryable GetLeafInputFiles() { return _db.LeafInputFiles; } public LeafInputFile GetLeafInputFile(int id) { return _db.LeafInputFiles.Find(id); } public void UpdateLeafInputFile(LeafInputFile leafInputFile) { _db.Entry(leafInputFile).State = EntityState.Modified; _db.SaveChanges(); } #endregion #region Photosynthesis Types public IQueryable GetPhotosynthesisTypes() { return _db.PhotosynthesisTypes.OrderBy(pt => pt.SortOrder); } public PhotosynthesisType GetPhotosynthesisType(string id) { return _db.PhotosynthesisTypes.Find(id); } #endregion #region LeafOutputFile public void AddLeafOutputFile(LeafOutputFile leafOutput) { _db.LeafOutputFiles.Add(leafOutput); _db.SaveChanges(); } public IQueryable GetLeafOutputFiles() { return _db.LeafOutputFiles; } public LeafOutputFile GetLeafOutputFile(int id) { return _db.LeafOutputFiles.Find(id); } #endregion } }