comparison Agendas/trunk/src/Agendas.Domain/Evento.cs @ 103:23325dddddcc

Persistencia del estado de los eventos
author jorge.rowies
date Sun, 05 Jun 2011 13:06:23 -0300
parents 9bfdd5bf3ad2
children c5034884c7d7
comparison
equal deleted inserted replaced
102:92c5a12015f3 103:23325dddddcc
6 public class Evento : Identificable 6 public class Evento : Identificable
7 { 7 {
8 protected Evento() 8 protected Evento()
9 { 9 {
10 _tracks = new List<Track>(); 10 _tracks = new List<Track>();
11 _estado = new EventoNullState(this);
12 } 11 }
13 12
14 #region Propiedades del Evento 13 #region Propiedades del Evento
15 14
16 private readonly IList<Track> _tracks; 15 private readonly IList<Track> _tracks;
52 public virtual IEnumerable<Track> Tracks 51 public virtual IEnumerable<Track> Tracks
53 { 52 {
54 get { return _tracks; } 53 get { return _tracks; }
55 } 54 }
56 55
57 private EventoState _estado; 56 /// <summary>
57 /// Estado del evento en formato string (para persistencia a DB)
58 /// </summary>
59 public virtual string Estado
60 {
61 get
62 {
63 if (_eventoState != null)
64 return _eventoState.GetDescripcion();
65
66 return string.Empty;
67 }
68 set
69 {
70 if (value != Estado)
71 {
72 switch (value)
73 {
74 case EventoPropuestoState.Descripcion:
75 {
76 _eventoState = new EventoPropuestoState();
77 break;
78 }
79 case EventoAgendadoState.Descripcion:
80 {
81 _eventoState = new EventoAgendadoState();
82 break;
83 }
84 case EventoConfirmadoState.Descripcion:
85 {
86 _eventoState = new EventoConfirmadoState();
87 break;
88 }
89 case EventoPublicadoState.Descripcion:
90 {
91 _eventoState = new EventoPublicadoState();
92 break;
93 }
94 }
95 }
96 }
97 }
98
99 private EventoState _eventoState;
58 100
59 /// <summary> 101 /// <summary>
60 /// Estado del evento 102 /// Obtiene una instancia de la clase que representa el estado del evento
61 /// </summary> 103 /// </summary>
62 public virtual EventoState Estado 104 public virtual EventoState GetEstado()
63 { 105 {
64 get { return _estado; } 106 if (_eventoState == null)
65 protected internal set { _estado = value; } 107 SetEstado(new EventoNullState());
108
109 return _eventoState;
66 } 110 }
111
112 /// <summary>
113 /// Asigna la instancia de la clase que representa el estado del evento
114 /// </summary>
115 /// <param name="eventoState">Instancia que representa el estado</param>
116 public virtual void SetEstado(EventoState eventoState)
117 {
118 _eventoState = eventoState;
119 }
67 120
68 #endregion 121 #endregion
69 122
70 #region Acciones sobre el evento 123 #region Acciones sobre el evento
71 124
77 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> 130 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
78 /// <returns></returns> 131 /// <returns></returns>
79 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion) 132 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion)
80 { 133 {
81 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion}; 134 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion};
82 evento.Estado.Promover(Accion.Proponer); 135 evento.GetEstado().Promover(evento, Accion.Proponer);
83 136
84 return evento; 137 return evento;
85 } 138 }
86 139
87 /// <summary> 140 /// <summary>
109 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) 162 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion)
110 { 163 {
111 Ponente = persona; 164 Ponente = persona;
112 Fecha = fecha; 165 Fecha = fecha;
113 UrlInvitacion = urlInvitacion; 166 UrlInvitacion = urlInvitacion;
114 this.Estado.Promover(Accion.Agendar); 167 this.GetEstado().Promover(this, Accion.Agendar);
115 } 168 }
116 169
117 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) 170 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion)
118 { 171 {
119 Ponente = persona; 172 Ponente = persona;
129 AddTrack(new Track(this, Accion.CambiarTitulo)); 182 AddTrack(new Track(this, Accion.CambiarTitulo));
130 } 183 }
131 184
132 public virtual void Confirmar() 185 public virtual void Confirmar()
133 { 186 {
134 this.Estado.Promover(Accion.Confirmar); 187 this.GetEstado().Promover(this, Accion.Confirmar);
135 } 188 }
136 189
137 public virtual void Publicar() 190 public virtual void Publicar()
138 { 191 {
139 this.Estado.Promover(Accion.Publicar); 192 this.GetEstado().Promover(this, Accion.Publicar);
140 } 193 }
141 194
142 #endregion 195 #endregion
143 196
144 protected internal virtual void AddTrack(Track track) 197 protected internal virtual void AddTrack(Track track)