Files
VAR.WebFormsCore/VAR.Focus.Web/Code/BusinessLogic/CardBoard.cs
2015-06-26 02:23:21 +02:00

284 lines
8.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using VAR.Focus.Web.Code.Entities;
namespace VAR.Focus.Web.Code.BusinessLogic
{
public class CardBoard
{
#region Declarations
private List<Card> _cards = new List<Card>();
private int _lastIDCard = 0;
private List<ICardEvent> _cardEvents = new List<ICardEvent>();
private int _lastIDCardEvent = 0;
private int _idBoard = 0;
#endregion
#region Life cycle
public CardBoard(int idBoard)
{
_idBoard = idBoard;
LoadData();
}
#endregion
#region Public methods
public List<Card> Cards_Status()
{
List<Card> activeCards=new List<Card>();
foreach (Card card in _cards)
{
if (card.Active)
{
activeCards.Add(card);
}
}
return activeCards;
}
public List<ICardEvent> Cards_GetEventList(int idCardEvent)
{
List<ICardEvent> listEvents = new List<ICardEvent>();
for (int i = 0, n = _cardEvents.Count; i < n; i++)
{
ICardEvent cardEvent = _cardEvents[i];
if (cardEvent.IDCardEvent > idCardEvent)
{
listEvents.Insert(0, cardEvent);
}
else { break; }
}
return listEvents;
}
public int GetLastIDCardEvent()
{
return _lastIDCardEvent;
}
public int GetLastIDCard()
{
return _lastIDCard;
}
public int Card_Create(string title, string body, int x, int y, string currentUserName)
{
DateTime currentDate = DateTime.UtcNow;
Card card;
lock (_cards)
{
// Create card
_lastIDCard++;
card = new Card()
{
IDCard = _lastIDCard,
Title = title,
Body = body,
X = x,
Y = y,
Active = true,
CreatedBy = currentUserName,
CreatedDate = currentDate,
ModifiedBy = currentUserName,
ModifiedDate = currentDate,
};
_cards.Add(card);
// Create event
_lastIDCardEvent++;
CardCreateEvent cardCreateEvent = new CardCreateEvent()
{
IDCardEvent = _lastIDCardEvent,
IDCard = card.IDCard,
UserName = currentUserName,
Date = currentDate,
Title = card.Title,
Body = card.Body,
X = card.X,
Y = card.Y,
};
_cardEvents.Insert(0, cardCreateEvent);
SaveData();
}
return card.IDCard;
}
public bool Card_Move(int idCard, int x, int y, string currentUserName)
{
DateTime currentDate = DateTime.UtcNow;
lock (_cards)
{
// Move card
Card card = GetByID(idCard);
if (card == null) { return false; }
card.X = x;
card.Y = y;
card.ModifiedBy = currentUserName;
card.ModifiedDate = currentDate;
// Create event
_lastIDCardEvent++;
CardMoveEvent cardMoveEvent = new CardMoveEvent()
{
IDCardEvent = _lastIDCardEvent,
IDCard = card.IDCard,
UserName = currentUserName,
Date = currentDate,
X = card.X,
Y = card.Y,
};
_cardEvents.Insert(0, cardMoveEvent);
SaveData();
}
return true;
}
public bool Card_Edit(int idCard, string title, string body, string currentUserName)
{
DateTime currentDate = DateTime.UtcNow;
lock (_cards)
{
// Edit card
Card card = GetByID(idCard);
if (card == null) { return false; }
card.Title = title;
card.Body = body;
card.ModifiedBy = currentUserName;
card.ModifiedDate = currentDate;
// Create event
_lastIDCardEvent++;
CardEditEvent cardEditEvent = new CardEditEvent()
{
IDCardEvent = _lastIDCardEvent,
IDCard = card.IDCard,
UserName = currentUserName,
Date = currentDate,
Title = card.Title,
Body = card.Body,
};
_cardEvents.Insert(0, cardEditEvent);
SaveData();
}
return true;
}
public bool Card_Delete(int idCard, string currentUserName)
{
DateTime currentDate = DateTime.UtcNow;
lock (_cards)
{
// Delete card
Card card = GetByID(idCard);
if (card == null) { return false; }
card.Active = false;
card.ModifiedBy = currentUserName;
// Create event
_lastIDCardEvent++;
CardDeleteEvent cardDeleteEvent = new CardDeleteEvent()
{
IDCardEvent = _lastIDCardEvent,
IDCard = card.IDCard,
UserName = currentUserName,
Date = currentDate,
};
_cardEvents.Insert(0, cardDeleteEvent);
SaveData();
}
return true;
}
public static List<ICardEvent> ConvertCardsToEvents(List<Card> listCards, int lastIDCardEvent)
{
List<ICardEvent> listEvents = new List<ICardEvent>();
foreach (Card card in listCards)
{
var evt = new CardCreateEvent()
{
IDCardEvent = lastIDCardEvent,
IDCard = card.IDCard,
UserName = card.ModifiedBy,
Date = card.ModifiedDate,
Title = card.Title,
Body = card.Body,
X = card.X,
Y = card.Y,
};
listEvents.Add(evt);
}
return listEvents;
}
#endregion
#region Private methods
private Card GetByID(int idCard)
{
foreach (Card card in _cards)
{
if (card.IDCard == idCard)
{
return card;
}
}
return null;
}
#region Persistence
private const string CardsPersistenceFile = "priv/cardBoard.{0}.json";
private const string EventsPersistenceFile = "priv/cardEvents.{0}.json";
private void LoadData()
{
_cards = Persistence.LoadList<Card>(String.Format(CardsPersistenceFile, _idBoard));
_lastIDCard = 0;
foreach (Card card in _cards)
{
if (card.IDCard > _lastIDCard)
{
_lastIDCard = card.IDCard;
}
}
_cardEvents = Persistence.LoadList<ICardEvent>(String.Format(EventsPersistenceFile, _idBoard),
new List<Type> {
typeof(CardCreateEvent),
typeof(CardMoveEvent),
typeof(CardEditEvent),
typeof(CardDeleteEvent),
});
_lastIDCardEvent = 0;
if (_cardEvents.Count > 0)
{
_lastIDCardEvent = _cardEvents[0].IDCardEvent;
}
}
private void SaveData()
{
Persistence.SaveList(String.Format(CardsPersistenceFile, _idBoard), _cards);
Persistence.SaveList(String.Format(EventsPersistenceFile, _idBoard), _cardEvents);
}
#endregion
#endregion
}
}