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(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.CreationTime = MyROImage.DTS; _MyFile.LastWriteTime = 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 = Environment.UserName; roImage.DTS = _MyFile.LastWriteTime; 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 } }