view Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 8:cae27d7eb697

Se agregó ISeguridad para validar autenticaciones de usuarios. Agenda.Proponer modificado para validar que solo pueden Proponer eventos los usuarios autenticados.
author juanjose.montesdeocaarbos
date Sat, 12 Feb 2011 11:12:18 -0300
parents deee2ca97f5b
children c90492faf268
line wrap: on
line source

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

namespace AltNetHispano.Agendas.Domain
{
	public class Agenda
	{
        private readonly IList<Evento> _eventosPropuestos;
        private readonly IList<Evento> _eventosPublicados;
		private readonly IPublicador _publicador;
		private readonly IRecordador _recordador;
        private readonly ISeguridad _seguridad;

        public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad)
		{
			_publicador = publicador;
			_recordador = recordador;
            _seguridad = seguridad;
			_eventosPropuestos = new List<Evento>();
            _eventosPublicados = new List<Evento>();
		}

		public Guid Id { get; set; }

        public void Publicar(Evento evento)
		{
			if (!evento.Fecha.HasValue)
				throw new ValidationException();
			
			if (_publicador != null)
				_publicador.Publicar(evento);
            _eventosPublicados.Add(evento);
		}

		public void Publicar(Van van)
		{
			if (string.IsNullOrWhiteSpace(van.Ponente))
				throw new ValidationException();
			Publicar(van as Evento);
		}

		public void Recordar(Evento evento)
		{
			if (_recordador != null)
				_recordador.Recordar(evento);
		}

		public void Proponer(Van van)
		{
			if (string.IsNullOrWhiteSpace(van.Titulo))
				throw new ValidationException();
            if (_seguridad.GetPrincipal() == null || _seguridad.GetPrincipal().Identity == null)
                throw new ValidationException();
			_eventosPropuestos.Add(van);
		}

        public IList<Evento> GetEventosPropuestos()
        {
            return _eventosPropuestos;
        }

        public IList<Evento> GetEventosPublicados()
        {
            return _eventosPublicados;
        }
    }
}