public MainWindow() { InitializeComponent(); _loader = new Record.LoadDetailsDelegate((r) => { Thread.Sleep(2000); return(new RevisionChanges { ChangedBy = "Test User", AuthorizedAs = "Test Auth", Fields = new[] { new Field { Name = "Id", ReferenceName = "System.Id", OriginalValue = r.Owner.Id, Value = r.Owner.Id }, new Field { Name = "Rev", ReferenceName = "System.Rev", OriginalValue = r.Rev, Value = r.Rev }, new Field { Name = "test", ReferenceName = "System.test", OriginalValue = "Orig", Value = "val" }, new Field { Name = "testusr", ReferenceName = "System.testusr", OriginalValue = "Orig", Value = "val", IsChangedByUser = true }, new Field { Name = "testeq", ReferenceName = "System.testeq", OriginalValue = "eq", Value = "eq" } }, Attachments = new[] { new Attachment { IsAdded = true, Name = "testAttach", Uri = new Uri("http://localhost/attachment/test.txt") } }, Changesets = new[] { new Changeset { Id = 5, Uri = new Uri("http://localhost/changeset/id"), IsAdded = true, Comment = "TestCS" } } }); }); var controller = (ViewportController)Resources["controller"]; controller.ShowChangeset = (id) => { MessageBox.Show(this, id.ToString()); }; var items = GetData(_offset, new [] { "State" }); DataContext = new DataModel(items); }
private Record MapRecord(Revision r, Revision prev, Item owner, string[] displayFields, Record.LoadDetailsDelegate loader) { var prevChangesetHash = new HashSet <string>(prev == null ? Enumerable.Empty <string>() : prev.Links.OfType <ExternalLink>().Select(a => a.LinkedArtifactUri)); var prevAttachmentsHash = new HashSet <int>(prev == null ? Enumerable.Empty <int>() : prev.Attachments.OfType <Attachment>().Select(a => a.Id)); var changesetHash = new HashSet <string>(r.Links.OfType <ExternalLink>().Select(a => a.LinkedArtifactUri)); var attachmentsHash = new HashSet <int>(r.Attachments.OfType <Attachment>().Select(a => a.Id)); return(new Record(owner, loader) { Rev = Convert.ToInt32(r.Fields[CoreField.Rev].Value), Date = Convert.ToDateTime(r.Fields[CoreField.ChangedDate].Value), State = Convert.ToString(r.Fields[CoreField.State].Value), AddedAttachments = attachmentsHash.Except(prevAttachmentsHash).Count(), RemovedAttachments = prevAttachmentsHash.Except(attachmentsHash).Count(), AddedChangesets = changesetHash.Except(prevChangesetHash).Count(), RemovedChangesets = prevChangesetHash.Except(changesetHash).Count(), DisplayFields = displayFields == null ? null : displayFields.Where(d => r.Fields.Contains(d)). Select(d => r.Fields[d]). Select(d => new Details.Field { Name = d.Name, ReferenceName = d.ReferenceName, OriginalValue = Convert.ToString(d.OriginalValue), Value = Convert.ToString(d.Value) }).ToArray() }); }
private Item MapItem(WorkItem workItem, string[] displayFields, Record.LoadDetailsDelegate loader) { var item = new Item { Id = workItem.Id, Title = workItem.Title }; var records = new List <Record>(); Revision prev = null; foreach (Revision r in workItem.Revisions) { records.Add(MapRecord(r, prev, item, displayFields, loader)); prev = r; } item.Records = records.ToArray(); return(item); }
internal Item[] GetItems(WorkItem[] workItems, string[] displayFields) { if (workItems == null) { return(null); } var loader = new Record.LoadDetailsDelegate((r) => { return(GetChanges(r.Owner.Id, r.Rev)); }); var items = new Dictionary <WorkItem, Item>(new WorkItemEqualityComparer()); foreach (var workItem in workItems) { items.Add(workItem, MapItem(workItem, displayFields, loader)); foreach (var relatedItem in GetRelatedItems(workItem, displayFields, loader)) { items.Add(relatedItem.Item1, relatedItem.Item2); } } FillLinks(items); return(items.Values.ToArray()); }
private IEnumerable <Tuple <WorkItem, Item> > GetRelatedItems(WorkItem workItem, string[] displayFields, Record.LoadDetailsDelegate loader) { return(workItem.Links.OfType <RelatedLink>(). Select(l => workItem.Store.GetWorkItem(l.RelatedWorkItemId)). Select(w => Tuple.Create(w, MapItem(w, displayFields, loader)))); }