view Agendas/trunk/src/Agendas.Google/GooglePublicador.cs @ 135:80156ae1493f

Se agrega la eliminación de un evento cuando la acción sea Cancelar. Además se arregla la descripción de los eventos Alt.Net Café y Grupo de estudio debido a que los test se encontraban fallidos.
author alabra
date Sun, 17 Jul 2011 14:13:30 -0400
parents 0ea32a748453
children 734d3f0853bf
line wrap: on
line source

using System.Collections.Generic;
using System.Configuration;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Google.DetailsEvents;

namespace AltNetHispano.Agendas.Google
{
	public class GooglePublicador : IPublicador
	{
	    private readonly IGCalendarAdapter _adapter;
        private readonly IDictionary<TipoEvento, IGEventDetail> _gEventDetails;
        
        private static string GetUserName
        {
            get { return ConfigurationManager.AppSettings["userNameGoogleCalendar"]; }
        }

	    private static string GetPassword
	    {
            get { return ConfigurationManager.AppSettings["passwordGoogleCalendar"]; }
	    }

	    private static string GetCalendarId
	    {
            get { return ConfigurationManager.AppSettings["calendarIdGoogleCalendar"]; }
	    }

	    public void Publicar(IEnumerable<Track> tracks)
		{
		    foreach (var track in tracks)
		    {
                switch (track.Accion)
                {
                    case Accion.Agendar:
                        PublicarAccionAgendar(track);
                        break;
                    case Accion.Cancelar:
                        PublicarAccionCancelar(track);
                        break;
                }
		    }
		}

	    private void PublicarAccionCancelar(Track track)
	    {
            string message;
	        var result= _adapter.DeleteEvent(track.Evento.Fecha.Value, track.Evento.Fecha.Value.AddHours(2), out message);
            track.LogAdd(new TrackLog(TrackLogPropietario.Calendario, message, track.Usuario, result));
	    }

	    private void PublicarAccionAgendar(Track track)
        {
            string message;
            _gEventDetails[track.Evento.Tipo].Generate(track.Evento);
            var result = _adapter.CreateEvent(_gEventDetails[track.Evento.Tipo], out message);
            track.LogAdd(new TrackLog(TrackLogPropietario.Calendario, message, track.Usuario, result));
        }

        public GooglePublicador()
            : this(new GCalendarAdapter("VAN", GetUserName, GetPassword, GetCalendarId))
        {
        }

	    public GooglePublicador(IGCalendarAdapter gCalendarAdapter)
	    {
	        _adapter = gCalendarAdapter;

	        _gEventDetails = new Dictionary<TipoEvento, IGEventDetail>
	                             {
	                                 {TipoEvento.Van, new VanGEventDetail()},
	                                 {TipoEvento.Cafe, new CafeGEventDetail()},
	                                 {TipoEvento.GrupoEstudio, new EstudioGEventDetail()}
	                             };
	    }
	}
}