comparison Agendas/trunk/src/Agendas.Domain/Evento.cs @ 140:3639803112c6

Refactoring de la relación entre Evento y Estado
author nelopauselli
date Fri, 29 Jul 2011 16:30:53 -0300
parents 18e5a78186e4
children 5c94b052d838
comparison
equal deleted inserted replaced
139:18e5a78186e4 140:3639803112c6
1 using System; 1 using System;
2 using System.Collections;
3 using System.Collections.Generic; 2 using System.Collections.Generic;
4 using AltNetHispano.Agendas.Domain.Exceptions;
5 3
6 namespace AltNetHispano.Agendas.Domain 4 namespace AltNetHispano.Agendas.Domain
7 { 5 {
8 public class Evento : Identificable 6 public class Evento : Identificable
9 { 7 {
54 public virtual IEnumerable<Track> Tracks 52 public virtual IEnumerable<Track> Tracks
55 { 53 {
56 get { return _tracks; } 54 get { return _tracks; }
57 } 55 }
58 56
57 private EventoState _estado;
58
59 /// <summary> 59 /// <summary>
60 /// Estado del evento en formato string (para persistencia a DB) 60 /// Estado del evento en formato string (para persistencia a DB)
61 /// </summary> 61 /// </summary>
62 public virtual string Estado 62 public virtual EventoState Estado
63 { 63 {
64 get 64 get { return _estado ?? EventoNullState.GetInstance(); }
65 { 65 set { _estado = value; }
66 if (_eventoState != null) 66 }
67 return _eventoState.GetDescripcion(); 67
68 68 //private EventoState _eventoState;
69 return string.Empty;
70 }
71 set
72 {
73 if (value != Estado)
74 {
75 if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value))
76 _eventoState = EventoPropuestoState.GetInstance();
77 else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value))
78 _eventoState = EventoAgendadoState.GetInstance();
79 else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value))
80 _eventoState = EventoConfirmadoState.GetInstance();
81 else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value))
82 _eventoState = EventoPublicadoState.GetInstance();
83 else if (EventoCanceladoState.GetInstance().GetDescripcion().Equals(value))
84 _eventoState = EventoCanceladoState.GetInstance();
85 else if (EventoDescartadoState.GetInstance().GetDescripcion().Equals(value))
86 _eventoState = EventoDescartadoState.GetInstance();
87 else
88 throw new InvalidStateException(value);
89 }
90 }
91 }
92
93 private EventoState _eventoState;
94 private IList<Patrocinador> _patrocinadores; 69 private IList<Patrocinador> _patrocinadores;
95
96 /// <summary>
97 /// Obtiene una instancia de la clase que representa el estado del evento
98 /// </summary>
99 public virtual EventoState GetEstado()
100 {
101 if (_eventoState == null)
102 SetEstado(EventoNullState.GetInstance());
103
104 return _eventoState;
105 }
106
107 /// <summary>
108 /// Asigna la instancia de la clase que representa el estado del evento
109 /// </summary>
110 /// <param name="eventoState">Instancia que representa el estado</param>
111 public virtual void SetEstado(EventoState eventoState)
112 {
113 _eventoState = eventoState;
114 }
115 70
116 public virtual TipoEvento Tipo { get; private set; } 71 public virtual TipoEvento Tipo { get; private set; }
117 72
118 public virtual IEnumerable<Patrocinador> Patrocinadores 73 public virtual IEnumerable<Patrocinador> Patrocinadores
119 { 74 {
147 /// <param name="tipo">Tipo del evento</param> 102 /// <param name="tipo">Tipo del evento</param>
148 /// <returns></returns> 103 /// <returns></returns>
149 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo) 104 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo)
150 { 105 {
151 var evento = new Evento { Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo }; 106 var evento = new Evento { Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo };
152 evento.GetEstado().Promover(evento, Accion.Proponer); 107 evento.Estado.Promover(evento, Accion.Proponer);
153 108
154 return evento; 109 return evento;
155 } 110 }
156 111
157 /// <summary> 112 /// <summary>
180 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) 135 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion)
181 { 136 {
182 Ponente = persona; 137 Ponente = persona;
183 Fecha = fecha; 138 Fecha = fecha;
184 UrlInvitacion = urlInvitacion; 139 UrlInvitacion = urlInvitacion;
185 this.GetEstado().Promover(this, Accion.Agendar); 140 this.Estado.Promover(this, Accion.Agendar);
186 } 141 }
187 142
188 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) 143 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion)
189 { 144 {
190 Ponente = persona; 145 Ponente = persona;
200 AddTrack(new Track(this, Accion.CambiarTitulo)); 155 AddTrack(new Track(this, Accion.CambiarTitulo));
201 } 156 }
202 157
203 public virtual void Confirmar() 158 public virtual void Confirmar()
204 { 159 {
205 this.GetEstado().Promover(this, Accion.Confirmar); 160 this.Estado.Promover(this, Accion.Confirmar);
206 } 161 }
207 162
208 public virtual void Publicar(short numeroOrden, string urlWiki) 163 public virtual void Publicar(short numeroOrden, string urlWiki)
209 { 164 {
210 this.NumeroOrden = numeroOrden; 165 this.NumeroOrden = numeroOrden;
211 this.UrlWiki = urlWiki; 166 this.UrlWiki = urlWiki;
212 this.GetEstado().Promover(this, Accion.Publicar); 167 this.Estado.Promover(this, Accion.Publicar);
213 } 168 }
214 169
215 public virtual void Cancelar() 170 public virtual void Cancelar()
216 { 171 {
217 GetEstado().Promover(this, Accion.Cancelar); 172 Estado.Promover(this, Accion.Cancelar);
218 } 173 }
219 174
220 public virtual void Descartar() 175 public virtual void Descartar()
221 { 176 {
222 GetEstado().Promover(this, Accion.Descartar); 177 Estado.Promover(this, Accion.Descartar);
223 } 178 }
224 179
225 public virtual void ReProponer() 180 public virtual void ReProponer()
226 { 181 {
227 GetEstado().Promover(this, Accion.ReProponer); 182 Estado.Promover(this, Accion.ReProponer);
228 } 183 }
229 184
230 public virtual void ReAgendar() 185 public virtual void ReAgendar()
231 { 186 {
232 GetEstado().Promover(this, Accion.ReAgendar); 187 Estado.Promover(this, Accion.ReAgendar);
233 } 188 }
234 #endregion 189 #endregion
235 190
236 protected internal virtual void AddTrack(Track track) 191 protected internal virtual void AddTrack(Track track)
237 { 192 {