306 lines
7.4 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
{
// put in for debug
//public partial class ROImage
//{
// public static int CacheCountPrimaryKey
// { get { return _CacheByPrimaryKey.Count; } }
// public static int CacheCountByRODbID
// { get { return _CacheByRODbID_FileName_DTS.Count; } }
// public static int CacheCountList
// { get { return _CacheList.Count; } }
//}
public partial class ROImageInfo
{
// put in for debug
//public static int CacheCountPrimaryKey
//{ get { return _CacheByPrimaryKey.Count; } }
//public static int CacheCountList
//{ get { return _CacheList.Count; } }
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;
}
}
}