view Agendas/trunk/src/Agendas.Google/GooglePublicador.cs @ 180:222362c29416

UI para asignación de roles
author nelopauselli
date Mon, 08 Aug 2011 16:42:52 -0300
parents 734d3f0853bf
children 2a336a6a76b5
line wrap: on
line source

using System.Collections.Generic;
using AltNetHispano.Agendas.Configurations;
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 AgendasConfigurationManager.Publicadores.Google.Calendar.UserName; }
        }

	    private static string GetPassword
	    {
			get { return AgendasConfigurationManager.Publicadores.Google.Calendar.Password; }
	    }

	    private static string GetCalendarId
	    {
			get { return AgendasConfigurationManager.Publicadores.Google.Calendar.CalendarId; }
	    }

	    public void Publicar(IEnumerable<Track> tracks)
		{
			if (!AgendasConfigurationManager.Publicadores.Google.Enabled) return;

		    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()}
	                             };
	    }
	}
}