From 8089544dab4b1f60ad5a29026ec3323b979c214f Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Thu, 7 Feb 2013 18:57:27 +1100 Subject: [PATCH] Fix: Delete Device Models Also purge related Device Components and any Device Model Image --- .../BI/Extensions/DeviceModelExtensions.cs | 213 +++++++++--------- Disco.BI/Properties/AssemblyInfo.cs | 4 +- 2 files changed, 114 insertions(+), 103 deletions(-) diff --git a/Disco.BI/BI/Extensions/DeviceModelExtensions.cs b/Disco.BI/BI/Extensions/DeviceModelExtensions.cs index 0f6c7729..2ae18e90 100644 --- a/Disco.BI/BI/Extensions/DeviceModelExtensions.cs +++ b/Disco.BI/BI/Extensions/DeviceModelExtensions.cs @@ -1,101 +1,112 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Disco.Models.Repository; -using System.IO; -using System.Drawing; -using Disco.Data.Repository; - -namespace Disco.BI.Extensions -{ - public static class DeviceModelExtensions - { - public static bool ImageImport(this DeviceModel deviceModel, Stream ImageStream) - { - try - { - using (Bitmap inputBitmap = new Bitmap(ImageStream)) - { - using (Image outputBitmap = inputBitmap.ResizeImage(255, 255)) - { - using (MemoryStream ms = new MemoryStream()) - { - outputBitmap.SavePng(ms); - ms.Position = 0; - - var deviceModelImagePath = deviceModel.ImageFilePath(); - - - using (var storeStream = new FileStream(deviceModelImagePath, FileMode.Create, FileAccess.Write, FileShare.None)) - { - ms.CopyTo(storeStream); - } - //deviceModel.Image = ms.ToArray(); - } - } - } - return true; - } - catch (Exception) - { - return false; - } - } - - public static FileStream Image(this DeviceModel deviceModel) - { - var deviceModelImagePath = deviceModel.ImageFilePath(); - - if (File.Exists(deviceModelImagePath)) - return new FileStream(deviceModelImagePath, FileMode.Open, FileAccess.Read, FileShare.Read); - else - return null; - } - - public static string ImageFilePath(this DeviceModel deviceModel) - { - var configCache = new Disco.Data.Configuration.ConfigurationContext(null); - - var deviceModelImagesDataStore = DataStore.CreateLocation(configCache, "DeviceModelImages"); - - return Path.Combine(deviceModelImagesDataStore, string.Format("{0}.png", deviceModel.Id)); - } - - public static string ImageHash(this DeviceModel deviceModel) - { - var deviceModelImagePath = deviceModel.ImageFilePath(); - - if (File.Exists(deviceModelImagePath)) - return File.GetLastWriteTimeUtc(deviceModelImagePath).ToBinary().ToString(); - else - return "-1"; - } - - #region Actions - // Added 2012-11-26 G# - Need ability to delete Device Models - public static bool CanDelete(this DeviceModel dm, DiscoDataContext dbContext) - { - // Can't Delete Default Model (Id: 1) - if (dm.Id == 1) - return false; - - // Can't Delete if Contains Devices - if (dbContext.Devices.Count(d => d.DeviceModelId == dm.Id) > 0) - return false; - - return true; - } - public static void Delete(this DeviceModel dm, DiscoDataContext dbContext) - { - if (!dm.CanDelete(dbContext)) - throw new InvalidOperationException("The state of this Device Model doesn't allow it to be deleted"); - - // Delete Model - dbContext.DeviceModels.Remove(dm); - } - // End Added 2012-11-26 G# - #endregion - - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Disco.Models.Repository; +using System.IO; +using System.Drawing; +using Disco.Data.Repository; + +namespace Disco.BI.Extensions +{ + public static class DeviceModelExtensions + { + public static bool ImageImport(this DeviceModel deviceModel, Stream ImageStream) + { + try + { + using (Bitmap inputBitmap = new Bitmap(ImageStream)) + { + using (Image outputBitmap = inputBitmap.ResizeImage(255, 255)) + { + using (MemoryStream ms = new MemoryStream()) + { + outputBitmap.SavePng(ms); + ms.Position = 0; + + var deviceModelImagePath = deviceModel.ImageFilePath(); + + + using (var storeStream = new FileStream(deviceModelImagePath, FileMode.Create, FileAccess.Write, FileShare.None)) + { + ms.CopyTo(storeStream); + } + //deviceModel.Image = ms.ToArray(); + } + } + } + return true; + } + catch (Exception) + { + return false; + } + } + + public static FileStream Image(this DeviceModel deviceModel) + { + var deviceModelImagePath = deviceModel.ImageFilePath(); + + if (File.Exists(deviceModelImagePath)) + return new FileStream(deviceModelImagePath, FileMode.Open, FileAccess.Read, FileShare.Read); + else + return null; + } + + public static string ImageFilePath(this DeviceModel deviceModel) + { + var configCache = new Disco.Data.Configuration.ConfigurationContext(null); + + var deviceModelImagesDataStore = DataStore.CreateLocation(configCache, "DeviceModelImages"); + + return Path.Combine(deviceModelImagesDataStore, string.Format("{0}.png", deviceModel.Id)); + } + + public static string ImageHash(this DeviceModel deviceModel) + { + var deviceModelImagePath = deviceModel.ImageFilePath(); + + if (File.Exists(deviceModelImagePath)) + return File.GetLastWriteTimeUtc(deviceModelImagePath).ToBinary().ToString(); + else + return "-1"; + } + + #region Actions + // Added 2012-11-26 G# - Need ability to delete Device Models + public static bool CanDelete(this DeviceModel dm, DiscoDataContext dbContext) + { + // Can't Delete Default Model (Id: 1) + if (dm.Id == 1) + return false; + + // Can't Delete if Contains Devices + if (dbContext.Devices.Count(d => d.DeviceModelId == dm.Id) > 0) + return false; + + return true; + } + public static void Delete(this DeviceModel dm, DiscoDataContext dbContext) + { + if (!dm.CanDelete(dbContext)) + throw new InvalidOperationException("The state of this Device Model doesn't allow it to be deleted"); + + // Delete Image + var deviceModelImagePath = dm.ImageFilePath(); + if (File.Exists(deviceModelImagePath)) + File.Delete(deviceModelImagePath); + + // Delete any Device Model Components + foreach (var deviceModelComponent in dbContext.DeviceComponents.Where(dc => dc.DeviceModelId == dm.Id).ToList()) + { + dbContext.DeviceComponents.Remove(deviceModelComponent); + } + + // Delete Model + dbContext.DeviceModels.Remove(dm); + } + // End Added 2012-11-26 G# + #endregion + + } +} diff --git a/Disco.BI/Properties/AssemblyInfo.cs b/Disco.BI/Properties/AssemblyInfo.cs index 95791edc..4da37026 100644 --- a/Disco.BI/Properties/AssemblyInfo.cs +++ b/Disco.BI/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.2.0207.1727")] -[assembly: AssemblyFileVersion("1.2.0207.1727")] +[assembly: AssemblyVersion("1.2.0207.1853")] +[assembly: AssemblyFileVersion("1.2.0207.1853")]