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