Ejemplo n.º 1
0
        public static void Initialize(NameSpace mapiNameSpace)
        {
            s_mapiNameSpace = mapiNameSpace;
            const string testerServerEmailAddress = "*****@*****.**";

            if (mapiNameSpace == null)
            {
                throw new ArgumentNullException("mapiNameSpace");
            }

            _entityMapper = new EventEntityMapper(mapiNameSpace.CurrentUser.Address, new Uri("mailto:" + testerServerEmailAddress), mapiNameSpace.Application.TimeZones.CurrentTimeZone.ID, mapiNameSpace.Application.Version);

            s_outlookFolderEntryId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderEntryId", Environment.MachineName)];
            s_outlookFolderStoreId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderStoreId", Environment.MachineName)];

            _outlookRepository = new OutlookEventRepository(mapiNameSpace, s_outlookFolderEntryId, s_outlookFolderStoreId, NullDateTimeRangeProvider.Instance);

            s_synchronizerFactory = new SynchronizerFactory(
                @"a:\invalid path",
                NullTotalProgressFactory.Instance,
                s_mapiNameSpace,
                TimeSpan.Zero,
                TimeSpan.Zero);

            s_outlookEventRepository = new OutlookEventRepository(
                s_mapiNameSpace,
                s_outlookFolderEntryId,
                s_outlookFolderStoreId,
                NullDateTimeRangeProvider.Instance);
        }
    public static void Initialize (NameSpace mapiNameSpace)
    {
      s_mapiNameSpace = mapiNameSpace;
      const string testerServerEmailAddress = "*****@*****.**";

      if (mapiNameSpace == null)
        throw new ArgumentNullException ("mapiNameSpace");

      _entityMapper = new EventEntityMapper (
          mapiNameSpace.CurrentUser.Address,
          new Uri ("mailto:" + testerServerEmailAddress),
          mapiNameSpace.Application.TimeZones.CurrentTimeZone.ID,
          mapiNameSpace.Application.Version,
          new EventMappingConfiguration());

      s_outlookFolderEntryId = ConfigurationManager.AppSettings[string.Format ("{0}.OutlookFolderEntryId", Environment.MachineName)];
      s_outlookFolderStoreId = ConfigurationManager.AppSettings[string.Format ("{0}.OutlookFolderStoreId", Environment.MachineName)];

      _outlookRepository = new OutlookEventRepository (mapiNameSpace, s_outlookFolderEntryId, s_outlookFolderStoreId, NullDateTimeRangeProvider.Instance);

      s_synchronizerFactory = new SynchronizerFactory (
          _ => @"a:\invalid path",
          NullTotalProgressFactory.Instance,
          s_mapiNameSpace,
          TimeSpan.Zero,
          TimeSpan.Zero);

      s_outlookEventRepository = new OutlookEventRepository (
          s_mapiNameSpace,
          s_outlookFolderEntryId,
          s_outlookFolderStoreId,
          NullDateTimeRangeProvider.Instance);
    }
        /// <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 static void Initialize(NameSpace mapiNameSpace)
        {
            s_mapiNameSpace = mapiNameSpace;
              const string testerServerEmailAddress = "*****@*****.**";

              if (mapiNameSpace == null)
            throw new ArgumentNullException ("mapiNameSpace");

              _entityMapper = new EventEntityMapper (mapiNameSpace.CurrentUser.Address, new Uri ("mailto:" + testerServerEmailAddress), mapiNameSpace.Application.TimeZones.CurrentTimeZone.ID, mapiNameSpace.Application.Version);

              s_outlookFolderEntryId = ConfigurationManager.AppSettings[string.Format ("{0}.OutlookFolderEntryId", Environment.MachineName)];
              s_outlookFolderStoreId = ConfigurationManager.AppSettings[string.Format ("{0}.OutlookFolderStoreId", Environment.MachineName)];

              _outlookRepository = new OutlookEventRepository (mapiNameSpace, s_outlookFolderEntryId, s_outlookFolderStoreId);
        }
        public static void Initialize(NameSpace mapiNameSpace)
        {
            s_mapiNameSpace = mapiNameSpace;
            const string testerServerEmailAddress = "*****@*****.**";

            if (mapiNameSpace == null)
            {
                throw new ArgumentNullException("mapiNameSpace");
            }

            _entityMapper = new EventEntityMapper(mapiNameSpace.CurrentUser.Address, new Uri("mailto:" + testerServerEmailAddress), mapiNameSpace.Application.TimeZones.CurrentTimeZone.ID, mapiNameSpace.Application.Version);

            s_outlookFolderEntryId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderEntryId", Environment.MachineName)];
            s_outlookFolderStoreId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderStoreId", Environment.MachineName)];

            _outlookRepository = new OutlookEventRepository(mapiNameSpace, s_outlookFolderEntryId, s_outlookFolderStoreId);
        }
