Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Domain/Evento.cs @ 111:90ce239cfa6d
Tests sobre el publicador de twitter, cada track se pulica solo una vez
author | Nelo@Kenia.neluz.int |
---|---|
date | Wed, 08 Jun 2011 08:40:04 -0300 |
parents | 80c22175c9b5 |
children | 6f1041301797 |
line wrap: on
line source
using System; using System.Collections.Generic; using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { public class Evento : Identificable { protected Evento() { _tracks = new List<Track>(); } #region Propiedades del Evento private readonly IList<Track> _tracks; private ICollection<Track> _newTracks = new List<Track>(); /// <summary> /// Título del evento /// </summary> public virtual string Titulo { get; private set; } /// <summary> /// Fecha para la que se encuentra agendado el evento /// </summary> public virtual DateTime? Fecha { get; private set; } /// <summary> /// Url con la invitacion realizada por el ponente (en la mayoria de los casos va a ser un link al thread de la lista de correo) /// </summary> public virtual string UrlInvitacion { get; private set; } /// <summary> /// Url a la pagina de la wiki con el video de la reunion virtual /// </summary> public virtual string UrlWiki { get; private set; } /// <summary> /// Numero de orden en el historico de reuniones virtuales /// </summary> public virtual short NumeroOrden { get; private set; } /// <summary> /// Ponente o responsable del evento /// </summary> public virtual Persona Ponente { get; private set; } /// <summary> /// Track de cambios que ha sufrido el evento /// </summary> public virtual IEnumerable<Track> Tracks { get { return _tracks; } } /// <summary> /// Estado del evento en formato string (para persistencia a DB) /// </summary> public virtual string Estado { get { if (_eventoState != null) return _eventoState.GetDescripcion(); return string.Empty; } set { if (value != Estado) { if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value)) _eventoState = EventoPropuestoState.GetInstance(); else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value)) _eventoState = EventoAgendadoState.GetInstance(); else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value)) _eventoState = EventoConfirmadoState.GetInstance(); else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value)) _eventoState = EventoPublicadoState.GetInstance(); else throw new InvalidStateException(value); } } } private EventoState _eventoState; /// <summary> /// Obtiene una instancia de la clase que representa el estado del evento /// </summary> public virtual EventoState GetEstado() { if (_eventoState == null) SetEstado(EventoNullState.GetInstance()); return _eventoState; } /// <summary> /// Asigna la instancia de la clase que representa el estado del evento /// </summary> /// <param name="eventoState">Instancia que representa el estado</param> public virtual void SetEstado(EventoState eventoState) { _eventoState = eventoState; } public virtual TipoEvento Tipo { get; private set; } #endregion #region Acciones sobre el evento /// <summary> /// Propone un evento /// </summary> /// <param name="titulo">Título del evento propuesto</param> /// <param name="persona">Ponente para evento propuesto</param> /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> /// <param name="tipo">Tipo del evento</param> /// <returns></returns> public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo) { var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo}; evento.GetEstado().Promover(evento, Accion.Proponer); return evento; } /// <summary> /// Agenda un evento que no estaba propuesto /// </summary> /// <param name="titulo">Título del evento a agendar</param> /// <param name="persona">Ponente para el evento</param> /// <param name="fecha">Fecha de realización del evento</param> /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> /// <param name="tipo">Tipo del evento</param> /// <returns></returns> public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion, TipoEvento tipo) { var evento = new Evento {Titulo = titulo, Tipo = tipo}; evento.Agendar(persona, fecha, urlInvitacion); return evento; } /// <summary> /// Agenda el evento actual /// </summary> /// <param name="persona">Ponente para el evento</param> /// <param name="fecha">Fecha de realización del evento</param> /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) { Ponente = persona; Fecha = fecha; UrlInvitacion = urlInvitacion; this.GetEstado().Promover(this, Accion.Agendar); } public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) { Ponente = persona; Fecha = fecha; UrlInvitacion = urlInvitacion; AddTrack(new Track(this, Accion.Modificar)); } public virtual void CambiarTitulo(string titulo) { Titulo = titulo; AddTrack(new Track(this, Accion.CambiarTitulo)); } public virtual void Confirmar() { this.GetEstado().Promover(this, Accion.Confirmar); } public virtual void Publicar(short numeroOrden, string urlWiki) { this.NumeroOrden = numeroOrden; this.UrlWiki = urlWiki; this.GetEstado().Promover(this, Accion.Publicar); } #endregion protected internal virtual void AddTrack(Track track) { _newTracks.Add(track); _tracks.Add(track); } public virtual IEnumerable<Track> GetTrackNews() { return _newTracks; } } }