/// <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));
        }
        private ISynchronizer CreateEventSynchronizer(Options options)
        {
            var storageDataDirectory = Path.Combine(
                _applicationDataDirectory,
                options.Id.ToString()
                );

            var storageDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookEventRelationData, Uri, string> (storageDataDirectory);

            var btypeIdEqualityComparer = EqualityComparer <Uri> .Default;
            var atypeIdComparer         = EqualityComparer <string> .Default;

            var synchronizationContext = new EventSynchronizationContext(
                _outlookSession,
                storageDataAccess,
                options,
                _outlookEmailAddress,
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavConnectTimeout"]),
                TimeSpan.Parse(ConfigurationManager.AppSettings["calDavReadWriteTimeout"]),
                Boolean.Parse(ConfigurationManager.AppSettings["disableCertificateValidation"]),
                Boolean.Parse(ConfigurationManager.AppSettings["enableSsl3"]),
                Boolean.Parse(ConfigurationManager.AppSettings["enableTls12"]),
                btypeIdEqualityComparer);

            var syncStateFactory = new EntitySyncStateFactory <string, DateTime, AppointmentItemWrapper, Uri, string, IICalendar> (
                synchronizationContext.EntityMapper,
                synchronizationContext.AtypeRepository,
                synchronizationContext.BtypeRepository,
                synchronizationContext.EntityRelationDataFactory,
                ExceptionHandler.Instance
                );

            return(new Synchronizer <string, DateTime, AppointmentItemWrapper, Uri, string, IICalendar> (
                       synchronizationContext,
                       InitialEventSyncStateCreationStrategyFactory.Create(
                           syncStateFactory,
                           syncStateFactory.Environment,
                           options.SynchronizationMode,
                           options.ConflictResolution),
                       _totalProgressFactory,
                       atypeIdComparer,
                       btypeIdEqualityComparer,
                       ExceptionHandler.Instance));
        }
Ejemplo n.º 3
0
        /// <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> 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,
                atypeRepository,
                btypeRepository,
                outlookEventRelationDataFactory,
                ExceptionHandler.Instance
                );

            var btypeIdEqualityComparer = WebResourceName.Comparer;
            var atypeIdEqualityComparer = EqualityComparer <string> .Default;

            var synchronizer = new Synchronizer <string, DateTime, AppointmentItemWrapper, WebResourceName, 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 <WebResourceName, string> (synchronizer));
        }