public static IOutlookSynchronizer CreateEventSynchronizer( SynchronizationMode mode, ICalDavDataAccess calDavDataAccess, IEntityRelationDataAccess <string, DateTime, WebResourceName, string> entityRelationDataAccess = null, Action <Options> optionsModifier = null) { var options = new Options() { ConflictResolution = ConflictResolution.Automatic, EmailAddress = "*****@*****.**", IgnoreSynchronizationTimeRange = true, OutlookFolderEntryId = s_outlookFolderEntryId, OutlookFolderStoreId = s_outlookFolderStoreId, SynchronizationMode = mode, CalenderUrl = "http://invalidurl.net" }; if (optionsModifier != null) { optionsModifier(options); } return(s_synchronizerFactory.CreateEventSynchronizer( options, calDavDataAccess, entityRelationDataAccess ?? MockRepository.GenerateStub <IEntityRelationDataAccess <string, DateTime, WebResourceName, string> >())); }
public static IOutlookSynchronizer CreateEventSynchronizer ( SynchronizationMode mode, ICalDavDataAccess calDavDataAccess, IEntityRelationDataAccess<string, DateTime, Uri, string> entityRelationDataAccess = null, Action<Options> optionsModifier = null) { var options = new Options() { ConflictResolution = ConflictResolution.Automatic, EmailAddress = "*****@*****.**", IgnoreSynchronizationTimeRange = true, OutlookFolderEntryId = s_outlookFolderEntryId, OutlookFolderStoreId = s_outlookFolderStoreId, SynchronizationMode = mode, CalenderUrl = "http://invalidurl.net" }; if (optionsModifier != null) optionsModifier (options); return s_synchronizerFactory.CreateEventSynchronizer ( options, calDavDataAccess, entityRelationDataAccess ?? MockRepository.GenerateStub<IEntityRelationDataAccess<string, DateTime, Uri, string>>()); }
public CalDavRepository(ICalDavDataAccess calDavDataAccess, IStringSerializer calendarSerializer, EntityType entityType, IDateTimeRangeProvider dateTimeRangeProvider) { _calDavDataAccess = calDavDataAccess; _calendarSerializer = calendarSerializer; _entityType = entityType; _dateTimeRangeProvider = dateTimeRangeProvider; }
public static List <string> SyncOutlookToCalDav_CalDavIsEmpty( IEntityRelationDataAccess <string, DateTime, WebResourceName, string> entityRelationDataAccess = null, Action <Options> optionsModifier = null) { var calDavEvents = new List <string>(); ICalDavDataAccess calDavDataAccess = MockRepository.GenerateMock <ICalDavDataAccess>(); calDavDataAccess .Expect(r => r.GetEventVersions(null)) .IgnoreArguments() .Return(Task.FromResult <IReadOnlyList <EntityVersion <WebResourceName, string> > > ( new EntityVersion <WebResourceName, string>[] { })); calDavDataAccess .Expect(r => r.CreateEntity(null, Guid.NewGuid().ToString())) .IgnoreArguments() .Return(Task.FromResult( EntityVersion.Create(new WebResourceName("http://bla.com"), "blubb"))) .WhenCalled(a => calDavEvents.Add((string)a.Arguments[0])); var synchronizer = CreateEventSynchronizer( SynchronizationMode.ReplicateOutlookIntoServer, calDavDataAccess, entityRelationDataAccess, optionsModifier); WaitForTask(synchronizer.SynchronizeNoThrow(NullSynchronizationLogger.Instance)); return(calDavEvents); }
public void Initialize() { var applicationDataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CalDavSynchronizer"); var optionsDataAccess = new OptionsDataAccess( Path.Combine( applicationDataDirectory, ComponentContainer.GetOrCreateConfigFileName(applicationDataDirectory, "Outlook") )); var options = optionsDataAccess.LoadOptions().Single(o => o.Name == ProfileName); if (ServerAdapterTypeOverride.HasValue) { options.ServerAdapterType = ServerAdapterTypeOverride.Value; } _calDavDataAccess = new CalDavDataAccess( new Uri(options.CalenderUrl), SynchronizerFactory.CreateWebDavClient( options, TimeSpan.FromSeconds(30), new OutlookAccountPasswordProvider("Outlook", "16.0.0.4266"), new GeneralOptionsDataAccess().LoadOptions())); }
public static string SyncOutlookToCalDav_EventsExistsInCalDav(string existingEventData, IEntityRelationDataAccess <string, DateTime, Uri, string> entityRelationDataAccess = null) { string roundTrippedData = null; ICalDavDataAccess calDavDataAccess = MockRepository.GenerateMock <ICalDavDataAccess>(); var entityUri = new Uri("/e1", UriKind.Relative); calDavDataAccess .Expect(r => r.GetEvents(null)) .IgnoreArguments() .Return(Task.FromResult <IReadOnlyList <EntityIdWithVersion <Uri, string> > > ( new[] { EntityIdWithVersion.Create(entityUri, "v1") })); calDavDataAccess .Expect(r => r.GetEntities(Arg <ICollection <Uri> > .List.Equal(new[] { entityUri }))) .Return(Task.FromResult <IReadOnlyList <EntityWithVersion <Uri, string> > > ( new[] { EntityWithVersion.Create(entityUri, existingEventData) })); calDavDataAccess .Expect(r => r.UpdateEntity(new Uri("http://bla.com"), null)) .IgnoreArguments() .Return(Task.FromResult <EntityIdWithVersion <Uri, string> > ( EntityIdWithVersion.Create(new Uri("http://bla.com"), "blubb"))) .WhenCalled(a => { roundTrippedData = (string)a.Arguments[1]; }); ISynchronizer synchronizer = OutlookTestContext.CreateEventSynchronizer( SynchronizationMode.ReplicateOutlookIntoServer, calDavDataAccess, entityRelationDataAccess); WaitForTask(synchronizer.Synchronize()); return(roundTrippedData); }
/// <remarks> /// Public because it is being used by integration tests /// </remarks> public ISynchronizer CreateEventSynchronizer( Options options, ICalDavDataAccess calDavDataAccess, IEntityRelationDataAccess <string, DateTime, Uri, string> entityRelationDataAccess) { var dateTimeRangeProvider = options.IgnoreSynchronizationTimeRange ? NullDateTimeRangeProvider.Instance : new DateTimeRangeProvider(options.DaysToSynchronizeInThePast, options.DaysToSynchronizeInTheFuture); var atypeRepository = new OutlookEventRepository( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, dateTimeRangeProvider); IEntityRepository <IICalendar, Uri, string> btypeRepository = new CalDavRepository( calDavDataAccess, new iCalendarSerializer(), CalDavRepository.EntityType.Event, dateTimeRangeProvider); var entityMapper = new EventEntityMapper( _outlookEmailAddress, new Uri("mailto:" + options.EmailAddress), _outlookSession.Application.TimeZones.CurrentTimeZone.ID, _outlookSession.Application.Version); var outlookEventRelationDataFactory = new OutlookEventRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, AppointmentItemWrapper, Uri, string, IICalendar> ( entityMapper, atypeRepository, btypeRepository, outlookEventRelationDataFactory, ExceptionHandler.Instance ); var btypeIdEqualityComparer = EqualityComparer <Uri> .Default; var atypeIdEqualityComparer = EqualityComparer <string> .Default; return(new Synchronizer <string, DateTime, AppointmentItemWrapper, Uri, string, IICalendar> ( atypeRepository, btypeRepository, InitialEventSyncStateCreationStrategyFactory.Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), entityRelationDataAccess, outlookEventRelationDataFactory, new InitialEventEntityMatcher(btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance)); }
public CalDavRepository( ICalDavDataAccess calDavDataAccess, IStringSerializer calendarSerializer, EntityType entityType, IDateTimeRangeProvider dateTimeRangeProvider, bool deleteAndCreateOnUpdateError403) { _deleteAndCreateOnUpdateError403 = deleteAndCreateOnUpdateError403; _calDavDataAccess = calDavDataAccess; _calendarSerializer = calendarSerializer; _entityType = entityType; _dateTimeRangeProvider = dateTimeRangeProvider; }
public void Initialize () { var applicationDataDirectory = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.LocalApplicationData), "CalDavSynchronizer"); var optionsDataAccess = new OptionsDataAccess ( Path.Combine ( applicationDataDirectory, ComponentContainer.GetOrCreateConfigFileName (applicationDataDirectory, "Outlook") )); var options = optionsDataAccess.LoadOptions().Single (o => o.Name == ProfileName); if (ServerAdapterTypeOverride.HasValue) options.ServerAdapterType = ServerAdapterTypeOverride.Value; _calDavDataAccess = new CalDavDataAccess ( new Uri (options.CalenderUrl), SynchronizerFactory.CreateWebDavClient (options, TimeSpan.FromSeconds (30))); }
public void Initialize() { var applicationDataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CalDavSynchronizer"); var optionsDataAccess = new OptionsDataAccess( Path.Combine( applicationDataDirectory, ComponentContainer.GetOrCreateConfigFileName(applicationDataDirectory, "Outlook") )); var options = optionsDataAccess.LoadOptions().Single(o => o.Name == ProfileName); _calDavDataAccess = SynchronizerFactory.CreateCalDavDataAccess( options.CalenderUrl, options.UserName, options.Password, TimeSpan.FromSeconds(30), options.ServerAdapterType); }
public void Initialize () { var applicationDataDirectory = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.LocalApplicationData), "CalDavSynchronizer"); var optionsDataAccess = new OptionsDataAccess ( Path.Combine ( applicationDataDirectory, ComponentContainer.GetOrCreateConfigFileName (applicationDataDirectory, "Outlook") )); var options = optionsDataAccess.LoadOptions().Single (o => o.Name == ProfileName); _calDavDataAccess = SynchronizerFactory.CreateCalDavDataAccess ( options.CalenderUrl, options.UserName, options.Password, TimeSpan.FromSeconds (30), options.ServerAdapterType); }
public static string SyncOutlookToCalDav_EventsExistsInCalDav(string existingEventData, IEntityRelationDataAccess <AppointmentId, DateTime, WebResourceName, string> entityRelationDataAccess = null) { string roundTrippedData = null; ICalDavDataAccess calDavDataAccess = MockRepository.GenerateMock <ICalDavDataAccess>(); var entityUri = new WebResourceName("/e1"); calDavDataAccess .Expect(r => r.GetEventVersions(null)) .IgnoreArguments() .Return(Task.FromResult <IReadOnlyList <EntityVersion <WebResourceName, string> > > ( new[] { EntityVersion.Create(entityUri, "v1") })); calDavDataAccess .Expect(r => r.GetEntities(Arg <ICollection <WebResourceName> > .List.Equal(new[] { entityUri }))) .Return(Task.FromResult <IReadOnlyList <EntityWithId <WebResourceName, string> > > ( new[] { EntityWithId.Create(entityUri, existingEventData) })); calDavDataAccess .Expect(r => r.TryUpdateEntity( new WebResourceName("http://bla.com"), null, null)) .IgnoreArguments() .Return(Task.FromResult <EntityVersion <WebResourceName, string> > ( EntityVersion.Create(new WebResourceName("http://bla.com"), "blubb"))) .WhenCalled(a => { roundTrippedData = (string)a.Arguments[2]; }); var synchronizer = OutlookTestContext.CreateEventSynchronizer( SynchronizationMode.ReplicateOutlookIntoServer, calDavDataAccess, entityRelationDataAccess); WaitForTask(synchronizer.SynchronizeNoThrow(NullSynchronizationLogger.Instance)); return(roundTrippedData); }
public CalDavRepository(ICalDavDataAccess calDavDataAccess, IStringSerializer calendarSerializer, EntityType entityType) { _calDavDataAccess = calDavDataAccess; _calendarSerializer = calendarSerializer; _entityType = entityType; }
/// <remarks> /// Public because it is being used by integration tests /// </remarks> public IOutlookSynchronizer CreateEventSynchronizer( Options options, ICalDavDataAccess calDavDataAccess, IEntityRelationDataAccess <string, DateTime, WebResourceName, string> entityRelationDataAccess) { var dateTimeRangeProvider = options.IgnoreSynchronizationTimeRange ? NullDateTimeRangeProvider.Instance : new DateTimeRangeProvider(options.DaysToSynchronizeInThePast, options.DaysToSynchronizeInTheFuture); var mappingParameters = GetMappingParameters <EventMappingConfiguration> (options); var atypeRepository = new OutlookEventRepository( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, dateTimeRangeProvider, mappingParameters, _daslFilterProvider); IEntityRepository <IICalendar, WebResourceName, string, int> btypeRepository = new CalDavRepository( calDavDataAccess, new iCalendarSerializer(), CalDavRepository.EntityType.Event, dateTimeRangeProvider, options.ServerAdapterType == ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth); var entityMapper = new EventEntityMapper( _outlookEmailAddress, new Uri("mailto:" + options.EmailAddress), _outlookSession.Application.TimeZones.CurrentTimeZone.ID, _outlookSession.Application.Version, mappingParameters); var outlookEventRelationDataFactory = new OutlookEventRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, AppointmentItemWrapper, WebResourceName, string, IICalendar> ( entityMapper, outlookEventRelationDataFactory, ExceptionHandler.Instance ); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqualityComparer = EqualityComparer <string> .Default; var aTypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var bTypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <string, DateTime, AppointmentItemWrapper, WebResourceName, string, IICalendar, int> ( atypeRepository, btypeRepository, aTypeWriteRepository, bTypeWriteRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, AppointmentItemWrapper, WebResourceName, string, IICalendar> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new EventConflictInitialSyncStateCreationStrategyAutomatic(e)), entityRelationDataAccess, outlookEventRelationDataFactory, new InitialEventEntityMatcher(btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance, NullSynchronizationContextFactory.Instance, EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default); return(new OutlookSynchronizer <WebResourceName, string> (synchronizer)); }
/// <remarks> /// Public because it is being used by integration tests /// </remarks> public OutlookSynchronizer CreateEventSynchronizer ( Options options, ICalDavDataAccess calDavDataAccess, IEntityRelationDataAccess<string, DateTime, Uri, string> entityRelationDataAccess) { var dateTimeRangeProvider = options.IgnoreSynchronizationTimeRange ? NullDateTimeRangeProvider.Instance : new DateTimeRangeProvider (options.DaysToSynchronizeInThePast, options.DaysToSynchronizeInTheFuture); var atypeRepository = new OutlookEventRepository ( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, dateTimeRangeProvider); IEntityRepository<IICalendar, Uri, string> btypeRepository = new CalDavRepository ( calDavDataAccess, new iCalendarSerializer(), CalDavRepository.EntityType.Event, dateTimeRangeProvider); var entityMapper = new EventEntityMapper ( _outlookEmailAddress, new Uri ("mailto:" + options.EmailAddress), _outlookSession.Application.TimeZones.CurrentTimeZone.ID, _outlookSession.Application.Version); var outlookEventRelationDataFactory = new OutlookEventRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory<string, DateTime, AppointmentItemWrapper, Uri, string, IICalendar> ( entityMapper, atypeRepository, btypeRepository, outlookEventRelationDataFactory, ExceptionHandler.Instance ); var btypeIdEqualityComparer = EqualityComparer<Uri>.Default; var atypeIdEqualityComparer = EqualityComparer<string>.Default; var synchronizer = new Synchronizer<string, DateTime, AppointmentItemWrapper, Uri, string, IICalendar> ( atypeRepository, btypeRepository, InitialEventSyncStateCreationStrategyFactory.Create ( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution), entityRelationDataAccess, outlookEventRelationDataFactory, new InitialEventEntityMatcher (btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance); return new OutlookSynchronizer (synchronizer, atypeRepository); }
public CalendarResourceResolver(ICalDavDataAccess calDavDataAccess) { _calDavDataAccess = calDavDataAccess ?? throw new ArgumentNullException(nameof(calDavDataAccess)); }
/// <remarks> /// Public because it is being used by integration tests /// </remarks> public async Task <IOutlookSynchronizer> CreateEventSynchronizer( Options options, ICalDavDataAccess calDavDataAccess, IEntityRelationDataAccess <AppointmentId, DateTime, WebResourceName, string> entityRelationDataAccess) { var dateTimeRangeProvider = options.IgnoreSynchronizationTimeRange ? NullDateTimeRangeProvider.Instance : new DateTimeRangeProvider(options.DaysToSynchronizeInThePast, options.DaysToSynchronizeInTheFuture); var mappingParameters = GetMappingParameters <EventMappingConfiguration> (options); var atypeRepository = new OutlookEventRepository( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, dateTimeRangeProvider, mappingParameters, _daslFilterProvider); IEntityRepository <WebResourceName, string, IICalendar, IEventSynchronizationContext> btypeRepository = new CalDavRepository <IEventSynchronizationContext> ( calDavDataAccess, new iCalendarSerializer(), CalDavRepository.EntityType.Event, dateTimeRangeProvider, options.ServerAdapterType == ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth, options.IsChunkedSynchronizationEnabled ? new ChunkedExecutor(options.ChunkSize) : NullChunkedExecutor.Instance); var timeZoneCache = new TimeZoneCache(CreateHttpClient(options.ProxyOptions), mappingParameters.IncludeHistoricalData, _globalTimeZoneCache); ITimeZone configuredEventTimeZoneOrNull; if (mappingParameters.UseIanaTz) { configuredEventTimeZoneOrNull = await timeZoneCache.GetByTzIdOrNull(mappingParameters.EventTz); } else { configuredEventTimeZoneOrNull = null; } var entityMapper = new EventEntityMapper( _outlookEmailAddress, new Uri("mailto:" + options.EmailAddress), _outlookSession.Application.TimeZones.CurrentTimeZone.ID, _outlookSession.Application.Version, timeZoneCache, mappingParameters, configuredEventTimeZoneOrNull); var outlookEventRelationDataFactory = new OutlookEventRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <AppointmentId, DateTime, AppointmentItemWrapper, WebResourceName, string, IICalendar> ( entityMapper, outlookEventRelationDataFactory, ExceptionHandler.Instance ); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqualityComparer = AppointmentId.Comparer; var aTypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var bTypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <AppointmentId, DateTime, AppointmentItemWrapper, WebResourceName, string, IICalendar, IEventSynchronizationContext> ( atypeRepository, btypeRepository, aTypeWriteRepository, bTypeWriteRepository, InitialSyncStateCreationStrategyFactory <AppointmentId, DateTime, AppointmentItemWrapper, WebResourceName, string, IICalendar> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new EventConflictInitialSyncStateCreationStrategyAutomatic(e)), entityRelationDataAccess, outlookEventRelationDataFactory, new InitialEventEntityMatcher(btypeIdEqualityComparer), atypeIdEqualityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance, new EventSynchronizationContextFactory(atypeRepository, btypeRepository, entityRelationDataAccess, mappingParameters.CleanupDuplicateEvents, atypeIdEqualityComparer), EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default, syncStateFactory, new EventSynchronizationInterceptorFactory()); return(new OutlookEventSynchronizer <WebResourceName, string> (synchronizer)); }