Ejemplo n.º 6
0
        public static void Initialize(NameSpace mapiNameSpace)
        {
            s_mapiNameSpace = mapiNameSpace;
            const string testerServerEmailAddress = "*****@*****.**";

            if (mapiNameSpace == null)
            {
                throw new ArgumentNullException("mapiNameSpace");
            }

            var globalTimeZoneCache = new GlobalTimeZoneCache();

            var eventMappingConfiguration = new EventMappingConfiguration();

            s_entityMapper = new EventEntityMapper(
                mapiNameSpace.CurrentUser.Address,
                new Uri("mailto:" + testerServerEmailAddress),
                mapiNameSpace.Application.TimeZones.CurrentTimeZone.ID,
                mapiNameSpace.Application.Version,
                new TimeZoneCache(null, false, globalTimeZoneCache),
                eventMappingConfiguration,
                null);

            s_outlookFolderEntryId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderEntryId", Environment.MachineName)];
            s_outlookFolderStoreId = ConfigurationManager.AppSettings[string.Format("{0}.OutlookFolderStoreId", Environment.MachineName)];

            var daslFilterProvider = new DaslFilterProvider(false);

            s_synchronizerFactory = new SynchronizerFactory(
                _ => @"a:\invalid path",
                NullTotalProgressFactory.Instance,
                s_mapiNameSpace,
                daslFilterProvider,
                new OutlookAccountPasswordProvider(mapiNameSpace.CurrentProfileName, mapiNameSpace.Application.Version),
                globalTimeZoneCache,
                QueryOutlookFolderByRequestingItemStrategy.Instance);

            s_outlookEventRepository = new OutlookEventRepository(
                s_mapiNameSpace,
                s_outlookFolderEntryId,
                s_outlookFolderStoreId,
                NullDateTimeRangeProvider.Instance,
                eventMappingConfiguration,
                daslFilterProvider,
                QueryOutlookFolderByRequestingItemStrategy.Instance);
        }
        public EventSynchronizationContext(NameSpace outlookSession, IEntityRelationDataAccess <string, DateTime, Uri, string> storageDataAccess, Options options, string outlookEmailAddress, TimeSpan connectTimeout, TimeSpan readWriteTimeout, bool disableCertValidation, bool useSsl3, bool useTls12, IEqualityComparer <Uri> btypeIdEqualityComparer)
        {
            if (outlookSession == null)
            {
                throw new ArgumentNullException("outlookSession");
            }

            SynchronizationMode = options.SynchronizationMode;
            From = DateTime.Now.AddDays(-options.DaysToSynchronizeInThePast);
            To   = DateTime.Now.AddDays(options.DaysToSynchronizeInTheFuture);

            _entityRelationDataFactory = new OutlookEventRelationDataFactory();

            _entityMapper = new EventEntityMapper(outlookEmailAddress, new Uri("mailto:" + options.EmailAddress), outlookSession.Application.TimeZones.CurrentTimeZone.ID, outlookSession.Application.Version);

            _atypeRepository = new OutlookEventRepository(outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId);

            _btypeRepository = new CalDavRepository(
                new CalDavDataAccess(
                    new Uri(options.CalenderUrl),
                    new CalDavWebClient(
                        options.UserName,
                        options.Password,
                        connectTimeout,
                        readWriteTimeout,
                        disableCertValidation,
                        useSsl3,
                        useTls12)
                    ),
                new iCalendarSerializer(),
                CalDavRepository.EntityType.Event);

            if (StringComparer.InvariantCultureIgnoreCase.Compare(new Uri(options.CalenderUrl).Host, "www.google.com") == 0)
            {
                _btypeRepository = new EntityRepositoryDeleteCreateInstaedOfUpdateWrapper <IICalendar, Uri, string> (_btypeRepository);
            }

            _storageDataAccess = storageDataAccess;

            InitialEntityMatcher = new InitialEventEntityMatcher(btypeIdEqualityComparer);
        }
    public static void Initialize (NameSpace mapiNameSpace)
    {
      s_mapiNameSpace = mapiNameSpace;
      const string testerServerEmailAddress = "*****@*****.**";

      if (mapiNameSpace == null)
        throw new ArgumentNullException ("mapiNameSpace");

      var globalTimeZoneCache = new GlobalTimeZoneCache();

      var eventMappingConfiguration = new EventMappingConfiguration();
      s_entityMapper = new EventEntityMapper (
          mapiNameSpace.CurrentUser.Address,
          new Uri ("mailto:" + testerServerEmailAddress),
          mapiNameSpace.Application.TimeZones.CurrentTimeZone.ID,
          mapiNameSpace.Application.Version,
          new TimeZoneCache (null, false, globalTimeZoneCache), 
          eventMappingConfiguration,
          null);

      s_outlookFolderEntryId = ConfigurationManager.AppSettings[string.Format ("{0}.OutlookFolderEntryId", Environment.MachineName)];
      s_outlookFolderStoreId = ConfigurationManager.AppSettings[string.Format ("{0}.OutlookFolderStoreId", Environment.MachineName)];

      var daslFilterProvider = new DaslFilterProvider (false);

      s_synchronizerFactory = new SynchronizerFactory (
          _ => @"a:\invalid path",
          NullTotalProgressFactory.Instance,
          s_mapiNameSpace,
          daslFilterProvider,
          new OutlookAccountPasswordProvider (mapiNameSpace.CurrentProfileName, mapiNameSpace.Application.Version),
          globalTimeZoneCache);

      s_outlookEventRepository = new OutlookEventRepository (
          s_mapiNameSpace,
          s_outlookFolderEntryId,
          s_outlookFolderStoreId,
          NullDateTimeRangeProvider.Instance,
          eventMappingConfiguration,
          daslFilterProvider);
    }
        /// <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);
    }
        /// <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));
        }