///////////////////////////////////////////////////////////
// UserMRU.cs
// Implementation of Class UserMRU
// CSLA type: Editable Child
// Created on: 31-"Rocktober"-2007
// Object design: John
// Coded: John 31-"Rocktober"-2007
///////////////////////////////////////////////////////////
using System;
using System.Data;
using CSLA.Data;
using GZTW.Data;
using CSLA;
using System.Threading;
using CSLA.Security;
namespace GZTW.AyaNova.BLL
{
///
/// Most recently used object list
///
/// When various objects are opened an entry is made in the user's MRU list
/// so that they can quickly open an item they were recently working on by selecting it
/// in the AyaNova user interface.
///
/// The tracking of what was opened is done at the business object level which is why each object has several overrides
/// to optionally track MRU or not when an item is opened because code opens objects internally as often as the user initiates from the UI.
///
[Serializable]
public class UserMRU : BusinessBase
{
#region Attributes
private Guid mID;
private Guid mUserID;
private RootObjectTypes mObjectType;
private Guid mObjectID;
private DateTime mCreated;
private string mDescription="";
#endregion
#region Constructor
///
/// Private constructor to prevent direct instantiation
///
private UserMRU()
{
//Set as child object
MarkAsChild();
mUserID = CurrentUserID;
mID = Guid.NewGuid();
}
#endregion
#region Business properties
///
/// Description created on the fly when object loaded to
/// ensure correct localization etc
///
public string Description {get{return mDescription;}}
///
/// MRU ID
///
public Guid ID { get { return mID; } }
///
/// ID
///
public Guid UserID { get { return mUserID; } }
///
/// MRU Object ID
///
public Guid ObjectID { get { return mObjectID; } }
///
/// MRU Object Type
///
public RootObjectTypes ObjectType { get { return mObjectType; } }
///
/// MRU Record created
///
public DateTime Created
{
get { return mCreated; }
set
{
if (mCreated != value)
{
mCreated = value;
MarkDirty();
}
}
}
#endregion
#region System.Object overrides
///
///
///
///
public override string ToString()
{
return "UserMRU" + mID.ToString();
}
///
///
///
///
///
public override bool Equals(Object obj)
{
if (obj == null || GetType() != obj.GetType()) return false;
UserMRU c = (UserMRU)obj;
return ((mID == c.mID));
}
///
///
///
///
public override int GetHashCode()
{
return ("UserMRU" + mID.ToString()).GetHashCode();
}
#endregion
#region Static methods
///
/// Get new object
///
///
internal static UserMRU NewItem(RootObjectTypes ObjectType, Guid ObjectID)
{
UserMRU child = new UserMRU();
child.mObjectType = ObjectType;
child.mObjectID = ObjectID;
child.mCreated = DBUtil.CurrentWorkingDateTime;
child.mDescription = NameFetcher.GetItem(new TypeAndID(ObjectType, ObjectID)).RecordName;
return child;
}
///
/// GetItem
///
///
///
internal static UserMRU GetItem(SafeDataReader dr)
{
UserMRU child = new UserMRU();
child.Fetch(dr);
return child;
}
#endregion
#region DAL DATA ACCESS
///
/// Fetch
///
///
private void Fetch(SafeDataReader dr)
{
//UserMRU fields
mID = dr.GetGuid("aID");
mObjectID = dr.GetGuid("aObjectID");
mObjectType = (RootObjectTypes)dr.GetInt16("aObjectType");
mCreated = dr.GetDateTime("aCreated");
mUserID = dr.GetGuid("aUserID");
mDescription = NameFetcher.GetItem(new TypeAndID(mObjectType, mObjectID)).RecordName;
MarkOld();
}
///
/// Update
///
///
internal void Update(IDbTransaction tr)
{
//No need to update if there is nothing changed
if (!this.IsDirty) return;
//No concurrency check here, maybe need it in future?
//shouldn't if users don't log in more than once under
//same account though.
// If not a new record, check if record was modified
//by another user since original retrieval:
// if(!IsNew)
// DBUtil.CheckSafeToUpdate(this.mModified.Date,this.mID,"PartCategory");
#region Delete
if (IsDeleted)
{
if (!IsNew)
{
//Delete object and child objects
DBCommandWrapper cmDelete = DBUtil.GetCommandFromSQL("DELETE FROM aUserMRU WHERE aID=@ID");
cmDelete.AddInParameter("@ID", DbType.Guid, mID);
DBUtil.DB.ExecuteNonQuery(cmDelete, tr);
//-----------------------------
}
MarkNew();
return;
}
#endregion
#region Add / Update
DBCommandWrapper cm = null;
if (IsNew)//Add or update?
cm = DBUtil.GetCommandFromSQL(
"INSERT INTO aUserMRU (aID, aObjectID, aObjectType, aCreated, aUserID) " +
"VALUES (@ID, @ObjectID, @ObjectType, @Created, @UserID)"
);
else
cm = DBUtil.GetCommandFromSQL(
"UPDATE aUserMRU SET aObjectID=@ObjectID, aUserID=@UserID, aObjectType=@ObjectType, aCreated=@Created " +
"WHERE aID=@ID"
);
//UserMRU fields
cm.AddInParameter("@ID", DbType.Guid, mID);
cm.AddInParameter("@UserID", DbType.Guid, mUserID);
cm.AddInParameter("@ObjectID", DbType.Guid, mObjectID);
cm.AddInParameter("@ObjectType", DbType.Int16, (int)mObjectType);
cm.AddInParameter("@Created", DbType.DateTime, mCreated);
if(mUserID!=Guid.Empty)
DBUtil.DB.ExecuteNonQuery(cm, tr);
MarkOld();//db is now synched with object
#endregion
}
#endregion
}//end UserMRU
}//end namespace GZTW.AyaNova.BLL