private List <Node> getValidPathNodes(AppCode.Repository.Session s, List <File> generetedFilesSession) { List <Node> nodes = new List <Node>(); List <PathNode> pathNodes = s.PathNodes.Where(pn => pn.Origin != "Trace").OrderBy(pn => pn.Created).ToList(); foreach (var item in pathNodes) { AppCode.Repository.Event eventFounded = s.Events.Where(e => e.Id == item.Event_Id).FirstOrDefault(); if (eventFounded == null) { continue; } string fileId = generetedFilesSession .Where(gf => gf.filePath.ToLower() == eventFounded.CodeFilePath.ToLower()) .Select(gf => gf.fileId).FirstOrDefault(); if (String.IsNullOrWhiteSpace(fileId)) { continue; } nodes.Add(new Node { fileId = fileId, line = eventFounded.LineNumber ?? 0, eventId = item.Event_Id.ToString(), evaluated = false }); } return(nodes); }
private List <File> getFiles(AppCode.Repository.Session s, List <CodeFile> listCodeFiles, List <File> generetedFiles, List <Group> generatedGroups) { List <File> files = new List <File>(); for (int i = 0; i < listCodeFiles.Count; i++) { CodeFile c = listCodeFiles[i]; File file = new File(); file.originalId = c.Id.ToString(); file.fileId = i.ToString(); file.fileName = System.IO.Path.GetFileName(c.Path); file.filePath = c.Path; file.sessionId = s.Id.ToString(); file.lines = Regex.Matches(ProcessUnzipString(s.Description, c.Content), Environment.NewLine, RegexOptions.Multiline).Count; file.events = s.Events .Where(e => e.CodeFilePath.ToLower() == c.Path.ToLower()) .Where(e => e.EventKind == "StepInto" || e.EventKind == "StepOver" || e.EventKind == "BreakpointHitted") .Where(e => s.PathNodes.Any(pn => pn.Event_Id == e.Id && pn.Origin != "Trace")) .OrderBy(e => e.Created) .Select(e => new Event { line = e.LineNumber ?? 0, eventId = e.Id.ToString(), data = new JavaScriptSerializer().Serialize(e) }) .ToList(); file.breakpoints = s.Breakpoints .Where(b => b.CodeFilePath.ToLower() == c.Path.ToLower()) .Select(b => new Breakpoint { line = b.LineNumber ?? 0, data = new JavaScriptSerializer().Serialize(b) }).ToList(); File alreadyExistFile = generetedFiles .Where(f => f.filePath.ToLower() == c.Path.ToLower()) .FirstOrDefault(); if (alreadyExistFile != null) { file.groupId = alreadyExistFile.groupId; file.groupIndex = alreadyExistFile.groupIndex; } else { Group group = generatedGroups .Where(g => g.path.ToLower() == System.IO.Path.GetDirectoryName(c.Path).ToLower()) .FirstOrDefault(); if (group == null) { continue; } file.groupId = group.groupId; int total = generetedFiles .Where(f => f.groupId == file.groupId) .GroupBy(f => f.sessionId) .Select(gouped => new { total = gouped.Count() }) .OrderByDescending(o => o.total) .Select(o => o.total) .FirstOrDefault(); file.groupIndex = total; if (file.groupIndex > group.maxIndexWidthQuantity) { group.maxIndexWidthQuantity = file.groupIndex; } } files.Add(file); generetedFiles.Add(file); } return(files); }
private List <Session> getSessions(List <AppCode.Repository.Session> listSession, List <Group> generatedGroups) { List <Session> sessions = new List <Session>(); for (int i = 0; i < listSession.Count; i++) { AppCode.Repository.Session s = listSession[i]; Session session = new Session(); session.sessionId = s.Id.ToString(); session.name = String.Format("{0:yyyy-MM-ddTHH:mm:ssZ}", s.Started) + " " + s.Description; session.files = getFiles(s, s.CodeFiles .GroupBy(c => c.Path.ToLower()) .Select(c => c.FirstOrDefault()) .OrderBy(c => c.Created) .ToList(), sessions.SelectMany(p => p.files).ToList(), generatedGroups); session.pathnodes = getValidPathNodes(s, session.files); foreach (var node in session.pathnodes) { File file = session.files.Where(f => f.fileId == node.fileId).First(); file.nodePoints++; node.evaluated = true; foreach (var fileItem in session.files.Where(f => f.fileId != file.fileId)) { if (fileItem.nodePoints == 0) { fileItem.nodeSpaceBefore++; continue; } int remainNodes = session.pathnodes.Where(n => fileItem.fileId == n.fileId && n.evaluated == false).Count(); if (remainNodes > 0) { fileItem.nodeSpaceAfter++; } } } foreach (var itemFile in session.files) { foreach (var itemEvent in itemFile.events) { itemEvent.positionIndex = session.pathnodes .Select((pn, index) => new { index = index, eventId = pn.eventId }) .Where(pn => pn.eventId == itemEvent.eventId) .Select(pn => pn.index) .FirstOrDefault(); } int notHittedCount = 0; foreach (var itemBreakpoint in itemFile.breakpoints) { Event eventInFile = itemFile.events .Where(e => e.line == itemBreakpoint.line) .FirstOrDefault(); if (eventInFile == null) { notHittedCount--; } itemBreakpoint.positionIndex = eventInFile == null ? notHittedCount : eventInFile.positionIndex; } //--Problem of Continue has no breakpoint associeted on graph //setar no evento que este tem breakpoint associado var eventsWithOutBreakpoints = itemFile.events .Where(e => itemFile.breakpoints.Any(b => b.line == e.line && b.positionIndex != e.positionIndex)) .Select(e => { return(e); }).ToList(); foreach (var e in eventsWithOutBreakpoints) { Breakpoint breakpoint = itemFile.breakpoints.Where(b => b.line == e.line).First(); itemFile.breakpoints.Add(new Breakpoint() { data = breakpoint.data, line = breakpoint.line, positionIndex = e.positionIndex }); } } sessions.Add(session); } return(sessions); }