public static void RunStrongAlgorithm <TInternal, TExternal, TInternalKey, TExternalKey>( IEnumerable <TInternal> internals, IEnumerable <TExternal> externals, MatchHandlersAndKeys <TInternal, TExternal, TInternalKey, TExternalKey> handlers) where TInternal : class where TExternal : class { var manualMatchViewModel = new ManualMatchViewModel <TInternal, TExternal>(handlers.Handlers); var pendingData = new MatchingPendingData <TInternal, TExternal>(internals, externals); var idMatch = new TwoDirectionalIdMatch <TInternal, TExternal, TInternalKey, TExternalKey>(pendingData, handlers.KeySet); var idMatchResult = idMatch.Run(); manualMatchViewModel.Pull(idMatchResult); pendingData = idMatchResult.GetPendingData(); var nameMatch = new NameMatch <TInternal, TExternal>(pendingData, handlers.Handlers); var nameMatchResult = nameMatch.Run(); manualMatchViewModel.Pull(nameMatchResult); pendingData = nameMatchResult.GetPendingData(); manualMatchViewModel.Pull(pendingData); manualMatchViewModel.Prepare(); var window = new Tuto.Publishing.Views.ManualMatch(); window.DataContext = manualMatchViewModel; window.ShowDialog(); if (window.DialogResult == true) { manualMatchViewModel.Push(handlers.Updaters); } }
void PullClips(Item root) { var clips = GetYoutubeClips(); if (clips == null) { return; } var lectures = root.Subtree().OfType <VideoWrap>(); var clipHandler = new Matching.MatchItemHandler <YoutubeClip>(z => z.GetProperName(), z => z.Name, z => Process.Start(z.VideoURLFull)); var lectureHandler = new Matching.MatchItemHandler <VideoWrap>(z => z.Caption, z => z.Caption, z => { }); var updaters = new Matching.MatchUpdater <VideoWrap, YoutubeClip>( (wrap, clip) => wrap.Store <YoutubeClip>(clip), (clip, wrap) => { clip.UpdateGuid(wrap.Guid); YoutubeApisProcessor.Current.UpdateVideo(clip); }, wrap => wrap.Store <YoutubeClip>(null), clip => { clip.UpdateGuid(null); YoutubeApisProcessor.Current.UpdateVideo(clip); } ); var handlers = new Matching.MatchHandlers <VideoWrap, YoutubeClip>(lectureHandler, clipHandler); var keys = new Matching.MatchKeySet <VideoWrap, YoutubeClip, Guid?, string>( wrap => wrap.Guid, wrap => { var c = wrap.Get <YoutubeClip>(); if (c != null) { return(c.Id); } return(null); }, clip => clip.GetGuid(), clip => clip.Id, guid => !guid.HasValue, id => id == null ); var allData = new Matching.MatchHandlersAndKeys <VideoWrap, YoutubeClip, Guid?, string>(handlers, keys, updaters); Matching.MatchingAlgorithm.RunStrongAlgorithm(lectures, clips, allData); }