Mercurial > altnet-hispano
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 { |