view Agendas/trunk/src/Agendas.Domain/EventoCanceladoState.cs @ 140:3639803112c6

Refactoring de la relación entre Evento y Estado
author nelopauselli
date Fri, 29 Jul 2011 16:30:53 -0300
parents 6f1041301797
children
line wrap: on
line source

using System;
using AltNetHispano.Agendas.Domain.Exceptions;

namespace AltNetHispano.Agendas.Domain
{
	public class EventoCanceladoState : EventoState
	{
		protected EventoCanceladoState()
		{
		}

		private static readonly EventoState _instance = new EventoCanceladoState();

		public static EventoState GetInstance()
		{
			return _instance;
		}

		public override void Promover(Evento evento, Accion accion)
		{
			switch (accion)
			{
				case Accion.Descartar:
					evento.Estado = EventoDescartadoState.GetInstance();
					evento.AddTrack(new Track(evento, Accion.Descartar));
					break;
				case Accion.ReAgendar:
					evento.Estado = EventoAgendadoState.GetInstance();
					evento.AddTrack(new Track(evento, Accion.ReAgendar));
					break;
				case Accion.ReProponer:
					evento.Estado = EventoPropuestoState.GetInstance();
					evento.AddTrack(new Track(evento, Accion.ReProponer));
					break;
				default:
					throw new AccionNoSoportadaException(this.GetType(), accion);
			}
		}

		public override string Descripcion
		{
			get { return "Cancelado"; }
		}

		public override bool PuedePromover(Accion accion)
		{
			return accion == Accion.Descartar || accion == Accion.ReAgendar || accion == Accion.ReProponer;
		}
	}
}