290 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			290 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using System.Data;
 | |
| using System.Data.SqlClient;
 | |
| using Csla;
 | |
| using Csla.Data;
 | |
| using System.IO;
 | |
| using Volian.Base.Library;
 | |
| 
 | |
| namespace VEPROMS.CSLA.Library
 | |
| {
 | |
| 	public partial class ROImageInfo
 | |
| 	{
 | |
| 		public static ROImageInfo GetByROFstID_FileName(int rOFstID, string fileName)
 | |
| 		{
 | |
| 			//if (!CanGetObject())
 | |
| 			//    throw new System.Security.SecurityException("User not authorized to view a ROImage");
 | |
| 			try
 | |
| 			{
 | |
| 				ROImageInfo tmp = DataPortal.Fetch<ROImageInfo>(new ROFstID_FileNameCriteria(rOFstID, fileName));
 | |
| 				if (tmp.ErrorMessage == "No Record Found")
 | |
| 				{
 | |
| 					tmp.Dispose(); // Clean-up ROImage
 | |
| 					tmp = null;
 | |
| 				}
 | |
| 				return tmp;
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				throw new DbCslaException("Error on ROImage.GetByROFstID_FileName", ex);
 | |
| 			}
 | |
| 		}
 | |
| 		private void DataPortal_Fetch(ROFstID_FileNameCriteria criteria)
 | |
| 		{
 | |
| 			if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ROImageInfo.DataPortal_Fetch", GetHashCode());
 | |
| 			try
 | |
| 			{
 | |
| 				using (SqlConnection cn = Database.VEPROMS_SqlConnection)
 | |
| 				{
 | |
| 					ApplicationContext.LocalContext["cn"] = cn;
 | |
| 					using (SqlCommand cm = cn.CreateCommand())
 | |
| 					{
 | |
| 						cm.CommandType = CommandType.StoredProcedure;
 | |
| 						cm.CommandText = "getROImageByROFstID_FileName";
 | |
| 						cm.Parameters.AddWithValue("@ROFstID", criteria.ROFstID);
 | |
| 						cm.Parameters.AddWithValue("@FileName", criteria.FileName);
 | |
| 						using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
 | |
| 						{
 | |
| 							if (!dr.Read())
 | |
| 							{
 | |
| 								_ErrorMessage = "No Record Found";
 | |
| 								return;
 | |
| 							}
 | |
| 							ReadData(dr);
 | |
| 						}
 | |
| 					}
 | |
| 					// removing of item only needed for local data portal
 | |
| 					if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client)
 | |
| 						ApplicationContext.LocalContext.Remove("cn");
 | |
| 				}
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				if (_MyLog.IsErrorEnabled) _MyLog.Error("ROImageInfo.DataPortal_Fetch", ex);
 | |
| 				_ErrorMessage = ex.Message;
 | |
| 				throw new DbCslaException("ROImageInfo.DataPortal_Fetch", ex);
 | |
| 			}
 | |
| 		}
 | |
| 		[Serializable()]
 | |
| 		private class ROFstID_FileNameCriteria
 | |
| 		{
 | |
| 			private int _ROFstID;
 | |
| 
 | |
| 			public int ROFstID
 | |
| 			{ get { return _ROFstID; } }
 | |
| 			private string _FileName;
 | |
| 			public string FileName
 | |
| 			{ get { return _FileName; } }
 | |
| 			public ROFstID_FileNameCriteria(int rOFstID, string fileName)
 | |
| 			{
 | |
| 				_ROFstID = rOFstID;
 | |
| 				_FileName = fileName;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	public class ROImageFile : IDisposable
 | |
| 	{
 | |
| 		private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | |
| 		#region Fields
 | |
| 		private bool _IsDisposed;
 | |
| 		//private static string _TemporaryFolder = null;
 | |
| 		#endregion
 | |
| 		#region Properties
 | |
| 		private ROImageInfo _MyROImage = null;
 | |
| 		public ROImageInfo MyROImage
 | |
| 		{
 | |
| 			get { return _MyROImage; }
 | |
| 			set
 | |
| 			{
 | |
| 				TryDelete();
 | |
| 				_MyROImage = value;
 | |
| 				CreateFile();
 | |
| 			}
 | |
| 		}
 | |
| 		private FileInfo _MyFile = null;
 | |
| 		public FileInfo MyFile
 | |
| 		{
 | |
| 			get { return _MyFile; }
 | |
| 		}
 | |
| 		private string _Extension = "TIF";
 | |
| 		public string Extension
 | |
| 		{
 | |
| 			get { return _Extension; }
 | |
| 			set { _Extension = value; }
 | |
| 		}
 | |
| 		#endregion
 | |
| 		#region Private Methods
 | |
| 		private void TryDelete()
 | |
| 		{
 | |
| 			if (_MyROImage == null) return;
 | |
| 			if (_MyFile == null) return;
 | |
| 			if (_MyFile.Exists)
 | |
| 			{
 | |
| 				try
 | |
| 				{
 | |
| 					_MyFile.Delete();
 | |
| 				}
 | |
| 				catch (IOException ex)
 | |
| 				{
 | |
| 					_MyLog.Error("TryDelete", ex);
 | |
| 				}
 | |
| 				finally
 | |
| 				{
 | |
| 					_MyFile = null;
 | |
| 					_MyROImage = null;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		private bool _Created = false;
 | |
| 		private int _Unique = 0;
 | |
| 		private string Unique
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				string retval = "";
 | |
| 				if (_Unique != 0) retval = "_" + _Unique.ToString();
 | |
| 				_Unique++;
 | |
| 				return retval;
 | |
| 			}
 | |
| 		}
 | |
| 		private void CreateFile()
 | |
| 		{
 | |
| 			while (!_Created)
 | |
| 				CreateTemporaryFile();
 | |
| 		}
 | |
| 
 | |
| 		private void CreateTemporaryFile()
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 				if (_MyROImage != null)
 | |
| 				{
 | |
| 					_MyFile = new FileInfo(string.Format(@"{0}\tmp_{1}{2}", VlnSettings.TemporaryFolder, Unique, MyROImage.FileName));
 | |
| 					FileStream fs = _MyFile.Create();
 | |
| 					fs.Write(MyROImage.Content, 0, MyROImage.Content.Length);
 | |
| 					fs.Close();
 | |
| 					_MyFile.CreationTimeUtc = MyROImage.DTS;
 | |
| 					_MyFile.LastWriteTimeUtc = MyROImage.DTS;
 | |
| 					_Created = true;
 | |
| 				}
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				Console.WriteLine(ex.Message);
 | |
| 			}
 | |
| 		}
 | |
| 		public string FullName
 | |
| 		{
 | |
| 			get { return _MyFile.FullName; }
 | |
| 			set
 | |
| 			{
 | |
| 				if (FullName != value)
 | |
| 					_MyFile = new FileInfo(value);
 | |
| 			}
 | |
| 		}
 | |
| 		public void SaveFile()
 | |
| 		{
 | |
| 			// TODO: Add Try & Catch logic
 | |
| 			if (_MyROImage == null) return;
 | |
| 			ROImage roImage = _MyROImage.Get();
 | |
| 			FileStream fs = _MyFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
 | |
| 			Byte[] buf = new byte[_MyFile.Length];
 | |
| 			fs.Read(buf, 0, buf.Length);
 | |
| 			fs.Close();
 | |
| 			//roImage.FileName;
 | |
| 			roImage.Content = buf;
 | |
| 			roImage.UserID = Volian.Base.Library.VlnSettings.UserID;
 | |
| 			roImage.DTS = _MyFile.LastWriteTimeUtc;
 | |
| 			roImage.Save();
 | |
| 		}
 | |
| 		#endregion
 | |
| 		#region Constructors
 | |
| 		public ROImageFile(ROImageInfo myROImage)
 | |
| 		{
 | |
| 			MyROImage = myROImage;
 | |
| 		}
 | |
| 		#endregion
 | |
| 		#region Destructor
 | |
| 		~ROImageFile()
 | |
| 		{
 | |
| 			Dispose(false);
 | |
| 		}
 | |
| 		public void Dispose()
 | |
| 		{
 | |
| 			Dispose(false);
 | |
| 			GC.SuppressFinalize(this);
 | |
| 		}
 | |
| 
 | |
| 		protected void Dispose(bool disposing)
 | |
| 		{
 | |
| 			if (!_IsDisposed)
 | |
| 			{
 | |
| 				_IsDisposed = true;
 | |
| 				TryDelete();
 | |
| 			}
 | |
| 		}
 | |
| 		#endregion
 | |
| 	}
 | |
| 	public partial class ROImageInfoList
 | |
| 	{
 | |
| 		public static ROImageInfoList GetByRODbIDNoData(int rODbID)
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 				ROImageInfoList tmp = DataPortal.Fetch<ROImageInfoList>(new RODbIDNoDataCriteria(rODbID));
 | |
| 				ROImageInfo.AddList(tmp);
 | |
| 				tmp.AddEvents();
 | |
| 				return tmp;
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				throw new DbCslaException("Error on ROImageInfoList.GetByRODbID", ex);
 | |
| 			}
 | |
| 		}
 | |
| 		private class RODbIDNoDataCriteria
 | |
| 		{
 | |
| 			public RODbIDNoDataCriteria(int rODbID)
 | |
| 			{
 | |
| 				_RODbID = rODbID;
 | |
| 			}
 | |
| 			private int _RODbID;
 | |
| 			public int RODbID
 | |
| 			{
 | |
| 				get { return _RODbID; }
 | |
| 				set { _RODbID = value; }
 | |
| 			}
 | |
| 		}
 | |
| 		private void DataPortal_Fetch(RODbIDNoDataCriteria criteria)
 | |
| 		{
 | |
| 			this.RaiseListChangedEvents = false;
 | |
| 			if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ROImageInfoList.DataPortal_FetchRODbID", GetHashCode());
 | |
| 			try
 | |
| 			{
 | |
| 				using (SqlConnection cn = Database.VEPROMS_SqlConnection)
 | |
| 				{
 | |
| 					using (SqlCommand cm = cn.CreateCommand())
 | |
| 					{
 | |
| 						cm.CommandType = CommandType.StoredProcedure;
 | |
| 						cm.CommandText = "getROImagesByRODbIDNoData";
 | |
| 						cm.Parameters.AddWithValue("@RODbID", criteria.RODbID);
 | |
| 						using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
 | |
| 						{
 | |
| 							IsReadOnly = false;
 | |
| 							while (dr.Read()) this.Add(new ROImageInfo(dr));
 | |
| 							IsReadOnly = true;
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				if (_MyLog.IsErrorEnabled) _MyLog.Error("ROImageInfoList.DataPortal_FetchRODbID", ex);
 | |
| 				throw new DbCslaException("ROImageInfoList.DataPortal_Fetch", ex);
 | |
| 			}
 | |
| 			this.RaiseListChangedEvents = true;
 | |
| 		}
 | |
| 	}
 | |
| }
 | 
