view Agendas/trunk/src/Agendas.Domain/Evento.cs @ 63:963b71ea6028

Repositorios con NH
author nelopauselli
date Tue, 17 May 2011 14:02:25 -0300
parents cb3f7b47c1f0
children c7264bfc4b71
line wrap: on
line source

using System;
using System.Collections.Generic;

namespace AltNetHispano.Agendas.Domain
{
	public class Evento : Identificable
	{
		private readonly IList<Track> _tracks;
		private IList<string> _enlaces;

		public static Evento Proponer(string titulo, Ponente ponente)
		{
			var evento = new Evento { Titulo = titulo, Ponente = ponente };
			evento.AddTracks(new Track(Accion.Proponer));
			
			return evento;
		}

		public static Evento Publicar(string titulo, Ponente ponente, DateTime fecha)
		{
			var evento = new Evento { Titulo = titulo };
			evento.Publicar(ponente, fecha);

			return evento;
		}

		protected Evento()
		{
			_enlaces = new List<string>();
			_tracks = new List<Track>();
		}

		public virtual string Titulo { get; private set; }
		public virtual DateTime? Fecha { get; private set; }
		public virtual string Sintesis { get; private set; }
		
		private Ponente _ponente;
		public virtual Ponente Ponente
		{
			get { return _ponente; }
			private set
			{
				if (value == null && _ponente != null || value != _ponente && _ponente != null)
					_ponente.RemoveEvento(this);
				if (value != null)
					value.AddEvento(this);
				_ponente = value;
			}
		}

		public virtual IEnumerable<string> Enlaces
		{
			get { return _enlaces; }
		}

		public virtual IEnumerable<Track> Tracks
		{
			get { return _tracks; }
		}

		public virtual void Actualizar(Ponente ponente, DateTime? fecha)
		{
			Ponente = ponente;
			Fecha = fecha;

			AddTracks(new Track(Accion.Modificar));
		}

		public virtual void CambiarTitulo(string titulo)
		{
			Titulo = titulo;
			AddTracks(new Track(Accion.CambiarTitulo));
		}

		public virtual void Publicar(Ponente ponente, DateTime? fecha)
		{
			Ponente = ponente;
			Fecha = fecha;
			AddTracks(new Track(Accion.Publicar));
		}

		public virtual void Realizado(DateTime fecha, string sintesis, IList<string> enlaces)
		{
			Fecha = fecha;
			Sintesis = sintesis;
			_enlaces = enlaces;
		}

		public virtual void Realizado(string sintesis)
		{
			Sintesis = sintesis;
			AddTracks(new Track(Accion.Realizar));
		}

		private void AddTracks(Track track)
		{
			_tracks.Add(track);
		}
	}
}