private async Task <IOutlookSynchronizer> CreateEventSynchronizer(Options options, GeneralOptions generalOptions, AvailableSynchronizerComponents componentsToFill) { ICalDavDataAccess calDavDataAccess; var calendarUrl = new Uri(options.CalenderUrl); if (calendarUrl.Scheme == Uri.UriSchemeFile) { calDavDataAccess = new FileSystemDavDataAccess(calendarUrl); } else { calDavDataAccess = new CalDavDataAccess( calendarUrl, CreateWebDavClient(options, _outlookAccountPasswordProvider, generalOptions)); } componentsToFill.CalDavDataAccess = calDavDataAccess; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var entityRelationDataAccess = new EntityRelationDataAccess <AppointmentId, DateTime, OutlookEventRelationData, WebResourceName, string> (storageDataDirectory); return(await CreateEventSynchronizer(options, calDavDataAccess, entityRelationDataAccess)); }
private IOutlookSynchronizer CreateContactSynchronizer(Options options, GeneralOptions generalOptions, AvailableSynchronizerComponents componentsToFill) { var atypeRepository = new OutlookContactRepository <int> ( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider); ICardDavDataAccess cardDavDataAccess; var serverUrl = new Uri(options.CalenderUrl); if (serverUrl.Scheme == Uri.UriSchemeFile) { cardDavDataAccess = new FileSystemDavDataAccess(serverUrl); } else { cardDavDataAccess = new CardDavDataAccess( serverUrl, CreateWebDavClient( options.UserName, options.GetEffectivePassword(_outlookAccountPasswordProvider), options.CalenderUrl, generalOptions.CalDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.PreemptiveAuthentication, options.ForceBasicAuthentication, options.ProxyOptions, generalOptions.EnableClientCertificate, generalOptions.AcceptInvalidCharsInServerResponse)); } componentsToFill.CardDavDataAccess = cardDavDataAccess; var btypeRepository = new CardDavRepository( cardDavDataAccess, options.IsChunkedSynchronizationEnabled ? new ChunkedExecutor(options.ChunkSize) : NullChunkedExecutor.Instance); var mappingParameters = GetMappingParameters <ContactMappingConfiguration> (options); var entityMapper = new ContactEntityMapper(mappingParameters); var entityRelationDataFactory = new OutlookContactRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard> ( entityMapper, entityRelationDataFactory, ExceptionHandler.Instance); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqulityComparer = EqualityComparer <string> .Default; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookContactRelationData, WebResourceName, string> (storageDataDirectory); var atypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var btypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, int> ( atypeRepository, btypeRepository, atypeWriteRepository, btypeWriteRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new ContactConflictInitialSyncStateCreationStrategyAutomatic(e)), storageDataAccess, entityRelationDataFactory, new InitialContactEntityMatcher(btypeIdEqualityComparer), atypeIdEqulityComparer, btypeIdEqualityComparer, _totalProgressFactory, ExceptionHandler.Instance, NullSynchronizationContextFactory.Instance, EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default, syncStateFactory); return(new OutlookSynchronizer <WebResourceName, string> (synchronizer)); }
private IOutlookSynchronizer CreateContactSynchronizer(Options options, GeneralOptions generalOptions, AvailableSynchronizerComponents componentsToFill) { var atypeRepository = new OutlookContactRepository <ICardDavRepositoryLogger> ( _outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId, _daslFilterProvider, _queryFolderStrategy); ICardDavDataAccess cardDavDataAccess; var serverUrl = new Uri(options.CalenderUrl); IWebDavClient webDavClientOrNullIfFileAccess = null; if (serverUrl.Scheme == Uri.UriSchemeFile) { cardDavDataAccess = new FileSystemDavDataAccess(serverUrl); } else { webDavClientOrNullIfFileAccess = CreateWebDavClient( options.UserName, options.GetEffectivePassword(_outlookAccountPasswordProvider), options.CalenderUrl, generalOptions.CalDavConnectTimeout, options.ServerAdapterType, options.CloseAfterEachRequest, options.PreemptiveAuthentication, options.ForceBasicAuthentication, options.ProxyOptions, generalOptions.EnableClientCertificate, generalOptions.AcceptInvalidCharsInServerResponse); cardDavDataAccess = new CardDavDataAccess( serverUrl, webDavClientOrNullIfFileAccess, contentType => contentType != "text/x-vlist"); } componentsToFill.CardDavDataAccess = cardDavDataAccess; var chunkedExecutor = options.IsChunkedSynchronizationEnabled ? new ChunkedExecutor(options.ChunkSize) : NullChunkedExecutor.Instance; var cardDavRepository = new CardDavRepository( cardDavDataAccess, chunkedExecutor); var btypeRepository = new LoggingCardDavRepositoryDecorator( cardDavRepository); componentsToFill.CardDavEntityRepository = cardDavRepository; var mappingParameters = GetMappingParameters <ContactMappingConfiguration> (options); var entityMapper = new ContactEntityMapper(mappingParameters); var entityRelationDataFactory = new OutlookContactRelationDataFactory(); var syncStateFactory = new EntitySyncStateFactory <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger> ( entityMapper, entityRelationDataFactory, ExceptionHandler.Instance); var btypeIdEqualityComparer = WebResourceName.Comparer; var atypeIdEqulityComparer = EqualityComparer <string> .Default; var storageDataDirectory = _profileDataDirectoryFactory(options.Id); var storageDataAccess = new EntityRelationDataAccess <string, DateTime, OutlookContactRelationData, WebResourceName, string> (storageDataDirectory); var atypeWriteRepository = BatchEntityRepositoryAdapter.Create(atypeRepository); var btypeWriteRepository = BatchEntityRepositoryAdapter.Create(btypeRepository); var synchronizer = new Synchronizer <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger> ( atypeRepository, btypeRepository, atypeWriteRepository, btypeWriteRepository, InitialSyncStateCreationStrategyFactory <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger> .Create( syncStateFactory, syncStateFactory.Environment, options.SynchronizationMode, options.ConflictResolution, e => new ContactConflictInitialSyncStateCreationStrategyAutomatic(e)), storageDataAccess, entityRelationDataFactory, new InitialContactEntityMatcher(btypeIdEqualityComparer), atypeIdEqulityComparer, btypeIdEqualityComparer, _totalProgressFactory, EqualityComparer <DateTime> .Default, EqualityComparer <string> .Default, syncStateFactory); if (mappingParameters.MapDistributionLists) { CardDavEntityRepository <DistributionList, int, DistributionListSychronizationContext> bDistListRepository; // TODO: muss auch für das file funktionieren ICardDavDataAccess distListDataAccess = new CardDavDataAccess( serverUrl, webDavClientOrNullIfFileAccess, contentType => contentType == "text/x-vlist"); componentsToFill.DistListDataAccess = distListDataAccess; switch (mappingParameters.DistributionListType) { case DistributionListType.Sogo: bDistListRepository = new SogoDistributionListRepository(distListDataAccess, chunkedExecutor); break; default: throw new NotImplementedException($"{nameof(DistributionListType)} '{mappingParameters.DistributionListType}' not implemented."); } var distributionListSynchronizer = CreateDistListSynchronizer(options, generalOptions, bDistListRepository); return(new OutlookSynchronizer <WebResourceName, string>( new ContactAndDistListSynchronizer( synchronizer, distributionListSynchronizer, new EmailAddressCacheDataAccess(Path.Combine(storageDataDirectory, "emailAddressCache.xml")), btypeRepository, storageDataAccess, atypeRepository, _outlookSession))); } else { return(new OutlookSynchronizer <WebResourceName, string>( new ContextCreatingSynchronizerDecorator <string, DateTime, ContactItemWrapper, WebResourceName, string, vCard, ICardDavRepositoryLogger>( synchronizer, new SynchronizationContextFactory <ICardDavRepositoryLogger>(() => NullCardDavRepositoryLogger.Instance)))); } }